tft每日頭條

 > 生活

 > c語言編程題經典1000例

c語言編程題經典1000例

生活 更新时间:2024-09-17 03:47:47

下面部分地方使用指針,也有地方不使用指針。

(或許這裡我都應該使用指針來讓大家理解一下,但是一些時候指針不是必需品,當然,如果你要向硬件方面發展,那還是得學習指針的)

要學習指針可以看一下這裡:(其他資料請自行檢索)

一直流浪:C語言重點——指針篇(一篇讓你完全搞懂指針)4693 贊同 · 205 評論文章

c語言編程題經典1000例(C語言經典100例66-70)1

題目66

題目:輸入3個數a,b,c,按大小順序輸出。

程序分析:用指針實現

#include<cstdio> void sswap(int *p1,int *p2) { //*有取值的作用 int p = *p1; *p1 = *p2; *p2 = p; } int main() { int x,y,z; int *p1,*p2,*p3; scanf("%d%d%d",&x,&y,&z); p1 = &x;// 指針指向地址 p2 = &y; p3 = &z; //不運行看看這裡是按什麼順序輸出 if(x > y) sswap(p1,p2); if(x > z) sswap(p1,p3); if(y > z) sswap(p2,p3); printf("%d %d %d",x,y,z); }

題目67

題目:輸入數組,最大的與第一個元素交換,最小的與最後一個元素交換,輸出數組。

這裡給出兩種實現方式,指針和非指針:

非指針方式:

#include<cstdio> #define R register // 本人不太喜歡使用指針,指針部分代碼後給出。 int a[11]; // 不加&還有什麼解決辦法? // 這裡函數的作用是尋找數組中最大、最小的兩個數的位置 void max_min_num_pos(int &pos_max,int &pos_min) //可以想想要是想傳入數組a怎麼辦 { //這個函數達成的目的是返回最大數的位置與最小數的位置 //這裡默認知道數組長度 //其實在OI中一般是已知的( int maxx = -1;//找最大的要設置小的,為什麼? int minn = 2147483641;//對應 for(R int i = 1;i <= 10;i ) { if(a[i] > maxx) maxx = a[i],pos_max = i; if(a[i] < minn) minn = a[i],pos_min = i; } } void sswap(int &x,int &y) { int t = x; x = y; y = t; } int main() { for(R int i = 1;i <= 10;i ) scanf("%d",&a[i]); int pos_max, pos_min; max_min_num_pos(pos_max,pos_min); // printf("%d %d",pos_max,pos_min); sswap(a[1],a[pos_max]); sswap(a[10],a[pos_min]); for(R int i = 1;i <= 10;i ) printf("%d ",a[i]); } // in:20 4 3 9 1 33 2 6 0 3 // out:


指針方式

#include<cstdio> #define R register //這裡代碼不打算過分解釋,應該都能看懂 // 不理解的地方大家可以查閱一下資料,深入探讨一下 int num[11]; void input(int *a) { for(R int i = 1;i <= 10;i ) scanf("%d",&a[i]); } void max_min(int *a) { int *max,*min; int *p,*a_end; a_end = a 10;//為啥加10? max = min = a 2; for(p = a 2; p <= a_end;p ) { if(*p > *max) max = p; if(*p < *min) min = p; } // 這裡的p有什麼作用,與上面一樣嗎 *p = a[1]; a[1] = *max; *max = *p; *p = a[10];a[10] = *min; *min = *p; } void print(int *a) { int *p; for(p = a 1 ; p <= a 10;p ) printf("%d ",*p); // a 1等價于 a[1]嗎? //自己動手試一試,這裡不是很難看出來 } //in:20 4 3 9 1 33 2 6 0 3 int main() { // 三個函數的形式會讓主函數顯得很簡潔 input(num); max_min(num); print(num); }

題目68

題目:有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數

#include<cstdio> #define R register // 看看是否能自己看懂 int n,m;//n代表數組長度,m代表位置( int a[15]; void do_work(int *a,int len,int mm) { int idx = len - mm; for(R int i = 1;i <= mm;i ) { int *p = a idx i; int tmp = *p; for(R int j = idx i; j > i ;j--) { *p = *(p-1); p--; } *(a i) = tmp; } } int main() { scanf("%d%d",&n,&m); for(R int i = 1;i <= n;i ) scanf("%d",&a[i]); do_work(a,n,m); for(R int i = 1;i <= n;i ) printf("%d ",a[i]); }

題目69

題目:有n個人圍成一圈,順序排号。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來第幾号的那位。

#include<cstdio> int n,left,pos = 0,num,m; int in[111]; // 這裡實際上是約瑟夫環問題,直接拿來用了 /* n 個人圍成一圈,從第一個人開始報數,數到 m 的人出列, 再由下一個人重新從 1 開始報數,數到 m 的人再出圈, 依次類推,直到所有的人都出圈,請輸出依次出圈人的編号。*/ int main() { scanf("%d%d",&n,&m); // n個人報數,報到m的出圈 left = n;//留在裡面的最開始有n個 //在圈裡是 0,不在圈裡是1 while(1) { pos = pos % n 1; //環 while(in[pos]) pos = pos % n 1; num ; if(num % m == 0) { in[pos] = 1,left--;//出圈 printf("%d ",pos); } if(left == 1)break; } for(int i = 1;i <= n;i ) if(!in[i]){ printf("%d",i); break; } } // 其實可以數學推導出最後一個出圈的人是序号幾,可查一下資料 // 有時間可能補充一下推導

題目70

題目:寫一個函數,求一個字符串的長度,在main函數中輸入字符串,并輸出其長度。

#include<cstdio> #include<cstring> #define R register // 其實有現成的計算字符串長度的函數strlen(),調用cstring char s[20]; int len(char *s) { int cnt = 0; for(R int i = 0;;i ) { if(s[i] == '\0')break; cnt ; } return cnt; } int main() { scanf("%s",s);//用%s輸入,注意這樣子的寫法從s[0]存儲 printf("%d\n",len(s)); // printf("%d\n",strlen(s)); }


其實上面swap也有現成的函數,可以調用iostream庫來使用

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved