《C语言程序设计(第3版)》课后答案.pdf

说明:所有答案均在VC++6.0环境下调试运行通过项目一 参考答案 一、单项选择题1.C 2.D 3.C 4.C 5.A 6.C 二、填空题1. main2. .c3. 编译或汇编4. 录入并编辑5. 语法、逻辑 三、应用题 1. C语言的主要特点如下:(1)C语言上一种模块化的程序设计语言。(2)C语言简洁,结构紧凑,使用方便灵活。(3)运算极其丰富,数据处理能力强。(4)可移植性好。(5)可以直接调用系统功能,实现对硬件的操作。 2. 高级语言:高级语言要是相对于低级语言而言的,它更类似人类的自然语言, 基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。 低级语言:低级语言是指机器语言和汇编语言,低级语言是面向机器的语言, 和具体机器的指令系统密切相关。 3. /* 编写一个简单的C语音程序完成如下功能,即在屏幕上显示*/#include stdio.hvoid main(){printf(**************************\n);printf(M E N U\n);printf(**************************\n);} 4. 34 四、实训题2.(3) Sum is 792.(4) 3.0, 4.0, 5.0,The area is 6.02.(5) /* 编写一个程序,求56和23的差 */void main(){int a 56,b 23,c;c a-b;printf(%d-%d %d\n,a,b,c);}2.(6) /*华氏温度与摄氏温度的转换*/void main(){float hua,she;printf(请输入华氏温度:);scanf(%f,hua);she (hua-32)/1.8;printf(对应的摄氏温度为:%f\n,she);}项目二 参考答案 三、单项选择题1.D 2.B 3.A 4.C 5.C 6.A 7.A 8.D 9.C 10.C 四、填空题6. 287. sinx*sinx*(a+b)/(a-b)8. -19. 6.6 三、应用题 1. 答:字符常量和字符串常量的区别,从以下3方面比较:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号。(2)长度不同:(3)存储要求不同: 2. (1) a 24 (2) a 10 (3) a 60 (4) a 0 (5) a 0 (6) a 0 3. 9,11,9,10 4. /*从键盘上输入2个int型数据,比较其大小,并输出其中较小的数*/ void main() {int x,y,min;printf(请输入两个整数:);scanf(%d %d,x,y);if(xy)min y;elsemin x;printf(较小的数是%d\n,min); } 5. /* 编程实现输入km数,输出其英里数。*/ #include stdio.h void main() {float yingli,gongli;printf(请输入公里数:);scanf(%f,gongli);yingli gongli/1.60934;printf(对应的英里数为%f\n,yingli); } 6. /*从键盘输入任意一个float型数据,然后将该数保留两位小数输出*/ void main() {float f;printf(请键盘输入一个float型数据:);scanf(%f,f);printf(保留两位小数位:%.2f\n,f); } 7./*从键盘上输入任意一个小写字母,然后将该字符转换为对应大写字母输出, 并同时输出该字母的ASCII码值。*/ void main() {char ch;printf(请输入一个小写字母:);scanf(%c,ch);printf(对应的大写字母:%c, ASCII值为:%d\n,ch-32,ch); } 四、实训题2.(1)/*编程:利用sizeof()函数,计算C语言各种数据类型在VC6.0开发 环境下所占用的存储空间大小。*/#include stdio.hvoid main(){int length;length sizeof(float);printf(VC6.0环境下float型数据的存储空间大小为:%d\n,length);length sizeof(int);printf(VC6.0环境下int型数据的存储空间大小为:%d\n,length);length sizeof(char);printf(VC6.0环境下char 型数据的存储空间大小为:%d\n,length);}2.(2)/* 编程:利用函数sqrt (),求从键盘输入的任意正整数的平方根。*/#include stdio.h#include math.hvoid main(){int n;double fg;printf(请输入一个正整数:);scanf(%d,n);fg sqrt(n);printf(%d的平方根为%lf\n,n,fg);}2.(3) /*输入下列源代码,改正其中存在的错误,使其调试通过,记录正 常运行结果。*/#include stdio.hvoid main(){int y,m,d;printf(请输入三个整数:);scanf(%d,%d,%d,y,m,d);printf(这三个整数是:%d,%d,%d\n,y,m,d);}项目三 参考答案 五、单项选择题1.D 2.A 3.①B②A4.A 5.C 6.C 7.D 六、填空题10.100,144,6411.65,101,41,A12.3.141593,3.1416,3.14213.31.42,3.14e+001 (表示空格)14.c K15.a 1,b ,c 2 (表示空格)16.a 12,b 34517.c A18.n 64 三、编程题 1. /*编写程序从键盘输入圆锥体的半径r和高度h,计算其体积。*/ #include stdio.h void main() {float r,h,v;printf(请输入圆锥体的半径和高度:);scanf(%f%f,r,h);v 3.1415*r*r/3;printf(v %f\n,v); } 2. /*编写程序,输入一个字符,输出其对应的ASCII码。*/ #include stdio.h void main() {char ch;printf(请输入一个字母:);scanf(%c,ch);printf(ASCII码为%d\n,ch); } 3./*编写程序,输入一个三位整数,把三个数字逆序组成一个新数,再输出。例如输入369, 输出963。*/ #include stdio.h void main() {int n,g,s,b;printf(请输入一个三位整数:);scanf(%d,n);b n/100; /*分离出百位*/s n0/10;g n0;n g*100+s*10+b;/*重新组合成新数字*/printf(新组合的数字为:%d\n,n); }项目四 参考答案 七、选择题1.B 2.D 3.B 4.B 5.A 6.D 7.C 8.B 9.BEF 10. B 11.D 12.D13.A 八、填空题19.720. ||21.0.500000 三、编程题 1. /*编程,计算下列分段函数值。*/ 注意:此题书本上印刷出错,正确的表达式应该如下:2.5 ∗x x 1 y = x −1 ≤ x ≤ 13 ∗x (x − 1) #include stdio.h void main() {double x,y;printf(请输入自变量x 的值:);scanf(%lf,x);if(x1)y 2.5*x;else if(x -1 x 1)y x;elsey 3*x;printf(y %lf\n,y); } 2. /*编程,将一个百分制转换成等级制成绩。*/ void main() { int score;printf(请输入一个百分制成绩:);scanf(%d,score);if(score0 ||score100)printf(输入的成绩不合理,重新输入\n);else{switch(score/10){case 10:case 9: printf(%d分 等级为A级\n,score);break;case 8: printf(%d分 等级为B级\n,score);break;case 7: printf(%d分 等级为C级\n,score);break;case 6: printf(%d分 等级为D级\n,score);break;default:printf(%d分 等级为E级\n,score);break;}} } 3. /*编程,输入三边的长度,并判断这三边能否构成三角形。*/ #include stdio.h void main() {float a,b,c;printf(请输入三条边长:);scanf(%f%f%f,a,b,c);if(a+bc a+cb b+ca)printf(%f,%f,%f三边可以构成三角形\n,a,b,c);elseprintf(%f,%f,%f三边无法构成三角形\n,a,b,c); }项目五 参考答案 九、单项选择题1.C 2.D 3. C 4.B 5.C 6.C 7.D 8.A 9.C 10.B 11.C 12. D13. D 14. B 15.B 16.B 17.B 18.C 19.D 二、填空题22.5023.b i+124.4125.DEF26.sum 1627.i 100 j%3! 0 三、实训题 1./*输入两个正整数,求其中最大公约数和最小公倍数。*/ /*利用辗转相除法求最大公约数,两数乘积除以最大公约数即为最小公倍数*/ #include stdio.h void main() {int a,b,t,u,v,w,gys,gbs;printf(请输入两个正整数:);scanf(%d%d,a,b);if(ab){t a;a b;b t;}u a;v b;do{ w u%v;u v;v w;}while(v! 0);gys u;gbs (a*b)/gys;printf(最大公约数 %d\n最小公倍数 %d\n,gys,gbs); } 2./*输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。 */ #include stdio.h void main() {char ch;int letters 0,space 0,digits 0,others 0; /*letters为字母个数,digits为数字个数,space为空格个数,others为其他 字符个数*/printf(please input a line characters:\n);ch getchar();while(ch! \n){if(ch a ch z ||ch A ch Z) letters++;else if(ch 0 ch 9) digits++;else if (ch ) space++;else others++;ch getchar();}printf(letters:%d\n,letters);printf(space:%d\n,space);printf(digits:%d\n,digits);printf(others:%d\n,others); } 修改后 /*输入一行字符,分别统计出其中的大、小写字母、空格、数字和其他字符的个数。*/ #include stdio.h void main() {char ch;int uletters 0,lletters 0,space 0,digits 0,others 0;/*uletters为大写字母个数,lletters为小写字母个数,digits为数字个 数,space为空格个数,others为其他字符个数*/printf(please input a line characters:\n);ch getchar();while(ch! \n){if(ch a ch z ) lletters++;else if(ch A ch Z) uletters++;else if(ch 0 ch 9) digits++;else if (ch ) space++;else others++;ch getchar();}printf(uletters:%d\n,uletters);printf(lletters:%d\n,lletters);printf(space:%d\n,space);printf(digits:%d\n,digits);printf(others:%d\n,others); } 3. /*利用单循环结构1!+2!+3!+......+10!*/ #include stdio.h void main() {int i;long s 0,x 1;for(i 1;i 10;i++){x x*i;s s+x;}printf(s %ld\n,s); } /*利用双重循环结构1!+2!+3!+......+10!*/ #include stdio.h void main() {int i,j;long s 0,x 1;for(i 1;i 10;i++){x 1;for(j 1;j i;j++)x x*j;s s+x;}printf(s %ld\n,s); }项目六 参考答案 十、单项选择题1.C 2.B 3. D 4.A 5.A 6.C 7.C 8.A 9.D 10.A 11.D 二、填空题28.x 2,y 3a 1,b 229.1830.2.80000031.16.00000032.733. 81012 (表示空格)34.n 100n 80n 6035.a 5a*a 25a*a*a 8 三、实训题 1. /*编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 */ int sushu(int n) {int i,t;for(i 2;in;i++)if (n%i 0)break;if(in)t 0;elset 1;return t; } void main() { int n,t;printf(please input a int number:);scanf(%d,n);t sushu(n);if (t 1)printf(%d是素数\n,n);elseprintf(%d是非素数\n,n); }111 2. /*编写程序计算s1  */2!3!n! long fun(int n) {long p 1;int i;for(i 1;i n;i++)p p*i;return p; } void main() {int n,i;double s 0;printf(please input a int number: );scanf(%d,n);for(i 1;i n;i++)s s+1.0/fun(i);printf(%.5lf\n,s); } 3. /*用递归法将一个整数转换成字符串。*/ void change(int n) {if (n/10! 0)change(n/10);printf(%c,n+48); /*字符'0'的ASCII是48*/ } void main() {int n;printf(please input a int number: );scanf(%d,n);change(n);printf(\n); } 4. 1 不用全局变量 /*求两个整数的最大公约数和最小公倍数。用一个函数求最大公约数;用另一函 数根据求出的最大公约数求最小公倍数。*/ #include stdio.h int findgys(int m,int n) /*求最大公约数*/ {int v;while(n){项目七 参考答案 十一、 单项选择题1.B 2.B 3. C 4.C 5.C 6.B 7.C 8.D 9.A 10.C 二、填空题36.6037.ABCDCD 38.无结果 (注意:for语句最右边再加一个 ")"号)for(i 0;i;printf(%d\n,n

));39.440.065041.1042.3, 5, 743.1844.645.18 (注意:原题需修改标红处:)void main(){ int a

{{1,2},{3,4},{5,6}},i,j,s 0;for(i 1;i3;i++)for(j 0;j3;j++)s+ a

;printf(%d\n,s);}46.EFGHIJKL 三、实训题 1. /*编写一个单科学生成绩处理程序*/ #define N 16 #include stdio.h void main() {int acount 0,bcount 0,ccount 0,dcount 0,ecount 0;int s 0; float ave;int score

