《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx

上传人(卖家):最好的沉淀 文档编号:5716837 上传时间:2023-05-05 格式:DOCX 页数:113 大小:76.93KB
下载 相关 举报
《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx_第1页
第1页 / 共113页
《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx_第2页
第2页 / 共113页
《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx_第3页
第3页 / 共113页
《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx_第4页
第4页 / 共113页
《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx_第5页
第5页 / 共113页
点击查看更多>>
资源描述

1、WORD 格式可编辑第 1 章程序设计和 C 语言 11.1 什么是计算机程序 11.2 什么是计算机语言 1 1.3C 语言的发展及其特点 31.4 最简单的 C 语言程序 51.4.1 最简单的 C 语言程序举例 6 1.4.2C 语言程序的结构 101.5 运行 C 程序的步骤与方法 121.6 程序设计的任务 141-5 #include int main ( )printf (*nn); printf(VeryGood!nn);printf (*n); return 0;1-6 #include int main()int a,b,c,max;printf(please input

2、a,b,c:n); scanf(%d,%d,%d,&a,&b,&c); max=a;if (maxb) max=b;if (maxc) max=c;printf(The largest number is %dn,max); return 0;第 2 章算法程序的灵魂 162.1 什么是算法 16专业知识整理分享WORD 格式可编辑2.2 简单的算法举例 172.3 算法的特性 212.4 怎样表示一个算法 222.4.1 用自然语言表示算法 222.4.2 用流程图表示算法 222.4.3 三种基本结构和改进的流程图 262.4.4 用 NS 流程图表示算法 282.4.5 用伪代码表示算法

3、 312.4.6 用计算机语言表示算法 322.5 结构化程序设计方法 34 习题 36第章最简单的C 程序设计顺序程序设计 373.1 顺序程序设计举例 373.2 数据的表现形式及其运算 393.2.1 常量和变量 393.2.2 数据类型 423.2.3 整型数据 443.2.4 字符型数据 473.2.5 浮点型数据 493.2.6 怎样确定常量的类型 513.2.7 运算符和表达式 52 3.3C 语句 573.3.1 C 语句的作用和分类 573.3.2 最基本的语句赋值语句 593.4 数据的输入输出 653.4.1 输入输出举例 653.4.2 有关数据输入输出的概念 673.

4、4.3 用 printf 函数输出数据 683.4.4 用 scanf 函数输入数据 753.4.5 字符数据的输入输出 78 习题 823-1#include #include int main()float p,r,n; r=0.1;n=10;p=pow(1+r,n); printf(p=%fn,p); return 0;专业知识整理分享WORD 格式可编辑3-2-1#include #include int main()float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;r5=0.0585; r3=0.054; r2=0.0468; r1=0.04

5、14; r0=0.0072;p1=p*(1+r5)*5);/ 一次存 5 年期p2=p*(1+2*r2)*(1+3*r3);/ 先存 2 年期,到期后将本息再存 3 年期p3=p*(1+3*r3)*(1+2*r2);/ 先存 3 年期,到期后将本息再存 2 年期p4=p*pow(1+r1,5);/ 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次p5=p*pow(1+r0/4,4*5);/ 存活期存款。活期利息每一季度结算一次printf(p1=%fn,p1);/ 输出按第 1 方案得到的本息和printf(p2=%fn,p2);/ 输出按第 2 方案得到的本息和printf(p3=

6、%fn,p3);/ 输出按第 3 方案得到的本息和printf(p4=%fn,p4);/ 输出按第 4 方案得到的本息和printf(p5=%fn,p5);/ 输出按第 5 方案得到的本息和return 0;3-2-2#include #include int main()double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072;p1=p*(1+r5)*5);/ 一次存 5 年期p2=p*(1+2*r2)*(1+3*r3);/ 先存 2 年期,到期后将本

