您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c程序设计第三版习题参考解答(全)
C程序设计(第三版)课后习题参考解答第1章C语言概述1.5参照本章例题,编写一个C程序,输出以下信息:******************************VeryGood!******************************解:main(){printf(“******************************\n”);printf(“\n”);printf(“VeryGood!\n”);printf(“\n”);printf(“******************************\n”);}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(maxb)max=b;if(maxc)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)163.4将以下三各整数分别赋给不同类型的变量,请画出赋值后数据在内存中的存储形式。变量的类型25-232769int型long型sort型signedchar(8位)unsignedint型unsignedlong型unsignedshort型unsignedchar型注:如果没有学过二进制和补码,此题可以不做。解:各数据在内存中的存储形式如下表所示:变量的类型25-232769int型00„0000110018位111111111111111015100„001(溢出)14long型00„0000110012411„11103100„0100„0011614short型100„0000110018111111111111111015100„001(溢出)14signedchar(8位)1000110011111111000000001(溢出)unsignedint型00„000011001811„11015100„00114unsignedlong型00„0000110012411„1103100„0100„0011614unsignedshort型00„000011001811„11015100„0018unsignedchar型000110011111111000000001其中int和short类型,其取值范围是-32768~32767。32769在这两种类型中实际表示负数,它是一个负数的补码,对其再求一次补码可得其真值,即-(65536-32769)=-32767。char和unsignedchar为8位,若将int或long类型数据赋给这种类型,则截取数据低8位。同理,若将long赋给int,则截取低16位。3.5字符常量和字符串常量有什么区别?解:字符常量是一个字符,用单引号括起来。字符串常量是由0个或若干个字符组合而成,用双引号括起来,存储时自动在字符串最后加一个结束符号‟\0‟。3.6写出以下程序运行的结果:main(){charcl=‟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);}解:程序运行的结果为:aabbccabcAN3.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);}运行结果:密码是Glmre3.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.53.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,103.11写出下面赋值的结果。格中写了数值的是要将它赋给其他类型的变量,将所有空格填上赋值后的数值。int9942char„d‟ⅹunsignedint7665535float53.65longint68解:int9910076536842-1char„c‟„d‟„L‟„5‟„D‟„*‟ⅹunsignedint991007653684265535float99.000000100.00000076.00000053.6568.00000042.00000065535.000000longint9910076536842655353.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=□5x=1.200000,y=2.400000,z=-3.600000x+y=□3.60□□y+z=-1.20□□z+x=-2.40u=□51247□□n=□□□128765c1=‟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□□767.856400,-789.12402367.856400□,-789.124023□□□67.86,□□-789.12,67.8564,-789.1240,67.856400,-789.1240236.785640e+01,□□-7.9e+02A,65,101,411234567,4553207,d68765535,177777,ffff,-1COMPUTER,□□COM可以发现,输出数据中若有负号、e和小数点,这些字符也占位。4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入?#includestdio.hvoidmain(){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□a4.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=5c,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格式的要求输
本文标题:c程序设计第三版习题参考解答(全)
链接地址:https://www.777doc.com/doc-6926764 .html