,i; printf(please input %d students score\n,N); for(i 0;iN;i++){scanf(%d,score

);s+ score

;switch(score

/10){ case 10:case 9: acount++;break;case 8:bcount++;break;case 7:ccount++;break;case 6:dcount++;break;default:ecount++;}}ave (float)s/N;printf(ave %.2f\n,ave);printf(A grade is %d ,%.2f%%\n,acount,100*acount*1.0/N);printf(B grade is %d ,%.2f%%\n,bcount,100*bcount*1.0/N);printf(C grade is %d ,%.2f%%\n,ccount,100*ccount*1.0/N);printf(D grade is %d ,%.2f%%\n,dcount,100*dcount*1.0/N);printf(E grade is %d ,%.2f%%\n,ecount,100*ecount*1.0/N);} 说明:成绩等级的划分可以参考课本项目四实训题。项目八 参考答案 十二、 单项选择题1.D 2.A 3. C 二、填空题47. 20048. #include "math.h" 三、实训题 1. (1) /*用宏定义编程实现,输入三个整数,按由小到大顺序输出。*/ #define swap(a, b) { t a; a b; b t; } #include stdio.h void main() {int a,b,c,t;printf(please input three int number: \n);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\n,a,b,c); } 1.(2) /*利用函数实现从三个整数中找出最大数。*/ #include stdio.h int findmax(int a,int b) {int max;if(ab)max a;elsemax b;return max; } void main() {int a,b,c,max;printf(please input three int number:\n);scanf(%d%d%d,a,b,c); max findmax(findmax(a,b),c);printf(max %d\n,max); } 修改后 /*利用带参数的宏实现从三个整数中找出最大数。*/ #define FMAX(a,b) (a)(b)?(a):(b) #include stdio.h void main() {int a,b,c,max;printf(please input three int number:\n);scanf(%d%d%d,a,b,c); max FMAX(FMAX(a,b),c);printf(max %d\n,max); }项目九 参考答案 十三、 选择题 1.A 2.D 3.ACD BEH 4.AE BEDFGI 5.CG 6.D 7.A 8.C 9.C1 2 1 2 10.D 说明:第7小题印刷有误,最后两行正确格式: 十四、 填

相关推荐
guygg884 小时前
贝叶斯非局部均值降噪算法C语言实现
c语言·算法·均值算法
WYH2874 小时前
C语言结构体变量和结构体指针详解:定义、访问、传参与易错点总结
c语言·开发语言·算法
我不是懒洋洋4 小时前
从零实现Transformer:从注意力机制到ChatGPT
c语言·数据结构·c++·经验分享
枕星而眠5 小时前
数据结构哈希表(散列表)超详细总结
c语言·数据结构·后端·散列表
ゆづき5 小时前
假如编程语言们有外号
java·c语言·c++·python·学习·c#·生活
Dlrb121114 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
kkeeper~14 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
三品吉他手会点灯16 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
♛识尔如昼♛19 小时前
C 进阶(9) - 信号
c语言·信号