C / C++ 经典代码和常考类型
文章目錄
- C語言常考類型
- 經(jīng)典代碼
- 1) 兔子問題
- 2) 斐波那契數(shù)列
- 3) 百元買百雞
- 4) 實(shí)心菱形
- 5) 空心菱形
- 6) 十進(jìn)制轉(zhuǎn)換為二進(jìn)制
- 7) 水仙花
- 8) 大數(shù)相加
- 9) 冒泡排序
- 10) 選擇排序
- 11) 打印字母V
- 12) 打印空心等腰三角形
- 13) 打印大寫字母Y
- 14 ) 判斷輸入字符是否為回文數(shù)
- 15) 利用sort函數(shù)進(jìn)行排序
- 16) 利用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的相加
- 17) 利用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的交換
- 18) 解一元二次方程組
- 19)冒泡排序與交換排序的結(jié)合
- 20) 倒序輸出
- 21)八皇后問題
- 22)漢諾塔問題
- 23)數(shù)組的行列互換
- 24)求1000內(nèi)的完全數(shù)
- 25) 輾轉(zhuǎn)相除法
- 26) 回文串
- 27)采用非strcat和strcat方式實(shí)現(xiàn)字符串的連接
- 28)用宏定義計(jì)算兩個(gè)數(shù)的和
- 29)逆序輸出
C語言常考類型
(1)求及格人數(shù)或平均成績(jī)或最大最小成績(jī),素?cái)?shù),水仙花,完數(shù),選擇排序,加密(字母循環(huán)移動(dòng)),自定義函數(shù)的定義與調(diào)用,求階乘
(2)最大公約數(shù)和最小公倍數(shù),文件讀寫,遞歸函數(shù)與遞歸調(diào)用,Fibonacci數(shù)列
(3)指針變量做函數(shù)參數(shù),數(shù)組做函數(shù)參數(shù), 結(jié)構(gòu)體類型定義以及結(jié)構(gòu)體變量的定義, 聯(lián)合,指針與結(jié)構(gòu)體變量,二重循環(huán),指針與一維數(shù)組,二維數(shù)組
(4)自增運(yùn)算++,自減運(yùn)算–,基礎(chǔ)知識(shí)(背誦),求累加和,交換兩個(gè)變量的值,switch, 一維數(shù)組
函數(shù)的調(diào)用
自加與自減
a++ //是先執(zhí)行表達(dá)式后再自增,執(zhí)行表達(dá)式時(shí)使用的是a的原值。 ++a //先自增再執(zhí)行表達(dá)示,執(zhí)行表達(dá)式時(shí)使用的是自增后的a。 int a=0 printf("%d",a++); //輸出0,執(zhí)行完后a=1int a=0 printf("%d",++a);//輸出1,執(zhí)行完后a=1經(jīng)典代碼
1) 兔子問題
#include<stdio.h> int main() {int f1=1,f2=1;int i;for(i=1; i<20; i++) {printf("%12d %12d",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}return 0; }2) 斐波那契數(shù)列
#include<iostream> using namespace std; int main() {int f1=0,f2=1,t,n=1;cout<<"數(shù)列第1個(gè):"<<f1<<endl;cout<<"數(shù)列第2個(gè):"<<f2<<endl;for(n=3; n<=20; n++) {t=f2;f2=f1+f2;f1=t;cout<<"數(shù)列第"<<n<<"個(gè):"<<f2<<endl;}cout<<endl;return 0; }斐波那契數(shù)列的應(yīng)用
#include<stdio.h> int main() {int i,m;int n;printf("輸入要求的項(xiàng)數(shù):");scanf("%d",&n);float num1=2,num2=1,sum=0;for(i=1; i<=n; i++) {sum=sum+num1/num2;m=num1;num1=num1+num2;num2=m;}printf("sum=%.2f",sum); }3) 百元買百雞
#include <stdio.h> #include <math.h>void swap(int x,int y,int z) {for(x=1; x<=20; x++)for(y=1; y<=33; y++) {z=100-x-y;if(x*5+y*3+z/3.0==100)printf("x=%d y=%d z=%d\n",x,y,z);} } int main() {int x,y,z;swap(x,y,z);return 0; }4) 實(shí)心菱形
#include<iostream> using namespace std; int main() {int i,j,k;int N;//控制菱形的大小N;cin>>N;//先打上邊的N行for(i=1; i<=N; i++) {for(j=1; j<=N-i; j++) {cout<<" ";//打印的空格數(shù)}for(k=1; k<=2*i-1; k++)cout<<"*";//星號(hào)數(shù)cout<<endl;}//下邊的N-1行for(i=N-1; i>=0; i--) {for(j=1; j<=N-i; j++) {cout<<" ";//打印的空格數(shù)}for(k=1; k<=2*i-1; k++)cout<<"*";//星號(hào)數(shù)cout<<endl;}return 0; }5) 空心菱形
方法一:
#include<stdio.h> int main() {int a,n,i;scanf("%d",&a);for(n=1; n<=a/2+1; n++) { //n是行for(i=1; i<=a-n; i++)printf(" ");printf("*");for(i=1; i<=2*n-3; i++) {printf(" ");}if(n>1)printf("*");printf("\n");}for(n=a/2; n>0; n--) { //n是個(gè)數(shù)for(i=1; i<=a-n; i++) //這是個(gè)函數(shù)!a-n斜率為-1,a-n/2斜率為-2!printf(" ");printf("*");for(i=1; i<=2*n-3; i++) {printf(" ");}if(n>1)printf("*");printf("\n");}return 0; }方法二:
#include<stdio.h> int main() {int i,j,k,line,m;printf("請(qǐng)輸入行數(shù):");scanf("%d",&line);m=(line+1)/2;for(i=1; i<=m; i++) {for(k=0; k<m-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(j=0; j<2*i-3; j++){printf(" ");}printf("*");printf("\n");}for(i=m-1; i>0; i--) {for(k=0; k<m-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(j=0; j<2*i-3; j++) {printf(" ");}printf("*");printf("\n");}return 0; }方法三:
#include"stdio.h" #include"math.h" int main() {int i,j,n;scanf("%d",&n);for(i=-n; i<=n; i++) {for(j=-n; j<=n; j++)if(abs(i)+abs(j)==n) printf("*");else printf(" ");printf("\n");} }6) 十進(jìn)制轉(zhuǎn)換為二進(jìn)制
#include<stdio.h> int main() {int a,i=2,j=0;int b[100];scanf("%d",&a);while(i>=1) {i=a/2;if(i*2==a) {b[j++]=0;} else {b[j++]=1;}a=i;}for(j-=1; j>=0; j--)printf("%d",b[j]);return 0; }7) 水仙花
#include<iostream> using namespace std;void a1() {int count =0;int x,backNum,befNum,t,num;cout<<"請(qǐng)輸入一個(gè)三位數(shù):"<<endl;cin>>x;t=x;for(int i=1; i<=3; i++) {backNum=x%10;befNum=x/10;x=befNum;num=backNum*backNum*backNum;count+=num;}cout<<"x="<<t<<endl;cout<<"count="<<count<<endl;if(count==t) {cout<<"Yes"<<endl;} else cout<<"No"<<endl; }int main() {a1();return 0; }8) 大數(shù)相加
#include<iostream> #include<string> #include<algorithm> using namespace std;string addStringString(string a, string b) {string s = "";reverse(a.begin(), a.end());reverse(b.begin(), b.end());int i = 0, m=0, k = 0;while(a[i] && b[i]) {m = a[i] - '0' + b[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(i == a.size()) {while(i != b.size()) {m = b[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(k != 0) {s += (k+'0');}} else if(i == b.size()) {while(i != a.size()) {m = a[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(k != 0) {s += (k+'0');}}reverse(s.begin(), s.end());return s; } int main() {string a;string b;cin >> a >> b;cout << addStringString(a,b) << endl; }9) 冒泡排序
1)一維冒泡
#include<stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,10,9};int i=0,j=0;int t;for(i=0;i<10;i++){for(j=0;j<10-1;j++){if(a[j]>a[j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;}}}printf("排好的數(shù)列為:\n");for(i=0;i<10;i++){printf("%2d ",a[i]);}}2)二維冒泡:
#include<stdio.h> int main() {int a[3][3]= {{1,2,3},{4,5,6},{7,8,9}};int i,j,k;for(i=0; i<3; i++)for(j=0; j<2; j++) {if(a[i][j]>a[i][j+1]) {k=a[i][j];a[i][j]=a[i][j+1];a[i][j+1]=k;}}for(i=0; i<3; i++)for(j=0; j<3; j++)printf("%4d",a[i][j]); }10) 選擇排序
#include <stdio.h> int main() {int i,j,t,a[11]; //定義變量及數(shù)組為基本整型printf("請(qǐng)輸入10個(gè)數(shù):\n");for(i=1; i<11; i++)scanf("%d",&a[i]); //從鍵盤中輸入要排序的10個(gè)數(shù)字for(i=1; i<10; i++)for (j=i+1; j<11; j++)if(a[i]>a[j]) { //如果前一個(gè)數(shù)比后一個(gè)數(shù)大,則利用中間變量t實(shí)現(xiàn)兩值互換t=a[i];a[i]=a[j];a[j]=t;}printf("排序后的順序是:\n");for(i=1; i<11; i++)printf("%5d", a[i]); //輸出排序后的數(shù)組printf("\n");return 0; }11) 打印字母V
#include<stdio.h> int main() {int line;int i;scanf("%d",&line);int n=(line+1)/2;for(int i=n; i>0; i--) {for(int k=0; k<n-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(int j=0; j<2*i-3; j++) {printf(" ");}printf("*");printf("\n");}}12) 打印空心等腰三角形
#include <iostream> #include <string> using namespace std;void PriTriangle(int n) {for(int i=1; i<=n; ++i) {for(int j=1; j<=n-i; ++j) {cout<<" ";}for(int k=1; k<=2*i-1; ++k) {if(i==1 || i==n)cout<<"*";else {if(k==1 || k==2*i-1)cout<<"*";elsecout<<" ";}}cout<<"\n";} }int main() {cout<<"please input a number: ";int n;cin>>n;PriTriangle(n);}13) 打印大寫字母Y
#include<iostream> using namespace std; int main() {int n;cin>>n;int m=(n+1)/2;for(int i=m; i>=1; i--) {for(int k=1; k<=m-i; k++)cout<<" ";for(int j=1; j<=2*i-1; j++) {if(j==1||j==2*i-1) {cout<<"*";} else {cout<<" ";}}cout<<endl;}for(int i=0; i<m; i++) {for(int k=1; k<=m-1; k++) {cout<<" ";}cout<<"*"<<endl;}return 0; }14 ) 判斷輸入字符是否為回文數(shù)
#include<stdio.h> #include<string.h> int main() {char s[100];int i,j,n;printf("輸入字符串:\n");gets(s);n=strlen(s);for(i=0,j=n-1; i<j; i++,j--)if(s[i]!=s[j])break;if(i>=j)printf("是回文串\n");elseprintf("不是回文串\n");return 0; }15) 利用sort函數(shù)進(jìn)行排序
#include<iostream> #include<string> #include<algorithm>using namespace std; //bool cmp(int a,int b) //{ // return a>b; //} int main() {int a[10]={5,1,0,3,7,8,4,6,9,2};sort(a,a+10); // sort(a,a+10,cmp);for(int i=0;i<10;i++){cout<<a[i]<<" ";}return 0; }16) 利用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的相加
#include<stdio.h> float add(float x,float y) {float z;z=x+y;return (z); } int main() {float add(float x,float y);float a,b,c;scanf("%f%f",&a,&b);c=add(a,b);printf("sum is %f",c);return 0; }17) 利用函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)的交換
#include<stdio.h> void swap(int *a,int *b) {int temp;temp = *a;*a = *b;*b = temp; } int main() {int a,b;scanf("%d%d",&a,&b);swap(&a,&b);printf("%d %d\n",a,b);return 0; }18) 解一元二次方程組
#include<stdio.h> #include<math.h> int main() {double a,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return 0; }19)冒泡排序與交換排序的結(jié)合
#include<stdio.h> void swap(int *a,int *b) {int temp=*a;*a=*b;*b=temp; }void b_sort(int a[]) {int t;for(int i=0; i<10; i++) {for(int j=0; j<9; j++) {if(a[j]>a[j+1]) { // t=a[j]; // a[j]=a[j+1]; // a[j+1]=t;swap(&a[j],&a[j+1]);}}}} int main() {int a[10]= {1,2,3,4,-5,6,7,8,9,10};b_sort(a);for(int i=0; i<10; i++) {printf("%4d",a[i]);}}20) 倒序輸出
#include<stdio.h> int main() {int i,j;int t;int a[8];printf("請(qǐng)輸入7個(gè)數(shù):"); for(i=1;i<8;i++)scanf("%d",&a[i]);for(i=0;i<8;i++)for(j=1;j<7;j++)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf(" ");for(i=1;i<=7;i++)printf("%5d",a[i]); }21)八皇后問題
#include <iostream> #include <cmath> #define N 8 using namespace std; int board[N+1],cnt; bool judge(int l,int n) { //判斷在第l行第n個(gè)位置放是否合法for(int i=1; i<=l-1; ++i)if(board[i]==n||abs(board[i]-n)==abs(i-l))return false;return true; } void print() {for(int i=1; i<=N; ++i) {for(int j=1; j<board[i]; ++j)cout<<'*';cout<<'Q';for(int j=board[i]+1; j<=N; ++j)cout<<'*';cout<<endl;}cout<<endl; } void dfs(int l) {for(int i=1; i<=N; ++i) {if(judge(l,i)) {board[l]=i;if(l==N) {print();++cnt;} elsedfs(l+1);}} } int main() {dfs(1);cout<<cnt;//輸出答案總數(shù)return 0; }22)漢諾塔問題
#include<stdio.h> int main() {void hanoi(int n,char one,char two,char three);int m;printf("input the number of diskes:");scanf("%d",&m);printf("The step to move %d diskes:\n",m);hanoi(m,'A','B','C'); } void hanoi(int n,char one,char two,char three){void move(char x,char y);if(n==1)move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}} void move(char x,char y) {printf("%c->%c\n",x,y); }23)數(shù)組的行列互換
#include<iostream> using namespace std; main() {int t,i,j,r[3][3]= {{1,2,3},{7,8,9}}; //定義要交換的數(shù)組r,大小為3*3,實(shí)際只使用了2*3for(i=0; i<2; i++) { //r的大小是2*3,把2*3變?yōu)?*2for(j=i; j<3; j++) {t=r[i][j];r[i][j]=r[j][i];r[j][i]=t;//交換過程,相當(dāng)于交換了下標(biāo)}}for(i=0; i<3; i++) { //顯示,因?yàn)?*3已經(jīng)是3*2了for(j=0; j<2; j++)printf("%d ",r[i][j]);printf("\n");} }24)求1000內(nèi)的完全數(shù)
#include<stdio.h> #define N 1000 int main() {int i,m,g;for(m=2;m<=N;m++){g=0;for(i=1;i<m;i++){if(m%i==0)g=g+i; } if(g==m){printf("完數(shù)%d的因子是:\n",m); for(i=1;i<m;i++){if(m%i==0){printf("%d\t\n",i);}}}}return 0;}25) 輾轉(zhuǎn)相除法
#include<stdio.h>int main() {int u=32;int v=26;while(v!=0) {int temp=u%v;u=v;v=temp;}printf("%d",u);return 0; }如果v等于0,計(jì)算結(jié)束,u就是最大公約數(shù)
如果v不等于0,那么計(jì)算u除以v的余數(shù),讓u等于v,而v等于那個(gè)余數(shù)
回到第一步
26) 回文串
#include<iostream> #include<string.h> using namespace std;int main() {//char str[20];string str;int i,n;cin>>str;//scanf("%s",str);//n=strlen(str);n = str.length();cout<<n<<endl;for(i=0; i<=n/2; i++) {if(str[i]!=str[n-1-i]) {printf("N\n");break;} else {if(i==n/2)printf("Y\n");}}return 0;}27)采用非strcat和strcat方式實(shí)現(xiàn)字符串的連接
本題要求編寫程序,實(shí)現(xiàn)兩個(gè)字符串的連接,并將連接后的字符串輸出。
輸入格式:
輸入一行以回車結(jié)束的非空字符串(不超過20個(gè)字符),再輸入一行以回車結(jié)束的非空字符串(不超過20個(gè)字符)。
輸出格式:
一行輸出倆字符串連接后新的字符串。
輸入樣例:
Hello_
China
輸出樣例:
Hello_China
解題一:
非空字符串但是字符串中可能含有空格,用scanf不會(huì)通過,采用gets函數(shù)。
#include<stdio.h> #include<string.h> int main(){char a[100],b[100];gets(a);gets(b);int extent=strlen(a);int extent2=strlen(b);int i=0;while(i<=extent2){a[extent++]=b[i++];}puts(a);}解題二:
采用strcat函數(shù)實(shí)現(xiàn)字符串的連接
28)用宏定義計(jì)算兩個(gè)數(shù)的和
#include <cstdio> #include <iostream> #define lol long long int #define A using #define Long namespace #define time std #define ago ; #define Here int #define was main #define a () #define monkey { #define called lol x,y; #define Jack cin>>x>>y; #define ak cout<<x+y; #define ioi return 0; #define Orz } A Long time ago Here was a monkey called Jack ak ioi Orz輸出結(jié)果圖如下:
29)逆序輸出
#include<stdio.h> #include<string.h> int main() {char s[10];scanf("%s",s);int len=strlen(s);int flag=0;for(int i=len-1;i>=0;i--){if(s[i]=='0' && !flag)continue;if(s[i]!='0' && !flag) {printf("%c",s[i]);flag=1;continue;}printf("%c",s[i]);} printf("\n");return 0; } #include<stdio.h>int main(){int a=1; // printf("%d %d %d",++a,a++,a);printf("%d %d %d",a++,++a,a);return 0; }總結(jié)
以上是生活随笔為你收集整理的C / C++ 经典代码和常考类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南阳市买的二手房+多久可以再次转卖?
- 下一篇: C\C++中声明与定义的区别