C语言程序设计上机题目与参考答案.doc

上传人:rrsccc 文档编号:8851358 上传时间:2021-01-20 格式:DOC 页数:18 大小:58.50KB
返回 下载 相关 举报
C语言程序设计上机题目与参考答案.doc_第1页
第1页 / 共18页
C语言程序设计上机题目与参考答案.doc_第2页
第2页 / 共18页
C语言程序设计上机题目与参考答案.doc_第3页
第3页 / 共18页
C语言程序设计上机题目与参考答案.doc_第4页
第4页 / 共18页
C语言程序设计上机题目与参考答案.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《C语言程序设计上机题目与参考答案.doc》由会员分享,可在线阅读,更多相关《C语言程序设计上机题目与参考答案.doc(18页珍藏版)》请在三一文库上搜索。

1、C语言程序设计题目与参考答案(19章)1.(课本第84页第7题)设圆半径r=1.5,圆柱的高h=3,求圆周长.圆面积.圆球表面积.圆球体积.圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序:#include int main()#define p 3.1416int main()double r,h,l,s,S,v,V;scanf(%lf %lf,&r,&h);l=2*p*r;s=p*r*r;S=4*p*r*r;v=4/3*p*r*r*r;V=p*r*r*h;printf(l=%7.2fns=%7.2fnS=%7.2fnv=%7.2fnV=%7.

2、2fn,l,s,S,v,V);return 0;2.把560分钟化成小时和分钟。#includemain()int t,h,m;t=560;h=t/60;m=t%60;printf(560分钟等于%d小时%d分钟n,h,m);3.第112页第6题)有一个函数y=x(x1),y=2x-1(1=x=1写程序,输入x的值,输出y相应的值。#includeint main()float x,y;scanf(%f,&x);if(x1) y=x;else if(x10) y=2*x-1; else y=3*x-11;printf(%fn,y);4.(第113页第11题)输出4个整数,要求按由小到大的顺序输

3、出。#includeint main()float a,b,c,d,t;scanf(%f,%f,%f,%f,&a,&b,&c,&d);if(ab) t=a;a=b;b=t;if(ac) t=a;a=c;c=t;if(ad) t=a;a=d;d=t;if(bc) t=b;b=c;c=t;if(bd) t=b;b=d;d=t;if(cd) t=c;c=d;d=t;printf(%f,%f,%f,%f,a,b,c,d);5.(第113页第12题)有4个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1,这四个塔的高度为10米,塔以外无建筑物。今输入任 一点的坐标,求该

4、点的建筑高度(塔外的高度为零)。# includemain()float x,y,t;scanf(%f,%f,&x,&y);if(x-2)*(x-2)+(y-2)*(y-2)=1) t=10.0;else if(x+2)*(x+2)+(y-2)*(y-2)=1) t=10.0; else if(x-2)*(x-2)+(y+2)*(y+2)=1) t=10.0; else if(x+2)*(x+2)+(y+2)*(y+2)=1) t=10.0; else t=0.0; printf(%fn,t);6.第140页第5题)求Sn=a+aa+aaa+aaa之值,其中a是一个数字,n表示a的位数,例如:

5、2+22+222+2222+22222(此时n=5)n由键盘输入。#includemain()int n,i;long int a=2,sum=0;scanf(%d,&n);for(i=1;i=n;i+)sum=sum+a; a=10*a+2;printf(sum=%dn,sum);7.(第140页第8题)输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=1*1*1+5*5*5+3*3*3.#includemain() int n,a,b,c; for(n=100;n=999;n+) a=n/100; b=n/10-10

6、*a; c=n%10; if(n=a*a*a+b*b*b+c*c*c)&(n=100*a+10*b+c) printf(%6d,n); printf(n);8. 有2个同学3门课的成绩,求平均值。#includemain()int i,j,score;float sum,average;for(i=1;i=2;i+) sum=0; for(j=1;j=3;j+) scanf(%d,&score);sum=sum+score; average=sum/3; printf(%d:average is %7.2fn,i,average);9. 将一个数组中的10个数据从大到小顺序排列好,并从键盘输入

7、一个数,要求按原来的排序规律将此数插入原数据中。 方法1:#includemain() int i,j,t;int a11;for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(j=0;j10;j+)for(i=0;i10-j;i+)if(aiai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;i=0;i-)if(aia10)t=ai;ai=a10;a10=t; break;for(i=0;i11;i+)printf(%dt,ai);printf(n); 方法2:#includemain() int a11,i,j,t,m; for(i=0;i10

