admin管理员组

文章数量:1794759

C语言程序设计经典例题(考研必背)(基础篇)第二周

C语言程序设计经典例题(考研必背)(基础篇)第二周

一,1000以内的回文素数 #include<stdio.h> #include<math.h> int judg(int i)//用于判断一个数字是不是素数 { int j; if(i==1) return 0; if(i==2) return 1; for(j=2;j<=sqrt(i);j++) { if(i%j==0) break; } if(j>sqrt(i)) return 1; } int main() { int i; for(i=10;i<1000;i++) if(judg(i)==1) if(i/100==0)//判断是不是两位数 { if(i/10==i%10)//判断两位数的个位和十位是否相等 printf("%d ",i); } else if(i/100==i%10)//判断百位和个位是否相等 printf("%d ",i); } 二,数组中插入元素 #include <stdio.h> void insert(int *a,int n,int index,int e) { int i,j; for(j=n-1;j>=index-1;j--) a[j+1]=a[j]; a[index-1]=e; } int main() { int a[5]={2,4,5,6,0}; int i; for(i=0;i<5;i++)//遍历 printf("%d\\t",a[i]); printf("\\n"); insert(a,5,2,15);//第2个位置插入15 for(i=0;i<6;i++) printf("%d\\t",a[i]);//输出排序后的数组 }

三,求2/1,3/2,5/3,8/5…前20项的和。

