C程序设计谭浩强第二版课后习题解答.docx
- 文档编号:10518958
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:26
- 大小:47.41KB
C程序设计谭浩强第二版课后习题解答.docx
《C程序设计谭浩强第二版课后习题解答.docx》由会员分享,可在线阅读,更多相关《C程序设计谭浩强第二版课后习题解答.docx(26页珍藏版)》请在冰豆网上搜索。
C程序设计谭浩强第二版课后习题解答
第一章
1.5请参照本章例题,编写一个C程序,输出以下信息:
******************************
Very Good!
******************************
1.6编写一个C程序,输入a、b、c3个值,输出其中最大者。
第三章
3.3请将下面各数用八进制和十六进制(补码)表示:
(1)10
(2)32(3)75(4)-617(5)-111
(6)2483(7)-28654(8)21003
3.5字符常量与字符串常量有什么区别?
3.6写出以下程序运行的结果。
main()
{charc1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tc%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
}
3.7要将”China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,字母”A”后面第4个字母是”E”,用”E”代替”A”。
因此,”China”应译为”Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。
3.8例3.6能否改成如下:
main()
{intc1,c2;
c1=97;
c2=98;
printf(“%c%c\n”,c1,c2);
printf(“%d%d\n”,c1,c2);
}
3.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
3.10写出程序运行结果
main()
{inti,j,m,n;
i=8;
j=10;
m=++I;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
3.12写出下面表达式运算后a的值,设原来a=12。
设a和已定义为整型变量。
(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
第四章
4.3C语言为什么要把输入输出的功能作为函数,而不作为语言的基本部分?
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。
想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:
a=□3□□b=□4□□c=□5
x=1.200000,y=2.400000,z=-3.600000
x+y=□3.60□□y+z=-1.20□□z+x=-2.40
u=□51274□□n=□□□128765
c1=’a’□or□97(ASCII)
c2=’b’□or□97(ASCII)
4.5请写出下面程序的输出结果:
#include"stdio.h"
main()
{inta=5,b=7;
floatx=67.8564,y=-789.124;
charc='A';
longn=1234567;
unsignedu=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%10.2e\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("%s,%5.3s\n","COMPUTER","COMPUTER");
}
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。
请编程序。
4.9输入一个华氏温度,要求输出摄氏温度。
公式为
输出要有文字说明,取2位小数。
4.10编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1、c2应定义为字符型或整型?
抑二者皆可?
(2)要求输出c1和c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量与字符变量是否在任何情况下都可以互相代替?
如
charc1,c2;与intc1,c2;是否无条件地等价?
第五章
5.3写出下面各逻辑表达式的值。
设a=3,b=4,c=5。
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!
(a>b)&&!
c||1(4)!
(x=a)&&(y=b)&&0
(5)!
(a+b)+c-1&&b+c/2
5.4有3个整数a、b、c,由键盘输入,输出其中最大的数。
5.5有一函数:
,写一程序,输入x,输出y值。
5.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。
5.8企业发放的奖金根据利润提成。
利润I低于或等于10万元的,奖金可提10%;利润高于10万元,低于20万元(100000100万元时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
5.9输入4个整数,要求按由小到大的顺序输出。
5.10有4个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。
这4个塔的高度为10m,塔以外无建筑物。
今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。
2
6.1输入两个正整数m和n,求其最大公约数和最小公倍数。
6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
6.3求
之值,其中a是一个数字。
例如:
2+22+222+2222+22222(此时n=5),n由键盘输入。
6.4求
(即求1!
+2!
+3!
+4!
+…+20!
)。
6.5求
。
6.6打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
例如,153是一水仙花数,因为153=13+53+33。
6.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
编程序找出1000之内的所有完数,并按下面格式输出其因子:
6itsfactorsare1,2,3
6.8有一分数序列
求出这个数列的前20项之和。
6.9一球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下。
求它在第10次落地时,共经过多少米?
第10次反弹多高?
6.10猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,就只剩下一个桃子了。
求第一天共摘了多少桃子。
6.11用迭代法求
。
求平方根的迭代公式为
要求前后两次求出的x的差的绝对值小于10-5。
(可不做)
6.12用牛顿迭代法求下面方程在1.5附近的根。
(可不做)
2x3-4x2+3x-6=0
6.13用二分法求下面方程在(-10,10)之间的根。
(可不做)
2x3-4x2+3x-6=0
6.14打印出以下图案。
*
***
*****
*******
*****
***
*
6.15两个乒乓球队进行比赛,各出3人。
甲队为A、B、C3人,乙队为X、Y、Z3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编程序找出3对赛手的名单。
《C程序设计》习题解答
第一章
1.5
main()
{printf(" ******************************\n");
printf("\n");
printf(" Very Good!
\n");
printf("\n");
printf((" ******************************\n");
}
1.6
main()
{inta,b,c,max;
printf("inputa,b,c:
\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max
if(max printf("max=%d",max); } 第二章习题解略 第三章 第三章要点: 1、C语言的数据类型 P38图 2、常量、变量的约定及各类数据常量、变量使用的约定。 3、运算符及表达式的约定和应用。 难点: 自加、自减的用法及其运算后的值。 逗号运算符及逗号表达式的用法 3.3 (1)、(10)10=(12)8=(a)16 (2)、(32)10=(40)8=(20)16 (3)、(75)10=(113)8=(4b)16 (4)、(-617)10=(176627)8=(fd97)16 (5)、(-111)10=(177621)8=(ff91)16 (6)、(2483)10=(4663)8=(9B3)16 (7)、(-28654)10=(110022)8=(9012)16 (8)、(21003)10=(51013)8=(520B)16 3.4略 3.5字符常量是一个字符,用单引号括起来。 字符串常量是由0个或若干个字符组合而成,用双引号把它们括起来,存储时自动在字符串最后加一个结束符号‘0’。 3.6运行结果为: aabb cc abc AN 3.7 main() {charc1=’C’,c2=’h’,c3=’i’,c4=’n’,c5=’a’; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf(“密码是%c%c%c%c%c\n”,c1,c2,c3,c4,c5); } 3.8可以。 因为在可输出的字符范围内,用整型和用字符型作用相同。 3.9(1)2.5(2)3.5 3.10结果为: 9,11,9,10 3.12 (1)24 (2)10 (3)60 (4)0 (5)0 (6)0 第三章 第四章要点: 1、C语句分类 2、赋值语句的用法 3、数据输入输出的语句的用法。 特别注意格式输入、输出语句的用法,要看到语句能写出输入、输出结果,给出输入、输出结果能写出语句。 4、顺序程序的概念、结构。 4.3不把输入输出作为C语言提供的语句的目的是使C语言编译系统简单,因为将语句翻译成二进制的指令是在编译阶段完成的,没有输入输出语句就是可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强,可移植性好,对各种型号的计算机都适用,便于在各种计算机上实现。 4.4 main() {inta,b,c; longintu,n; floatx,y,z; charc1,c2; a=3;b=4;c=5; x=1.2;y=2.4;z=-3.6; u=51274;n=128765; c1=’a’;c2=’b’; printf(“\n”); printf(“a=%2db=%2dc=%2d\n”,a,b,c); printf(“x=%8.6f,y=%8.6f,z=%9.6f\n”,x,y,z); printf(“x+y=%5.2fy+z=%5.2fz+x=%5.2f\n”,x+y,y+z,,z+x); printf(“u=%6ldn=%9ld\n”,u,n); printf(“c1=’%c’or%d(ASCII)\n”,c1,c1); printf(“c2=’%c’or%d(ASCII)\n”,c2,c2); } 4.5 57 □□5□□7 67.856400,-789.124000 67.856400□,-789.124000 □□□67.86,□-789.12,67.8564,-789.1240,67.856400,-789.124000 6.785640e+01,□-7.89e+02 A,65,101,41 1234567,4553207,d687 65535,177777,ffff,-1 COMPUTER,□□COM 4.8 main() {floatpi,h,r,l,s,sq,vq,vz; pi=3.14 printf(inputr,h\n”); scanf(“%f,%f”,&r,&h); l=2*pi*r;s=r*r*pi;sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; z=pi*r*r*h; printf(“l=%6.2f\n”,l); printf(“s=%6.2f\n”,s); printf(“sq=%6.2f\n”,sq); printf(“sv=%6.2f\n”,sv); printf(“sz=%6.2f\n”,sz); } 4.9 main() {floatc,f; printf(“请输入一个华氏温度: \n”); scanf(“%f”,&f); c=(5.0/9.0)*(f-32); printf(“摄氏温度为: %5.2\n”,c); } 4.10 #include“stdio.h” main() {charc1,c2; printf(“inputc1,c2\n”); scanf(%c,%c”,&c1,&c2); putchar(c1); putchar(c2); printf(“\n”); printf(“%c%c\n”,c1,c2); } 第5章 第五章要点: 1、关系运算符和关系运算式; 2、逻辑运算符和逻辑运算式; 3、IF语句的三种形式; 4、条件运算符; 5、switch语句的用法; 5.3 (1)0 (2)1 (3)1 (4)0 (5)1 5.4 main() {inta,b,c,t,max; printf(“inputa,b,c: ”); scanf(“%d,%d,%d”,&a,&b,&c); t=(a>b)? a: b; max=(t>c)? t: c; printf(“max=%d”,max); } 5.5 main() {floatx,y; printf(“inputx: ”); scanf(“%f”,&x); if(x<1) y=x; elseif(x<10) y=2*x-1; else y=3*x-11; printf(“x=%f,y=%f\n”,x,y);} } 5.6 main() {intscore,t,logic; chargrade; logie=1; while(logic) {printf(“inputscore: ”); scanf(“%d”,&score); if((score>100||score<0))printf(“\error”); elselogic=0; printf(“\n”);} if(score==100)t=9; elset=(int)(score/10); switch(t) {case9: grade=’A’;break; case8: grade=’B’;break; case7: grade=’C’;break; case6: grade=’D’;break; case5: case4: case3: case2: case1: case0: grade=’E’; } } } 5.8 (1)用if语句 main() {longi; floatbonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1;/*利润为10万元时的奖金*/ bon2=bon1+100000*0.075;/*利润为20万元时的奖金*/ bon4=bon2+200000*0.05;/*利润为40万元时的奖金*/ bon6=bon4+200000*0.03;/*利润为60万元时的奖金*/ bon10=bon6+40000*0.015;/*利润为100万元时的奖金*/ scanf(%ld”,&i); if(i<1e5)bonus=i*0.1; elseif(i<=2e5) bonus=bon1+(i-100000)*0.075; elseif(I<=4e5) bonus=bon2+(i-200000)*0.05; elseif(I<=6e5) bonus=bon4+(i-400000)*0.03; elseif(I<=1e6) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-100000)*0.01; printf(“bonus=%10.2f”,bonus); } (2)用switch编写 main() {longi; floatt,bonus,bon1,bon2,bon4,bon6,bon10; intc; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+40000*0.015; scanf(%ld”,&i); c=i/100000; if(c>10)c=10; switch(c) {case0: bonus=i*0.1;break; case1: bonus=bon1+(i-100000)*0.075;break; case2: case3: bonus=bon2+(i-200000)*0.05;break; case4: case5: bonus=bon4+(i-400000)*0.03;break; case6: case7: case8: case9: bonus=bon6+(i-600000)*0.015;break; case10: bonus=bon10+(i-1000000)*0.01; } printf(“bonus=%10.2f”,bonus); } 5.9 main() {intt,a,b,c,d; scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); printf(“\na=%d,b=%d,c=%d,d=%d\n”,a,b,c,d); if(a>b){t=a;a=b;b=t;} if(a>c){t=a;a=c;c=t;} if(a>d){t=a;a=d;d=t;} if(b>c){t=b;b=c;c=t;} if(b>d){t=b;b=d;d=t;} if(c>d){t=c;c=d;d=t;} printf(“%d%d%d%d\n”,a,b,c,d); } 5.10 main() {inth=10; floatx,y,x0=2,y0=2,d1,d2,d3,d4; printf(“inputx,y: ”); scanf(“%f,%f”,&x,&y); d1=(x-x0)*(x-x0)+(y-y0)*(y-y0); d2=(x-x0)*(x-x0)+(y+y0)*(y+y0); d3=(x+x0)*(x+x0)+(y-y0)*(y-y0); d4=(x+x0)*(x+x0)+(y+y0)*(y+y0); if(d1>1&&d2>1&&d3>1&&d4>1)h=0; printf(“h=%d”,h) } 第6章 第6章要点: 1、实现循环的语句。 2、几种循环的比较 3、读程序写结果。 常见问题的程序设计。 6.1 #include main() {inta,b,n1,n2,t; printf(“inputa,b\n”); scanf(“%d,%d”,&n1,&n2); if(n1>n2){t=n1;n1=n2;n2=t;} a=n1;b=n2; while(b! =0) {t=a%b; a=b; b=t; } printf(“最大公约数为: %d\n”,a); printf(“最小公倍数为: %d\n,n1*n2/a); } 6.2 #include #include main() {charc; intletters=0,space=0,digit=0,other=0; printf(“输入一行字符: \n”); while((c=getchar())! =’\n’); { if(c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’)letters++; elseif(c==’’)space++; elseif(c>=’0’&&c<=’9’)digit++; elseother++; } printf(“l%d,%d,%d,%d\n”,letters,space,digit,other); } 6.3 #include main() {inta,n,count=1,sn=0,tn=0; scanf(“%d,%d,”,&a,&n); printf(“a=%dn=%d\n”,a,n); while(count<=n) {tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf(“a+aa+aaa+…=%d\n”,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 谭浩强 第二 课后 习题 解答