日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言常见的习题

發布時間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言常见的习题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言常見的習題

  • 給你一串數,輸出最大的數
  • 輸出1-n之間的質數
  • 剔除掉多余的空格
  • 用遞歸計算1~n的和
  • 統計單詞序列,每個單詞的長度
  • 剔除序列中重復出現的數
  • 把一個十進制正整數轉化成八進制。
  • 統計一個數轉化為二進制后1的個數

給你一串數,輸出最大的數

#include<stdio.h> int main(void) {int a[5]={34,56,2,33,7};int i,max;max=0;for(i=0;i<5;i++){if(a[i]>a[max])max=i;}printf("%d\n",a[max]);return 0; }

輸出1-n之間的質數

#include<stdio.h> #include<math.h> void bool_number(int n); int main(void) {int n=100;bool_number(n);return 0; } void bool_number(int n) {int i,j;int temp=1;printf("2 ");for(i=3;i<=n;i++){temp=1;//判斷是不是質數for(j=2;j<=sqrt(i);j++){if(i%j==0)//只要能整除,直接跳出來{temp=0;break;}}if(temp==1)printf("%d ",i);} }

為啥判斷一個數是不是質數,判斷除數從2到 n開根號就行了?
我們以36為例,它的因子有:1,2,3,4,6,9,12,18,36。
1和36,2和18,3和12,4和9,各為一對,6單獨。
成對的因子都是關于6 對稱的 ,而 6是 36開方得到的。所以判斷一個數是不是質數,判斷除數從2到 n開根號就行了。

下面從幾何的方向上看:

面積為36的長方形關于紅線對稱(也可以說關于,以36開方為邊長的正方形對稱)。

剔除掉多余的空格

一個句子中也許有多個連續空格,過濾掉多余的空格,只留下一個空格。

例:helllo word c 剔除后:hello word c #include<stdio.h> #include<string.h> int main(void) {char a[201];//輸入的數據int i=1;gets(a);printf("%c",a[0]);while(a[i]!='\0'){if(a[i-1]==' '&&a[i]==' ')//如果當前位置和前面的都是空格就不輸出{i++;continue;}elseprintf("%c",a[i]);i++;}return 0; }

用遞歸計算1~n的和

#include<stdio.h> int fun(int n); int main(void) {printf("%d",fun(10));return 0; } int fun(int n) {return (n==1) ? 1:(n+fun(n-1)); }

計算過程:
先判斷 10是否等于 1 不等于執行后面的 即 10+fun(9)
再計算 10+fun(9) 即 10+9+fun(8) 這時候上面的 fun(9)=9+fun(8)


即: 10+9+8+…+1

統計單詞序列,每個單詞的長度

輸入一行單詞序列,相鄰單詞之間有1個或多個空格間隔,請對應地計算各個單詞的長度。
注意,如果有標點符號(如連字符,逗號,句號),標點符號算作與之相連的詞的一部分。沒有被空格間隔開的符號串,都算作單詞。

例:

  • 輸入:She was born in 1990-01-02 and from Beijing city.
  • 輸出: 3,3,4,2,10,3,4,7,5
#include<stdio.h> #include<string.h> int main(void) {char a[1020];int i;int count=0;gets(a);for(i=0;a[i]!='\0';i++){if(a[i]!=' ')//如果不是空格就加1{count++;}if(a[i]==' '&&a[i+1]!=' ')//如果是空格且下一個不是空格就輸出{printf("%d,",count);count=0;//開始下一個單詞的計數continue;}}printf("%d",count);//最后一個統計沒有輸出,所以要輸出。return 0; }

剔除序列中重復出現的數

給定含有 nn 個整數的序列,要求對這個序列進行去重操作。所謂去重,是指對這個序列中每個重復出現的數, 只保留該數第一次出現的位置,刪除其余位置。 例: 12 34 78 12 66 剔除后: 12 34 78 66 #include<stdio.h> int main(void) {int n;int i=0;int j=0;int a[20000]={0};scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){for(j=i+1;j<n;j++)//從這個位置后面的所有數中查找{if(a[i]==a[j])//如果重復賦值為-1 ,輸出時只要輸出非-1的就可以了{a[j]=-1;}}}for(i=0;i<n;i++){ if(a[i]!=-1)printf("%d ",a[i]);}return 0; }

把一個十進制正整數轉化成八進制。

#include<stdio.h> int main(void) {int number=0;int a[100]={0};//存儲數據int n=0;//保存位數int i=0;scanf("%d",&number);while(number>0){a[i]=number%8;number=number/8;i++;//下標加1n++;//位數加1}for(i=n-1;i>=0;i--)//倒著輸出,因為保存的時候是從后向前保存的。{printf("%d",a[i]);}return 0; }

統計一個數轉化為二進制后1的個數

//這個是我做題的時候遇到的一個比較巧妙的方法 int func(int x){int count=0;while (x){count++;x=x&(x-1);//與運算}return count;//統計的位數 }:15為例 count=11111 & 1110 結果 1110 count=21110 & 1101 結果 1100 count=31100 & 1001 結果 1000 count=41000 & 0111 結果 0000 不滿足了 返回 統計的值

總結

以上是生活随笔為你收集整理的C语言常见的习题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。