第1、3章习题讲评(学生用)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第1章习题讲评:5.请参照本章例题,编写一个C程序,输出以下信息:******************************Verygood!******************************解:程序如下:#includestdio.hintmain(){printf(**************************\n\n);printf(VeryGood!\n\n);printf(**************************\n\n);return0;}运行结果:6.编写一个C程序,输入a,b,c三个值,输出其中最大者。解:程序如下:#includestdio.hintmain(){inta,b,c,max;printf(pleaseinputa,b,c:\n);scanf(%d,%d,%d,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(Thelargestnumberis%d\n,max);return0;}运行结果:注意:输入的3个数以逗号分隔,如果以空格分隔,会出错,为什么?7.上机运行以下程序,注意注释的方法。分析运行结果,掌握注释的用法。2(1)#includestdio.hintmain(){printf(Howdoyoudo!\n);//这是行注释,注释范围从//起至换行符为止return0;}(2)把第4行改为printf(Howdoyoudo!\n);/*这是块行注释*/(3)把第4行改为如下两行printf(Howdoyoudo!\n);/*这是块行注释,如在本行内写不完,可以在下一行继续写,这部分内容均不产生目标代码*/(4)把第4行改为//printf(Howdoyoudo!\n);(5)把第4行改为printf(//Howdoyoudo!\n);//在输出的字符串中加入//(6)用块注释符把几行语句都作为注释/*printf(Howdoyoudo!\n);return0;*/解:请读者上机运行程序,注意观察结果。结果如下:(1)输出:Howdoyoudo!//之后是注释,这部分内容不参加编译,不影响运行结果。(2)输出:Howdoyoudo!/*与*/之间是注释,这部分内容不参加编译,不影响运行结果。(3)输出:Howdoyoudo!程序运行结果表明:从上一行的/*到下一行的*/之间是注释,块注释不受一行范围的限制,可以跨行。这部分内容不参加编译,不影响运行结果。(4)程序运行时无输出,因为//之后都作为注释,因此在程序编译时不包括printf函数,故无输出。(5)输出://Howdoyoudo!在双撇号之间的//不作为注释标记,因此把它按字符原样输出。(6)无输出。因为把所有语句都作为注释,不参加编译,程序相当于:#includestdio.hintmain(){}3第3章习题讲评1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为:p=(1+r)nr为年增长率,n为年数,p为与现在相比的倍数。解:从附录F(C库函数)可以查到:可以用pow函数求xy的值,调用pow函数的具体形式是pow(x,y)。在使用pow函数时需要在程序的开头用#include指令将math.h头文件包含到本程序模块中。可以用下面的程序求出10年后国民生产总值是现在的多少倍。程序如下:#includestdio.h#includemath.hintmain(){floatp,r,n;r=0.1;n=10;p=pow(1+r,n);printf(p=%f\n,p);return0;}运行结果:即10年后国民生产总值是现在的2.593742倍。2.存款利息的计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。(2)先存2年期,到期后将本息再存3年期。(3)先存3年期,到期后将本息再存2年期。(4)存1年期,到期后将本息再存1年期,连续存5次。(5)存活期存款。活期利息每一季度结算一次。2007年12月的银行存款利息如下:1年期定期存款利息为4.14%;2年期定期存款利息为4.68%;3年期定期存款利息为5.4%;5年期定期存款利息为5.85%;4活期存款利息为0.72%(活期存款每一季度结算一次利息)。如果r为年利率,n为存款年数,则计算本息和的公式为:1年期本息和:p=1000×(1+r);n年期本息和:p=1000×(l+n×r);存n次1年期的本息和:p=1000×(1+r)n;活期存款本息和:p=1000×(1+r/4)4n。说明:1000×(1+r/4)是一个季度的本息和。解:设5年期存款的年利率为r5,3年期存款的年利率为r3,2年期存款的年利率为r2,1年期存款的年利率为r1,活期存款的年利率为r0。设按第1种方案存款5年得到的本息和为p1,按第2种方案存款5年得到的本息和为p2,按第3种方案存款5年得到的本息和为p3,按第4种方案存款5年得到的本息和为p4,按第5种方案存款5年得到的本息和为p5。程序如下:#includestdio.h#includemath.hintmain(){floatr5,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);//存1年期,到期后将本息再存1年期,连续存5次p5=p*pow(1+r0/4,4*5);//存活期存款,活期利息每一季度结算一次printf(p1=%f\n,p1);//输出按第1种方案得到的本息和printf(p2=%f\n,p2);//输出按第2种方案得到的本息和printf(p3=%f\n,p3);//输出按第3种方案得到的本息和printf(p4=%f\n,p4);//输出按第4种方案得到的本息和printf(p5=%f\n,p5);//输出按第5种方案得到的本息和return0;}运行结果:53.购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为30万元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位小数按四舍五入处理。提示:计算还清月数m的公式如下:)1lg()lg(lgrrdppm可以将公式改写为)1lg(lgrrdppmC的库函数中有求对数的函数logl0,是求以10为底的对数。解:根据以上公式可以很容易写出以下程序:#includestdio.h#includemath.hintmain(){floatd=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(m=%6.1f\n,m);return0;}运行结果:即需要69.7个月才能还清。4.分析下面的程序:#includestdio.hintmain(){charc1,c2;c1=197;c2=198;printf(c1=%c,c2=%c\n,c1,c2);printf(c1=%d,c2=%d\n,c1,c2);return0;}(1)运行时会输出什么信息?为什么?6解:运行时输出:第1行是将c1,c2按%c的格式输出,97是字符a的ASCII代码,98是字符b的ASCII代码。第2行是将c1,c2接%d的格式输出,所以输出两个十进制整数。(2)如果将程序第4,5行改为c1=197;c2=198;运行时会输出什么信息?为什么?解:由于VisualC++6.0字符型数据是作为signedchar类型处理的,它存放字符的有效范围为0~127,超过此范围的处理方法,不同的系统得到的结果不同,因而用%c格式输出时,结果是不可预料的。用“%d”格式输出时,输出c1=-59,c2=-58。这是按补码形式输出的,内存字节中第1位为1时,作为负数。59与197之和等于256,58与198之和也等于256。对此可暂不深究。只要知道:用char类型变量时,给它赋的值应在0~127范围内。(3)如果将程序第3行改为intc1,c2;运行时会输出什么信息?为什么?解:如果给c1和c2赋的值是97和98,则输出结果与(1)相同。如果给c1和c2赋的值是197和198,则用%c输出时,是不可预料的字符。用%d输出时,输出整数197和198,因为它们在int类型的有效范围内。5.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,cl='A',c2='a'。问在键盘上如何输入。#includestdio.hintmain(){inta,b;floatx,y;charc1,c2;scanf(a=%db=%d,&a,&b);7scanf(%f%e,&x,&y);scanf(%c%c,&c1,&c2);printf(a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n,a,b,x,y,c1,c2);return0;}解:按如下方式在键盘上输入(见下面第1,2两行):第3行是输出的结果。6.请编程序将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使cl,c2,c3,c4,c5这5个变量的值分别为'C','h','i','n','a',经过运算,使c1,c2,c3,c4,c5分别变为'G','l','m','r','e'。分别用putchar函数和printf函数输出这5个字符。解:程序如下:#includestdio.hintmain(){charc1='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(passwordis%c%c%c%c%c\n,c1,c2,c3,c4,c5);return0;}运行结果:7.设圆半径r=l.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编写程序。解:程序如下:#includestdio.hintmain()8{floath,r,l,s,sq,vq,vz;floatpi=3.1415926;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;//计算圆柱体积vzprintf(圆周长为:l=%6.2f\n,l);printf(圆面积为:s=%6.2f\n,s);printf(圆球表面积为:sq=%6.2f\n,sq);printf(圆球体积为:vq=%6.2f\n,vq);printf(圆柱体积为:vz=%6.2f\n,vz);return0;}运行结果:8.编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:(1)变量c1和c2应定义为字符型还是整型?或二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符变量是否在任何情况下都可以互相代替?如:charc1

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功