谭浩强C程序设计第三版课后答案整本书.docx
- 文档编号:4817861
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:19
- 大小:25.35KB
谭浩强C程序设计第三版课后答案整本书.docx
《谭浩强C程序设计第三版课后答案整本书.docx》由会员分享,可在线阅读,更多相关《谭浩强C程序设计第三版课后答案整本书.docx(19页珍藏版)》请在冰豆网上搜索。
谭浩强C程序设计第三版课后答案整本书
C程序设计(第三版)课后习题参考解答
1.6写一个程序,输入a,b,c三个值,输出其中最大者。
解:
main()
{inta,b,c,max;
printf(“请输入三个数a,b,c:
\n”);
scanf(“%d,%d,%d”,&a,&b,&c);
max=a;
if(max
max=b;
if(max max=c; printf(“最大数为: %d”,max); } 第2章程序的灵魂——算法 2.1什么叫结构化的算法? 为什么要提倡结构化的算法? 解: 由一些基本结构顺序组成的算法称为结构化的算法。 由于在基本结构之间不存在非顺序的跳转,流程的转移只存在于一个基本结构范围之内,因而提高了算法的质量。 2.7什么叫结构化程序设计? 它的主要内容是什么? 解: 结构化程序就是用高级语言表示的结构化算法。 它的主要内容包括“自顶向下,逐步细化”的分析方法和“模块化设计”的解决方法,以及“结构化编码”的实现方法。 第3章数据类型、运算符与表达式 3.3请将下面各数用八进制和十六进制数表示: (1)10 (2)32(3)75(4)-617 (5)-111(6)2483(7)-28654(8)21003 解: (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 此题可以这样考虑: 带符号数在计算机中采用补码表示,正数的补码与原码相同,负数的补码=模+真值。 若使用16位存储,模为216=65536。 -617的补码为65536+(-167)=64919=(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将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。 变量的类型 25 -2 32769 int型 long型 sort型 signedchar(8位) unsignedint型 unsignedlong型 unsignedshort型 unsignedchar型 注: 如果没有学过二进制和补码,此题可以不做。 解: 各数据在内存中的存储形式如下表所示: 变量的类型 25 -2 32769 int型 00…0 8位 111111*********0 15 100…001(溢出) 14 long型 00…0 24 11…1110 31 00…0100…001 1614 short型 00…0 8 111111*********0 15 100…001(溢出) 14 signedchar(8位) 00000001(溢出) unsignedint型 00…0 8 11…110 15 100…001 14 unsignedlong型 00…0 24 11…110 31 00…0100…001 1614 unsignedshort型 00…0 8 11…110 15 100…001 8 unsignedchar型 其中int和short类型,其取值范围是-32768~32767。 32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。 char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。 同理,若将long赋给int,则截取低16位。 3.5字符常量和字符串常量有什么区别? 解: 字符常量是一个字符,用单引号括起来。 字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号’\0’。 3.6写出以下程序运行的结果: #include voidmain() {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); } 解: 程序运行的结果为: aabbccabc AN 3.7要将“China”译成密码,密码规律是: 用原来的字母后面第4个字母代替原来的字母。 例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。 因此,“China”应译为“Glmre”。 请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分别为’C’,’h’,’i’,’n’,’a’,经过运算,使c1,c2,c3,c4,c5的值分别变为’G’,’l’,’m’,’r’,’e’,并输出。 解: main() {charcl=’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); } 运行结果: 密码是Glmre 3.8例2.6能否改成如下: main() {intc1,c2;(原为charc1,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 解: (1)2.5 (2)3.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); } 解: 运行结果为: 9,11,9,10 3.11写出下面赋值的结果。 格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。 int 99 42 char ‘d’ ⅹ unsignedint 76 65535 float 53.65 longint 68 解: int 99 100 76 53 68 42 -1 char ‘c’ ‘d’ ‘L’ ‘5’ ‘D’ ‘*’ ⅹ unsignedint 99 1 5535 float 99.000000 100.000000 76.000000 53.65 68.000000 42. .000000 longint 99 1 5535 3.12出下面表达式运算后a的值,设原来a=12。 设a和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章最简单的C程序设计——顺序程序设计 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,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=□51247□□n=□□□128765 c1=’a’□or□97(ASCII) c2=’b’□or□98(ASCII) 解: 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=51247;n=128765; c1=’a’;c2=’b’; printf(“\n”); printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c); printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z); printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x); printf(“u=%6ld□□n=%9ld\n”,u,n); printf(“c1=’%c’or%d(ASCII)\n”,c1,c1); printf(“c2=’%c’or%d(ASCII)\n”,c2,c2); } 4.5请写出下面程序的输出结果: 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”); } 运行结果: 5□7 □□5□□7 67.856400,-789.124023 67.856400□,-789.124023 □□□67.86,□□-789.12,67.8564,-789.1240,67.856400,-789.124023 6.785640e+01,□□-7.9e+02 A,65,101,41 1234567,4553207,d687 65535,177777,ffff,-1 COMPUTER,□□COM 可以发现,输出数据中若有负号、e和小数点,这些字符也占位。 4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。 问在键盘上如何输入? #include voidmain() { inta,b; floatx,y; charc1,c2; scanf(“a=%db=%d”,&a,&b); scanf(“%f%e”,&x,&y); scanf(“%c%c”,&c1,&c2); } 解: a=3□b=7 □8.5□71.82 □A□a 4.7下面的scanf函数输入数据,使a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据? scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z); 解: main() { inta,b;floatx,y,z; charc1,c2; scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z); printf(“a=%d,b=%d,c1=%c,c2=%c,x=%6.2f,y=6.2f,z=6.2f\n”),a,b,c1,c2,x,y,z); } 运行情况如下: □□□10□□□20Aa1.5–3.75□1.5,67.8(此行为输入的数据,其中□为空格) a=10,b=20,c1=A,c2=a,x=1.50,y=-3.75,z=67.80(此行为输出) 说明: 按%5d格式的要求输入a和b时,要先键入三个空格,然后再键入10与20。 %*f是用来禁止赋值的。 在输入时,对应于%*f的地方,随意打入了一个数1.5,该值不会赋给任何变量。 4.8圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。 用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。 请编程序。 解: main() { floatpi,h,r,l,s,sq,vq,vz; pi=3.1415926; printf(“请输入圆半径r,圆柱高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; vz=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”,vq); printf(“圆柱体积为: sz=%6.2f\n”,vz); } 运行结果: 请输入圆半径r,圆柱高h: 1.5,3↙ 圆周长为: l=9.42 圆面积为: s=7.07 圆球表面积为: sq=28.27 圆球体积为: sv=7.95 圆柱体积为: sz=21.21 4.9输入一个华氏温度,要求输出摄氏温度,公式为C=(5/9)(F-32) 输出要有文字说明,取2位小数。 解: main() {floatc,f; printf(“请输入一个华氏温度: \n”); scanf(“%f”,&f); c=(5.0/9.0)*(f-32);/*注意5和9要用实型表示,否则5/9的值为0*/ printf(“摄氏温度为: %5.2f\n”,c); }; 运行结果: 请输入一个华氏温度: 78↙ 摄氏温度为: 25.56 第5章选择结构程序设计 5.2语言中如何表示“真”和“假”? 系统如何判断一个量的“真”和“假”? 解: 设有一个逻辑表达式,若其结果为“真”,则以1表示;若其结果为“假”,则以0表示。 但是判断一个逻辑量的值时,以0代表“真”,以非0代表“假”。 例如3&&5的值为“真”,系统会给出3&&5的值为1。 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 解: (1)0 (2)1 (3)1 (4)0 (5)1 5.4有3个整数a,b,c,由键盘输入,输出其中最大的数。 解: 方法一: 程序如下: main() {inta,b,c; printf(“请输入3个整数: ”); scanf(“%d,%d,%d”,&a,&b,&c); if(a if(b printf(“max=%d\n”,c); else printf(“max=%d\n”,b); elseif(a printf(“max=%d\n”,c); else printf(“max=%d\n”,a); } 运行结果: 请输入3个整数: 12,34,9↙ max=34 方法二: 使用条件表达式,可以使程序更简明,清晰。 main() {inta,b,c,temp,max; printf(“请输入3个整数: ”); scanf(“%d,%d,%d”,&a,&b,&c); temp=(a>b)? a: b;/*将a和b中的大者存入temp中*/ max=(temp>c)? temp: c;/*将a和b中的大者与c比较,取最大者*/ printf(“3个整数中最大数是%d\n”,max); } 方法三: a>b? (a>c? a: c): (b>c? b: c) 运行结果: 请输入3个整数: 12,34,9↙ 3个整数的最大数是34。 5.5有一函数: 写一程序,输入x值,输出y值。 解: 程序如下 main() {intx,y; printf(“输入x: ”); scanf(“%d”,&x); if(x<1)/*x<1*/ {y=x; printf(“x=%d3d,y=x=%d\n”,x,y); } elseif(x<10)/*1≤x<10*/ {y=2*x-1; printf(“x=%3d,y=2*x-1=%d\n”,x,y); } else/*x≥10*/ {y=3*x-11; printf(“x=%3d,y=3*x-11=%d\n”,x,y); } } 运行结果: 1输入x: 4↙ x=4,y=2*x-1=7 2输入x: -1↙ x=-1,y=x=-1 3输入x: 20↙ x=20,y=3*x-11=49 5.6给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。 90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 解: 程序如下 #include"stdio.h" voidmain() { floatscore; chargrade; printf("请输入学生成绩: "); scanf("%f",&score); while(score>100||score<0) { printf("\n输入有误,请重输"); scanf("%f",&score); } switch((int)(score/10)) { case10: case9: grade='A';break; case8: grade='B';break; case7: grade='C';break; case6: grade='D';break; case5: case4: case3: case2: case1: case0: grade='E'; } printf("\n成绩是%5.1f,相应的等级是%c。 \n",score,grade); } 5.7给定一个不多于5位的正整数,要求: ①求它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字。 例如原数为321,应输出123。 解: main() { longintnum; intindiv,ten,hundred,thousand,ten_thousand,place; /*分别代表个位,十位,百位,千位,万位和位数*/ printf(“请输入一个整数(0~99999): ”); scanf(“%ld”,&num); if(num>9999) place=5; elseif(num>999) place=4; elseif(num>99) place=3; elseif(num>9) place=2; elseplace=1; printf(“place=%d\n”,place); printf(“每位数字为: ”); ten_thousand=num/10000; thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); switch(place) {case5: printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv); printf(“\n反序数字为: ”); printf(“%d%d%d%d%d\n”,indiv,ten,hundred,thousand,ten_thousand); break; case4: printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv); printf(“\n反序数字为: ”); printf(“%d%d%d%d\n”,indiv,ten,hundred,thousand); break; case3: printf(“%d,%d,%d”,hundred,ten,indiv); printf(“\n反序数字为: ”); printf(“%d%d%d\n”,indiv,ten,hundred); break; case2: printf(“%d,%d”,ten,indiv); printf(“\n反序数字为: ”); printf(“%d%d\n”,indiv,ten); break; case1: printf(“%d”,indiv); printf(“\n反序数字为: ”); printf(“%d\n”,indiv); break; } } 运行结果: 请输入一个整数(0~99999): 98765↙ 位数=5 每位数字为: 9,8,7,6,5 反序数字为: 56789 5.8企业发放的奖金根据利润提成。 利润I低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元(100000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 谭浩强 程序设计 第三 课后 答案