C语言程序设计第3版谭浩强课后习题答案.pdf

上传人:无*** 文档编号:90886925 上传时间:2023-05-18 格式:PDF 页数:89 大小:6.81MB
返回 下载 相关 举报
C语言程序设计第3版谭浩强课后习题答案.pdf_第1页
第1页 / 共89页
C语言程序设计第3版谭浩强课后习题答案.pdf_第2页
第2页 / 共89页
点击查看更多>>
资源描述

《C语言程序设计第3版谭浩强课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计第3版谭浩强课后习题答案.pdf(89页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

26、:include in t m ain()(in t c lrc2;定义整型变量p rin tf(请输入两个整数c l,c2:);sc a n t 找 d,%dHr&cl,&c2);p rin tf(按字符输入结果:n);p rin tf cnn#c l,c 2);p rin tf(按ASCII码输入出结果为:n);p rin tf(w,ld,Z d nM,c lr c2);retu rn 0;)运行结果:14 请输入两个整数01,02:清,98/技字符输出结果:a,b按ASCII码编出结果:97,98程序2:#i nc l u d e i nt m a i n 0(c h a r c l,c

27、 2;定义字符型变局i nt i lri 2;定义整邢变址p ri nt f (”请输入两个整数c l,c 2:*;s c a nf(*%C/七 c,&c l,&c 2);i l-c l;赋值给整型变扇i 2=c 2;p ri nt f按字符愉人结果:n);p ri nt f (w%cf%c nw,i l,i 2);pr in U按整数除人出结果:n);p ri nt f (H%dr%d nM/c lrc 2);re t u rn 0;)运行结果:话输入两个字符c l,c 2:a,b/按字符输出结果:ar b按整数愉出结果:97,98程序3:#i nc l u d e i nt m a i n

28、 )(c h a r c l,c 2;i nt i lr i 2;p ri nt f (请输入的会整数i l,i 2:s c a nf wt d,t dR,&i l,&i 2);c l=11;c 2-i 2;p ri nt f L按字符侑入结果:n);p ri nt f (%c,t c n*/c lrc 2);p ri nt f L按整数输入出结果:n);p ri nt f (%d,t d n,c】,c 2);定义字符那变出定义为掇型变用将慑数赋值给字符变总 15-return 0;)运行结果:请输入两个整数i l,i 2:298,330/按字符输出结果:*,J按条数输出结果:42,74请注意

29、c l 和 c2是字符变量,只 占 1 个字节,只能存放0 255范围内的整数.而现在输人给i l 和 i2 的值已超过。255的范围,所以只将整型变量i l 和 i2 在内存存储单元中的最后一个字节(低 8 位)赋给c l 和 c 2.可以看到 298 256=42.330-256=74。读者可以写出298和 330的二进制形式.取其低8 位,即可一目了然.与ASCII码 4 2 和7 4 相应的字符为“*”和“J”,因此。按字符形式输出结果时输出,请读者注意分析。16 选择结构程序设计4.1 什么是算术运算?什么是关系运算?什么是逻辑运算?解:略,.4.2 C 语言中如何表示“真“和假”?

30、系统如何判断一个a t的“真”和“假”?解:如果有一个逻辑表达式,若其值为“真”,系统会以I表示.若其值为“假”,会以0表示.但是在判断一个逻辑盘的值时,系统会以0作为假”,以 非0作为“真”.例如3&5的值为“真”,系统给出3&5的值为I.4.3 写出下面各逻辑表达式的值,设a=3,b=4,c=5.(1)a+bc&b=c(2)a|b+c&bc(3)!(ab)&!c|1(4)!(x=a)&(y=b)&0(5)!(a+b)+c-1&b+c/2解:(1)0(2)1(3)1(4)0(5)14.4编一个程序当给.r输 入 任 意 的 正 数 时 都 输 出1:当给了输人任意的负数时,y都输出一 1;当

