C_primer_plus(第五版)课后编程练习答案(完整).docx

上传人:夺命阿水 文档编号:990220 上传时间:2024-02-22 格式:DOCX 页数:145 大小:371.06KB
返回 下载 相关 举报
C_primer_plus(第五版)课后编程练习答案(完整).docx_第1页
第1页 / 共145页
C_primer_plus(第五版)课后编程练习答案(完整).docx_第2页
第2页 / 共145页
C_primer_plus(第五版)课后编程练习答案(完整).docx_第3页
第3页 / 共145页
C_primer_plus(第五版)课后编程练习答案(完整).docx_第4页
第4页 / 共145页
C_primer_plus(第五版)课后编程练习答案(完整).docx_第5页
第5页 / 共145页
点击查看更多>>
资源描述

《C_primer_plus(第五版)课后编程练习答案(完整).docx》由会员分享,可在线阅读,更多相关《C_primer_plus(第五版)课后编程练习答案(完整).docx(145页珍藏版)》请在课桌文档上搜索。

1、第一章概览编程练习1.您刚刚被MaCroMUSCIe(SoftwareforHardBodies)聘用。该公司要进入欧洲市场,需要一个将英寸转换为厘米(1英寸=2.54Cm)的程序。他们希望建设的该程序可提示用户输入英寸值。您的工作是定义程序目标并设计该程序(编程过程的第1步和第2步)。1.将英寸值转化为厘米值2.显示“输入英寸值得到该值-转换为厘米值-存储告知用户已完毕第二章C语言概述编程练习1 .编写一个程序,调用Printf()函数在一行上输出您的名和姓,再调用一次PrintfO函数在两个单独的行上输出您的名和姓,然后调用一对Printf()函数在一行上输出您的名和姓。输出应如下所示(当

2、然里面要换成您的姓名:AntonBrucknerAntonBrucknerAntonBruckner第一个输出语句第二个输出语句仍然是第二个输出语句第三个和第四个输出语句8includeintmain(void)(printf(*HeJinn*);printf(*Hen*);printf(*Jinn*);printf(*HeJinn*);return(0);2 .编写一个程序输出您的姓名及地址。Aincludeintmain(void)(Printf(Name:HeJinn*);Printf(Address:CAUCn);return(0);3 .编写一个程序,把您的年龄转换成天数并显示二者的

3、值。不用考虑平年(fractionalyear)和闰年(leapyear)的问题。ftincludeintmain(void)Iintage=22;printf(*Age:%dn*,age);printf(*Day:%dn*,age*356);return(O);4 .编写一个能够产生下面输出的程序:Forhe,sajollygoodfellow!Forhe,sajollygoodfellow!Forhe,sajollygoodfellow!Whichnobodycandeny!程序中除了main。函数之外,要使用两个用户定义的函数:一个用于把上面的夸奖消息输出一次:另一个用于把最后一行输出一

4、次。8includevoidprintfl(void);voidprintf2(void);intmain(void)(printfl();printfl();printfl();printf2();return(0);voidprintfl(void)(printf(*Forhe,sajollygoodfellow!n*);voidprintf2(void)(printf(*Whichnobodycandeny!n*);5 .编写一个程序,创立一个名为toes的整数变量。让程序把toes设置为10。再让程序计算两个toes的和以及toes的平方。程序应该输出所有的3个值,并分别标识它们。#i

5、ncludeintmain(void)(inttoes=10;inttoesadd;inttoessquare;toes_add=toes+toes;toes_square=toes*toes;printf(*toes=%dntoes_add=%dntoes_square=%dn*,toes,toes_add,toes_square);return(0);)6 .编写一个能够产生以下输出的程序:Smile!Smile!SmileSmile!Smile!Smile!在程序中定义一个能显示字符串Smile卜一次的函数,并在需要时使用该函数。ttincludevoiddisplay(void);in

6、tmain(void)(display();display();display();printf(*n*);display();display();printf(*n*);display();printf(*n*);return(0);voiddisplay(void)(printf(*SmiIe!*);7 .编写一个程序,程序中要调用名为OnJthree()的函数。该函数要在一行中显示单词one,再调用two()函数,然后再在另一行中显示单词three。函数two。应该能在一行中显示单词twomain()函数应该在调用。nejhree()函数之前显示短语startingnow::函数调用之后

7、要显示done!。这样,最后的输出结果应如下所示:startingnowthreedone!AincludeCstdio.hvoidonethree(void);voidtwo(void);intmain(void)Printf(startingnow:n*);one_three();printf(*done!n*);return(0);voidone_three(void)printf(*0nen*);two();printf(*Threen*);voidtwo(void)(printf(*Twon*);第三章数据和C编程练习8 .通过试验的方法(即编写带有此类问题的程序)观察系统假设何处理

8、整数上溢、浮点数上溢和浮点数下溢的情况。#includeintmain(void)(unsignedinta=4294967295;floatb=3.4E38;floatc=b*10:floatd=0.1234E-2;printf(*%u+l=%un*,a,a+l);printf(*%e*10=%en*,b,c);printf(*%f10=%fn*,d,d10);return(0);9 .编写一个程序,要求输入一个ASCH码值(如66),然后输出相应的字符。8includeintmain(void)(chara;scanf(*%d*,&a);printf(*%cn*,a);return(0):

9、10 编写一个程序,发出警报声,并打印以下文字:Startledbythesuddensound,Sallyshouted,*BytheGreatPumpkin,whatwasthat!”Aincludeintmain(void)(printf(*aStartledbythesuddensound,Sallyshouted,VBytheGreatpumpkin,whatwasthat!z,n*);return(0);11 编写一个程序,读入一个浮点数,并分别以小数形式和指数形式打印。输出应如同下面格式(实际显示的指数位数也许因系统而不同):Theinputis21.290000or2.1290

10、00e+001.8includeintmain(void)(floata;scanf(*%f*,&a);printf(*Theinputis%for%en*,a,a);return(0):12 一年约有3.156X107S。编写一个程序,要求输入您的年龄,然后显示该年龄合多少秒。ftincludeintmain(void)(floata;printf(*Pleaseinputyourage:*);scanf(*%f*,&a);printf(*Yourageis%esecondsn*,a*3.156E7);return(0);)13 1个水分子的质量约为3.OX1(-23g,1夸脱水大约有950

11、g。编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少个水分子。ftincludeintmain(void)(floata;printf(*Pleaseinputhowmuchquartsthewateris:*);scanf(*%f*,&a);printf(*%fquartswaterhas%emolecules,n*,a,a*9503E-23);return(0);)14 1英寸等于2.54cm。编写一个程序,要求输入您的身高(以英寸为单位),然后显示该身高值等于多少厘米。如果您愿意,也可以要求以厘米为单位输入身高,然后以英寸为单位进展显示。ftincludeintmain(vo

12、id)(floata;printf(*Pleaseinputyourheightbyinches:*);scanf(*%f*,&a);printf(*Yourheightis%fcm.n*,a*2.54);return(0);)第4章字符串和格式化输入/输出编程练习15 编写一个程序,要求输入名字和姓氏,然后以“名字,姓氏”的格式打印。ftincludeintmain(void)(charsurname20,firstname20;printf(*Pleaseinputyourfirstnameandsurname:*);scanf(*%s*,firstname);scanf(*%s*lsur

13、name);printf(*Youare%s,%s.n”,firstname,surname);return(0);16 编写一个程序,要求输入名字,并执行以下操作:a.把名字引在双引号中打印出来。b.在宽度为20个字符的字段内打印名字,并且整个字段引在引号内。c.在宽度为20个字符的字段的左端打印名字,并且整个字段引在引号内。d.在比名字宽3个字符的字段内打印它。8includeftincludeintmain(void)(charname20;intwidth:printf(*Pleaseinputyourname:*);scanf(*%s*,name);printf(*:*%s*n*,n

14、ame);printf(*B:*%20s*n*,name);printf(*C:*%-20s*n*,name):width=strlen(name)+3:printf(*D:*%*s*n*,width,name);*对应widthreturn(0);17 编写一个程序,读取一个浮点数,并且首先以小数点记数法,然后以指数记数法打印之。输出使用以下形式(在指数位置显示的数字的位数可能会随系统而不同):a. Theinputis21.3or2.le+001.b. Theinputis+21.290or2.129E+001.#includeintmain(void)Ifloata;rintf(*Ple

15、aseinputafloat:*);scanf(*%f*,a);printf(*a.Theinputis%.Ifor%,len*,a,a);rintf(*b.Theinputis%+.3for%.3En”,a,a);return(0);18 编写一个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:Dabney,youare6.208feettall使用float类型,使用/作为除号。如果您愿意,可以要求以厘米为单位输入身高,并以米为单位进展显不。ftincludeintmain(void)(floatheight;charname20;printf(*Pleaseinputyou

16、rheightbyinches:*);scanf(*%f*,&height);printf(*Pleaseinputyourname:);scanf(*%s*,name);printf(*%s,youare%ffeettalln”,name,height/12);return(0);19 编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下行打印每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:MeIiSSaHoneybee78然后打印一样的信息,但是字母个数与相应单词的开场对齐。8includeftincludeintmain(void)(cha

17、rsurname20,firstname20;printf(*Pleaseinputyourfirstnameandsurname:*);scanf(*%s*,firstname);scanf(*%s*,surname);printf(*%s%s.n*,firstname,surname);printf(*%*d%*dn*,strlen(firstname),strlen(firstname),strIen(surname),strlen(surname);/*对应宽度变量printf(*%s%s.n”,firstname,surname);printf(*%-*d%-*dn*,strlen(

18、firstname),strlen(firstname),strlen(surname),strlen(surname);/*对应宽度变量return(0);20 编写一个程序,设置一个值为1.0/3.0的double类型变量和一个值为1.0/3.0的float类型变量。每个变量的值显示三次:一次在小数点右侧显示4个数字,一次在小数点右侧显示12个数字,另一次在小数点右侧显示16个数字。同时要让程序包括float文件,并显示FLT-DIG和DBiJ)IG的值。L0/3.0的显示值与这些值一致吗ftincludeftincludeintmain(void)(doublea=l.0/3.0;flo

19、atb=l.0/3.0;printf(*doublea=l.0/3.0:n*);printf(*%.4en*,a);printf(*%.12en*,a);printf(*%.16enn*,a);printf(*floatb=l.0/3.0:n*);printf(*%.4fn*,b);printf(*%.12fn*,b);printf(*%.16fnn*,b);printf(*FLT_DIG:%dn*,FLT_DIG);printf(*DBL_DIG:%dn*,DBLDIG);return(0);21 编写一个程序,要求用户输入行驶的英里数和消耗汽油的加仑数。接着应该计算和显示消耗每加仑汽油行驶

20、的英里数,显示方式是在小数点右侧显示一个数字。然后,根据1加仑约等于3.785升,1英里约等于1.609公里的规则,它应该把每加仑英里数转换成每100公里的升数(欧洲通用的燃料消耗表示法),并显示结果,显示方式是在小数点右侧显示一个数字(请注意,美国方案测量每单位距离消耗的燃料数,而欧洲方案测量每单位燃料的行驶距离用符号常量表示两个转换系数(使用ConSt或#(16日加)。ttincludeSdefineGALLON3.785/1gallon=2.785litreSdefineMILE1.609/1mile=1.609kilometerintmain(void)(floatmile,gallo

21、n;printf(*Pleaseinputmilesandgallons:*);scanf(*%f%f*,&mile,&gallon);printf(*Milespergallon:%,lfn*,mile/gallon);printf(*Litresper100kilometre:%,lfn*,gallon*GLL0N(100*mile*MILE);return(0);)第5章运算符、表达式和语句编程练习1.编写一个程序。将用分钟表示的时间转换成以小时和分钟表示的时间。使用#define或者COnSt来创立一个代表60的符号常量。使用WhiIe循环来允许用户重复键入值,并且当键入一个小于等于。

22、的时间时终止循环。ftinclude8defineHOUR60intmain(void)intminutes;printf(*Pleaseinputtheminutes:*);scanf(*%d*,minutes);while(minutesO)(printf(*%dhoursand%dminutesn*,minutes/HOUR,minutes%HOUR);printf(*Pleaseinputtheminutes:);scanf(*%d*,&minutes);)return(0);2 .编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括比输入的值大10的所有整数值(也

23、就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用空格、制表符或换行符分开。Aincludeintmain(void)(intnum,i=0;printf(*Pleaseinputthenumber:*);scanf(*%d*,&num):while(i+ll)(printf(*%d*,num+);)return(0);)3 .编写一个程序,该程序要求用户输入天数,然后将该值转换为周数和天数。例如,此程序将把18天转换成2周4天。用下面的格式显示结果:使用一个While循环让用户重复输入天数;当用户输入一个非正数(如。或-20J时,程序将终止循环。AincludeSdefin

24、eWEEK7intmain(void)(intdays;printf(*Pleaseinputthedays:*);scanf(*%d*,&days);while(days0)(printf(*%ddaysare%dweeks,%ddays,n*,days,days/WEEK,days%WEEK);printf(*Pleaseinputthedays:);scanf(*%d*,&days);)return(0);4.编写一个程序让用户按厘米输入一个高度值,然后,程序按照厘米和英尺英寸显示这个高度值。允许厘米和英寸的值出现小数局部。程序允许用户继续输入,直到用户输入一个非正的数值。程序运行的例如

25、如下面所示:Enteraheightincentimeters:182182.Ocm=5feet,11.7inchesEnteraheightincentimeters(=Otoquit):168168.0cm=5feet,6.1inchesEnteraheightincentimeters(=Otoquit):0bye8includeSdefineINCH2.54/1inch=2.54cmintmain(void)(floatcm;printf(*Enteraheightincentimeters:*);scanf(*%f*,&cm);while(cm0)(printf(*%.Ifcm=%d

26、feet,%.Ifinchesn*,cm,int(cmINCH12),cmINCH-int(cmINCH12)*12);printf(*Enteraheightincentimeters(=Otoquit):*);scanf(%f”,&cm):)printf(*byen*);return(0);5 .改写用来找到前20个整数之和的程序addemup.c(程序清单5.13)(如果您愿意,可以把addemup.c程序看成是一个计算如果您第一天得到$1,第二天得到$2,第三天得到$3,以此类推,您在20天里会挣多少人民币的程序修改该程序,目的是您能交q地告诉程序计算将进展到哪里。也就是说,用一个读入

27、的变量来代替20。8includeintmain(void)(intcount,sum,max:count=0;sum=0;printf(*Pleaseinputthemax:);scanf(*%1*,&max);whiIe(count+max)sum=sum+count;printf(z,sum=%dn*,sum);return(0);)6 .现在修改编程练习5中的程序,使它能够计算整数平方的和(如果您喜欢,可以这样认为:如果您第一天得到SI,第二天得到$4,第三天得到$9,以此类推您将得到多少人民币。这看起来像一个很好的买卖。C没有平方函数,但是您可以利用n的平方是n*n的事实。Aincl

28、udeintmain(void)(intcount,sum,max:count=0;sum=0;printf(*Pleaseinputthemax:*);scanf(*%d*,&max):whiIe(count+max)sum=sum+count*count:printf(*sum=%dn*,sum);return(0);)7 .编写一个程序,该程序要求输入一个float型数并打印该数的立方值。使用您自己设计的函数来计算该值的立方并且将它的立方打印出来。main()程序把输入的值传递给该函数。ftincludefloatcube(float);intmain(void)(floatnumber

29、;printf(*Pleaseinputthenumber:*);scanf(*%f*,number);printf(*Thecubeof%fis%fn*,number,cube(number);return(0);)floatcube(floatnum)(return(num*num*num);)8 .编写一个程序,该程序要求用户输入一个华氏温度。程序以double类型读入温度值,并将它作为一个参数传递给用户提供的函数TemPeratUreS该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示这三种温度。它应该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成

30、摄氏温度的方程:通常用在科学上的绝对温度的刻度是0代表绝对零,是可能温度的下界。下面是将摄氏温度转换为绝对温度的方程:Kelvin=Celsius+273.16TemPeratUreS()函数使用ConSt来创立代表该转换里的3个常量的符号。main()函数将使用一个循环来允许用户重复地输入温度,当用户输入q或其他非数字值时,循环完毕。ftincludevoidTemperatures(double):intmain(void)doubleFahrenheit;printf(*PleaseinputtheFahrenheit:*);while(scanf(*%1f*,&Fahrenheit)=

31、1)SCanf的返回值代表成功输入的变量的数目,非数字不会被成功输入(Temperatures(Fahrenheit);printf(*PleaseinputtheFahrenheit:*);)printf(*endn*);return(0);voidTemperatures(doubleFahrenheit)(constdoublea=l.8,b=32.0,c=273.16;printf(*Fahrenheit=%lft*,Fahrenheit);printf(*Celsius=%lft*,a*Fahrenheit+b);printf(*Kelvin=%lfn*,a*Fahrenheit+b

32、+c);)第6章C控制语句:循环编程练习9 .编写一个程序,创立一个具有26个元素的数组,并在其中存储26个小写字母。并让该程序显示该数组的内容。Aincludeintmain(void)(charBC26;inti;for(i=0;i26;i+)BCi=,a,+i;for(i=0;i26;i+)printf(*%c*,ABCi):printf(*n*);return(0);)10 使用嵌套循环产生以以以下列图案:SSS$ftincludeintmain(void)inti,j;for(i=0;i5;i+)for(j=0jj=iJ+)printf(*$*);printf(*n*);)retur

33、n(0):11 使用嵌套循环产生以以以下列图案:FFEFEDFEDCFEDCBFEDCBA请注意:如果您的系统不使用ASCn或其他以数字顺序编码的码,您可以把一个字符数组初始化为字母表中的字母:char1ets26=*BCDEFGHIJKLMNOPQRSTUVWXYZ*;然后就可以使用数组索引来选用单个的字母,例如lets0是A,等等。8includeintmain(void)(inti,j;for(i=0;i6;i+)(for(j=0;j=i;j+)printf(*%c*,F*-j);printf(*n*);)return(0);12 让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这

34、样的金字塔图案:BBCBBCDCDABCDEDCB这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。如果您的系统不使用ASCH或类似的以严格数字顺序表示字母的编码,请参见在编程练习3中给出的建议。#includeintmain(void)inti,j,k:charletter;printf(*Pleaseinputacapital:*);scanf(*%c*,&letter);k=letter,A,+1;for(i=0;ik;i+)(for(j=0;jk-i;

35、j+)printf(*);for(j=0;j=0;j-)printf(*%ca,+j);printf(*n*);)return(0);13 编写一个程序打印一个表,表的每一行都给出一个整数、它的平方以及它的立方。要求用户输入表的上限与下限。使用一个for循环。8includeintmain(void)(inti,min,max;printf(*Pleaseinputtheminandmax:*);scanf(*%d%d*,&min,&max);printf(*%10s%10s%10sn*,*num*,*square*,*cube*);for(i=min;i=max;i+)(printf(*%1

36、0d%10d%10dn*,i,i*i,i*i*i);)return(0);14 编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词。提示:使用strlen()(第4章)计算数组中最后一个字符的索引。#include8includeintmain(void)(charword20;inti;printf(*Pleaseinputaword:*);scanfC%s*,&word);for(i=strIen(word)-1:i=0;i)printf(z,%c*,wordi);printf(z,n*);return(0);15 编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者

37、的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。Aincludeintmain(void)(floata,b;printf(*Pleaseinputtwofloats:*);whiIe(scanf(*%f%f*,&a,&b)=2)(printf(*(%.2f-%.2f)/(%.2f*%.2f)=%.2fn*,a,b,a,bt(a-b)/(a*b);printf(*Pleaseinputtwofloats:*);)printf(*endn*);return(0);16 对练习7进展修改,让它使用一个函数来返回计算值。8includefloatcalculate(float,f

38、loat);intmain(void)(floata,b;printf(*Pleaseinputtwofloats:*);whiIe(scanf(*%f%f*,&a,&b)=2)(printf(*(%.2f-%2f)/(%.2f*%.2f)=%.2fn*,a,b,a,b,calculate(a,b);printf(*Pleaseinputtwofloats:*);)printf(*endn*);return(0);)floatcalculate(floatx,floaty)(return(-y)/(x*y);)17 编写一个程序,要求用户输入下限整数和一个上限整数,然后,依次计算从下限到上限的

39、每一个整数的平方的加和,最后显示结果。程序将不断提示用户输入下限整数和上限整数并显示出答案,直到用户输入的上限整数等于或小于下限整数为止。程序运行的结果例如应该如下所示:Enterlowerandupperintegerlimits:59Thesumsofthesquaresfrom25t81is255Enternextsetoflimits:325Thesumsofthesquaresfrom9t625iS5520Enternextsetoflimits:55Doneintmain(void)intlower,upper,sum,i;printf(*Enterlowerandupperint

40、egerlimits:*);scanf(*%d%d*,&lower,&upper);while(lowerupper)(for(i=lower,sum=0;i=upper;i+)sum+=i*i;printf(*Thesumsofthesquatesfrom%dto%dis%dn*llower*lower,upper*upper,sum);printf(*Enternextsetoflimits:*);scanf(*%d%d*,&lower,upper);)printf(*Donen*);return(0);10 .编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。8includ

41、eintmain(void)(intnum8,i;printf(*Enter8numbers:*);for(i=0;i=0;i)printfC%dt*,numi);printf(*n*);return(0):11 .考虑这两个无限序列:1. 0+1.0/2.0+1.0/3.0+1.0/4.0+1 .0-1.0/2.0+1.0/3.0-1.04.0+编写一个程序来计算这两个序列不断变化的总和,直到到达某个次数。让用户交互地输入这个次数。看看在20次、100次和500次之后的总和。是否每个序列都看上去要收敛于某个值提示:奇数个T相乘的值为-1,而偶数个T相乘的值为1。Aincludeintmain

42、(void)(doublei,suml,sum2;intsign,count;printf(*Enterthecount:*);scanf(*%d*,count);for(i=l.0,sign=l,suml=0,sum2=0;i=count;i+sign-=sign)suml+=1.0/i;sum2+=sign*1.O/i;)printf(*1.O+1.0/2.O+1.0/3.O+1.0/4.O.(%dterms)=%lfn*,count,suml):printf(*1.O-1.0/2.O+1.0/3.O-1.0/4.O.(%dterms)=%lfn*,count,sum2);return(O

43、);12 .编写一个程序,创立一个8个元素的int数组,并且把元素分别设置为2的前.8次耗,然后打印出它们的值。使用for循环来设置值;为了变化,使用doWhiIe循环来显示这些值。8includeftincludeintmain(void)(intnum8ti;for(i=0;i8;i+)numi=pow(2,i);/pow乘一函数用到math头文件i=0;doprintf(*%dt*,numi):while(+i8);printf(*n*);return(0);13 .编写一个程序,创立两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和(使用嵌套循环可以做到这一点。不过利用第二个数组的第5个元素等于第二个数组的第4个元素加上第一个数组的第5个元素这一事实,可以防止嵌套而只使用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号