7、息再存 3 年期p3=p*(1+3*r3)*(1+2*r2);/ 先存 3 年期,到期后将本息再存 2 年期p4=p*pow(1+r1,5);/ 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次专业知识整理分享p5=p*pow(1+r0/4,4*5);/ 存活期存款。活期利息每一季度结算一次printf(p1=%fn,p1);/ 输出按第 1 方案得到的本息和printf(p2=%fn,p2);/ 输出按第 2 方案得到的本息和printf(p3=%fn,p3);/ 输出按第 3 方案得到的本息和printf(p4=%fn,p4);/ 输出按第 4 方案得到的本息和printf(p5

8、=%fn,p5);/ 输出按第 5 方案得到的本息和return 0;3-2-3#include #include int main()float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072;p1=p*(1+r5)*5);/ 一次存 5 年期p2=p*(1+2*r2)*(1+3*r3);/ 先存 2 年期,到期后将本息再存 3 年期p3=p*(1+3*r3)*(1+2*r2);/ 先存 3 年期,到期后将本息再存 2 年期p4=p*pow(1+r1,5)

9、;/ 存 1 年期,到期后将本息存再存 1 年期,连续存 5 次p5=p*pow(1+r0/4,4*5);/ 存活期存款。活期利息每一季度结算一次printf(p1=%10.2fn,p1);/ 输出按第 1 方案得到的本息和printf(p2=%10.2fn,p2);/ 输出按第 2 方案得到的本息和printf(p3=%10.2fn,p3);/ 输出按第 3 方案得到的本息和printf(p4=%10.2fn,p4);/ 输出按第 4 方案得到的本息和printf(p5=%10.2fn,p5);/ 输出按第 5 方案得到的本息和return 0;3-3.#include #include i

10、nt main()float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r)/log10(1+r); printf(m=%6.2fn,m);return 0;WORD 格式可编辑3-4#include int main()int c1,c2; c1=197; c2=198;printf(c1=%c,c2=%cn,c1,c2); printf(c1=%d,c2=%dn,c1,c2); return 0;3-5#include int main()int a,b; float x,y; char c1,c2;scanf(a=%d b=%d,&a,&b); sc

11、anf(%f %e,&x,&y);scanf(%c%c,&c1,&c2); printf(a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%cn,a,b,x,y,c1,c2); return 0;3-6#include int 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(passwor is %c%c%c%c%cn,c1,c2,c3,c4,c5); return 0;专业知识整理分享WORD格式可编辑3-7#include int main ()float

12、 h,r,l,s,sq,vq,vz; float pi=3.141526;printf(请输入圆半径r,圆柱高h);scanf(%f,%f,&r,&h);/要求输入圆半径 r 和圆柱高hl=2*pi*r;/计算圆周长 ls=r*r*pi;/计算圆面积 ssq=4*pi*r*r;/计算圆球表面积 sqvq=3.0/4.0*pi*r*r*r;/计算圆球体积 vqvz=pi*r*r*h;/计算圆柱体积 vz printf(圆周长为:l=%6.2fn,l);printf(圆面积为:s=%6.2fn,s); printf(圆球表面积为:sq=%6.2fn,sq); printf(圆球体积为:v=%6.2

13、fn,vq); printf(圆柱体积为:vz=%6.2fn,vz); return 0;3-8-1#include int main()int c1,c2;/整型定义printf(请输入两个整数c1,c2:); scanf(%d,%d,&c1,&c2); printf(按字符输出结果:n); printf(%c,%cn,c1,c2);printf(按 ASCII 码输出结果为:n); printf(%d,%dn,c1,c2);return 0;3-8-2#include int main()char c1,c2;/定义字符型变量int i1,i2;/定义整型变量printf(请输入两个字符c

