




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 【C语言】C语言程序设计教程(第二版)习题答案 说 明 1. 本文所指的C语言程序设计教程(第二版)是李凤霞主编、北京理 工大学出版社出版的,绿皮。 2 第1章 程序设计基础知识 一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 6.基本功能操作和控制结构7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分 三、应用题(第24页) 2.源程序: main() int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf(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;b=b+a; 递归法 源程序: main() int i; for(i=0;i=19;i+) printf(%8d,fib(i); fib(int i) return(i1e-12); printf(%.10fn,x); 执行结果: 1.3247179572 5.源程序略。(分子、分母均构成斐波那契数列) 结果是32.66026079864 6.源程序: main() int a,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语言概述 一、单项选择题(第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.源程序: main() 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-23.ADD24. D A 25-26.DA 二、填空题(第71页) 1.补码 2.(10-30810308) 3.int(整数) 4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89 三、应用题(第78页) 1.10 9 2.执行结果: 11 0 0 12 365 第4章 顺序结构程序设计 一、单项选择题(第90页) 1-5.DCDAD 6-10.BACBB 二、填空题(第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.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,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); 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,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); 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=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.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。 现给出Delphi源程序和C+ Builder源程序。 Delphi源程序: procedure TForm1.Button1Click(Sender: TObject); begin edit3.Text:=format(%.0f天,strtodate(edit2.text) -strtodate(edit1.text); end; 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=DateToStr(Now(); Button1Click(Form1); 执行结果:(运行于Windows下) /nxgt/41463572/1219713927.jpg 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 构成等腰三角形 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.源程序: main() unsigned m;float n; scanf(%d,&m); if(m600)n=0.06; else 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); 执行结果: 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后面的逗号改为分号,则结果是8。 3.20 4.11 5. 2.400000 6.*#*#*#$ 7.8 5 2 8.d=1.0 +k k=0 xamin 三、编程题(第145页) 1. 源程序: main() int i=1,sum=i; while(i101)sum+=i=-i-2;sum+=i=-i+2; printf(%dn,sum); 执行结果: 51 2.源程序: main() 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)printf(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+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(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,k); 执行结果: apple watermelon pear 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; putchar(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 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); /* 注:55矩阵不能照此计算! */ 执行结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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; randomize(); for(i=0;i=29;i+) ai=rand(); if(mai)m=ai; 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 本题也可以不用数组。源程序如下: #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=random(50); /*找出每行的最小数,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+) 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+) printf(%4d,aij=random(91)+10); aiN-1+=aij; printf(%4dn,aiN-1); for(i=1;iatN-1)t=i; 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+) 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 #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); 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 26 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); 执行结果: Input a string(length4):C+Builder Cu+Beild+r 11. 源程序: main() char m1310=*,January,February,March, April,May,June,July,August,September, October,November,December; int i,j,k,a,s,n; printf(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.看不出原题的意图。因为要计算1n的累加和,n应是一个1的正整数。可是题目中却出现了n=0的情况。除非另加规定当n=0时1n的累加和为0,或者把原题中的计算式改为计算0n的累加和。据此猜测,原题应填为:return(0) return(n+sum(n-1) 根据题意,如下程序较为合理: int sum(int n) if(n0)return(-1); /* -1是出错标志 */ else if(n=1)retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电线电缆维护知识培训总结
- 电站电工基础知识培训内容
- 电磁波的传播方式
- 北森测评试题及答案考试时间
- 北京滴滴专车考试题目及答案
- 电焊工焊接知识培训内容课件
- 中考试题及答案英语答案
- 高新区职称课件
- 高层过道消防知识培训课件
- 2025年绿色照明项目立项申请报告模板
- 2024高海拔地区模块化增压式建筑技术标准
- 仓库消防知识培训课件
- 重症护理的护理课件
- 医务科医疗质控记录范文
- 《电梯企业介绍》课件
- 《风景区概述》课件
- BG转子式干燥机说明指导书
- 关于规范学校中层及以上领导干部岗位设置及任免办法
- 劳务分包合同示范文
- 软件测试技术基础教程(第3版)高职PPT完整全套教学课件
- 肿瘤科专业组药物临床试验管理制度及操作规程GCP
评论
0/150
提交评论