C语言常见题目汇总(不断更新)(建议收藏)
前言:
C語(yǔ)言的常見題,對(duì)大家學(xué)習(xí)C語(yǔ)言會(huì)有一定的幫助,不斷地會(huì)收錄新題(含牛客網(wǎng)的習(xí)題)
沒(méi)有對(duì)題型進(jìn)行分類,大家自行挑選對(duì)自己有用的題目
如果代碼有什么bug,或者你比我有更好的處理方法還請(qǐng)及時(shí)下方留言
如果還需要哪種題型也可以下方留言
感謝支持!!!
eg1.(斐波那契數(shù)列)非遞歸的
方法1:
int main() {int arr[30];//定義一個(gè)數(shù)組arr[0] = 0;//設(shè)置數(shù)組的第一個(gè)元素為0arr[1] = 1;//設(shè)置數(shù)組的第二個(gè)元素為1int i = 0;//定義一個(gè)循環(huán)變量for (i = 2; i < 30; i++){arr[i] = arr[i - 1] + arr[i - 2];//從第三個(gè)元素開始等于前兩個(gè)元素的和 循環(huán)去賦值}for (i = 0; i < 30; i++){printf("%d\n", arr[i]);//循環(huán)把元素都打印出來(lái)}return 0; }方法2:遞歸求解
int fib(int n) {if (n == 0)//第一個(gè)原素打印 0{return 0;}if (n <= 2 && n > 0)//第一個(gè)元素打印1{return 1;}else//從第三個(gè)元素開始遞加{return fib(n - 1) + fib(n - 2);}} int main() {int i = 0;for (i = 0; i < 20; i++){int ret = fib(i);//打印斐波那契數(shù)列printf("%d\n", ret);}return 0; }效果如圖:
方法3:(變式)求斐波那契數(shù)列的第n個(gè)元素
#pragma warning(disable : 4996) #include <stdio.h> int fib(int n) {int result = 1; int pre_result = 1;int next_preresult ;while (n > 2) //從第三個(gè)數(shù)字才開始有規(guī)律 數(shù)值等于前兩個(gè)相加{n = n - 1;next_preresult = pre_result;pre_result = result;result = pre_result + next_preresult;}return result; } int main() {printf("請(qǐng)你輸入想要查詢的n的數(shù)值\n");int n = 0;scanf("%d", &n);//捕獲你想查詢的數(shù)字int ret = fib(n);//接收算出來(lái)的返回值(n所對(duì)應(yīng)的斐波那契數(shù)列數(shù)值)printf("%d", ret);return 0; }效果如圖:
eg2.字符金字塔(輸入一個(gè)字符輸出相應(yīng)字符所對(duì)應(yīng)的金字塔)
#include <stdio.h> int main() {char a;scanf("%c", &a);int i = 1;//行int j = 1;for (i = 1; i <= 5; i++)//從第一行開始 一共有5行{for (j = 5-i; j >=0; j--)//打印空格 空格從第一行到第五行空格是遞減的 第一行四個(gè)空格第五行沒(méi)有空格,所以利用循環(huán) 5-i表示打印的空格數(shù)去打印空格{printf(" ");}for (j = 1; j <= i; j++)//一行有幾個(gè)字符取決于字符在第幾行,在第幾行打印打印幾個(gè)字符{printf("%c ", a);}printf("\n");//循環(huán)完打印完一行換行}return 0; }效果如圖:
(變式)打印菱形? ? (與上方的打印方法基本一致加一步打印倒三角)
//} #include <stdio.h> int main() {char a;scanf("%c", &a);int i = 1;//行int j = 1;//打印上三角for (i = 1; i <= 5; i++)//從第一行開始 一共有5行{for (j = 5-i; j >=0; j--)//打印空格{printf(" ");}for (j = 1; j <= i; j++){printf("%c ", a);}printf("\n");}//打印倒三角for (i = 4; i>=1; i--)//從第一行開始 一共有5行{for (j = 5 - i; j >= 0; j--)//打印空格{printf(" ");}for (j = 1; j <= i; j++){printf("%c ", a);}printf("\n");}return 0; }效果如圖:
?(變式)根據(jù)自己需求打印多少行的菱形
#include <stdio.h> int main() {char a;int n = 0;scanf("%c %d", &a, &n);int i = 1;//行int j = 1;//打印上三角for (i = 1; i <= n; i++)//從第一行開始 一共有5行{for (j = n-i; j >=0; j--)//打印空格{printf(" ");}for (j = 1; j <= i; j++){printf("%c ", a);}printf("\n");}//打印倒三角for (i = n-1; i>=1; i--)//從第一行開始 一共有5行{for (j = n - i; j >= 0; j--)//打印空格{printf(" ");}for (j = 1; j <= i; j++){printf("%c ", a);}printf("\n");}return 0; }效果如圖:?
eg3. 反向輸出一個(gè)四位數(shù)字(逆序輸出)
?效果如圖:
eg4. (利用海倫公式)計(jì)算三角形的周長(zhǎng)和面積
#include <stdio.h> #include <math.h> int main() {int a = 0;//定義三個(gè)整形數(shù)據(jù)int b = 0;int c = 0;scanf("%d %d %d", &a, &b, &c);//錄入數(shù)據(jù)if (a + b >= c && a - b <= c)//判斷是否滿足三角形的的前提條件{float zc = (float)(a + b + c);//將周長(zhǎng)強(qiáng)制轉(zhuǎn)換成浮點(diǎn)類型float S = 0;//定義一個(gè)浮點(diǎn)類型的面積Sfloat p = 0;//定義一個(gè)浮點(diǎn)型的半周長(zhǎng)pp = (float)(zc / 2);//初始化pfloat n = (float)((p - a) * (p - b) * (p - c));//利用海倫公式float f = p * n;S = sqrt(f);printf("circumference=%.2f area=%.2f\n", zc, S);}}?效果如圖:
?
海倫公式:相關(guān)海倫公式的介紹(點(diǎn)擊即可查詢)
eg 5.井字棋(簡(jiǎn)單版沒(méi)有棋盤)(同往期博客的三子棋游戲)
#include <stdio.h> char fun(char arr[3][3]) {int i = 0;for (i = 0; i < 3; i++)//豎著的三種情況(一列){if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])//利用循環(huán)對(duì)i進(jìn)行變化去判斷一列的元素是不是相等{return arr[0][i];//返回那個(gè)下標(biāo)元素 }}for (i = 0; i < 3; i++)//橫著的三種情況(一行){if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])//利用循環(huán)對(duì)i進(jìn)行變化去判斷一行的元素是不是相等{return arr[i][0];//返回那個(gè)下標(biāo)元素 }}//判斷主對(duì)角線上的三個(gè)元素if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])//利用主對(duì)角線所對(duì)應(yīng)坐標(biāo)去判斷元素是否相等{return arr[0][0];//返回那個(gè)下標(biāo)元素 }//判斷副對(duì)角線上的三個(gè)元素if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])//利用副對(duì)角線所對(duì)應(yīng)坐標(biāo)去判斷元素是否相等{return arr[1][1];//返回那個(gè)下標(biāo)元素 }else //都不是就返回一個(gè)平局{return 'Q';//Q代表平局}} int main() {char arr[3][3] = { 0 };//初始化棋盤int i = 0;int j = 0;for (i = 0; i < 3; i++)//循環(huán)對(duì)棋盤進(jìn)行初始化{for (j = 0; j < 3; j++){scanf("%c", &arr[i][j]);//錄入元素getchar();//清除換行}}char str = fun(arr);//調(diào)用判斷輸贏的fun函數(shù)if (str == 'K')//返回的K就是kiki贏{printf("KiKi wins!\n");}else if (str == 'B')//返回的B就是kiki贏{printf("BoBo wins!\n");}else {printf("No winner!\n");//上面兩種情況 都不是就是都沒(méi)贏}return 0; }?效果如圖:
1.主對(duì)角線情況
?
2.副對(duì)角線情況
3.一列的情況
4.一行的情況
5..都沒(méi)贏的情況
?
eg 6.? 相關(guān)質(zhì)數(shù)的求法
#include <stdio.h> int main() {int i = 0;int j = 0;for (i = 2; i < 10; i++)//從2-10的數(shù)字(這里的10是可以改動(dòng)的){for (j = 1; j < i; j++)//從1開始設(shè)置被除數(shù)小于數(shù)字本身即可{if (i % j == 0 && j != 1)//判斷哪些數(shù)字不滿足題目要求(判斷一下除了自身和1還沒(méi)有可以整除的數(shù)字 如果有進(jìn)入if語(yǔ)句停止循環(huán) 所對(duì)應(yīng)的數(shù)字不是質(zhì)數(shù)){break;//有一個(gè)本身及1的被除數(shù)外即停止本次循環(huán)}}if (i == j)//這些數(shù)字都是循環(huán)完整一邊后(j的數(shù)值不滿足小于i)才跳出來(lái)的(這就證明這些數(shù)字都是只能被本身和1整除的 所以他們是質(zhì)數(shù)){printf("%d ", i);//打印出來(lái)這些質(zhì)數(shù)}}return 0; }?效果如圖:(10以內(nèi)的質(zhì)數(shù))(10可以改變)
方法 2 :篩選法求質(zhì)數(shù)(素?cái)?shù))(從2開始的后面的數(shù)組元素只要可以被2整除全部置成0,以此類推可以被3,4,5等等整除的數(shù)字全部置成0)(最終數(shù)組剩下的元素即為質(zhì)數(shù))
#include <stdio.h> int main() {int n = 0; //設(shè)置你想打印從數(shù)字2到數(shù)字幾(n所對(duì)應(yīng)的數(shù)值)int arr[100] = { 0 };//定義一個(gè)數(shù)組用來(lái)存放 數(shù)字 2~nwhile (scanf("%d", &n) != EOF)//輸入n的數(shù)值{int i = 0;int j = 0;for (i = 2; i <= n; i++)//從2開始存進(jìn)數(shù)組中{arr[j] = i;//以i為循環(huán)變量去把從2~n的數(shù)值賦值進(jìn)數(shù)組里j++;}//對(duì)數(shù)組全部的元素進(jìn)行訪問(wèn) 從2開始的后面的數(shù)組元素只要可以被2整除全部置成0,以此類推可以被3,4,5等等整除的數(shù)字全部置成0)(最終數(shù)組剩下的元素即為質(zhì)數(shù))for (i = 2; i <= n; i++){for (j = 0; j <= n - 2; j++){if (i != arr[j]){if (arr[j] % i == 0){arr[j] = 0;}}}}for (i = 0; i <= n; i++){if (arr[i] != 0)//數(shù)組元素中不是0的給他打印出來(lái)就是質(zhì)數(shù){printf("%d ", arr[i]);}}printf("\n");}return 0; }eg 7.計(jì)算球體的體積
#include <stdio.h> #include <math.h> #define pi 3.1415926 定義一個(gè)宏 是π的數(shù)值 int main() {float r = 0;scanf("%f", &r); //輸入半徑float mid = (float)4/(float) 3;//注意一定要對(duì)4/3的每個(gè)元素進(jìn)行強(qiáng)制類型轉(zhuǎn)化 因?yàn)?和4都是整型變量所以4/3的結(jié)果也是整型,所以需要強(qiáng)制轉(zhuǎn)化 這樣才可以輸出 4/3的數(shù)值double V = mid * pow(r, 3) * pi;//球的體積公式printf("%.3lf", V);return 0; }eg 8. 2的n次方 (特殊方法)
不使用累計(jì)乘法的基礎(chǔ)上,通過(guò)移位運(yùn)算(<<)實(shí)現(xiàn)2的n次方的計(jì)算。
#include <stdio.h> #include <math.h> int main() {int a = 0;while(scanf("%d", &a) != EOF) {//高效的實(shí)現(xiàn)可以使用左移,移動(dòng)a位即為2的a次方printf("%d\n", 1 << a);}return 0; }方法 2 :一般方法直接利用C語(yǔ)言的庫(kù)函數(shù)pow
#include <stdio.h> #include <math.h> int main() {int n = 0;scanf("%d", &n);int ret = pow(2, n);printf("%d", ret);return 0; }eg 9 .變種水仙花數(shù)
#include <stdio.h> int LilyNumber(int i) {int flag = 0;//定義了一個(gè)判斷變量int a = 0;int b = 0;int c = 0;int d = 0;a = i % 10000 * (i / 10000);//獲取10000-100000數(shù)字的每一位b = i % 1000 * (i / 1000);c = i % 100 * (i / 100);d = i % 10 * (i / 10);if (a + b + c + d == i){flag = 1;//如果加在一起相等f(wàn)lag變成1 就是滿足條件的數(shù)字}return flag; } int main() {int i = 0;for (i = 10000; i < 100000; i++){int ret = LilyNumber(i);//循環(huán)調(diào)用函數(shù)去打印出數(shù)字if (ret == 1){printf("%d ", i);}}return 0; }eg 10.三角形判斷
#pragma warning(disable : 4996) #include <stdio.h> int main() {int a, b, c;while (scanf("%d %d %d", &a, &b, &c) != EOF){if (a + b > c && a - b < c)//滿足三角形大條件{//再判斷下面三類三角形if (a == b && b == c && c == a){printf("Equilateral triangle!\n");}else if (a == b || c == a || c == b){printf("Isosceles triangle!\n");}else if (a * a + b * b == c * c || c * c + b * b == a * a || a * a + c * c == b * b){printf("Right angle!\n");}else{printf("Ordinary triangle!\n");}}else//不滿足三角形大條件{printf("Not a triangle!\n");}}return 0; }eg 11.簡(jiǎn)單計(jì)算器
#include <stdio.h> int main() {double a = 0.0;double b = 0.0;char c = 0;while(scanf("%lf%c%lf",&a,&c,&b)!=EOF)//輸入兩個(gè)數(shù)字和一個(gè)運(yùn)算符 進(jìn)去計(jì)算就好了{(lán)double sum = 0.0;if(c=='+'){sum = a+b;printf("%.4lf+%.4lf=%.4lf\n",a,b,sum);}else if(c=='-'){sum = a-b;printf("%.4lf-%.4lf=%.4lf\n",a,b,sum);}else if(c=='*'){sum = a*b;printf("%.4lf*%.4lf=%.4lf\n",a,b,sum);}else if(c=='/'){sum = a/b;if(b==0){printf("Wrong!Division by zero!\n");}else{printf("%.4lf/%.4lf=%.4lf\n",a,b,sum);}}else{printf("Invalid operation!\n");}}return 0; }eg 12.打印線圖案
#include <stdio.h> int main() {int n = 0;while(scanf("%d",&n)!=EOF){int i = 0;for( i = 0 ; i < n ;i++)//循環(huán)按需求打印*個(gè)數(shù){printf("*");}printf("\n");}return 0; }?
eg 13. 打印正方形
#include <stdio.h> int main() {int n = 0;while(scanf("%d",&n)!=EOF){int i = 0;int j = 0;for( i = 0 ;i < n ;i++ ){for( j = 0 ;j < n ;j++){printf("* ");}printf("\n");}} }eg 14.打印直角三角形
#include <stdio.h> int main() {int n = 0;while (scanf("%d",&n)!=EOF){int i = 0;int j = 0;for(i = 0;i < n;i++){for(j = 0 ;j <= i;j++ )//j<=i(*的個(gè)數(shù)小于等于行數(shù)就可以打印出來(lái)){printf("* ");}printf("\n");}}return 0; }?
eg 15.打印倒三角
#include "stdio.h"int main(){int x=0;int i,j,k;while(scanf("%d",&x)!=EOF) {k=x;for(i=1;i<=x;i++){ for(j=1;j<=k;j++)//同打印正三角一樣就是從多*向少*打印{printf("* ");}k--;//打印一行后減少下次打印*的個(gè)數(shù)printf("\n");} }return 0; }eg 16.打印靠右的三角?
#include<stdio.h> int main(){int n,i,j;while(~scanf("%d",&n)){for(i=0;i<n;i++){for(j=0;j<n;j++){if(j<n-i-1) printf(" ");else printf("* ");}printf("\n");}} }eg 16.打印金字塔(同上代碼一致就是if條件句是打印1個(gè)空格,上面題目打印的是兩個(gè)空格)
#include<stdio.h> int main(){int n,i,j;while(~scanf("%d",&n)){for(i=0;i<n;i++){for(j=0;j<n;j++){if(j<n-i-1) printf(" ");else printf("* ");}printf("\n");}} }?
eg 17. 打印倒金字塔
#include <stdio.h> int main() { int a = 0; while (~scanf("%d", &a)) { for (int b = 0; b < a; b++) { for (int c = 0; c < b; c++) { printf(" "); } for (int d = 0; d < a-b; d++) { printf("* "); }printf("\n"); } }return 0; }eg 18. 打印k形圖案
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i <= n; i++)//打印上三角{for (j = n-i; j >= 0; j--)//*數(shù)量隨著行數(shù)+而-1{printf("* ");}printf("\n");}for (i = 1; i <= n; i++)//打印下三角{for (j = 1; j <=i+1; j++)//每一行的*數(shù)量等于行數(shù)+1{printf("* ");}printf("\n");}}return 0; }?
eg 19. 打印箭頭形圖案
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i <= n; i++)//上半部分{for (j = 2 * n - (2 * i); j > 0; j--){printf(" ");}//打印空格for (j = 0; j <= i; j++){printf("*");}printf("\n");}for (i = 1; i <= n; i++){for (j = 1; j <= 2 * i; j++){printf(" ");}for (j = n - i + 1; j >= 1; j--){printf("*");}printf("\n");}}return 0; }eg 20. 打印反斜線
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i < n; i++)//打印行數(shù){for (j = 0; j < i;j++){printf(" ");}printf("*");printf("\n");}}return 0; }eg 21. 正斜線(與反斜線基本一致)(就是打印空格的代碼略有區(qū)別)
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i < n; i++)//打印行數(shù){for (j = n-1-i; j >0; j--){printf(" ");}printf("*");printf("\n");}}return 0; }eg 22.打印X形
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i < n; i++){for (j = 0; j < n; j++){if (i == j || j == n - i - 1){printf("*");}else{printf(" ");}}printf("\n");}}return 0; }?
eg 22.空心正方形
#include <stdio.h> int main() {int n = 0;while ((scanf("%d", &n) != EOF)){int i = 0;for (i = 0; i < n; i++){int j = 0;for (j = 0; j < n; j++){if (i == 0 || i == n - 1 || j == 0 || j == n - 1)//把不滿足條件的點(diǎn)扣掉{printf("* ");//滿足要求的打印*}else{printf(" ");//其他不滿足的點(diǎn)置成空格}}printf("\n");}}return 0; }?eg 23.空心三角形
#include <stdio.h> int main() {int n = 0;while (scanf("%d", &n) != EOF){int i = 0;int j = 0;for (i = 0; i < n; i++)//行數(shù){for (j = 0; j < n; j++){if (i == j || j == 0 || i == (n - 1)){printf("* ");}else{printf(" ");}}printf("\n");}}return 0; }?
?eg 24.有序序列插入一個(gè)數(shù)
#include <stdio.h> void sort(int arr[], int n) {int i = 0;int j = 0;int temp = 0;for (j = 1; j <= n; j++){for (i = 0; i <= n - j; i++){if (arr[i] > arr[i + 1]){temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}} } int main() {int arr[50] = { 0 };int n = 0;scanf("%d", &n);int i = 0;for (i = 0; i < n; i++)//輸入數(shù)組元素{scanf("%d", &arr[i]);}int cr = 0;scanf("%d", &cr);//輸入想要插入的數(shù)組arr[n] = cr;//把想插入數(shù)組的元素賦值給數(shù)組sort(arr, n);//將插入好的數(shù)組進(jìn)行冒泡排序for (i = 0; i <= n; i++)//打印出排序好的數(shù)組{printf("%d ", arr[i]);} }eg 25. 圖片相似度
#include <stdio.h> int main() {int arr[10][10] = { 0 };int brr[10][10] = { 0 };int m = 0;int n = 0;int count = 0;scanf("%d %d", &m, &n);int i = 0;int j = 0;for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &arr[i][j]);//初始化數(shù)組}}for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &brr[i][j]);//初始化數(shù)組}}for (i = 0; i < m; i++){for (j = 0; j < n; j++){if (arr[i][j] != brr[i][j])//訪問(wèn)兩個(gè)數(shù)組 如果元素不一樣{count++;//計(jì)數(shù)器+1}}}int sum = n * m;//總元素int s = sum - count;//得到一樣元素的數(shù)量float ret = (float)s / sum;//算出比例printf("%.2f", ret*100);return 0; }eg 26. 有序數(shù)組判斷(升序or降序)
#include <stdio.h> int main() {int n = 0;int count1 = 0;int count2 = 0;int arr[50] = { 0 };int i = 0;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%d", &arr[i]);//初始化數(shù)組}for (i = 1; i < n - 1; i++){if (arr[i] >= arr[i - 1] && arr[i + 1] >= arr[i])//判斷數(shù)組元素的相鄰元素是否滿足升序或者是降序的標(biāo)準(zhǔn){count1++;//滿足升序計(jì)數(shù)器++}if (arr[i] <= arr[i - 1] && arr[i + 1] <= arr[i]){count2++;//滿足降序計(jì)數(shù)器++}}if (count1 == (n - 2) || count2 == (n - 2))//判斷如果計(jì)算器數(shù)量滿足n-2即可因?yàn)槭菑牡诙€(gè)元素到倒數(shù)第二個(gè)元素 所以這里的n需要-2{printf("sorted\n");}else {printf("unsorted\n");}return 0; }?
?eg 27.數(shù)組中刪除指定元素
#include <stdio.h> int main() {int n = 0;int arr[50] = {0};int i = 0;scanf("%d",&n);for(i = 0;i < n; i++){scanf("%d",&arr[i]);初始化數(shù)組}int shan = 0;scanf("%d",&shan);//輸入那個(gè)需要?jiǎng)h除的數(shù)組for (i = 0;i < n;i++){if(arr[i]==shan)//去循環(huán)判斷如果等于數(shù)組中的元素{arr[i] = 0;//將數(shù)組中的那個(gè)對(duì)應(yīng)元素 賦值成0}}for (i = 0;i < n;i++){if(arr[i]!=0)//不打印0把其他的都打印出來(lái){printf("%d ",arr[i]);}}return 0; }eg 28.數(shù)組去重
#include <stdio.h> int main() {int n = 0;int arr[1000] = { 0 };int i = 0;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%d", &arr[i]);//初始化數(shù)組}int j = 0;for (i = 0; i < n; i++){for (j = 0; j < n; j++){if (i != j)//訪問(wèn)下標(biāo)元素 在不是其本身的條件下去進(jìn)行循環(huán)判斷{if (arr[i] == arr[j])//如果有重合元素{arr[j] = 0;//把該元素賦值成0}}}}for (i = 0; i < n; i++)//打印出來(lái){if (arr[i] != 0){printf("%d ", arr[i]);}}return 0; }?
eg 29.有序數(shù)組合并
#include <stdio.h> int main() {int n = 0;int m = 0;scanf("%d %d", &m, &n);int num = m;int arr[5000] = { 0 };//定義兩個(gè)數(shù)組int brr[5000] = { 0 };int i = 0;int j = 0;for (i = 0; i < m; i++){scanf("%d", &arr[i]);//初始化這兩個(gè)數(shù)組}for (j = 0; j < n; j++){scanf("%d", &brr[j]);}int crr[10000] = { 0 };//定義一個(gè)大的數(shù)組for (i = 0; i < m; i++){crr[i] = arr[i];//把a(bǔ)rr數(shù)組的元素賦值給crr數(shù)組的前半段}for (i = 0; i < n; i++){crr[num] = brr[i];//把brr數(shù)組的元素賦值給crr數(shù)組的后半部num++;}for (j = 1; j < m + n; j++)//合并完保證是升序的 進(jìn)行冒泡排序{for (i = 0; i < (m + n) - j; i++){if (crr[i] > crr[i + 1]){int temp = crr[i];crr[i] = crr[i + 1];crr[i + 1] = temp;}}}for (i = 0; i < m + n; i++)//最后打印出來(lái){printf("%d ", crr[i]);}return 0; }?
eg 30. 上三角形矩陣判斷
#include <stdio.h> int main() {int n = 0;scanf ("%d",&n);int i = 0;int j = 0;int arr[10][10] = {0};int count = 0;for (i = 0; i < n; i++){for (j = 0;j < n;j++){scanf("%d",&arr[i][j]);//初始化數(shù)組}}for (i = 0; i < n; i++){for (j = 0;j < n;j++){if (i !=j && j < n-1 && i != 0)//去訪問(wèn)這些下表的元素看看他們是不是都是0{if (arr[i][j] == 0){count++;//是0計(jì)數(shù)器+1}}}}if (count==n*(n-1)/2)//上三角矩陣的0的個(gè)數(shù) 等于階數(shù)*(階數(shù)-1)/2{printf("YES\n");}else{printf("NO\n");}return 0; }eg 31.矩陣轉(zhuǎn)置 (通過(guò)交換循環(huán)變量就可以實(shí)現(xiàn))
#include <stdio.h> int main() {int n = 0;//行int m = 0;//列scanf("%d %d", &n, &m);int arr[10][10] = { 0 };int i, j;for (j = 0; j < n; j++){for (i = 0; i < m; i++){scanf("%d", &arr[i][j]);}}for (j = 0; j < m; j++){for (i = 0; i < n; i++){printf("%d ", arr[j][i]);}printf("\n");}}eg 32. 楊輝三角
#include <stdio.h> int main() {int n = 0;scanf("%d", &n);int i = 0;int j = 0;int arr[30][30] = { 0 };for (i = 0; i < n; i++){for (j = 0; j <= i; j++){if (j == 0)//第一列的元素全是1{arr[i][j] = 1;}else if (j == i)//對(duì)角線的元素都是1{arr[i][j] = 1;}else//其他的元素都等于上一行的元素+上一行左一列的元素和{arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];}}}for (i = 0; i < n; i++)//打印出來(lái)?xiàng)钶x三角{for (j = 0; j <= i; j++){printf("%5d", arr[i][j]);}printf("\n");}return 0; }eg?33.矩陣交換
#include <stdio.h> int arr[10][10]; void swapr(int m, int a, int b) {int temp;for(int i = 0; i < m;i++)//交換對(duì)應(yīng)下標(biāo)元素{temp = arr[a][i];arr[a][i] = arr[b][i];arr[b][i] = temp;} } void swapc(int n,int a, int b)//交換對(duì)應(yīng)下標(biāo)元素 {int temp;scanf("%d%d",&a,&b);for(int i = 0; i < n;i++){temp = arr[i][a];arr[i][a] = arr[i][b];arr[i][b] = temp;} } int main() {int n,m,k,a,b;char func;scanf("%d%d",&n,&m);for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){scanf("%d",&arr[i][j]);//初始化數(shù)組}}scanf("%d",&k);//輸入需要變化幾次while(k){scanf(" %c%d%d",&func,&a,&b);if(func == 'r')//行變換{swapr(m,a-1,b-1);//調(diào)用函數(shù)}if(func == 'c')//列變化{swapc(n,a-1,b-1);//調(diào)用函數(shù)}k--;}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++)//打印出來(lái)變化后的數(shù)組{printf("%d ",arr[i][j]);}printf("\n");} }eg 33.模擬實(shí)現(xiàn)計(jì)算器
#include <stdio.h> //模擬實(shí)現(xiàn)計(jì)算器函數(shù)指針 int add(int x,int y) {return x + y; } int sub(int x, int y) {return x - y; } int cheng(int x, int y) {return x * y; }void calc(int (*pf)(int, int)) {int ret = pf(3, 5);printf("%d", ret); } int main() {calc(add);printf("\n");calc(sub);printf("\n");calc(cheng);return 0; }’
總結(jié)
以上是生活随笔為你收集整理的C语言常见题目汇总(不断更新)(建议收藏)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 广数25i系统倒刀回刀m代码_广数系统编
- 下一篇: WinRAR5.40版 无广告