14、1,c2:); scanf(%c,%c,&c1,&c2);专业知识整理分享i1=c1;/赋值给整型变量i2=c2;printf(按字符输出结果:n); printf(%c,%cn,i1,i2); printf(按整数输出结果:n); printf(%d,%dn,c1,c2); return 0;3-8-3#include int main()char c1,c2;/定义为字符型int i1,i2;/定义为整型printf(请输入两个整数i1,i2:); scanf(%d,%d,&i1,&i2);c1=i1;/将整数赋值给字符变量c2=i2;printf(按字符输出结果:n); printf(%

15、c,%cn,c1,c2); printf(按整数输出结果:n); printf(%d,%dn,c1,c2); return 0;3-8#include int main()char c1,c2;printf(请输入两个字符c1,c2:); c1=getchar();c2=getchar();printf(用 putchar 语句输出结果为:); putchar(c1);putchar(c2); printf(n);printf(用 printf 语句输出结果为:); printf(%c %cn,c1,c2);return 0;第 4 章选择结构程序设计 854.1 选择结构和条件判断 854.

16、2 用if 语句实现选择结构 874.2.1 用 if 语句处理选择结构举例 87 4.2.2if 语句的一般形式 894.3 关系运算符和关系表达式 914.3.1 关系运算符及其优先次序 914.3.2 关系表达式 924.4 逻辑运算符和逻辑表达式 924.4.1 逻辑运算符及其优先次序 934.4.2 逻辑表达式 944.4.3 逻辑型变量 964.5 条件运算符和条件表达式 974.6 选择结构的嵌套 994.7 用switch 语句实现多分支选择结构 1024.8 选择结构程序综合举例 105 习题 1114-4-1#include int main()int a,b,c;prin

17、tf(请输入三个整数:); scanf(%d,%d,%d,&a,&b,&c); if (ab)if (bc) printf(max=%dn,c);elseprintf(max=%dn,b); else if (ac)printf(max=%dn,c); else printf(max=%dn,a);return 0;4-4-2#include int main() int a,b,c,temp,max;printf(请输入三个整数:); scanf(%d,%d,%d,&a,&b,&c);temp=(ab)?a:b;/*将 a 和 b 中的大者存入temp 中*/max=(tempc)?temp

18、:c;/*将 a 和b 中的大者与c 比较,取最大者*/ printf(三个整数的最大数是%dn,max);return 0;4-5-2#include #include #define M 1000int main()int i,k;printf(请输入一个小于%d 的整数i:,M); scanf(%d,&i);while (iM)printf(输入的数不符合要求,请重新输入一个小于%d 的整数i:,M); scanf(%d,&i);k=sqrt(i);printf(%d 的平方根的整数部分是:%dn,i,k); return 0;4-5#include #include #define M

19、 1000int main()int i,k;printf(请输入一个小于%d 的整数i:,M); scanf(%d,&i);if (iM)printf(输入的数不符合要求,请重新输入一个小于%d 的整数i:,M); scanf(%d,&i);k=sqrt(i);printf(%d 的平方根的整数部分是:%dn,i,k); return 0;4-6.#include int main() int x,y;printf(输入x:);scanf(%d,&x);if(x1)/* x1 */ y=x;printf(x=%3d,y=x=%dn ,x,y);elseif(x10)/* 1=x=10*/ y

20、=3*x-11;printf(x=%d,y=3*x-11=%dn,x,y);return 0;4-7-1#include int main()int x,y; printf(enter x:);scanf(%d,&x); y=-1;if(x!=0) if(x0)y=1;elsey=0;printf(x=%d,y=%dn,x,y); return 0;4-7-2#include int main()int x,y;printf(please enter x:);scanf(%d,&x); y=0;if(x=0) if(x0) y=1;elsey=-1; printf(x=%d,y=%dn,x,y

21、); return 0;4-8#include int 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;break;case 7: grade=C;break;case 6: grade=D;break;case 5:case 4:case 3:case 2:cas

