《2022年《C语言程序设计教程》习题答案 .pdf》由会员分享,可在线阅读,更多相关《2022年《C语言程序设计教程》习题答案 .pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 【C 语言】 C 语言程序设计教程(第二版 )习题答案说明1. 本文所指的C 语言程序设计教程(第二版 )是李凤霞主编、北京理工大学出版社出版的,绿皮。2 第 1 章 程序设计基础知识一、单项选择题(第 23 页) 1-4.CBBC 5-8.DACA二、填空题 (第 24 页) 1.判断条件2.面向过程编程3.结构化4.程序5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10. 可读性11. 模块化12.对问题的分析和模块的划分三、应用题 (第 24 页) 2. 源程序:main() int i,j,k; /* i:公鸡数 ,j: 母鸡数 ,k: 小鸡数的1/3 */ print
2、f(cock hen chickn); for(i=1;i=20;i+) for(j=1;j=33;j+) for(k=1;k=33;k+) if (i+j+k*3=100&i*5+j*3+k=100) printf( %d %d %dn,i,j,k*3); 执行结果:cock hen chick 4 18 78 8 11 81 12 4 84 3. 现计算斐波那契数列的前20 项。递推法源程序:main() long a,b;int i; a=b=1; for(i=1;i=10;i+) /*要计算前30 项,把 10 改为 15。 */ printf(%8ld%8ld,a,b); a=a+b
3、;b=b+a; 递归法源程序:main() int i; for(i=0;i=19;i+) printf(%8d,fib(i); fib(int i) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - return(i1e-12); printf(%.10fn,x); 执行结果:1.3247179572 5. 源程序略。 (分子、分母均构成斐波那契数列) 结果是 32.66026079864 6.源程序:main() int a
4、,b,c,m; printf(Please input a,b and c:); scanf(%d %d %d,&a,&b,&c); if(ab)m=a;a=b;b=m; if(ac)m=a;a=c;c=m; if(bc)m=b;b=c;c=m; printf(%d %d %dn,a,b,c); 执行结果:Please input a,b and c:123 456 789 789 456 123 7.源程序:main() int a; scanf(%d,&a); printf(a%21=0?Yes:No); 执行结果:42 Yes 3 第 2 章 C 语言概述名师资料总结 - - -精品资料
5、欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - 一、单项选择题(第 34 页) 1-4.BDCB 5-8.AABC二、填空题 (第 35 页) 1.主 2.C 编译系统 3. 函数函数 4.输入输出5.头 6. .OBJ 7. 库函数8.文本三、应用题 (第 36 页) 5.sizeof 是关键字, stru 、_aoto 、file、m_i_n 、hello、ABC、SIN90 、x1234 、until、cos2x 、s_3 是标识符。 8. 源程序:m
6、ain() int a,b,c; scanf(%d %d,&a,&b); c=a;a=b;b=c; printf(%d %d,a,b); 执行结果:12 34 34 12 4 第 3 章 数据类型与运算规则一、单项选择题(第 75 页) 1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB二、填空题 (第 77 页) 1. 补码 2. (10-30810308) 3.int(整数 ) 4. 单目自右相左5.函数调用6.a 或 b 7.1 8.65,89三、应用题 (第 78 页) 1.10 9 2.执行结果:11 0
7、 0 12 1 5 第 4 章 顺序结构程序设计一、单项选择题(第 90 页) 1-5.DCDAD 6-10.BACBB名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - 二、填空题 (第 91 页) 1.一 ;2. 5.169000 3.(1)-2002500 (2)I=-200,j=2500 (3)i=-200 j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8
8、.scanf(%lf%lf%lf,&a,&b,&c); 9. 13 13.000000,13.000000 10.a=ac;c=ca;a=ac;(这种算法不破坏b 的值,也不用定义中间变量。)三、编程题 (第 92 页) 1.仿照教材第27 页例 2-1 。2.源程序:main() int h,m; scanf(%d:%d,&h,&m); printf(%dn,h*60+m); 执行结果:9:23 563 3.源程序 : main() int a=-10,0,15,34,i; for(i=0;ic&a+cb&b+ca) double s=(a+b+c)/2; printf(SS=%.10lfn
9、,sqrt(s*(s-a)*(s-b)*(s-c); else printf(Data error!); 执行结果:4 5 6 SS=9.9215674165 6.源程序:main() int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56; printf(a=%3d,b=%-4d,c=*%dnd=%gne=%6.2fnf=%-10.4f*n,a,b,c,d,e,f); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - -
10、- - - - - - 7.源程序:main() int a,b,c,m; scanf(%d %d %d,&a,&b,&c); m=a;a=b;b=c;c=m; printf(%d %d %dn,a,b,c); 执行结果:5 6 7 6 7 5 8.源程序:main() int a,b,c; scanf(%d %d %d,&a,&b,&c); printf(average of %d,%d and %d is %.2fn,a,b,c,(a+b+c)/3.); 执行结果:6 7 9 average of 6,7 and 9 is 7.33 9.不能。修改后的源程序如下:main() int a,
11、b,c,x,y; scanf(%d %d %d,&a,&b,&c); x=a*b;y=x*c; printf(a=%d,b=%d,c=%dn,a,b,c); printf(x=%d,y=%dn,x,y); 6 第 5 章 选择结构程序设计一、单项选择题(第 113 页) 1-4.DCBB 5-8.DABD二、填空题 (第 115 页) 1.非 0 0 2.k=0 3.if (abs(x)4) printf(%d,x);else printf(error!); 4.if(x=1&x=200&xb?bc?c:b:ac?c:a); 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
12、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - 2.源程序:main() unsigned long a; scanf(%ld,&a); for(;a;printf(%d,a%10),a/=10); 执行结果:12345 54321 3.(1) 源程序:main() int x,y; scanf(%d,&x); if (x-5&x=0&x=5&x10)y=x+1; printf(%dn,y); (2) 源程序:main() int x,y; scanf(%d,&x); if(x-5) if(x
13、=0) if(x=5)y=x+1; else y=x-1; else y=x; printf(%dn,y); (3) 源程序:main() int x,y; scanf(%d,&x); if(x=5)y=x+1; else if(x=0)y=x-1; else if(x-5)y=x; printf(%dn,y); (4) 源程序:main() int x,y; scanf(%d,&x); switch(x/5) case -1:if(x!=-5)y=x;break; case 0:y=x-1;break; case 1:y=x+1; printf(%dn,y); 4.本题为了避免考虑每月的天数
14、及闰年等问题,故采用面向对象的程序设计。现给出 Delphi 源程序和C+ Builder源程序。Delphi 源程序:procedure TForm1.Button1Click(Sender: TObject); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - begin edit3.Text:=format(%.0f天 ,strtodate(edit2.text) -strtodate(edit1.text); end;
15、procedure TForm1.FormCreate(Sender: TObject); begin Edit2.Text:=datetostr(now); button1click(form1) end; C+ Builder源程序:void _fastcall TForm1:Button1Click(TObject *Sender) Edit3-Text=IntToStr(StrToDate(Edit2-Text)-StrToDate(Edit1-Text)+天; void _fastcall TForm1:FormCreate(TObject *Sender) Edit2-Text=D
16、ateToStr(Now(); Button1Click(Form1); 执行结果: (运行于 Windows下) http:/ 5.源程序:main() unsigned a,b,c; printf( 请输入三个整数:); scanf(%d %d %d,&a,&b,&c); if(a&b&c&a=b&a=c)printf(构成等边三角形n); else if(a+bc&a+cb&b+ca) if(a=b|a=c|b=c)printf(构成等腰三角形n); else printf(构成一般三角形n); else printf(不能构成三角形n); 执行结果:请输入三个整数:5 6 5 构成等腰
17、三角形6.源程序:main() int x,y; scanf(%d,&x); if(x20)y=1; else switch(x/60) case 0:y=x/10;break; default:y=6; printf(x=%d,y=%dn,x,y); 7.源程序:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - main() unsigned m;float n; scanf(%d,&m); if(m600)n=0.06; e
18、lse n=(m/100+0.5)/100; printf(%d %.2f %.2fn,m,m*(1-n),m*n); 执行结果: 450 450 429.75 20.25 8. 2171 天 (起始日期和终止日期均算在内) 本题可利用第4 小题编好的程序进行计算。把起始日期和终止日期分别打入“ 生日 ” 和“ 今日 ”栏内,单击 “ 实足年龄 ” 按钮,将所得到的天数再加上1 天即可。9.源程序:#include math.h; main() unsigned long i; scanf(%ld,&i); printf(%ld %dn,i%10,(int)log10(i)+1); 执行结果:
19、99887 7 5 10. 源程序:main() unsigned long i;unsigned j10,m=0; scanf(%ld,&i); for(;i;)jm+=(i+2)%10;i/=10; for(;m;m-)i=i*10+jm-1; printf(%ldn,i); 执行结果: 6987 8109 (注:要加密的数值不能是0 或以 0 开头。如果要以0 开头需用字符串而不能是整数。) 7 第 6 章 循环结构程序设计一、单项选择题(第 142 页) 1-4.BCCB 5-8.CBCA二、填空题 (第 143 页) 1.原题可能有误。如无误,是死循环2.原题有误。如果把b=1 后面
20、的逗号改为分号,则结果是 8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.d=1.0 +k k=0 xamin名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - 三、编程题 (第 145 页) 1. 源程序:main() int i=1,sum=i; while(i101)sum+=i=-i-2;sum+=i=-i+2; printf(%dn,sum); 执行结果 : 51 2.源程序:m
21、ain() double p=0,n=0,f;int i; for(i=1;i0)p+=f; else n+=f; printf(%lf %lf %lfn,p,n,p+n); 3.源程序:main() unsigned a; scanf(%ld,&a); for (;a;printf(%d,a%10),a/=10); printf(b n); 执行结果:23456 6,5,4,3,2 4.源程序:main() unsigned long a,b,c,i; scanf(%ld%ld,&a,&b); c=a%1000; for(i=1;ib;i+)c=c*a%1000; if(c100)print
22、f(0); if(c10)printf(0); printf(%ldn,c); 执行结果:129 57 009 5.略6.原题提供的计算e 的公式有误 (前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + + 1/n! + (1) 源程序:main() double e=1,f=1;int n; for(n=1;n1e-4;n+)f/=n;e+=f; printf(e=%.4fn,e); 执行结果:e=2.7183 7.源程序:main() unsigned long a=0,b=1,c=0;int i,d; scanf(%d,&d); for (i=1;i=(d+
23、2)/3;i+) printf(%10ld%10ld%10ld,a,b,(a+=b+c,b+=c+a,c+=a+b); 本题还可以用递归算法(效率很低 ),源程序如下:unsigned long fun(int i) return i=3?i:fun(i-1)+fun(i-2)+fun(i-3); main() int i,d; scanf(%d,&d); for(i=1;i=d;i+) printf(%10ld,fun(i); 执行结果:15 1 2 3 6 11 20 37 68 125 230 423 778 1431 2632 4841 8.源程序:main() int i; for(
24、i=1010;i=9876;i+=2) if(i/100%11&i%100%11&i/10%100%11&i/1000!=i%10&i/1000!=i/10%10&i/100%10!=i%10)printf( %d,i); 执行结果:1024 1026 1028 1032 1034 1036 9874 9876 9.源程序:main() int i,j,k; printf(apple watermelon pearn); for(i=1;i=100;i+) for(j=1;j=10;j+) if(k=100-i-j)*2=400-i*4-j*40) printf(%4d%7d%9dn,i,j,
25、k); 执行结果:apple watermelon pear 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - - - - - - - 5 5 90 24 4 72 43 3 54 62 2 36 81 1 18 10. 源程序:#include stdio.h; #define N 4 /* N为阶数,可以改为其他正整数*/ main() int m=N*2,i,j; for(i=1;im;printf(n),i+) for(j=1;jm; put
26、char(N-abs(i-N)=abs(j+-N)? :*); 如果把 N 值改为 5,则执行结果如下: * * * * * * * * * 作者:宁西贯通2006-5-7 23:41 回复此发言- 8 说明注意:上面最后一题的输出结果应该是由星号组成的一个菱形,9 第 7 章 数 组一、单项选择题(第 192 页) 1-4.BBCC 5-8.AABA二、填空题 (第 194 页) 1.1 2 4 8 16 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 -
27、- - - - - - - - 32 64 128 256 512 2. aage+ i=18;ibj i3 j5 5. bj=aj0 bjajk 6.ak+=aj三、编程题 (第 196 页) 1.源程序:main() int a44,i,j,s=0; for(i=0;i4;i+) for(j=0;j4;j+) scanf(%d,&aij); for(i=0;i4;i+) for(j=0;j4;j+) if(i=j|i+j=3)s+=aij; printf(%dn,s); /* 注 :5 5 矩阵不能照此计算! */ 执行结果:1 2 3 4 5 6 7 8 9 10 11 12 13 14
28、 15 16 68 2. 源程序:main() int i,a36; a0=2; for(i=1;i=29;i+)ai=ai-1+2; for(;i=35;i+)ai=a(i-30)*5+2; for(i=0;i=35;i+)printf(%dt,ai); 执行结果:2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 6 16 26 36 46 56 3. 源程序:#include stdlib.h #include time.h main() int a30,i,m=0;
29、randomize(); for(i=0;i=29;i+) ai=rand(); if(mai)m=ai; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - printf(%dt,ai); for(i=0;i=29;i+)if(ai=m)ai=-1; printf(n-n); for(i=0;i=1)bn+=i&1; for(;n;)printf(%d,b-n); 执行结果:9876 10011010010100 本题也可以不
30、用数组。源程序如下:#include stdio.h main() int i,n; scanf(%d,&i); for(n=16;n;n-) asm ROL i,1 putchar(i&1|48); /* ROL是循环左移的汇编指令*/ 5. 源程序:#include stdlib.h #include time.h #define M 5 #define N 6 main() int aMN,i,j,tM; randomize(); /* 生成 M 行 N 列随机数 */ for(i=0;iM;printf(n),ti+=0) for(j=0;jN;j+) printf(%4d,aij=r
31、andom(50); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - /* 找出每行的最小数,tM 是第 M 行的最小数所在的列数*/ for(i=0;iM;i+) for(j=0;jaij)ti=j; /* 比较每个最小数在其所在的列上是否也是最小*/ for(j=0;jM;j+) for(i=0;iaitj) tj=-1;break; printf(-n); /* 输出在行和列上均为最小的数*/ for(i=0;iM;i
32、+) if(ti!=-1) printf(a%d,%d=%dn,i,ti,aiti); 执行结果: 13 19 13 20 0 1 20 41 6 16 35 30 3 5 37 8 23 15 6 36 24 29 18 1 1 5 28 21 46 34 - a0,4=0 a1,2=6 a3,5=1 a4,0=1 6. 源程序:#include stdlib.h #include time.h #define M 5 #define N 7 main() int aMN,i,j,t=0; randomize(); for(i=0;iM;i+) aiN-1=0; for(j=0;jN-1;j
33、+) printf(%4d,aij=random(91)+10); aiN-1+=aij; printf(%4dn,aiN-1); for(i=1;iatN-1)t=i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - if(t)for(j=0;jN;j+) i=a0j;a0j=atj;atj=i; printf(-n); for(i=0;iM;printf(n),i+) 10 第 7 章 数 组for(j=0;jN;j+)
34、 printf(%4d,aij); 执行结果: 89 17 32 95 35 20 288 39 48 22 27 73 22 231 51 87 39 71 84 46 378 84 94 97 77 27 26 405 69 50 56 89 37 46 347 - 84 94 97 77 27 26 405 39 48 22 27 73 22 231 51 87 39 71 84 46 378 89 17 32 95 35 20 288 69 50 56 89 37 46 347 7. 源程序:#include stdlib.h #include time.h #define M 5 #
35、define N 6 main() int aMN,i,j; struct dataint value,x,y;max,min; max.value=0;min.value=100; randomize(); for(i=0;iM;printf(n),i+) for(j=0;jN;j+) printf(%4d,aij=random(100)+1); if(max.valueaij) min.value=aij;min.x=i;min.y=j; printf(-n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
36、- - - - - - - 第 15 页,共 19 页 - - - - - - - - - i=a0N-1;a0N-1=max.value;amax.xmax.y=i; i=aM-10;aM-10=min.value;amin.xmin.y=i; for(i=0;iM;printf(n),i+) for(j=0;jN;j+) printf(%4d,aij); 执行结果: 51 53 74 65 30 40 30 26 50 6 61 27 47 16 54 58 76 19 57 74 44 92 71 48 73 57 60 32 73 67 - 51 53 74 65 30 92 30 2
37、6 50 73 61 27 47 16 54 58 76 19 57 74 44 40 71 48 6 57 60 32 73 67 9. 源程序:main() char s255;int i,j,b=1; printf(Input a string:); scanf(%s,s); i=strlen(s); for(j=1;j4):); gets(s); l=strlen(s); for(i=0;il;i+) if(smaxsi)min=i; t=s1;s1=smax;smax=t;if(min=1)min=max; t=sl-2;sl-2=smin;smin=t; printf(%sn,s)
38、; 执行结果:Input a string(length4):C+Builder Cu+Beild+r 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - 11. 源程序:main() char m1310=*,January,February,March, April,May,June,July,August,September, October,November,December; int i,j,k,a,s,n; prin
39、tf(Please input an integer(100.999):); scanf(%d,&n); printf(%d:%d+%d+%d=%d, %d%13=%d, %sn, n,i,j,k,s,s,a,ma=(s=(i=n/100)+(j=n/10%10)+(k=n%10)%13); 执行结果:Please input an integer(100.999):539 539:5+3+9=17, 17%13=4, April 11 第 8 章 函 数一、单项选择题(第 241 页) 1-5.BCCAA 6-10.CCDDD 11-15.ACACB二、填空题 (第 243 页) 1.看不出
40、原题的意图。因为要计算1n 的累加和, n 应是一个 1的正整数。可是题目中却出现了 n=0 的情况。除非另加规定当n=0 时 1n 的累加和为0,或者把原题中的计算式改为计算 0n 的累加和。据此猜测,原题应填为:return(0) return(n+sum(n-1) 根据题意,如下程序较为合理:int sum(int n) if(n 0)return(-1); /* -1是出错标志*/ else if(n=1)return(1); else return(n+sum(n-1); 2. return(1) return(n*facto(n-1)三、编程题 (第 244 页) 3.源程序:ma
41、in() int i,a,b,c; for(i=100;i999;i+) if(a=i/100)*a*a+(b=i/10%10)*b*b+(c=i%10)*c*c=i) printf(%dt,i); 执行结果:153 370 371 407 8.源程序 (非递归算法 ):#define P 13 /* P可以改为其他正整数*/ main() int aP,r,c; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - for(r=
42、0;r=1;ac-+=ac-1); printf(%*d,(P-r)*3+1,a0); for(c=1;c3)printOCT(i); putchar(n&7)+48); main() unsigned long i; scanf(%ld,&i); printOCT(i); 执行结果:1234567890 11145401322 本题也可以不用递归算法,源程序请参考第7 章第三题4。12 回复:【 C 语言】 C 语言程序设计教程(第二版 )习题答案但是不同时间印刷的版本课后题不太一样呢,象我们的是1999 年 12 月第 2 版, 2005 年12 月第 69 次印刷的。没有选择填空, 应用
43、题和楼主不知道有多少相同的,因为看不到原题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - 这个比较麻烦呢。作者: 210.77.204.* 2006-5-9 18:38 回复此发言- 13 回复:【 C 语言】 C 语言程序设计教程(第二版 )习题答案你对照一下主编和出版社,看看对吗?(见说明的第一条。) 我不是说叫你有问题另发帖子吗?14 第 9 章 指 针一、单项选择题(第 276 页) 1-5.DCDAC 6-10.
44、CCABC 11-16.AABBB 16-20.DCDBD二、填空题 (第 278 页) 1.int * *z 2.*p+ 3.0 + 4.q=p+1 qmax *qmin三、编程题 (第 280 页) 7.源程序:main() int i=0;char c20; doscanf(%s,&c);i+; while(strcmp(c,stop); printf(%dn,i); 执行结果:This car ran form Nanyang to Luoyang without a stop 10 9.源程序:main() char s255,c255=0;int i; gets(s); for(i=0;si;csi+); for(i=0;i255;i+) if(ci)printf(%c=%dt,i,ci); 执行结果:abcedabcdcd a=2 b=2 c=3 d=3 e=1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -