C语言程序设计第三版谭浩强课后习题答案完整版.pdf
《C语言程序设计第三版谭浩强课后习题答案完整版.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计第三版谭浩强课后习题答案完整版.pdf(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言程序设计第三版谭浩强课后习题答案完整版课后习题答案完整版第一章第一章1.51.5 请参照本章例题,请参照本章例题,编写一个编写一个 C C 程序,程序,输输出以下信息:出以下信息:VeryVeryGood!Good!解:mian()printf(“*”);printf(“n”);printf(“VeryGood!n”);printf(“n”);printf(“*”);1.61.6 编写一个程序,输入编写一个程序,输入 a a、b b、c c 三个值,三个值,输出其中最大值。输出其中最大值。解:mian()int a,b,c,max;printf(“请输入三个数 a,b,c:n”);sc
2、anf(“%d,%d,%d”,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(“最大数为:“%d”,max);第三章第三章3.63.6 写出以下程序运行的结果。写出以下程序运行的结果。main()charc1=a,c2=b,c3=c,c4=101,c5=116;printf(“a%cb%ctc%ctabcn”,c1,c2,c3);printf(“tb%c%c”,c4,c5);解:aa bb cc abcA N3.73.7要将要将ChinaChina译成密码,译码规律是:译成密码,译码规律是:用原来字母后面的第用原来字母后面的第 4 4 个字
3、母代替原来的字个字母代替原来的字母母 例如,例如,字母字母AA后面第后面第 4 4 个字母是个字母是EE EE代替代替AA。因此,。因此,ChinaChina应译为应译为GlmreGlmre。请编一程序,请编一程序,用赋初值的方法使用赋初值的方法使 clcl、c2c2、c3c3、c4c4、c5c5 五个变量的值分别为,五个变量的值分别为,C C、h h、i i、n n、a a,经过运算,使,经过运算,使c1c1、c2c2、c3c3、c4c4、c5c5 分别变为分别变为 GG、l l、mm、r r、e e,并输出。并输出。解:第 1 页#include main()chari=8;j=10;m=
4、+i;n=j+;printf(“%d,%d,%d,%d”,i,j,m,n);解:9,11,9,103.123.12 写出下面表达式运算后写出下面表达式运算后 a a 的值,设原的值,设原来来 a=12a=12。设。设 a a 与与 n n 都已定义为整型变量。都已定义为整型变量。(1)a+=a(2)a-=2(3)a*=2+3密码(4)a/=a+a(5)a%=(n%=2),n 的值等于 5(6)a+=a-=a*=a解:(1)24(2)10(3)60(4)0(5)0(6)0第四章第四章4 44 4 若若 a=3a=3,b=4b=4,c=5c=5,x=1.2x=1.2,y=2.4y=2.4,z=-3
5、.6z=-3.6,u=51274u=51274,n=128765n=128765,c1=c1=a a,c2=c2=b b。想得到以下输出格式与结果,请。想得到以下输出格式与结果,请写出程序(包括定义变量类型与设计输出)写出程序(包括定义变量类型与设计输出)。a=_3_ _b=_4_ _c=_5x=1.200000,y=2.400000,z=-3.600000 x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40第 2 页c1=C,c2=h,c3=i,c4=n,c5=a;c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;printf(是%c%c%c%c%cn,c1,c2
6、,c3,c4,c5);运行结果:密码是 Glmre3.93.9 求下面算术表达式的值。求下面算术表达式的值。(1)x+a%3*(int)(x+y)%2/4设 x=2.5,a=7,y=4.7(2)(float)(a+b)/2+(int)x%(int)y设 a=2,b=3,x=3.5,y=2.5(1)2.5(2)3.53.103.10 写出程序运行的结果。写出程序运行的结果。main()int i,j,m,n;c1=a _or_97(ASCII)c2=b _or_98(ASCII)main()int a=3,b=4,c=5;long int u=51274,n=128765;float x=1.2
7、,y=2.4,z=3.6;char c1=a,c2=b;a=3_b=7_x=8.5_y=71.82_c1=A_c2=a4 48 8 设圆半径设圆半径 r=1.5r=1.5,圆柱高圆柱高 h=3h=3,求圆周求圆周长、圆面积、圆球表面积、圆球体积、圆柱长、圆面积、圆球表面积、圆球体积、圆柱体积。用体积。用 scanfscanf 输入数据,输出计算结果,输入数据,输出计算结果,输出时要求文字说明,输出时要求文字说明,取小数点后两位数字。取小数点后两位数字。printf(a=%2d b=%2d c=%2dn,a,b,c);请编程序。请编程序。printf(x=%f,y=%f,z=%fn,x,y,z)
8、;printf(x+y=%5.2fy+z=%5.2fmain()float r,h,C1,Sa,Sb,Va,Vb;scanf(%f,%f,&r,&h);C1=2*3.14*r;Sa=3.14*r*r;Sb=4*Sa;Va=4*3.14*r*r*r/3;Vb=Sa*h;z+x=%5.2fn,x+y,y+z,z+x);printf(u=%6ld n=%9ldn,u,n);printf(%s%s%d%sn,c1=a,or,c1,(ASCII);printf(%s%s%d%sn,c2=a,or,c2,(ASCII);4 4 7 7 用用 scanfscanf 下面的函数输入数据,下面的函数输入数据,使
9、使 a=3a=3,printf(C1=%.2fn,C1);b=7b=7,x=8.5x=8.5,y=71.82y=71.82,c1=c1=A A,c2=c2=a a,问在键盘上如何输入?,问在键盘上如何输入?main()int a,b;float x,y;char c1c2;scanf(a=%d_b=%d,&a,&b);scanf(_x=%f_y=%e,&x,&y);printf(Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn,Sa,Sb,Va,Vb);4 4 9 9 输入一个华氏温度,输入一个华氏温度,要求输出摄氏温度。要求输出摄氏温度。公式为公式为c=5(F-32)/9c=
10、5(F-32)/9输出要求有文字说明,取位输出要求有文字说明,取位 2 2 小数。小数。第 3 页scanf(_c1=%c_c2=%c,&c1,&c2);main()float F,c;scanf(%f,&F);c=5*(F-32)/9;printf(c=%.2f,c);4 41010 编程序,用编程序,用getchargetchar 函数读入两个字函数读入两个字符给符给 c1c1、c2c2,然后分别用函数与函数输出这然后分别用函数与函数输出这char c1,c2;c1=getchar();c2=getchar();printf(c1=%d c2=%dn,c1,c2);printf(c1=%c
11、 c2=%cn,c1,c2);第五章第五章5.15.1什么是算术运算?什么是关系运算?什么是算术运算?什么是关系运算?两个字符。并思考以下问题:两个字符。并思考以下问题:()变量()变量c1c1、什么是逻辑运算?什么是逻辑运算?c2c2 应定义为字符型或整形?抑二者皆可?应定义为字符型或整形?抑二者皆可?()()要求输出要求输出 c1c1 与与 c2c2 值的值的 ASCIIASCII 码,码,应应如何处理?用如何处理?用 putcharputchar 函数还是函数还是 printfprintf 函函数?()整形变量及字符变量是否在任何数?()整形变量及字符变量是否在任何情况下都可以互相代替?
12、如:情况下都可以互相代替?如:charc1,c2;及intc1,c2;是否无条件的等价?#includestdio.hmain()char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(n);putchar(c2);putchar(n);#includestdio.hmain()解:略。5.25.2C C 语言中如何表示“真”与“假”语言中如何表示“真”与“假”?系?系统如何判断一个量的“真”与“假”?统如何判断一个量的“真”与“假”?解:设有一个逻辑表达式,若其结果为“真”,则以 1 表示;若其结果为“假”,则以 0 表示。但是判断一
13、个逻辑量的值时,以0 代表“真”,以非 0 代表“假”。例如 3&5 的值为“真”,系统给出 3&5 的值为 1。5.35.3写出下面各逻辑表达式的值。设写出下面各逻辑表达式的值。设a=3a=3,b=4b=4,c=5c=5。(1)(1)a+bc&b=ca+bc&b=c(2)(2)a|b+c&b-ca|b+c&b-c(3)(3)!(ab)&!c|1!(ab)&!c|1(4)(4)!(x=a)&(y=b)&0!(x=a)&(y=b)&0(5)(5)!(a+b)+c-1&b+c/2!(a+b)+c-1&b+c/2解:(1)0第 4 页(2)1(3)1(4)0(5)15.45.4有有 3 3 个整数个
14、整数 a a、b b、c c,由键盘输入,由键盘输入,输出其中最大的数。输出其中最大的数。解:方法一#include main()int a,b,c;printf(请输入 3 个整数:);scanf(%d,%d,%d,&a,&b,&c);if(ab)if(bc)printf(max=%dn,c);elseprintf(max=%dn,b);elseif(ac)printf(max=%dn,c);elseprintf(max=%dn,a);方法二:使用条件表达式,可以使程序更加简明、清晰。程序如下:#include main()int a,b,c,temp,max;printf(请输入 3 个整
15、数:);scanf(%d,%d,%d,&a,&b,&c);temp=(ab)?a:b;/*将 a 与 b中的大者存人 temp 中*/max=(tempc)?temp:c;/*将 a 与 b中的大者及 c 比较,取最大者*/printf(3 个整数的最大数是%dn”,max);5.55.5有一函数:有一函数:写一程序,输入写一程序,输入 x x 值,输出值,输出 y y 值。值。解:#include main()int x,y;printf(输入 x:);scanf(%d,&x);if(x1)/*x1*/y=x;printf(x=%3d,y=x=%dn,x,y);elseif(x10)/*1x
16、-10*/y=2*x-1;printf(x=%3d,y=2*x-1=%dn,x,y);else/*x10*/第 5 页 y=3*x-11;case 4:printf(x=%3d,y=3*x-11=%dn,x,y);case 3:5.65.6 给一个百分制成绩,要求输出等级给一个百分制成绩,要求输出等级A A、B B、C C、DD、E E。9090 分以上为分以上为A A,80908090 分为分为B B,70797079 分为分为C C,case 2:case 1:case 0:grade=E;6060 分以下为分以下为DD。解:程序如下:#include main()float score;
17、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:printf(成绩是%5.1f,相应的等级是%c。n,score,grade);说明:对输入的数据进行检查,如小于0 或大于 100,要求重新输入。(
18、int)(score/10)的作用是将(score/10)的值进行强制类型转换,得到一个整型值。5.75.7 给定一个不多于给定一个不多于 5 5 位的正整数,要求:位的正整数,要求:求它是几位数;求它是几位数;分别打印出每一位数分别打印出每一位数字;字;按逆序打印出各位数字。按逆序打印出各位数字。例如原数为例如原数为321321,应输出,应输出 123123。);解:#include main()long int num;intindiv,ten,hundred,thousand,ten_thousand,place;/*分别代表个位、十位、百位、千位、万位与位数*/第 6 页printf(
19、请输入一个整数(099999):);red,ten,indiv);scanf(%ld,&num);if(num9999)place=5;elseif(num999)place=4;elseif(num99)place=3;elseif(num9)place=2;elseplace=1;printf(place=%dn,place);ten_thousand=num/10000;thousand=num/1000%10;hundred=num/100%10;ten=num%100/10;indiv=num%10;switch(place)case5:printf(n 反序数字为:);printf
20、(%d%d%d%dn,indiv,ten,hundred,thousand);break;case3: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;5.85.8 企业发放的奖金
21、根据利润提成。利润企业发放的奖金根据利润提成。利润 I I4:低于或等于低于或等于 1010 万元时,奖金可提成万元时,奖金可提成10%10%;利润高于利润高于 1010 万元,万元,低于低于 2020 万元万元(100000I100000Iprintf(%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;caseprintf(%d,%d,%d,%d,thousand,h
22、und第 7 页200000200000)时,时,其中其中 1010 万元按万元按 10%10%提成,提成,利润为 20 万元时的奖金*/高于高于 1010 万元的部分,可提成万元的部分,可提成7.5%7.5%;200000I200000I400000400000 时,时,其中其中 2020 万元仍按万元仍按上述办法提成(下同)上述办法提成(下同),高于,高于2020 万元的部分万元的部分按按 5%5%提成;提成;400000I4000001000000I1000000 时,超过时,超过 100100 万元的部分万元的部分按按 1%1%提成。提成。从键盘输入当月利润从键盘输入当月利润 I I,
23、求应发求应发放奖金总数。放奖金总数。要求:要求:(1)(1)用用 if if 语句编程序;语句编程序;(2)(2)用用 switchswitch 语句编程序。语句编程序。解:计算利润时,要特别注意不同利润的不同提成比例。例如,利润为 15 万元,其中有 10 万元按 10%的比例提成,另外 5 万元则按 7.5%提成。(1)用 if 语句编程序。#include main()long i;floatbonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1;/*利润为 10 万元时的奖金*/bon2=bon1+100000*0.075;/*bon4=bon2
24、+200000*0.05;/*利润为 40 万元时的奖金*/bon6=bon4+200000*0.03;/*利润为 60 万元时的奖金*/bon10=bon6+400000*0.015;/*利润为 100 万元时的奖金*/printf(请输入利润 i:);scanf(%ld,&i);if(i=100000)bonus=i*0.1;/*利润在 10 万元以内按 0.1 提成奖金*/elseif(i=200000)bonus=bon1+(i-100000)*0.075;/*利润在 10 万至 20 万元时的奖金*/elseif(i=400000)bonus=bon2+(i-200000)*0.05
25、;/*利润在 20 万至 40 万元时的奖金*/elseif(i=600000)bonus=bon4+(i-400000)*0.03;/*利润在 40 万至 60 万元时的奖金*/elseif(i=1000000)bonus=bon6+(i-600000)*0.015;/*利润在 60 万至 100 万元时的奖金*/第 8 页elsebonus=bon10+(i-1000000)*0.01;/*利润在 100 万元以上时的奖金*/printf(”奖金是%10.2fn,bonus);此题的关键在于正确写出每一区间的奖金计算公式。例如利润在 10 万元至 20 万时,奖金应由两部分组成:利润为 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第三 版谭浩强 课后 习题 答案 完整版
限制150内