8、;i+) scanf(“%d”,&ai); for(j=0;j9;j+) for(i=0;i9-j;i+) if(aiai+1)t=ai;ai=ai+1;ai+1=t; scanf(“%d”,%m); a10=m; for(i=0;iai) t=ai;ai=a10;a10=t; for(i=0;i11;i+) printf(“%3d”,ai);10. 已知五个半径求面积。#include#include#define PI 3.1416main() int a; float r,s;for(a=1;a=11;a=a+2)r=a+0.5;s=PI*pow(r,2);printf(r=%7.1f,

9、ts=%7.3fn,r,s);11.找出10个数中的最大值和最小值。#includemain() int i,max,min; int a10=;max=a0; min=a0;for(i=0;imax) max=ai; if(aimin) min=ai;printf(“max=%dn,min=%d”,max,min);12. 求一个数组(10个数)中所有元素的和的平均值。#includemain()int a10,i,sum=0;float aver;for(i=0;i10;i+)scanf(%d,&ai);sum+=ai;aver=sum/10.0;printf(%7.2fn,aver);1

10、3. 统计20个数中正数.负数及零的个数。#includemain()int a20,i,x=0,y=0,z=0;for(i=0;i20;i+)scanf(%d,ai);for(i=0;i0) x=x+1; else if(ai0) y=y+1;else z=z+1;printf(“x=%dny=%dnz=%dn”,x,y,z);14.找出3*3矩阵中每行的最大元素。 方法1:#includeMain() int a33=0,1,2,3,4,5,6,7,8; int max1,max2,max3,j; max1=a00; max2=a10; max3=a20; for(j=0;jmax1) m

11、ax1=a0j; if(a1jmax2) max2=a1j; if(a2jmax3) max3=a2j;printf(“max1=%d,max2=%d,max3=%d”,max1,max2,max3); 方法2:#includemain() int a33=, int I,j,max; for(i=0;i3;i+) max=ai0; for(j=0;j3;j+) if(maxaij) max=aij; printf(“max=%dn”,i+1,max);15.A为【3】【4】矩阵B为【4】【5】矩阵,求矩阵C=AB。#includemain()int a34,b45,c35,i,j;for(i

12、=0;i3;i+)for(j=0;j4;j+) scanf(%d,&aij); printf(n);for(i=0;i4;i+)for(j=0;j5;j+) scanf(%d,&bij); printf(n);for(i=0;i3;i+)for(j=0;j5;j+) cij=ai0*b0j+ai1*b1j+ai2*b2j+ai3*b3j; printf(%dt,cij);printf(n);16.(第169页第12题)有一行电文,已按下面规律译成密码:A-Z,a-z,B-Y,b-y,C-X,c-x,即第一个字母变成第26个字母,第i个字母变成(26-i+1)个字母,非字母字符不变。要求编程序将

13、密码译回原文,并输出密码和原文。#includemain()char c; while(c=getchar()!=n) if(c=a&c=A&c=Z) c=155-c; printf(%c,c); printf(n);17.输入6名学生5门课程的成绩,分别统计出每个学生的平均分和每门课程的平均分。#includemain()int a65,i,j,sum16=0,sum25=0;float aver1,aver2;for(i=0;i6;i+)for(j=0;j5;j+) scanf(%d,&aij);for(i=0;i6;i+)for(j=0;j5;j+) sum1i=sum1i+aij;av

14、er1=sum1i/5.0;printf(aver1=%fn,aver1);for(i=0;i5;i+)for(j=0;j6;j+)sum2i=sum2i+aji;aver2=sum2i/6.0;printf(aver2=%ft,aver2);printf(n);18.从键盘输入两个字符串,进行比较,结果为两字符第一个不同字母的ASCII码之差。#includemain()char str110=erhrgdftrb,str210=vbgfghdhfm;printf(%dn,strcmp(str1,str2);19.(第168页第6题)输出以下的杨辉三角形(要求输出10行)。11 11 2 1

15、1 3 3 11 4 6 4 11 5 10 10 5 1#includemain() int i,j,a10,t,b11;for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(j=0;j10;j+)for(i=0;i10-j;i+)if(aiai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;i10;i+)printf(%d ,ai);printf(n);scanf(%d,&t);for(i=0;i10;i+)bi=ai;b10=t;for(j=0;j11;j+)for(i=0;i11-j;i+)if(bibi+1)t=bi;bi=bi+1;bi

16、+1=t;for(i=0;i11;i+)printf(%d ,bi);printf(n);20.编写函数(float a)#include,用来求a的小数部分。#includefloat mydecical (float a)int b;float c;b=a;c=a-b;return c;main()float mydecical (float a);float a,b;scanf(%f,&a);b=mydecical (a);printf(%fn,b);21.显示1至10的平方#include main()int i,t;i=1;t=1;while(i=10)t=i*i;printf(%d

