C语言练习题库40题版答案.doc

上传人:s****u 文档编号:12749507 上传时间:2020-05-22 格式:DOC 页数:26 大小:196.01KB
返回 下载 相关 举报
C语言练习题库40题版答案.doc_第1页
第1页 / 共26页
C语言练习题库40题版答案.doc_第2页
第2页 / 共26页
C语言练习题库40题版答案.doc_第3页
第3页 / 共26页
点击查看更多>>
资源描述
好好学习1.将所有的水仙花数保存到维数组a中。 (所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。 例如:153=1*1*1+5*5*5+3*3*3)#includeint main() int s100=0; int i; int k=0;/表示水仙花数的个数。 int a,b,c; for(i=100;i1000;i+) a=i%10; b=(i%100)/10; c=i/100; if(i=a*a*a+b*b*b+c*c*c) sk=i; printf(%dn,sk); k+; 2. 按下面的公式求sum的值。sum = 1 - 2 + 3 - 4 + 5 - 6 + + 99 100#includeint main() int i; int k=1; int sum=0; for(i=1;i=100;i+) sum=sum+k*i; k=-1*k; printf(%dn,sum);3.编写代码,实现冒泡排序,并要求:(1)在有序的数组中,接着插入一个元素,新数组仍然有序(2)在数组中删除一个元素,新数组仍然有序(3)对该数组进行逆序存放#includeint main() void sort(int a,int m); int a100=1,22,55,8,9,29,3,5,244,24; int i; int x; sort(a,10); for(i=0;i10;i+) printf(%d ,ai); /*插入一个数后,仍然按序输出*/ printf(n); printf(请输入要插入的数字:); scanf(%d,&x); insert(x,a,11); for(i=0;i=0;i-) printf(%d ,ai); void insert(int x,int a,int m) void sort(int a,int m) ; am-1=x; sort(a,m);/* 冒泡排序*/void sort(int a,int m) /m 表示数组的个数 int i,j,t; for(i=0;im;i+) for(j=0;jaj+1) t=aj; aj=aj+1; aj+1=t; 4. 编写程序实现以下功能,能够将下面所示的6*6的二维矩阵读入并存储到二维数组中,并求其对角线之和,以及最大数,并输出最大数所在的行列下标。 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11#includeint main() int i,j; int a66=35, 1, 6, 26, 19, 24, 3 , 32 , 7 ,21, 23 , 25 , 31 , 9 , 2 , 22 , 27 , 20 , 8 , 28 , 33 ,17 , 10 , 15 , 30 , 5 , 34 , 12 , 14 , 16 , 4 , 36 , 29, 13 , 18 , 11 ; int max=a00; int col,row; int sum=0; for(i=0;i6;i+) for(j=0;j6;j+) if(i=j|i+j=5)sum=sum+aij; printf(%dn,sum); for(i=0;i6;i+) for(j=0;j=max) max=aij; col=j; row=i; printf(max=%d,row=%d,col=%dn,max,row,col);5. 对任意输入的5个字符数组进行排序比如:输入abc def fdc ccc efg得到 abc ccc def efg fdc6. 求2个数组的交集输入5,6,7,9,102,3,4,5,6得到5,6#includeint main() int a5=5,6,7,9,10; int b5=2,3,4,5,6; int i,j; for(i=0;i5;i+) for(j=0;j5;j+) if(ai=bj) printf(%d ,ai); 7. 求m,n之间既不能被7整除也不能被5整除的整数之和,m和n的值由键盘输入。例如,如果m和n的值分别为10和20,则计算结果为:106。#includeint main() int m,n; int i,sum=0; printf(请输入m和n:); scanf(%d%d,&m,&n); for(i=m;i=n;i+) if(i%7!=0 & i%5!=0) sum=sum+i; printf(%d,sum);8. 求字符串的长度并输出。 例如,当字符串1为This Is a c Program 则应输出:Result is: 19#includeint main() char str100=; int i=0; /str的下标 gets(str); while(stri!=0) i+; stri=stri+1; printf(字符串长度为:%d,i);9. 将字符串中所有的大写字母转换为小写,其它字符不变(不使用转换函数)。 例如,当字符串为This Is a c Program 输出:this is a c program#includeint main() char str100=; int i=0; printf(请输入要转换的字符串:); gets(str); while(stri!=0) if(stri=A & stri=Z) stri=stri+32; i+; printf(%s,str);10. 给学生评定成绩,若学生成绩在60-69则输出“及格”,70-89分为“良好”;90-100分为“”优秀,60分一下为“不及格”,分别用if-else语句和switch语句编程实现。#includeint main() int score; printf(请输入分数:); scanf(%d,&score); if(score60) printf(不及格n); else if(score70) printf(及格n); else if(score90) printf(良好n); else printf(优秀n);#includeint main() int score; int class; printf(请输入分数:); scanf(%d,&score); class=score/10; switch(class) case 9: printf(优秀n); break; case 8: case 7: printf(良好n); break; case 6: printf(及格n); break; default: printf(不及格n); break; 11:若有3个字符串s1.,s2,s3,其中,s1=“abcdef”,s2=“123456”,要求用字符数组实现将s1的内容复制到s3中,并将s2的内容添加在s3后面的功能,最后输出字符串s3#includeint main() char s1100=abcdef; char s2100=123456; char s3200; int i=0;/表示s1下标 int j=0;/表示s2下标 while(s1i!=0) s3i=s1i; i+; while(s2j!=0) s3i=s2j; j+; i+; s3i=0; printf(%s,s3);12:编写一个通用函数swap(),在main函数中调用可以实现2个数的交换。#includeint main() void swap(int *p1,int*p2); int a,b; scanf(%d%d,&a,&b); printf(a=%d,b=%dn,a,b); swap(&a,&b); printf(a=%d,b=%dn,a,b);void swap(int *p1,int*p2) int temp; temp=*p1; *p1=*p2; *p2=temp;13.设计程序输出如下的杨辉三角形(正三角形),共6行:#includeint main() int a715=0; int i,j; a07=1; for(i=1;i7;i+) for(j=1;j14;j+) aij=ai-1j-1+ai-1j+1; for(i=0;i7;i+) for(j=0;j15;j+) if(aij!=0) printf(%2d,aij); else printf( ); printf(n); 14.设计程序求10000以上的最小素数。#includeint main() int i=10000; while(1) i+; if(sushu(i) break; printf(%d,i);int sushu(int x) int i; for(i=2;i=x-1;i+) if(x%i=0) break; if(i=x) return 1; else return 0;15. 输出九九乘法表。#includeint main() int i,j; for(i=1;i=9;i+) for(j=1;j=j) printf(%2d*%2d=%2d ,i,j,i*j); printf(n); 16. 输入一个不超过五位的正整数, 输出其逆数。例如输入12345,输出应为54321。#includeint main() int x; scanf(%d,&x); while(x!=0) printf(%d,x%10); x=x/10; 17.结合书上打印菱形的思想,打印出以下图形: a bcd efghi gklmnop qrstu vwx y#includeint main() int i,j,k; int m=97; for(i=1; i0; j-) printf( ); for(k=1; k=2*(i-1)+1; k+) printf(%c,m); m+; printf(n); for(i=1; i=4-1; i+) for(j=1; j0; k-) printf(%c,m); m+; printf(n); 18. 试用C语言求解“百钱百鸡”问题。百钱买百鸡, 鸡翁一值钱三,鸡母一值钱二,鸡雏三值钱一,问鸡翁、鸡母、鸡雏各几何?#includeint main() int x,y,z; int pos=0; for(x=1; x=34; x+) for(y=1; y=50; y+) for(z=1; z=300; z+) if(3*x+2*y+z/3=100 & z%3=0) pos=1; break; if(pos=1) break; if(pos=1) break; printf(=%d=%d=%d,x,y,z);19. 斐氏数列是公元13世纪数学家 斐波拉契发明的。即:1,2,3,5,8,13,21,34,55,89,输出其前15项。#includeint main() int x,y,z; int pos=0; for(x=1; x=34; x+) for(y=1; y=50; y+) for(z=1; z=300; z+) if(3*x+2*y+z/3=100 & z%3=0) pos=1; break; if(pos=1) break; if(pos=1) break; printf(=%d=%d=%d,x,y,z);20. 编写一个函数deletechar(),使字符串中尾部的*号不得多于 n 个;若 多于 n 个,则删除多余的*号;若少于或等于 n 个,则什 么也不做,字符串中间和前面的*号不删除。例如,字符串 的内容为:*A*BC*DEF*G*,若 n 的值为 4, 删 除 后 , 字 符 串 中 的 内 容 应 当 是 : *A*BC*DEF*G*;若 n 的值为 7,则字符串中的内 容仍为*A*BC*DEF*G*。n 的值在主函数中输 入。#includeint main() void deletechar(char str,int n); int n; char s1000; printf(请输入一个带*的字符串:); scanf(%s,&s); printf(请输入后面保留*的数量:); scanf(%d,&n); deletechar(s,n); printf(%s,s);void deletechar(char str,int n) int i=0; int k=0;/表示*的数量 int pos=0; /最后是否有* while(stri!=0) if(stri=*) pos=1; k+; else pos=0; k=0; i+; while(pos!=0 & k=n) stri=0; k-; i-; 21. 找出形参字符串中出现的频率最高的字母(不区分大小写) ,并统计其出现的次数。例如,形参 s 所指的字符串为:abcAbsmaxless,程序执行后的输出结 果为: letter a:3times letter s: 3times。#includeint main() char str100; int s26= 0; int i=0; scanf(%s,&str); while(stri!=0) if(stri=A & stri=a & stri=z) sstri-97+; i+; for(i=0;i0) printf(%s中字母%c的出现的频次是%dn,str,i+65,si); 22. 设计函数change(),将形参 a 所指数组中的前半部分元素中的值和后半部 分元素中的值互换。形参 n 中存放数组中数据的个数,若 n 为奇数,则中间的元素不动。若 a 所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、 8、9、5、1、2、3、4。#includeint main() void change(int x,int m); int a10= 1,2,3,4,5,6,7,8,9,10; int b9= 1,2,3,4,5,6,7,8,9; int i; change(a,10); for(i=0; i10; i+) printf(%d,ai); printf(n); change(b,9); for(i=0; i9; i+) printf(%d,bi); printf(n);void change(int x,int m) int i,temp; if(m%2=0) for(i=0; im/2; i+) temp=xi; xi=xm/2+i; xm/2+i=temp; else for(i=0; im/2; i+) temp=xi; xi=xm/2+i+1; xm/2+i+1=temp; 23.编写一个函数dtob(),在main函数中读入一个10进制数,dtob(),能够将该10进制数转换成一个二进制字符串,并返回给调用函数。#include#includeint main() void dtop(int x,char s); char s100; int i=0; int x; printf(请输入十进制数:); scanf(%d,&x); dtop(x,s); for(i=strlen(s)-1; i=0; i-) printf(%c,si); void dtop(int x,char s) int i=0; char m=0; while(x/2!=0) if(x%2=0) m=0; else m=1; si=m; x=x/2; i+; si=1; s+i=0;24. 编一程序每个月根据每个月上网时间计算上网费用,计算方法如下: #include int main() int hour; float price; printf(请输入本月上网的小时数n); scanf(%d,&hour); if(hour=10) price=30; else if(hour50) price=hour*3; else price=hour*2.5; printf(本月上网的费用%f,price); 要求当输入每月上网小时数,显示该月总的上网费用25. 编写一个求直角三角形的面积的函数。在main函数中从键盘输入直角三角形的两个直角边,然后调用该函数求该直角三角形的面积(精确到小数点后2位)。#include int main() float area(float x,float y); float a,b; float s; printf(请输入直角三角形的2条边的长度n); scanf(%f%f,&a,&b); s=area(a,b); printf(三角形的面积是%.2f,s);float area(float x,float y) return 0.5*x*y;26. 写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中从键盘任意输入一个四位数,调用该函数,判断该数是否为玫瑰花数,若是则输出“yes”,否则输出“no”.#include int main() int x; printf(请输入一个正四位整数n); scanf(%d,&x); if(rose(x)=1) printf(yesn); else printf(no);int rose(int x) int a,b,c,d; a=x/1000; b=(x%1000)/100; c=(x%1000)%100)/10; d=x%10; if(x=a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d) return 1; else return 0;27. 将1-1000中所有21的倍数存到一个一维数组中,再按每行5个数据输出到屏幕上。#include int main() int i; int k=0; int s100; for(i=21;i=1000;i=i+21) sk=i; k+; printf(%3d ,i); if(k%5=0) printf(n); 28. 写一个函数计算两个正整数的最大公约数,在主函数中用scanf输入m,n两个正整数,调用函数后,打印函数返回值(即这两个正整数的最大公约数)。#include int main() int gcd(int m,int n); int x,y; printf(请输入2个数n); scanf(%d%d,&x,&y); printf(%d,gcd(x,y);int gcd(int m,int n) int r; r=m%n; while(r!=0) m=n; n=r; r=m%n; return n;29. 编写程序根据以下公式求e的值。要求用两种方法计算 1) for循环计算前50项 2)while 循环直至最后一项的值小于10-4#include int main() double fact(int x); int i=0; double sum=1; for(i=1;i=50;i+) sum=sum+1.0/fact(i); printf(e=%f,sum);double fact(int x) double f=1; int i; for(i=1;i=x;i+) f=f*i; return f;#include int main() int i=0; double sum=1; while(1) i+; sum=sum+1.0/fact(i); if(fact(i)10000) break; printf(e=%f,sum);int fact(int x) int f=1; int i; for(i=1;i=x;i+) f=f*i; return f;30. 题目将一个正整数分解质因数。例如输入90,打印出90=2*3*3*5。#include int main() int i; int x; scanf(%d,&x); printf(%d=,x); for(i=2; i=x; i+) while(sushu(i)=1 & x%i=0 & x!=1) x=x/i; if(x!=1) printf(%d*,i); else printf(%d,i); int sushu(int x) int i; for(i=2; ix; i+) if(x%i=0)break; if(i=x) return 1; else return 0;31. 打印101000之间满足下列条件的所有数 正序读和反序读都相同例如55、232等。#include int main() int fanxu(int x); int i; for(i=10;i=1000;i+) if(i=fanxu(i) printf(%dn,i);int fanxu(int x) int temp=0,t; int sum=0; while(x!=0) t=x%10; sum=sum*10+t; x=x/10; return sum;32. 编写一个函数完成判断方阵aNN是否关于主对角线对称(相等)若对称则返回1否则返回0。33. 任何一个自然数m的立方均可写成m个连续奇数之和。例如: 13=1 23=3+5 33=7+9+11 43=13+15+17+19 编程实现:输入一自然数n,求组成n3的n个连续奇数。#includeint main() int x; int i=1,k,sum=0,temp; printf(请输入x的值:); scanf(%d,&x); while(1) sum=0; temp=i; /*求从temp开始的x个奇数的和*/ for(k=1; k=x; k+) sum=sum+temp;/temp的初始值为开头的那个奇数 temp=temp+2; if(sum=x*x*x) break; i=i+2; printf(%d*%d*%d=,x,x,x); for(k=1; k=x; k+) printf(%d+,i); i=i+2; 34.编写函数:(1)用选择法将数组排成降序的函数-SUB1;(2)用折半查找法查找某数是否在给定的数组当中的函数-SUB2。 主函数:输入任意10个正整数给数组,调用SUB1对数组进行排序,从键盘输入一个正整数,调用SUB2在数组中进行查找,找到后输出“OK”,没有找到则输出“NO FOUND!”。#includeint main() void sub1(int a,int m); int find; int a10=1,9,8,2,3,5,6,7,4,98; int i,x; sub1(a,10); for(i=0;i10;i+) printf(%dn,ai); printf(请输入要查找的数x:); scanf(%d,&x); find=sub2(x,10,a); if(find=1) printf(okn); else printf(NO foundn);int sub2(int x,int m,int a) int left=0,right=m-1; int mid=(left+right)/2; while(left=right) mid=(left+right)/2; if(x=amid) return 1; else if(xamid) right=mid-1; else left=mid+1; return 0;void sub1(int a,int m) int i,j; int temp; for(i=0;im-1;i+) for(j=i+1;jaj) temp=ai; ai=aj; aj=temp; 35. 某班有5个学生,三门课。分别编写3个函数实现以下要求: (1) 求各门课的平均分; (2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩; (3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名主程序输入5个学生的成绩,然后调用上述函数输出结果。#includeint main() int a54= 2001,33,55,99,2002,33,55,99,2003,33,55,99,2004,33,55,99,2005,88,85,89; int i,j; double sum; double aver_xuesheng5= 0; double aver_kecheng4= 0; int bujige5= 0; for(j=1; j4; j+) sum=0; for(i=0; i5; i+) sum=sum+aij; aver_kechengj=sum/5; printf(第%d门课的成绩是%fn,j,aver_kechengj); /计算不及格门次 for(i=0; i5; i+) for(j=1; j4; j+) if(aij60) bujigei+; /显示不及格门次 for(i=0; i=2) printf(不及格学生学号为%d,分数为,ai0); for(j=1; j4; j+) if(aij60) printf(%d,aij); printf(n); /计算每个学生的平均分 for(i=0; i5; i+) sum=0; for(j=1; j4; j+) sum=sum+aij; aver_xueshengi=sum/3; /显示平均分在85-90的学生 for(i=0; i=85 & aver_xueshengi=90) printf(分数在85-90的学生的学号为%d,ai0); 36,求解100以内的素数。#include int main() int i; for(i=2;i=100;i+) if(sushu(i)=1) printf(%dn,i);int sushu(int x) int i; for(i=2;ix;i+) if(x%i=0)break; if(i=x) return 1; else return 0;37. 一球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。求它第10次落地时,共经过多少米?第10次反弹多高?(C语言实现) #include int main() float h=100,s = h/2; int n; for (n = 2; n = 10; n+) h = h + 2*s; s = s/2; printf(第10次落地时经过的总长度是%fn,h); printf(第10次谈起的高度是%fn,s);38. 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?#includeint main() int i,x=1; for(i=1;i=9;i+) x=2*(x+1); printf(%d,x);39. 输入3个整数,用指针的方法处理,按由小到大的顺序输出。#includeint main() void swap(int *p1,int *p2); int a,b,c; scanf(%d%d%d,&a,&b,&c); if(ab) swap(&a,&b); if(ac) swap(&a,&c); if(bc) swap(&b,&c); printf(%d,%d,%d,a,b,c);void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp;40. 输入一个23的矩阵数组,并实现数组转置。#includeint main() int a23= 1,2,3,4,5,6; int b32; int i,j; for(i=0; i2; i+) for(j=0; j3; j+) bji=aij; for(i=0; i3; i+) for(j=0; j2; j+) printf(%d ,bij); printf(n); 成绩录入#includestruct student char name20; char xuehao20; int math,english,c,i;int main() s
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!