22、e 1:case 0: grade=E;printf(成绩是 %5.1f,相应的等级是%cn ,score,grade); return 0;4-9#include #include int main()int num,indiv,ten,hundred,thousand,ten_thousand,place;/分别代表个位,十位,百位,千位,万位和位数printf(请输入一个整数(0-99999):); scanf(%d,&num);if (num9999)place=5;elseif (num999) place=4;elseif (num99) place=3;elseif (num9)

23、place=2; else place=1;printf(位数:%dn,place); printf(每位数字为:); ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hun

24、dred*100-ten*10); switch(place)case 5:printf(%d,%d,%d,%d,%d,ten_thousand,thousand,hundred,ten,indiv); printf(n 反 序 数 字 为 :); printf(%d%d%d%d%dn,indiv,ten,hundred,thousand,ten_thousand); break;case 4:printf(%d,%d,%d,%d,thousand,hundred,ten,indiv); printf(n 反 序 数 字 为 :); printf(%d%d%d%dn,indiv,ten,hun

25、dred,thousand); break;case 3:printf(%d,%d,%d,hundred,ten,indiv); printf(n 反 序 数 字 为 :); printf(%d%d%dn,indiv,ten,hundred); break;case 2:printf(%d,%d,ten,indiv); printf(n 反 序 数 字 为 :); printf(%d%dn,indiv,ten); break;case 1:printf(%d,indiv); printf(n 反序数字为:); printf(%dn,indiv); break;return 0;4-10-1#i

26、nclude int main()int i;double bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1;bon2=bon1+100000*0.075; bon4=bon2+100000*0.05; bon6=bon4+100000*0.03; bon10=bon6+400000*0.015;printf(请输入利润i:);scanf(%d,&i); if (i=100000)bonus=i*0.1; else if (i=200000)bonus=bon1+(i-100000)*0.075; else if (i=400000)bonus=

27、bon2+(i-200000)*0.05; else if (i=600000)bonus=bon4+(i-400000)*0.03; else if (i=1000000)bonus=bon6+(i-600000)*0.015; elsebonus=bon10+(i-1000000)*0.01; printf(奖金是: %10.2fn,bonus); return 0;4-10-2#include int main()int i;doublebonus,bon1,bon2,bon4,bon6,bon10; intbranch;bon1=100000*0.1;bon2=bon1+100000*

28、0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015;printf(请输入利润i:);scanf(%d,&i); branch=i/100000;if (branch10)branch=10; switch(branch)case 0:bonus=i*0.1;break;case 1:bonus=bon1+(i-100000)*0.075;break; case 2:case 3: bonus=bon2+(i-200000)*0.05;break;case 4:case 5: bonus=bon

29、4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015;break;case 10: bonus=bon10+(i-1000000)*0.01;printf(奖金是 %10.2fn,bonus); return 0;4-11#include int main()intt,a,b,c,d;printf( 请 输 入 四 个 数 :); scanf(%d,%d,%d,%d,&a,&b,&c,&d); printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d); if (ab) t

30、=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(排序结果如下: n);printf(%d%d%d%dn,a,b,c,d); return 0;4-12#include int main()inth=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(请输入一个点(x,y):);scanf(%f,%f,

31、&x,&y);d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);/*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if (d11 & d21 & d31 & d41)h=0;/*判断该点是否在塔外*/ printf(该点高度为 %dn,h);return 0;第 5 章循环结构程序设计 1145.1 为什么需要循环控制 1145.2 用while 语句实现循环 1155.3 用dowhile 语句实现循环 1175.4

32、 用for 语句实现循环 1205.5 循环的嵌套 1245.6 几种循环的比较 1255.7 改变循环执行的状态 1255.7.1 用 break 语句提前终止循环 1265.7.2 用 continue 语句提前结束本次循环 127 5.7.3break 语句和continue 语句的区别 1285.8 循环程序举例 131 习题 1405-2#include #include / 程序中用到数学函数fabs,应包含头文件math.n int main()int sign=1,count=0;/ sign 用来表示数值的符号,count 用来统计循环次数double pi=0.0,n=1.