#include <stdio.h> int main() { int n,t,num=20; float a=2,b=1,s=0; for(n=1;n<=num;n++) { s=a/b+s; t=a; a=a+b; b=t;//t把前一个分式的分子传个下一个分式的分母 } printf("sum=%9.6f\\n",s); return 0; } 四,获取二维数组将3*4的矩阵中元素的最大值及下标 #include <stdio.h> int main() { int a[3][4],i,j,max,max_i=0,max_j=0; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); max=a[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if(a[i][j]>max) { max=a[i][j]; max_i=i; max_j=j; } printf("max=a[%d][%d]=%d\\n",max_i,max_j,max); return 0; } 五,矩阵转置(mxn阶,初始a(i,j),转置后 b(j,i)=a(i,j)) #include <stdio.h> int main() { int i,j,i1,j1,a[101][101],b[101][101]; printf("please input the num of rows(<=100)\\n"); scanf("%d",&i1); printf("please input the num of columns(<=100)\\n"); scanf("%d",&j1); for(i=0;i<i1;i++) for(j=0;j<j1;j++) b[j][i]=a[i][j]; return 0; } 六,求3x3矩阵对角线元素之和 void main() { int a[3][3]; int sum=0,i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j||(i+j)==2)//下标满足情况 sum=a[i][j]+sum; printf("%d\\n",sum); } 七,求水仙花数(三位数,各位数字立方和等于其本身) #include <stdio.h> int main() { int a,b,c,i; for(i=100;i<1000;i++) { a=i%10; b=i/10%10; c=i/100; if(a*a*a+b*b*b+c*c*c==i) printf("%5d\\n",i); } return 0; } 八,求前20个Fibonacci数列 #include <stdio.h> int main() { int a=1,b=1; int i; for(i=0;i<10;i++) { printf(" %d %d",a,b); a=a+b; b=b+a; } system("pause"); } 九,生兔子问题(1,1,2,3,5,8……) #include <stdio.h> int main() { int i,tu1,tu2,tu3,m; tu1=1;tu2=1; printf("month\\n"); scanf("%d",&m); if(m==1||m==2) { printf("yi dui tuzi"); } else if(m>2) { for(i=3;i<=m;i++) { tu3=tu1+tu2; tu1=tu2; tu2=tu3; } printf("%dmonth de tuzi:%d\\n",m,tu3); } return 0; } 十,输入一行英文句子,计算单词个数 #include <stdio.h> int main() { printf("input:\\n"); char ch; int i,count=0,word=0; while((ch=getchar())!='\\n') if(ch==' ') word=0; else if(word==0) { word=1; count++; } printf("you %d ge danci\\n",count); return 0; } 十一,加密解密(字符+位置+偏移值5) #include <stdio.h> #include <string.h> int main() { int result=1; int i; int count=0; char Text[128]={'\\0'}; char cryptograph[128]={'\\0'}; while(1) { if(result==1) { printf("请输入要加密的明文:\\n"); scanf ("%s",&Text); count=strlen(Text); for(i=0;i<count;i++) { cryptograph[i]=Text[i]+i+5; } cryptograph[i]='\\0'; printf("加密后的密文是:%s\\n",cryptograph); } else if(result==2) { count=strlen(Text); for(i=0;i<count;i++) { Text[i]=cryptograph[i]-i-5; } Text[i]='\\0'; printf("解密后的明文是:%s\\n",Text); } else if(result==3) { break; } else { printf("请输入正确的命令符:\\n"); } printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\\n"); printf("请输入命令符:\\n"); scanf("%d",&result); } return 0; } 十二,逆序输出(将一个从键盘输入的整数存放到一个数组中,通过程序的运行按照数组中的逆序输出该整数,利用递归的方法解决问题) #include <stdio.h> int convert(char s[],int n) { int i; if((i=n/10)!=0)//通过不断取余和整除10来得到数据的每一位 convert(s+1,i); *s=n%10+'0'; return 0; } int main() { int num; char str[10]=" "; printf("input integer data: "); scanf("%d",&num); convert(str,num); printf("output string: \\n"); puts(str); return 0; } 十三,将一个一维数组就地逆置 #include <stdio.h> int main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int i=0,j=9; while(i<=j) { int tem=a[i]; a[i]=a[j]; a[j]=tem; i++; j--; } for(i=0;i<10;i++) printf("%d ",a[i]); return 0; } 十四,数据加密(每位数字加上5,除10的余数取代该数,再将第一位和第四位交换,二三位交换) #include <stdio.h> int main() { int a,i,aa[4],t; scanf("%d",&a); aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++) { aa[i]+=5; aa[i]%=10; } for(i=0;i<=1;i++) { t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf("%d",aa[i]); return 0; } 十五,输出菱形 #include <stdio.h> #include <stdlib.h> int main() { int line = 0; //上半部分行数 int i = 0; //控制循环次数 int j = 0;//控制星星数 int n = 0;//控制空格数 printf("input:"); scanf("%d", &line); if(line % 2 == 0) //判断是否为奇数行 { printf("error\\n"); exit(1); } for (i = 0; i < line; i++)//上半部分 { for (n = 0; n < line - 1 - i; n++)//每行星星前面的空格数 { printf(" "); } for (j = 0; j < 2 * (i+1)-1; j++)//*的个数=2*行数-1 { printf("*"); } printf("\\n"); } for (i = 0; i < line - 1; i++)//下半部分 { for (n = 0; n < i + 1; n++) { printf(" "); } for (j = 0; j < 2 * (line - 1 - i) - 1; j++) { printf("*"); } printf("\\n"); } system("pause"); return 0; } 十六,求2-300范围内的完数(完数=因子之和,如6=1+2+3) #include <stdio.h> int main() { int num, i, sum; for(num=2;num<=300;num++){ sum=0; for(i=1;i<num;i++) { if(num%i==0) sum+=i; } if(sum==num) printf("%d\\n",num); } return 0; } 十七,求孪生素数(间隔为2的素数)3-1000以内 #include <stdio.h> #include <math.h> int prime(int m) { int j; for(j=2;j<=sqrt(m);j++) { if(m%j==0) return 0; } return 1; } int main() { int i,count=0; for(i=3;i<1000;i++) if(prime(i)&&prime(i+2)) { printf("(%-3d,%3d)",i,i+2); count++; if(count%5==0) printf("\\n"); } return 0; } 十八,求回文数(n<256,n的平方具有对称性质的数) #include <stdio.h> void main() { int i,j,k; for(i=0;i<=256;i++) { j=i*i; k=0; while(j>0){ k=k*10+j%10;//把j的值从最低位往前依次给k最高位往后 j=j/10;//j=0的时候就交换完了 } if(k==i*i)//如果是回文的,交换完还是不变的 printf("%d*%d=%d\\n",i,i,i*i); } } 十九,判断一个五位数是不是回文数 #include <stdio.h> int main() { int a,b,c,d,n; scanf("%d",&n); a=n%10; b=n%100/10; c=n%10000/1000; d=n/10000; if(a==d&&b==c) printf("this number is a huiwen\\n"); else printf("this number is not a huiwen\\n"); return 0; } 二十,求100以内所有的勾股数 #include <stdio.h> #include <math.h> int main() { int a,b,c,i; printf("100以内的勾股数:\\n"); for(a=1;a<=100;a++) for(b=1;b<=100;b++) { c=sqrt(a*a+b*b); if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=100) { printf("%4d %4d %4d\\n",a,b,c); } } printf("\\n"); return 0; }

本文标签: 例题语言程序设计基础经典