17、,%dn,i,i,t);i+;22.数组的转置#includevoid fun (int a33)int i,j,b33; for(i=0;i3;i+) for(j=0;j3;j+) bij=aji; printf(%d ,bij); printf(n);main()int a33,i,j;for(i=0;i3;i+)for(j=0;j3;j+)scanf(%d,&aij);printf(n);fun(a);printf(n);23.用冒泡法对十个字符按由小到大的顺序排列。#includevoid fun (char a10)int i,j,t;for(i=0;i9;i+)for(j=0;ja

18、j+1)t=aj; aj=aj+1; aj+1=t;for(i=0;i10;i+)printf(%c ,ai);main()char a10;int i;for(i=0;i10;i+)scanf(%c,&ai);fun (a);printf(n);24.输入5个学生3门课的成绩,用函数实现以下功能:1).每个学生的均分,2).没门课的均分,3).找出最高的分数对应的学生和课程,4)计算平均分方差。#includevoid stuaver (int a53)int i,j,sum;float aver;for(i=0;i5;i+)sum=0;for(j=0;j3;j+)sum+=aij;aver

19、=sum/3.0;printf(%fn,aver);printf(n);void subaver (int a53)int i,j,sum;float aver;for(i=0;i3;i+)sum=0;for(j=0;j5;j+)sum+=aji;aver=sum/5.0;printf(%fn,aver);printf(n);void max(int a53)int i,j,r,c, m=a00;for(i=0;i5;i+)for(j=0;jm)m=aij;r=i+1;c=j+1;printf(最高分是:%dt 学生是:%dt 课程是:%dn,m,r,c);void fun (int a53)

20、int sum5,i,j;float sum1=0,sum2=0,aver5,t;for(i=0;i5;i+)sumi=0;for(j=0;j3;j+)sumi+=aij;averi=sumi/5.0;for(i=0;i5;i+)sum1+=averi;sum2+=averi*averi;t=(sum2/5.0)-(sum1/5.0)*(sum1/5.0);printf(n);printf(平均方差为:%fn,t);main()int a53,i,j;for(i=0;i5;i+)for(j=0;j3;j+)scanf(%d,&aij);printf(n);printf(学生平均分为:n);st

21、uaver (a);printf(课程平均分是:n);subaver (a);max(a);fun (a);printf(n);25.现有三个指针p1,p2,p3分别指向三个变量i,j,k,要求通过指针变量交换三个数据,最后输出原值和新值。#includemain()int*p1,*p2,*p3,*p,i,j,k;scanf(%d%d%d,&i,&j,&k);p1=&i;p2=&j;p3=&k;printf(原值为:%d %d %dn,*p1,*p2,*p3);p=p1;p1=p2;p2=p3;p3=p;printf(新值为:%d %d %dn,*p1,*p2,*p3);26.矩阵转置,要求用

22、指针。#include main() int a33,(*p)3,i,j; void fun(int a33); for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&aij); p=a; fun(p); void fun(int a33)int i,j,b33; for(i=0;i3;i+) for(j=0;j3;j+) bij=aji; printf(%d ,bij); printf(n);27.十个数排序,用指针。#includemain()int a10,i,j,t,*p;p=a;for(i=0;i10;i+)scanf(%d,p+);for(i=0;i9;i

23、+)for(j=0;j9-i;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i10;i+)printf(%d ,ai);printf(n);28.把一字符串连接到另一字符串后面#include #include #include void fun(char *a,char *b,char,int t)for(;*b!=0;a+,b+)*(a+t)=*b;*(a+t)=0;main()int n;char str1100,str2100;gets(str1);gets(str2);n=strlen(str1);fun(str1,str2,n);printf(%

