1、C语言程序设计习题参考答案第一章 C语言概述参考答案一、1C 2二、1、函数 2、位 3、分号 4、main 5、 6、换行 7、注释 8、函数首部、函数体9、main 10、编辑、编译、连接、运行 三、1错错对对对对错8对四、1、#include /*包含头文件,为了使用printf和scanf语句,注意句末无分号*/void main() printf(“* * * * * * * * * * * n”); /*n的作用相当于回车*/ printf(“ I am a student.n”); printf(“* * * * * * * * * * * n”);2、#include void
2、 main() int a,b; printf(“Please input a,b:n”); scanf(“%d,%d”,&a,&b); /*注意输入两个数之间用逗号分隔*/ if(ab) printf(“%d”,a); else printf(“%d”,b);3、#include void main() int a,b,c,max; printf(“Please input a,b,c:n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a;if(ab) max=b; /*max用于保存a,b中比较大的数*/if(maxc) max=c; /*将a,b中较大的数再和c比
3、较* /printf(“The largest number is %d”,max);第二章 数据与运算参考答案一、1 21二、1、8 2、28 3、5 4、0 5、double 6、8 ,10 7、12 8、D 9、52 10、25,21,37 11、48 12、20 200.000000 14、9,11,9,10 15、11.5013、aa口bb口口口cc口口口口口口abc A口N三、1.错 2.对 对错错对错错错对四、1、1)第1步:(int)(x+y)=(int)(7.2)=7第2步:a%3*7%2/4=7%3*7%2/4=1*7%2/4=1/4=0第3步:x+0=x=2.5(计算机显
4、示为2.500000)1、2)第1步:(float)(a+b)/2=(float)(2+3)/2=(float)(5)/2=5.0/2=2.5第2步:(int)x%(int)y=(int)(3.5)%(int)(2.5)=3%2=1第3步:2.5+1=3.5(计算机显示为3.500000)2、1)(a=a+a=12+12=24) 2、2)(a=a-2=12-2=10) 2、3)(a=a*(2+3)=12*5=60)2、4) (a=a/(a+a)=12/24=0,注意a是整型) 2、5) 已知n的值等于5 a=0 2、6)(从右向左解开:a=a*a=144;a=a-a=0;a=a+a=0)五、编
5、程题1、参考答案:#include void main()char c1=C,c2=h,c3=i,c4=n,c5=a;c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“password is %c%c%c%c%cn”,c1,c2,c3,c4,c5);运行结果:password is Glmre也可以用循环和数组:#include void main() char c=“China”; printf(“password is “);for(int i=0;i=4,i+)printf(“%c”,ci+=4); printf(“n”);2、参考答案:#i
6、nclude void main() char c1=97,c2=98; printf(“%d, %dn”,c1,c2); printf(“%c,%cn”,c1,c2);3、参考答案: #include #include void main() double a, b, c, total, average, square, squareroot; printf(请输入三个双精度实数:); scanf(%lf%lf%lf, &a, &b, &c); total = a + b + c; average = total/3.0; square = a*a + b*b + c*c; squarero
7、ot = sqrt(square); printf(三个数的和=%-15.3f,三个数的平均值=%-15.3fn, total, average); printf(三个数的平方和x=%.3f,x的平方根=%.3fn, square, squareroot); 运行结果: 请输入三个双精度实数:1.23 4.56 7.89 三个数的和=13.680 ,三个数的平均值=4.560 三个数的平方和x=84.559,x的平方根=9.1964、 参考答案: #include #include void main() float a, b, c, k, area; printf(请输入三角形三条边的边长:
8、); scanf(%f%f%f, &a, &b, &c); /*由键盘输入三角形三边边长*/ if (a+b = c) | (a+c = b) | (b+c = a) printf(您输入的三条边无法构成三角形。n); exit(1); /* 结束程序 */ k = (a+b+c)/2; area = sqrt( k*(k-a)*(k-b)*(k-c) ); /* 函数sqrt(x)是求 x 的平方根 */ printf(该三角形的面积是%6.2fn, area); 运行结果: 请输入三角形三条边的边长:3.4 5.6 7.4 该三角形的面积是 9.055、 参考答案: #include vo
9、id main() long a1, a2, a3, a4; printf(请输入两个整数:); scanf(%ld%ld, &a1, &a2); a3 = a1/a2; a4 = a1%a2; printf(两数进行整数除的商是%ld, 余数是%ldn, a3, a4); 运行结果:请输入两个整数: 654321 789两数进行整数除的商是829, 余数是2406、参考答案: 要求得到某数(例如f=1.875)的第二位小数位,先把f乘以100(f*100),值为187.5,然后取f*100的整数部分(int)(f*100),值为187,最后由(int)(f*100)%10得到其个位数程序如下
10、: #include void main() int a, b, c; float f; printf(请输入两个整数:); scanf(%d%d, &a, &b); f = 1.0*a/b ; c = (int)(f*100)%10; printf(两数进行实数除,商是%f, 商的第二位小数位是%dn, f, c); 运行结果:请输入两个整数: 15 8两数进行实数除,商是1.875000, 商的第二位小数位是77、参考答案: #include void main() unsigned u, high4, low4; printf(请输入一个无符号整数:); scanf(%u, &u); l
11、ow4 = (u & 0xf); /* u的低四位保留原值,其余位置0 */ high4 = (u & 0xf000)12; /* u的高四位保留原值,其余位置0,并右移12位 */ printf(%u 的十六进制是%xn , u, u); printf(十六进制表示%u的低四位是%x,高四位是%xn, u, low4, high4); 运行结果: 请输入一个无符号整数:54332 54332 的十六进制是d43c 十六进制表示54332的低四位是c,高四位是d8、参考答案: #include void main() char c1, c2, t; printf(请输入两个半角的小写英文字母:
12、); c1=getchar(); c2=getchar(); c1 -= 32; c2 -= a-A; /*与32等价*/ t = c1; c1 = c2; c2 = t; printf(%c%cn, c1, c2); 运行结果: 请输入两个半角的小写英文字母:db BD9、 参考答案: #include void main() int k; int hour, minute, second; printf(请输入秒数:); scanf(%d, &k); hour = k/3600; k %= 3600; minute = k/60; second = k%60; printf(%d小时%d分
13、钟%d秒。n, hour, minute, second); 运行结果:请输入秒数: 72782小时1分钟18秒。10、 参考答案: #include void main() float a, b, c, d, real, imag; printf(请输入第一个数的实部和虚部:); scanf(%f%f, &a, &b); printf(请输入第二个数的实部和虚部:); scanf(%f%f, &c, &d); real = a*c-b*d; imag = a*d+b*c; printf(两个复数积的实部和虚部分别是%f, %fn, real, imag); 运行结果:请输入第一个数的实部和虚
14、部:1.1 2.2请输入第二个数的实部和虚部:3.3 4.4 两个复数积的实部和虚部分别是-6.050000, 12.100000第3章 C程序的基本控制结构参考答案一、单选题:1、B 2、D 3、A 4、B 5、B 6、A 7、B 8、D 9、C 10、C 11、C 12、B 13、C 14、D 15、D 16、C 17、B 18、B二、填空题:1、6.6 2、Z 3、5,6,A,B 4、1 F 5、22 6、x=-x 7、9 8、month 9、!10、27 11、3,3,3 12、15151513、0 14、D 15、ch=ch+32 16、sum= sum+ grade 17、int
15、k1=0,k2=0,k3=018、c=a&c=z 19、x=(i-1)*4+j 三、改错题1、错误语句:if (year%400!=0)正确语句:if (year%400=0)2、错误语句:scanf(“%d”,x); 正确语句:scanf(“%d”,&x);3、错误语句:max=(tempc)?temp:c ;4、错误语句:if( x%5= =0|x%7= =0 ) 正确语句:if( x%5= =0&x%7= =0 ) 5、错误语句:int i,num; 正确语句:int i,num=0;6、错误语句:while (fabs(t)10-6) 正确语句:while (fabs(t)1e-6)7
16、、错误语句:int f1,f2; 正确语句:long int f1,f2;四、编程题:1、从键盘输入一个圆的半径,输出圆的面积。输出时要有文字说明,取小数点后2位。#includevoid main() float r,s; scanf(“%f”,&r); s=3.14*r*r; printf(“s=%.2f”,s);2、输入一个整数,判断是奇数还是偶数。#includevoid main()int i; scanf (“%d”,&i); if (i%2= =0) printf(“%d 是一个偶数 ”,i); elseprintf(“%d 是一个奇数 ”,i);3、从键盘输入一个三角形的边长,
17、输出三角形面积,取2位小数。当三角形不成立时输出“它不是一个三角形”。#include#includevoid main() float a,b,c,s,area; scanf (“%f,%f,%f”,&a,&b,&c); if (a+bc & b+ca & c+ab) s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%.2fn”,area);else printf(“它不是一个三角形”);4、从键盘输入一个字符,判断其是否是大写字母,如果是大写字母,则转换为小写字母,否则不转换。#includevoid main()
18、char c; c=getchar( ); if ( c=A&c=Z) c=c+32; printf(“%c”,c); 5、从键盘输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。其中A对应的是90分(含90分)以上的成绩,B对应的是8089分的成绩,C对应的是7079的成绩分,D对应的是6069分的成绩,E对应的是小于60分的成绩。如果输入的数值小于0或大于100要有“输入成绩错误”的信息显示。#includevoid main() int score,c; scanf (“%d”,&score); c=score/10; switch (c) case 0: case 1: case
19、 2: case 3: case 4: case 5: printf(“E”);break; case 6: printf(“D”); break; case 7: printf(“C”); break; case 8: printf(“B”); break; case 9: case 10: printf(“A”); break; default: printf(“error”);6、编写程序,求123200。 #includevoid main( )int i,s;i=1;s=1;for(i=1;i=200;i+)s=s+i; printf(1+2+3+200=%dn,s);7、有一分数序
20、列:2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列的前20项之和。#include void main()int i,temp;float f2=2,f1=1,sum=0;for(i=1;i=20;i+) sum=sum+f2/f1; temp=f2;f2=f2+f1;f1=temp; printf(sum=%9.6fn,sum);8、求1!+2!+3!+4!+20!#include void main()int i;float sum=0,f=1;for(i=1;i=20;i+) f= f*i; sum= sum+f; printf(sum=%en,sum);9、用牛顿迭
21、代法求方程4x3-8x2+6x-12=0在1.5附近的根。#include#includevoid main()float x=1.5,x0,y,f1;do x0=x; y=(4*x0-8)*x0+6)*x0-12; f1=(12*x0-16)*x0+6; x=x0-y/f1; while(fabs(x-x0)=1e-6);printf(x=%10.2fn,x); 10、打印出以下图案。 * * * * * * *#include void main( )int i,j,k;for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( ); for(k=1;k=2*i-1
22、;k+) printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=i;j+) printf( ); for(k=1;kstring) stringstr2;正确语句:if (strcmp(str2,string)0) strcpy(string,str2);3、错误语句:char c5=C,h ,i,n,a ;正确语句:char c6=C,h ,i,n,a ;或char c =“China”;4、错误语句:int a3=3*0 ; 正确语句:int a4;5、错误语句:scanf(“%d%d%d”,&a);正确语句:for (i=0; i3; i+) s
23、canf(“%d”,&ai); 或scanf(“%d%d%d”, &a0, &a1, &a2);四、编程题1、用数组来处理,求解Fibonacci数列前40项:1,1,2,3,5,8,13,21。 #includevoid main() int i; int t40=1,1; for(i=2;i40;i+) ti=ti-2+ti-1; for(i=0;i40;i+) if(i%5=0) printf(n); printf(%15d,ti); 2、用选择法对20个整数排序(由大到小)。#includevoid main()int i,j,min,t,x20;for(i=0;i20;i+) sca
24、nf(%d,&xi);for(i=0;i19;i+) min=i; for(j=i+1;jxj)min=j; t=xi; xi=xmin; xmin=t; for(i=0;i20;i+) printf(%6d,xi);3、有一个35的矩阵,要求编程序求出其中值最小的那个元素的值,以及其所在的行号和列号。#includevoid main()int i,j,s=0,t=0,min; int a35;for (i=0;i3;i+) for (j=0;j5;j+)scanf(%d, &aij); min=a00; for (i=0;i3;i+) for (j=0;j5;j+) if (aijmin)
25、 min=aij; s=i; t=j; printf(min=%d,s=%d,t=%dn,min,s,t);4、编一程序,将两个字符串连接起来,不要用strcat函数。#includevoid main()char str180,str220;int i=0,j=0;scanf(%s,str1);scanf(%s,str2); printf(str1:%sn,str1); printf(str2:%sn,str2);while(str1i!=0)i+;while(str2j!=0)str1i=str2j; i+; j+;str1i=0; printf(%sn,str1);5、求一个55矩阵对角线元素之和(左上至右下之对角线)。#includevoid main( )float a55,sum=0;int i,j;for(i=0;i5;i+) for(j=0;j5;j+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1