33、0,term=1.0;/ pi 开始代表多项式的值,最后代表的值 , n 代表分母,term 代表当前项的值while(fabs(term)=1e-8)/ 检查当前项 term 的绝对值是否大于或等于 10 的(-6)次方pi=pi+term;/ 把当前项term 累加到pi 中n=n+2;/ n+2 是下一项的分母sign=-sign;/ sign 代表符号,下一项的符号与上一项符号相反term=sign/n;/ 求出下一项的值termcount+;/ count 累加 1pi=pi*4;/ 多项式的和pi 乘以 4,才是的近似值printf(pi=%10.8fn,pi);/ 输出的近似值p

34、rintf(count=%dn,count);/ 输出循环次数return 0;5-3#include int main()intp,r,n,m,temp;printf(请输入两个正整数n,m:);scanf(%d,%d,&n,&m); if (nm)temp=n; n=m; m=temp;p=n*m; while(m!=0)r=n%m; n=m; m=r;printf(它们的最大公约数为:%dn,n); printf(它们的最小公约数为:%dn,p/n); return 0;5-4#include int main()char c;int letters=0,space=0,digit=0,

35、other=0;printf(请输入一行字符:n); while(c=getchar()!=n)if (c=a & c=A & c=0 & c=9) digit+;elseother+;printf( 字 母 数 :%dn空 格 数 :%dn 数:%dn,letters,space,digit,other);return 0;5-5#include int main()inta,n,i=1,sn=0,tn=0; printf(a,n=:);scanf(%d,%d,&a,&n); while (i=n)tn=tn+a; /*赋值后的tn 为i 个 a 组成数的值*/ sn=sn+tn; /*赋值

36、后的sn 为多项式前i 项之和*/ a=a*10;+i;printf(a+aa+aaa+.=%dn,sn); return 0;5-6#include int main()double s=0,t=1; int n;for (n=1;n=20;n+)数 字 数:%dn其 它 字 符t=t*n; s=s+t; printf(1!+2!+.+20!=%22.15en,s);return 0;5-7#include int main()int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for (k=1;k=n1;k+)/*计算 1 到 100 的和*/s1

37、=s1+k;for (k=1;k=n2;k+)/*计算 1 到 50 各数的平方和*/s2=s2+k*k;for (k=1;k=n3;k+)/*计算 1 到 10 的各倒数和*/s3=s3+1/k; printf(sum=%15.6fn,s1+s2+s3); return 0;5-8#include int main()int i,j,k,n;printf(parcissus numbers are ); for (n=100;n1000;n+)i=n/100; j=n/10-i*10; k=n%10;if (n=i*i*i + j*j*j + k*k*k) printf(%d ,n);pri

38、ntf(n); return 0;5-9-1#define M 1000/*定义寻找范围*/ #include int main()int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10; int i,a,n,s;for (a=2;a=M;a+)/* a 是 2-1000 之间的整数,检查它是否完数 */n=0;/* n 用来累计a 的因子的个数 */s=a;/* s 用来存放尚未求出的因子之和,开始时等于a */ for (i=1;i1)printf(%d,%d,k1,k2);/* n1 表示a 至少有 2 个因子 */if (n2)printf(,%d,k3);/* n2表示至少有 3 个因子,故应再输出一个因子 */if (n3)printf(,%d,k4);/* n3表示至少有 4 个因子,故应再输出一个因子 */if (n4)printf(,%d,k5);/* 以下类似 */ if (n5)printf(,%d,k6);if (n6)printf(,%d,k7);if (n7)printf(,%d,k8);if (n8)printf(,%d,k9);if (n9)printf(,%d,k10); printf(n);return

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

当前位置:首页 > 办公、行业 > 待归类文档
版权提示 | 免责声明

1,本文(《C语言程序设计》课后习题答案解析(第四版)谭浩强.docx)为本站会员(最好的沉淀)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|