24、s,strcat(str1,str2);return 0;29.用结构体数组变量类型编程,有2个学生,4门成绩(输出:学号,姓名,4门课的成绩,平均成绩及名次。#includestruct studentint num;char name20;int score4;float aver;stu2;main()int i,j;struct student temp;float sum=0.0;for(i=0;i2;i+)scanf(%d%s,&stui.num,stui.name);for(j=0;j4;j+)scanf(%d,&stui.scorej);sum+=stui.scorej;stu

25、i.aver=sum/4.0;for(i=0;i1;i+)for(j=0;j1-i;j+)if(stuj.averstuj+1.aver)temp=stuj;stuj=stuj+1;stuj+1=temp;for(i=0;i2;i+)printf(%6d%8s,stui.num,stui.name);for(j=0;j4;j+)printf(%3d,stui.scorej);printf(%6fn,stui.aver);30.求1!+2!+。+10!#include main()int i;long t,sum;t=1;sum=0;for(i=1;i=10;i+)t=t*i;sum=sum+t

26、;printf(%ld,sum);5.6 给一个百分制成绩,要求输出等级A、B、C、D、E。90分以上为A,8090分为B,7079分为C,60分以下为D。 解: 程序如下: #include main() float score; char grade; printf(请输入学生成绩:); scanf(%f,&score); while(score100|(score0) printf(n输入有误,请重新输入:); scanf(%f,&score); switch(int)(score/10) case 10: case 9: grade=A;break; case 8: grade=B;b

27、reak; case 7: grade=C;break; case 6: grade=D;bre ak; case 5: case 4: case 3: case 2: case 1: case 0: grade=E; printf(成绩是%5.1f,相应的等级是%c。n,score,grade); 说明:对输入的数据进行检查,如小于0或大于100,要求重新输入。(int)(score/10)的作用是将 (score/10) 的值进行强制类型转换,得到一个整型值。6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 main() long m,n,i=1,j,s; scanf(%ld,%l

28、d,&m,&n); for(;i=m&i=n) j=m; else j=n; for(;!(j%m=0&j%n=0);j+); printf(s=%ld,j=%ldn,s,j); 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #includestdio.h main() char c;int i=0,j=0,k=0,l=0; while(c=getchar()!=n) if(c=65&c=97&c=48&c=57) j+; else if(c=32) k+; else l+; printf(i=%d,j=%d,k=%d,l=%dn,i,j,k,l); 6.5 求k(

29、0-100)+k2(0-50)+1/k(0-10)的和 main() double i=1,j=1,k=1,s1=0,s2=0,s3=0,sum; for(;i=100;i+) s1=s1+i; for(;j=50;j+) s2=s2+j*j; for(;k=10;k+) s3=s3+1/k; sum=s1+s2+s3; printf(sum=%fn,sum); 6.7一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6itsfactorsare1、2、3 main() in

30、t m,i,j,s; for(m=6;m10000;m+) s=1; for(i=2;im;i+) if(m%i=0) s=s+i; if(m-s=0) printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%j=0) printf(%d ,j);printf(n); 或 main() int m,i,j,s; for(m=6;m1000;m+) s=m-1; for(i=2;im;i+) if(m%i=0) s=s-i; if(s=0) printf(%5d its fastors are 1 ,m);for(j=2;jm;j+) if(m%

31、j=0) printf(%d ,j);printf(n); 6.14打印以下图案 * * * * * * * * * * * * * * * * * * * * * * * * * #includemath.h main() int i,j,k; for(i=0;i=3;i+) for(j=0;j=2-i;j+) printf( ); for(k=0;k=2*i;k+) printf(*); printf(n); for(i=0;i=2;i+) for(j=0;j=i;j+) printf( ); for(k=0;k=4-2*i;k+) printf(*); printf(n); 7.3求一个

32、33矩阵对角线元素之和。 main() int i=0,j=0,a33,s1,s2; for(i=0;i3;i+) for(j=0;j3;j+) scanf(%d,&aij); s1=a00+a11+a22; s2=a02+a11+a20; printf(s1=%d,s2=%dn,s1,s2); 或 main() static int i,j,s1,s2,a33; for(i=1;i=3;i+) for(j=1;j=3;j+) scanf(%d,&aij); s1=a11+a22+a33; s2=a13+a22+a31; printf(%d,%dn,s1,s2); 7.6打印出以下杨辉三角形(

33、要求打印出10行)。 1 11 121 1331 14641 15101051 main() static int m,n,k,b1515; b01=1; for(m=1;m15;m+) for(n=1;n=m;n+) bmn=bm-1n-1+bm-1n; printf(%-5d,bmn);printf(n); 或 main() int i,j,n,k,a1010; static a1=1,1,1,1,1,1,1,1,1,1; a11=1; for(k=2,k11;k+) for(i=2;i=k;i+) for(j=2;j=i;j+) aij=ai-1j-1+ai-1j; for(k=1;k1

34、1;k+) for(i=1;i=k;i+) for(j=1;j=i;j+) printf(%d,aij); 7.13编一程序,将两个字符串连接起来,不要strcat函数。 main() int i,j;char str1100,str2100,str3201; gets(str1); gets(str2); for(i=0;str1i!=0;i+) str3i=str1i; for(j=0;str2j!=0;j+) str3j+i=str2j; printf(%sn%sn%sn,str1,str2,str3); 7.15 编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不用str

35、cpy函数。拷贝时,0也要拷贝过去,0后面的字符不拷贝。 解: #include stdio.h main() char s180,s280; int i; printf(Input s2:); scanf(%s,s2); for(i=0;istrlen(s2);i+) s1i=s2i; printf(s1:%sn,s1); 8.6写一函数,将两个字符串连接。 lianjie(a,b) char a100,b100; strcat(a,b); main() char str1100,str2100; gets(str1);gets(str2); lianjie(str1,str2); puts(str1); 8.7写一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1