C语言程序设计第3版谭浩强课后习题答案.pdf
《C语言程序设计第3版谭浩强课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计第3版谭浩强课后习题答案.pdf(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.1 请参照本章例题编写一个c程序,输出以下信息:*关*关*Very good!*解:程序如下所示。#include int main()pr i ntf(*nn n);printf(w Very Good!nnM);printf(*n0);return 0;)运行结果如下:*Very good!*1.2 编写一个C程序输入a、b、c 3个值.输出其中最大者。解:程序如下所示.#include int main()int arb,crmax;printf(Mplease input arbr c:nw);scanf(?d,%d,+d”,&ar&b,&c);max=a;if(maxb)max=
2、b;if(maxc)max=c;printf(The largest number is%dnnrmax);return 0;运行结果如下:please input a,b,c:38,93,84/The largest number is 931.3 上机运行本章3个例题,熟悉所用系统的上机方法与步骤。解:略。1.4 上机运行你为本章习题1.1和 习 题1.2所编写的程序。解:略。2.I假如我国国民生产总值的年增长率为1 0%,计 算1 0年后我国国民生产总值与现在相比增长多少。计算公式为:P=(l +r)*r为年增长率.为年数,P为与现在相比的百分比。解:从附录C(库函数可以查到:可以用p
3、ow函数求歹 的值.调用p ow函数的具体形式 是p ow(_r,y)。在使用p ow函数时需要在程序的开头用二i nc l u d e命令将头文件包含到本程序模块中。可以用下面的程序求出1 0年后国民生产总值是现在的多少倍.#include#include int main()float p,r,n;r=0.1;n=10;ppow(1+r,n);/*AR(1+r)n*/printf(Mp=fnM,p);return 0;)运行结果为:p=2.593742即1 0年后国民生产总值是现在的2.5 9 3 7 1 2倍。2.2存款利息的计 算.有1 0 0 0元,想 存5年,可按以下5种办法存:(
4、1)一次存5年期;(2)先 存2年期,到期后将本息再存3年期;(3)先 存3年期.到期后将本息再存2年期;(I)存1年期,钊期后将本息再存1年期,连续存5次;(5)存活期存款。活期利息每一季度结算一次。I单击翻页原 年的银行存款利息如下:1年期定期存款利息为4.14%2年期定期存款利息为4.68%3年期定期存款利息为5.4%5年期定期存款利息为5.85%活期存款利息为0.72%(活 期 存 款 每 季 度 结 算 次 利 息)如果,为年利率.,为存款年数.则if算本息和的公式为:一年期本息和:P=1000X l+r)”年期本息和:P=1000Xl+X r)存”次一 年 期的本息和:P=1000
5、X(l+r)*活期存款本息和:尸=1000X(卜?)(说明:1000X(1 +亍)是一个季度的本息和)解:设5年期存款的年利率为r5.3年期存款的年利率为r3.2年期存款的年利率为r l.l年期存款的年利率为r l.活期存款的年利率为用.设按第1种方案存款5年得到的本息和为pl 按第2种方案存款5年得到的本息和为|,2.按第3方案存款5年得到的本息和为p3.按第4种方案存款3印得到的本息和为p4.按 第5种方案存款5年得到的本息和为p5.#include include in t main 0(flo a t r 5,r 3,r 2,r l,r 0rp,p lrp2,p3,p4,p5;p=10
6、00;r 5-0.0585;r 3=0.054;r2=0.0468;rl-0.0 4 1 4;r0=0.0072;p l-p *(1+r5)*5);p2=p*(1+2*r2)*(1+3 r3);p3-p*(1+3*r3)*(1+2*r2);p4-p*pow(l*r l,5);p5=p*pow(1+r0/4,4*5);p r in tf (Rp l-f nw,p l);p r in tf (Rp 2-fnM,p 2);p rin tf(p 3=f n rp3;p r in tf L p 4 7 fnM,p 4);p r in tf (Rp 5-*f nMrp5);一次 存 5 年期 先在2 年期
7、,到期后将本息再存3 昨期 先存3 年期.到期后将本息 再存2 年期 存 1 年期,到期后将本息再存1 年期,连 续 存 5 次存活期存款。活期利息诲一季度结算一次榆出按第1 方案得到的本息和愉出按第2 方案得到的本息和输出按第3 方案得到的本息和榆出按第4 方案得到的本息和榆出按第5 方案用到的本息和re tu rn 0;运行结果为:Rnnnoo|点击或拖曳放大),-1,U.It、S i O np 3=1 2 7 0.7 6 3 1 8 4p 4-1 2 2 4.8 6 4 0 4p 5-1 0 3 6.6 2 2 3 1 4讨论:(I)程序在编译时出现渺告(warning),并告知原因是i
8、j:iruncnlion frotn constdouble lo ffloat-(在执行赋值时出现将双精度常量转换为单精度的情况兀这是由于VC+6.。在编译时把实常数(如程序中和利率)全部按双精度数处理因此在向r5.r3等fkxM型变量赋值时就出现将双精度数赋给单精度变量的情况这样可能会损失些精度.故向用户提醒,请用户考思是否要修改。警告只是提解程序可以正常运行.但得到的结果可能会有一些谀差。2如果不想出现上面的警告(warning).可 以 格 第4行 各 变 址 改 为double型.即:d o u b l e r S,r 3,r 2,r l,r 0,prp l,p 2,p 3rp 4,
9、p S;由于采用了双精度变量.得到的运算结果会更精确些,坡后几位数字与上面的有些差别。;p r i n t f L p 5=1 0.2f n*,p 5 ;这时的输出结果如下:偷出按第1方案得到的本息和偷出按第2方案翻到的本息和僧出按第3方案用到的本息和愉出按第4方案解到的本息和推出按第5方案得到的本息和p l=5 29 2.5 0p 2=1 27 0.7 6p 3-1 27 0.7 6p 4-1 224.8 6p 5=1 0 3 6.6 22.3清编程序将“ChimT译成密码.密码规律足:用原来的字母后面第4个字母代替原来的字母。例如字母“A”后面第4个字母是“E”用“E”代替“A”。因此.“
10、China”应译为“Glmrc二清编 程序用赋初值的方法使c l、c2、c3、c4、c5这5个变量的值分别为经过运算.使c l、c2、c3、c4、c5分别变为G 言并检出。解:可编程序如下:I include int main()(char cl=,Cc2=*hc3=*i*r c4=*n ,c5=a;cl*cl*4;c2=c2+4;c3=c3+4;c4-c4+4;c5=c5*4;printf(password is c%cn”,cl,c2,u3,c4,c5);return 0;)运行结果:password is Glmre2.4 2.3题能否改成如下:include int main()int
11、 cl,c2;(原为 charcl.c2)cl=97;C2-98;printf(M%c cnwclr c2);printf(n%d dnwrcl,c2);return 0;)(1)运行时会输出什么信息?为什么?(2)如果将程序第4、第 5行改为:C1-289;c2=322;运行时会输出什么信息?为什么?解:(1)可以.因为在可输出的字符范围内用整型和用字符型作用相同。运行结果为:a b97 98(2)分别讨论两种情况:如果c l 和 c 2定义为i n t 型.而川=2 8 9 和 c 2=3 22则运行结果为:!B.8 I点击或拖曳放大I289 322这是由于c l 和 e 2是 i n i
12、 型.可以正常存放整数28 9 和 3 22.但是用c 格式符榆出时,只能用到e l 和 e 2存储单兀中的最低的一个字节(8位)的信息.e l 存储单元的情况是:0 0 0 0 0 0 0 00 Q 0 0 0 0 0 80 0 0 0 0 0 0 10 0 1 0 0 0 0 1最低字节中的信息是:0 0 1 0 0 0 1.相当十进制数3 3。从附录A 可以查出3 3 是字符T的 A S C H 码,因此岁出字符T。同理.C2存储单元的情况是:0 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 10 1 0 0 0 0 1 0用低字节中的信息是:0 1
13、 0 0 0 1 0,相当十进制数6 6.从附址人可以住出6 6 是字符廿 的 A S C H 码.因此输出字符B.如 果 e l 和 c 2 定 义 为 e l u i r 型.而 d =28 9 和 c 2=3 22.在编译时输出警告(w a r n i n g)信息.原因是,=:t r u n c a t i o n f r o m e o n s I i n t t o c h a r,”(在执行赋值时.出现将i n t 型常及转换为c h a r 型的情况).但程序可以运行,运行结果是:!B33 66为什么用d 特出时会输出3 3 和 6 6 呢?这是因为c l 和C2是字符变量,只
14、有一个字节,因此在执行赋值操作时只把28 9 和 3 22的最后一个字节赋给了 c l 和c 2.它们的内容是 0 0 1 0 0 0 1 和 0 1 0 0 0 1 0.所以用d 输出时会输出3 3 和 6 6.9 I单击翩页I最简单的C 程序设计顺序程序设计3.1 忠样区分表达式和表达式语句?C旃言为什么要设表达式语句?什么时候用表达式.什么时候用表达式语句?解:略.3.2 C语言为什么要把榆人端出的功能作为函数.而不作为语言的基本部分?解:略.3.3 用下面的 scunf 数输入数据.使 a=3.b=7,x=8.5.y=71.82.cl=A,c2=a.间在键盘卜如何输入?include
15、int main()(int a,b;float x,y;char C1/C2;scanf(a-id b-d,&a,&b);scanf(%f%eH,4x,Ay);scanf c*cH,4cl,4c2);printf(a-;d,b-d,x-%f,y-%f,cl-c,c2-*cnw,a,b,x,y,clr c2):return 0;)解;可按如下方式在犍盘I输入:a=3 b=7/8.5 7L.82A/,输出为:a-3rb-7#x-8.500000,y-71.820000,cl-A,c2-a请注意:在检人完8.5和71.82两个实数给x和y后紧接着愉人字符A.中间不要有空格.由于A是7母而不是数字.
16、系统在遇到字母A时就确定瑜入给y的数值已结束。字 符A就 送 到 下 个scanf语句中的字符变量c l.如果在输入8.5和71.82两个实数后愉人空格符会.怎么样呢?40 I点击或拖曳放大I8.5 71.82 A a/这时71.82后面的空格字符就被c l读人c2读入了字符Aa在输出c l时就蛤出空格.输出为:a-3,b-7,x-8.500000,y-71.820000,cl-,c2-A如果在输入8.5和71.82两个实数后输入车符会怎么样呢?a-3 b,7/8.5 71.823h a 输Hj为:a=3,b=7fx=B.500000ry=71.820000,cl=/C2-A这时“mi车”被作
17、为一个字符送到内存输入缓冲区.被u读入(实际上c i读入的是何车符的ASCII码)字符八被e2读取.所以在执行printf函数输出c l时.就输出一个回车符愉出c2时就输出字符A。在用scan 函数椎人数据时往往会出现 此出象不到的情况,例如在连续输入不同类型的数据(特别是数值型数据和字符数据连续输入)的情况。要注意W 1车符是可能被作为一个字符读入的。读者在遇到类似情况时.上机多试验一下就可以找出规律来.3.4 用下面的 scanf 函数临人数据.使,=10,b=20td=*A%c2=*ir.x=1.5.y=-3 75 z=67.8.请问在犍盘上如何输入数据?scanf 5d Sdc%c%f
18、%f%*f,“,&a,&b,&ul,&c2,&x,&y,&z);解:#include int main(int d/b;float x,y,z;char clrc2;scanf(*5 d i 5d ct cl fl ,%f w,&ar&br&cl#&c2rprintf(a-d,b*d,cl-%C/C2-C/.2f,y-6.2f,6.2fn/a,b,cl,c2,x,y,z);return 0;)运行情况如下;.-JO.,20Aal.5 一-375 2.5,67.8/(此行为输入的数据,a=10,b=20,cl=A,c2=a,x=-1.50,y=-3.75,z=67.80(此行为输Hi 11-说明
19、:按5 d式 的 要 求 输 入a与 时 先 输 入3个空格然 后 再 输 入1 0与20.%,是用来禁止赋值的。在输入时对应于%,f的地方随意输入一个实数2.5该值不会赋给任何变盘3.5 设熄整一熟因柱高h=3.求囚I周K、掰面积、网球表面积M球体积M柱体 积.用s e rif输入数据.输出计算结果.输出时要求有文字说明.取小数点后2位数字。清编程序。解:可编程序如下:#include in t main(flo a t h,r,lrsrsqrvqrvz;flo a t p i=3.141526;p rin tf(”请愉入网半径r,W l柱 高 h:M);scan f(%ri f ,6 rr
20、4h);1*2*p i*r;s=r r*p i;sq=4*p i*r r;v q-3.0/4.0 p i*r*r vz=pi r r h;p rin tf(国I周 K.为:p r in tf L 阕面枳为:p r in tf (脚球表面枳为:p rin tif(圈球体枳为:p rin tf(MH 体枳为:re tu rn 0;要求瑜人Ml半 径 r 和阀柱高h计算同冏长1计算网面积s计算圈球表面枳sq计算解球体积vq计算四柱体枳vzs=%6.2 fnM,s);s q 7 62 fn,sq;v=%6.2fnRrvq);uz=$6.2f n r v z);r;运行情况如下:清轴人同半粒r,陶柱高h
21、:1.5,3 同周长为:1-9.42同面视为:3-7.07阀球衣面积为;sq-28.27网球体视为:v=7.95河柱体积为:vz-21.21说明:如果用ViaualC+6.0中文版对程序进行编译.在程序中可以使用中文字符串。在推出时也能显示汉字.如果用Turbo C或Turbo C+则无法使用中文字符串.读者可以改用英文字符中.3.6 愉人一个华氏温度.要求输出摄氏温度。公式为:c=y(F-3 2)愉Hi要有文字说明取两位小数.12 I点击或拖曳放大 的程序如下所小.i nc l u d e i nt m ai n()f l o at ct f;p rin K”请输人一个华氏温度:”);s c
22、 anfc=(5.0/9.0)(f-32);/*注 盍5和9要用实型表示,否 则5/9值 为0 /pr i nt f (摄氏温度为:%5.2f n,c);r e t u r n 0;)运行情况如下:请愉人一个华氏温度:87/再到结果:摄氏源度为:30.563.7编程序用ge t c har函数读入两个字符给变址c l、c 2.然后分 别 用pu l c har函数和pr i nl f函数输出这两个字符并思考以下问题:(1)变量c l、c 2应定义为字符型或整型?还是二者皆可?(2)要 求 输 出c l和c 2值 的A S C T 1码.应如何处理?用pi u c har函 数 还 是pr i
23、nt f函数?3)整型变盘与字符变址是否在任何情况下都可以互相代替?如:c har c l .c 2;i nt c l e 2:是否无条件等价?解:可编程序如下:i nc l u d e i nt m ai n O|c har cl,c2;pr i nt f L靖输入两个字符c l,c 2:M);c l-ge t c har ();c 2=ge t c har ();pr i nt”用pu t c har语句怪出结果为:”);pu t c har(c l);pu t c har (c 2);pr i nt fpr i nt ”用pr i nt f语句端出结果为:”);pr i nt f (c
24、*c n,c l,c 2);r e t u r n 0;)运行结果,13 请 人两卜字符c l,c 2:a b/用p u tc h a r旃句输Hl结果为:ab用p r i n tf语句输钳结果为:a b请注意;连续用两个g etc h a r函数时是怎样输入字符的.如果用以下方法输入;SJLb/得到以下运行结果:用p u tc h a r语句输出结果为:a(空一行)用p rL n tf语句愉HI结果为;a(空一行)因 为 第1行 将n和网车符输人到内存的愉人缓冲区.因此“得 到.e 2得 到 一个问车符。在输出c 2时就会产生一个同车换行.而不会输出任何可显示的字符.在实际操作时 只 要 输
25、 入.系 统 就 会 认 为 用 户 已 输 入 了 两 个 字 符.所 以 应 当 连 续 输 入n b两个字符然后再按回车键.这样就保证了 c l和c 2分别得到字符a和b。回答思考问题:(1)e l和c 2可以定义为字符型或整型.二者皆可.(2)可以用p rin tf函数输出.在p rin tf函数中用d格式符.即:p rin tf(%d,%dn,cl,c2);(3)字符变员在计算机内占1个字节.而整M变员占2个或4个字节.因此整型变量在可输出字符的范圉内(A S C II码为0-2 5 5之间的字符)是可以与字符数据互相转换的。如果整数在此范围外.不能代替.请分析以下3个程序:程 序1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 版谭浩强 课后 习题 答案
限制150内