31、 给r输 人。时,y输 出0.如果用数学式 外子表示,就是下面的函数,参见图4.1.I-1 (x =I 0(x=0)_|1 (x 0)有以下几个程序,请 判 断 哪 个(可 能 不 止 一 个)是 正 确 的?分别画出它们的N-S图。图4.1程 序 I:*i nc l u d e i nt m a i n()(i nt x,y;p ri nt f(e nt e r x:w);s c a nf;i f (x y-l;e l s ei f (x-0)y-0;e l s e y-1;p ri nt f (x-y-*d n”,x,y);re t u rn 0;)程序2,将上面程序的i f 语句(第6

32、10行)改为,i f (x-0)i f(x 0)y-1;e l s e y-0;e l s e y-1;程序3,将上述if 语句改为:y-1;i f (x!-0)i f (x 0)y-1;e l s e y-0;程序4,将上述if 语句改为:y-0;i f (x-0)i f (x 0)y-1;e l s e y-1;解:先按题目要求写出算法:输 人x若 x 0,JM y-1输 出y或输人x若 x 0,则 y-1输 出y也可以用流程图表示,见图4.2.分析上面4个程序,只有程序I和程序2是正确的。程 序I体现了图4.2的流程,显然它是正确的;程序2的流程图见图4.3.它也能实现题目的要求.图4.

33、2图4.3程序3的流程图见图4.4.程序4的流程图见图4.5.它们不能实现我目的要求。请注意程序中的else与if的配对关系.例如程序3中 的else子句是和它上一行的内嵌的if语句配对,而不与第2行的if语句配对.为了使逻辑关系清晰,避免出错,一般把内嵌的if语句放在外层的eke子句中(如程序I那样),这样由于有外层的else相隔,内嵌的else不会被误认为和外层的if配对,而只能与内嵌的if配对.这样就不会搞混,如像程序3和程序4那样写就很容易出错.4.5有3个整数a、b、c,由键盘输入,输出其中最大的数,请编程序。解:方法一,N*S图见图4.6.程 序 如 下:#i nc l u d e

34、 i nt m a i n()(i nt a,b,c;p ri nt f (W W A 3个整数:”);s c a nf (w%dr%d,%d,&af&b,&c);i f (a b)i f (b c)p ri nt f3个整数中的最大数是e d n”,c);e l s ep ri nt f3个整数中的最大数是*d n”,b);e l s e i f (a c)p ri nt f (-3个整数中的最大数是*d n”,c);e l s ep ri nt f (w3个整数中的最大数是*d n”,a”re t u rn 0;运 行 情 况 如 下:请输入3个整数:72,274,-39/3个整数中的最大

35、数是274方 法 二i使 用 条 件 表 达 式.可 以 使 程 序 更 加 简 明、清 晰。#i nc l u d e i nt m a i n()i nt a,b,c,t e m p,m a x;p ri nt f (请输入3个整数:”);s c a nf (w%d,%d,%dw,&a,&b,&c);t e m p-(a b)?a:b;/*将a和b中的大者存入t e m p中/m a x-(t e m p c?t e m p:c;/*将a和b中的大者与c比较,取最大者*/p ri nt s3个整数的最大数是*d n,m a x”re t u rn 0;运行情况如下,请输入3 个整数:8 9

36、,4 4,1 8 8/3 个整数的最大数是1 8 8请注意:在输入3个整数时,在两个数之间必须用逗号分隔,这是编程者在scanf函数中指定的.如果在运行本程序时,不用逗号分隔,而用空格分隔,如;请输入3 个整数:8 9 4 4 1 8 8 /3 个整数的最大数是8 9这个结果显然是错误的.4.6给出一百分制成绩,要求输出成绩等级AB、C、T)、E 90分以上为A,,8089分为吧.7079分为C.6069分为TT.60分以下为解:程序如下所示.I i n c l u d e i n t m a i n (f l o a t s c o r e;c ha r g r a d e;pr i n t

37、 f (”请输入学生成绩s c a n f (%f*ri s c o r e);w hi l e (s c o r e 1 0 0|s c o r e 0)(pr i n t f (w n 输入有误,请重输s c a n f (w%fw,4 s c o r e);)s w i t c h(i n t)(s c o r e/1 0)(c a s e 1 0:c a s e 9:g r a d e-*A*;b r e a k;c a s e 8:g r a d e-*B1;b r e a k;c a s e 7:g r a d e-*C*;b r e a k;c a s e 6:g r a d e

38、-*D*;b r e a k;c a s e 5:c a s e 4:c a s e 3:c a s e 2:c a s e 1:c a s e 0:g r a d e-*E*;)21-p ri nt f (成绩是*5.1f,相应的等级是*c.n,s c o re,g ra d e);re t u rn 0;运行结果:请输入学生成缜:90.5/成 绩 是90.5,相应的等级是A.请输入学生成绩:59/成馈是59.0,相应的等级是E.说明:对输人的数据进行检查,如小于0或 大 于1 0 0,要求重新输人.(i n t)(s c o r e/1 0)的作用是将(s c o r e/1 0)的值进行

39、强制类型转换,得到一个整型值.例如,当s c o r e的值 为7 8时,(i n t)(s c o r e/1 0)的值为7.然后在s w i t c h语句中执行c a s e 7中的语句.使g r a d e=C.4.7给一个不多于5位的正整数,要求:求出它是几位数;分别输出每一位数字;按逆序输出各位数字,例如原数为3 2 1,应 输 出1 2 3.解:程序如下所示.#i nc l u d e#i nc l u d e i nt m a i n 0(l o ng i nt nu m;i nt i nd i v,t e n,h u nd re d,t h o u s a nd,t e n_

40、 t h o u s a nd/p l a c e;/*分别代表个位二十位,百位,千位,万位和位数/p ri nt s (请输入一个整数(0-99999):-);s c a nf (*%Id”,&nu m);i f (nu m 9999)p l a c e-5;e l s e i f (nu n999)p l a c e-4;e l s e i f (nu m 99)p l a c e-3;e l s e i f (nu m 9)p l a c e-2;e l s e p l a c e-1;p ri nt f :%d n,p l a c e);p ri nt f (“每位数字为:”);t e

41、 n_ t h o u s a nd-nu m/10000;t h o u s a nd-(i nt (nu m-t e n_ t h o u s a nd*10000)/1000;h u nd re d-(i nt)(nu m-t e n_ t h o u s a nd*10000-t h o u s a nd *1000)/100;t e n-(i nt)(nu m-t e n t h o u s a nd *10000-t h o u s a nd *1000-h u nd re d *100)/10;i nd i v-(i nt)(nu n-t e n_ t h o u s a nd*

42、10000-t h o u s a nd*1000-h u nd re d*100-t e n*10);s w i t c h (p l a c e)c a s e 5:p ri nt f (%d,%d,%d,%d,%d,t e n_ t h o u s a nd,t h o u s a nd,h u nd re d,t e n,i nd i v);p ri nt f 反序数字为:”);p ri nt f (w%d%d%d%d%d nw,i nd i v,t e n,h u nd re d,t h o u s a nd,t e n_ t h o u s a nd);b re a k;c a s

43、 e 4:p ri nt f (w%dr%d,%d,%dwr t h o u s a nd,h u nd re d,t e n,i nd i v);p ri nt f r n反序数字为:p ri nt f d%d nw,i nd i v,t e n,h u nd re d,t h o u s a nd);b re a k;c a s e 3:p ri nt f (w%d,%d,%dw,h u nd re dr t e n,i nd i v);pr in tf反序数字为:p ri nt f (w%d i d%d n”,i nd i v,t e n,h u nd re d);b re a k;c

44、a s e 2:p ri nt f i nd i v);p ri nt f (n反序数字为:”);p ri nt f (w%d%d nw,i nd i v,t e n);b re a k;c a s e 1:p ri nt f i nd i v);p ri nt f n 反序数字为:p ri nt f(w%d nn,i nd i v);b re a k;re t u rn 0;)运行结果:请输入一个整数(0-99999):98423/位数:5每位数字为:9,8,4,2,3反序数字为:324894.8企业发放的奖金根据利润提成.利润I 低于或等于10 0 0 0 0 元的,奖金可提10%;利润高

45、于10 0 0 0 0 元,低 于 20 0 0 0 0 元(10 0 0 0 0 1420 0 0 0 0)时,低 于 10 0 0 0 0 元的部分按10%提成,高 于 10 0 0 0 0 元的部分,可提成7.5%#20 0 0 0 0 1 40 0 0 0 0 时,低于20 0 0 0 0 元的部分仍按上述办法提成(下同).高于20 0 0 0 0 元的部分按5%提 成 40 0 0 0 0 10 0 0 0 0 0 时,超 过 I 0 0 0 0 0 0 元的部分按1%提成。从键盘输人当月利润I,求应发奖金总数。要求:(1)用 if语句编程序;(2)用 switch语句编程序。解:(

46、1)用 if语句编程序;23#in clu d e in t main()long i;double b o n u s,b o n l/bon2,bon4,bon6/bonl0;bo n l-100000*0.1;bon2-bonl+100000*0.075;bon4-bon2f 100000*0.05;bon6-bon4+100000*0.03;bonl0bon6+400000*0.015;p rin tf(请输入利润1:w);sc a n f(w%ldwf 4 i);i f (i-100000)b o n u s-i*0.1;e ls e i f (i-200000)bonusbonl+

47、(i-100000)*0.075;e ls e i f (i-400000)bonus-bon2+(i-200000)*0.05;e ls e if (i-600000)bonus-bon4+(i-400000)*0.03;e ls e if (i -1000000)bonusmbon6+(i-600000)*0.015;e ls ebonus-bonl0+(i-1000000)*0.01;p r i n t f(”奖金是:%1 0.2 fnwrbonus);re tu rn 0;)运行结果:请输入利润i:234000/奖金是:19200.00此题的关键在于正确写出每一区间的奖金计算公式,例如

48、利润在1 0万 元 至2 0万元时,奖金应由两部分组成:利 润 为1 0万元时应得的奖金,即1 0万元X 0.I.1 0万元以上部分应得的奖金,即(n u m-1 0万)X 0.0 7 5元.同理,2 0万 4 0万元这个区间的奖金也应由两部分组成:利 润 为2 0万元时应得的奖金,即1 0万元X 0.1 +1 0万元X 0.0 7 5.2 0万元以上部分应得的奖金,即(n u m 2 0万)X 0.0 5元.程序中先把1 0万元、2 0万元.4 0万元、6 0万元、1 0 0万元各关键点的奖金计算出来,即b o n l、b o n 2、b o n 4、b o n 6、b o n l 0.然后

49、再加上各区间附加部分的奖金即可.(2)用s w i t c h语句编程序,N-S图见图4.7.2 4#include in t main()long i;double bonus fbonl,bon2rbon4f bonfi,bonlO;in t branch;bonl-100000*0.1;bon2-bonl+100000*0.075;bon4-bon2+200000*0.05;bon6-bon4+200000*0.03;bonl0-bon6+400000*0.015;p rin tf(请输入利润i:scanf;b ra n c h-i/1 00000;i f (branch 10)b ra

50、n ch-10;sw itch(branch)case 0:bonus-i*0.1;break;case 1:bonus-bonlf(i-100000)*0.075;break;case 2:case 3:bonus-bon2+(i-200000)*0.05;break;case 4:case 5:bonus-bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9:bonus-bon6+(i-600000)*0.015;break;case 10:bonus-bonl0+(i-1000000)*0.01;25)printf(”奖金是%10.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