版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
------------------------------------------------------------------------Cprimerplus(第五版)课后编程练习答案(完整)第一章概览编程练习1.您刚刚被MacroMuscle有限公司(SoftwareforHardBodies)聘用。该公司要进入欧洲市场,需要一个将英寸转换为厘米(1英寸=2.54cm)的程序。他们希望建立的该程序可提示用户输入英寸值。您的工作是定义程序目标并设计该程序(编程过程的第1步和第2步)。1.将英寸值转化为厘米值2.显示“输入英寸值”->得到该值->转换为厘米值->存储->告知用户已结束第二章C语言概述编程练习1.编写一个程序,调用printf()函数在一行上输出您的名和姓,再调用一次printf()函数在两个单独的行上输出您的名和姓,然后调用一对printf()函数在一行上输出您的名和姓。输出应如下所示(当然里面要换成您的姓名):AntonBrucknerAntonBrucknerAntonBruckner第一个输出语句第二个输出语句仍然是第二个输出语句第三个和第四个输出语句#include<stdio.h>intmain(void){printf("HeJin\n");printf("He\n");printf("Jin\n");printf("HeJin\n");return(0);}2.编写一个程序输出您的姓名及地址。#include<stdio.h>intmain(void){printf("Name:HeJin\n");printf("Address:CAUC\n");return(0);}3.编写一个程序,把您的年龄转换成天数并显示二者的值。不用考虑平年(fractionalyear)和闰年(leapyear)的问题。#include<stdio.h>intmain(void){intage=22;printf("Age:%d\n",age);printf("Day:%d\n",age*356);return(0);}4.编写一个能够产生下面输出的程序:Forhe'sajollygoodfellow!Forhe'sajollygoodfellow!Forhe'sajollygoodfellow!Whichnobodycandeny!程序中除了main()函数之外,要使用两个用户定义的函数:一个用于把上面的夸奖消息输出一次:另一个用于把最后一行输出一次。#include<stdio.h>voidprintf1(void);voidprintf2(void);intmain(void){printf1();printf1();printf1();printf2();return(0);}voidprintf1(void){printf("Forhe'sajollygoodfellow!\n");}voidprintf2(void){printf("Whichnobodycandeny!\n");}5.编写一个程序,创建一个名为toes的整数变量。让程序把toes设置为10。再让程序计算两个toes的和以及toes的平方。程序应该输出所有的3个值,并分别标识它们。#include<stdio.h>intmain(void){inttoes=10;inttoes_add;inttoes_square;toes_add=toes+toes;toes_square=toes*toes;printf("toes=%d\ntoes_add=%d\ntoes_square=%d\n",toes,toes_add,toes_square);return(0);}6.编写一个能够产生下列输出的程序:Smile!Smile!SmileSmile!Smile!Smile!在程序中定义一个能显示字符串smile卜一次的函数,并在需要时使用该函数。#include<stdio.h>voiddisplay(void);intmain(void){display();display();display();printf("\n");display();display();printf("\n");display();printf("\n");return(0);}voiddisplay(void){printf("Smile!");}7.编写一个程序,程序中要调用名为one_three()的函数。该函数要在一行中显示单词"one",再调用two()函数,然后再在另一行中显示单词"three"。函数two()应该能在一行中显示单词"two"。main()函数应该在调用one_three()函数之前显示短语"startingnow:",函数调用之后要显示"done!"o这样,最后的输出结果应如下所示:startingnowonetwothreedone!#include<stdio.h>voidone_three(void);voidtwo(void);intmain(void){printf("startingnow:\n");one_three();printf("done!\n");return(0);}voidone_three(void){printf("One\n");two();printf("Three\n");}voidtwo(void){printf("Two\n");}第三章数据和C编程练习1.通过试验的方法(即编写带有此类问题的程序)观察系统如何处理整数上溢、浮点数上溢和浮点数下溢的情况。#include<stdio.h>intmain(void){unsignedinta=4294967295;floatb=3.4E38;floatc=b*10;floatd=0.1234E-2;printf("%u+1=%u\n",a,a+1);printf("%e*10=%e\n",b,c);printf("%f/10=%f\n",d,d/10);return(0);}2.编写一个程序,要求输入一个ASCII码值(如66),然后输出相应的字符。#include<stdio.h>intmain(void){chara;scanf("%d",&a);printf("%c\n",a);return(0);}3.编写一个程序,发出警报声,并打印下列文字:Startledbythesuddensound,Sallyshouted,"BytheGreatPumpkin,whatwasthat!"#include<stdio.h>intmain(void){printf("\aStartledbythesuddensound,Sallyshouted,\"BytheGreatpumpkin,whatwasthat!\"\n");return(0);}4.编写一个程序,读入一个浮点数,并分别以小数形式和指数形式打印。输出应如同下面格式(实际显示的指数位数也许因系统而不同):Theinputis21.290000or2.129000e+001.#include<stdio.h>intmain(void){floata;scanf("%f",&a);printf("Theinputis%for%e\n",a,a);return(0);}5.一年约有3.156×l07S。编写一个程序,要求输入您的年龄,然后显示该年龄合多少秒。#include<stdio.h>intmain(void){floata;printf("Pleaseinputyourage:");scanf("%f",&a);printf("Yourageis%eseconds\n",a*3.156E7);return(0);}6.1个水分子的质量约为3.0×10^-23g,l夸脱水大约有950g。编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少个水分子。#include<stdio.h>intmain(void){floata;printf("Pleaseinputhowmuchquartsthewateris:");scanf("%f",&a);printf("%fquartswaterhas%emolecules.\n",a,a*950/3E-23);return(0);}7.1英寸等于2.54cm。编写一个程序,要求输入您的身高(以英寸为单位),然后显示该身高值等于多少厘米。如果您愿意,也可以要求以厘米为单位输入身高,然后以英寸为单位进行显示。#include<stdio.h>intmain(void){floata;printf("Pleaseinputyourheightbyinches:");scanf("%f",&a);printf("Yourheightis%fcm.\n",a*2.54);return(0);}第4章字符串和格式化输入/输出编程练习1.编写一个程序,要求输入名字和姓氏,然后以“名字,姓氏”的格式打印。#include<stdio.h>intmain(void){charsurname[20],firstname[20];printf("Pleaseinputyourfirstnameandsurname:");scanf("%s",firstname);scanf("%s",surname);printf("Youare%s,%s.\n",firstname,surname);return(0);}2.编写一个程序,要求输入名字,并执行以下操作:a.把名字引在双引号中打印出来。b.在宽度为20个字符的字段内打印名字,并且整个字段引在引号内。c.在宽度为20个字符的字段的左端打印名字,并且整个字段引在引号内。d.在比名字宽3个字符的字段内打印它。#include<stdio.h>#include<string.h>intmain(void){charname[20];intwidth;printf("Pleaseinputyourname:");scanf("%s",name);printf("A:\"%s\"\n",name);printf("B:\"%20s\"\n",name);printf("C:\"%-20s\"\n",name);width=strlen(name)+3;printf("D:\"%*s\"\n",width,name);//*对应widthreturn(0);}3.编写一个程序,读取一个浮点数,并且首先以小数点记数法,然后以指数记数法打印之。输出使用下列形式(在指数位置显示的数字的位数可能会随系统而不同):a.Theinputis21.3or2.1e+001.b.Theinputis+21.290or2.129E+001.#include<stdio.h>intmain(void){floata;printf("Pleaseinputafloat:");scanf("%f",&a);printf("a.Theinputis%.1for%.1e\n",a,a);printf("b.Theinputis%+.3for%.3E\n",a,a);return(0);}4.编写—个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:Dabney,youare6.208feettall使用float类型,使用/作为除号。如果您愿意,可以要求以厘米为单位输入身高,并以米为单位进行显示。#include<stdio.h>intmain(void){floatheight;charname[20];printf("Pleaseinputyourheightbyinches:");scanf("%f",&height);printf("Pleaseinputyourname:");scanf("%s",name);printf("%s,youare%ffeettall\n",name,height/12);return(0);}5.编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下行打印每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:MelissaHoneybee78然后打印相同的信息,但是字母个数与相应单词的开始对齐。#include<stdio.h>#include<string.h>intmain(void){charsurname[20],firstname[20];printf("Pleaseinputyourfirstnameandsurname:");scanf("%s",firstname);scanf("%s",surname);printf("%s%s.\n",firstname,surname);printf("%*d%*d\n",strlen(firstname),strlen(firstname),strlen(surname),strlen(surname));//*对应宽度变量printf("%s%s.\n",firstname,surname);printf("%-*d%-*d\n",strlen(firstname),strlen(firstname),strlen(surname),strlen(surname));//*对应宽度变量return(0);}6.编写一个程序,设置一个值为1.0/3.0的double类型变量和一个值为1.0/3.0的float类型变量。每个变量的值显示三次:一次在小数点右侧显示4个数字,一次在小数点右侧显示12个数字,另一次在小数点右侧显示16个数字。同时要让程序包括float.h文件,并显示FLT—DIG和DBL_DIG的值。1.0/3.0的显示值与这些值一致吗?#include<stdio.h>#include<float.h>intmain(void){doublea=1.0/3.0;floatb=1.0/3.0;printf("doublea=1.0/3.0:\n");printf("%.4e\n",a);printf("%.12e\n",a);printf("%.16e\n\n",a);printf("floatb=1.0/3.0:\n");printf("%.4f\n",b);printf("%.12f\n",b);printf("%.16f\n\n",b);printf("FLT_DIG:%d\n",FLT_DIG);printf("DBL_DIG:%d\n",DBL_DIG);return(0);}7.编写一个程序,要求用户输入行驶的英里数和消耗汽油的加仑数。接着应该计算和显示消耗每加仑汽油行驶的英里数,显示方式是在小数点右侧显示一个数字。然后,根据l加仑约等于3.785升,l英里约等于1.609公里的规则,它应该把每加仑英里数转换成每100公里的升数(欧洲通用的燃料消耗表示法),并显示结果,显示方式是在小数点右侧显示一个数字(请注意,美国方案测量每单位距离消耗的燃料数,而欧洲方案测量每单位燃料的行驶距离)。用符号常量表示两个转换系数(使用const或#define)。#include<stdio.h>#defineGALLON3.785//1gallon=2.785litre#defineMILE1.609//1mile=1.609kilometerintmain(void){floatmile,gallon;printf("Pleaseinputmilesandgallons:");scanf("%f%f",&mile,&gallon);printf("Milespergallon:%.1f\n",mile/gallon);printf("Litresper100kilometre:%.1f\n",gallon*GALLON/(100*mile*MILE));return(0);}第5章运算符、表达式和语句编程练习1.编写一个程序。将用分钟表示的时间转换成以小时和分钟表示的时间。使用#define或者const来创建一个代表60的符号常量。使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环。#include<stdio.h>#defineHOUR60intmain(void){intminutes;printf("Pleaseinputtheminutes:");scanf("%d",&minutes);while(minutes>0){printf("%dhoursand%dminutes\n",minutes/HOUR,minutes%HOUR);printf("Pleaseinputtheminutes:");scanf("%d",&minutes);}return(0);}2.编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括)比输入的值大10的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。要求在各个输出值之间用空格、制表符或换行符分开。#include<stdio.h>intmain(void){intnum,i=0;printf("Pleaseinputthenumber:");scanf("%d",&num);while(i++<11){printf("%d",num++);}return(0);}3.编写一个程序,该程序要求用户输入天数,然后将该值转换为周数和天数。例如,此程序将把18天转换成2周4天。用下面的格式显示结果:使用一个while循环让用户重复输入天数;当用户输入一个非正数(如0或-20)时,程序将终止循环。#include<stdio.h>#defineWEEK7intmain(void){intdays;printf("Pleaseinputthedays:");scanf("%d",&days);while(days>0){printf("%ddaysare%dweeks,%ddays.\n",days,days/WEEK,days%WEEK);printf("Pleaseinputthedays:");scanf("%d",&days);}return(0);}4.编写一个程序让用户按厘米输入一个高度值,然后,程序按照厘米和英尺英寸显示这个高度值。允许厘米和英寸的值出现小数部分。程序允许用户继续输入,直到用户输入一个非正的数值。程序运行的示例如下面所示:Enteraheightincentimeters:182182.0cm=5feet,11.7inchesEnteraheightincentimeters(<=Otoquit):168168.0cm=5feet,6.1inchesEnteraheightincentimeters(<=Otoquit):0bye#include<stdio.h>#defineINCH2.54//1inch=2.54cmintmain(void){floatcm;printf("Enteraheightincentimeters:");scanf("%f",&cm);while(cm>0){printf("%.1fcm=%dfeet,%.1finches\n",cm,int(cm/INCH/12),cm/INCH-int(cm/INCH/12)*12);printf("Enteraheightincentimeters(<=0toquit):");scanf("%f",&cm);}printf("bye\n");return(0);}5.改写用来找到前20个整数之和的程序addemup.c(程序清单5.13)(如果您愿意,可以把addemup.c程序看成是一个计算如果您第一天得到$l,第二天得到$2,第三天得到$3,以此类推,您在20天里会挣多少钱的程序)。修改该程序,目的是您能交q地告诉程序计算将进行到哪里。也就是说,用一个读入的变量来代替20。#include<stdio.h>intmain(void){intcount,sum,max;count=0;sum=0;printf("Pleaseinputthemax:");scanf("%d",&max);while(count++<max)sum=sum+count;printf("sum=%d\n",sum);return(0);}6.现在修改编程练习5中的程序,使它能够计算整数平方的和(如果您喜欢,可以这样认为:如果您第一天得到$l,第二天得到$4,第三天得到$9,以此类推您将得到多少钱。这看起来像一个很好的买卖)。C没有平方函数,但是您可以利用n的平方是n*n的事实。#include<stdio.h>intmain(void){intcount,sum,max;count=0;sum=0;printf("Pleaseinputthemax:");scanf("%d",&max);while(count++<max)sum=sum+count*count;printf("sum=%d\n",sum);return(0);}7.编写一个程序,该程序要求输入一个float型数并打印该数的立方值。使用您自己设计的函数来计算该值的立方并且将它的立方打印出来。main()程序把输入的值传递给该函数。#include<stdio.h>floatcube(float);intmain(void){floatnumber;printf("Pleaseinputthenumber:");scanf("%f",&number);printf("Thecubeof%fis%f\n",number,cube(number));return(0);}floatcube(floatnum){return(num*num*num);}8.编写一个程序,该程序要求用户输入一个华氏温度。程序以double类型读入温度值,并将它作为一个参数传递给用户提供的函数Temperatures()。该函数将计算相应的摄氏温度和绝对温度,并以小数点右边有两位数字的精度显示这三种温度。它应该用每个值所代表的温度刻度来标识这3个值。下面是将华氏温度转换成摄氏温度的方程:通常用在科学上的绝对温度的刻度是0代表绝对零,是可能温度的下界。下面是将摄氏温度转换为绝对温度的方程:Kelvin=Celsius+273.16Temperatures()函数使用const来创建代表该转换里的3个常量的符号。main()函数将使用一个循环来允许用户重复地输入温度,当用户输入q或其他非数字值时,循环结束。#include<stdio.h>voidTemperatures(double);intmain(void){doubleFahrenheit;printf("PleaseinputtheFahrenheit:");while(scanf("%lf",&Fahrenheit)==1)//scanf的返回值代表成功输入的变量的数目,非数字不会被成功输入{Temperatures(Fahrenheit);printf("PleaseinputtheFahrenheit:");}printf("end\n");return(0);}voidTemperatures(doubleFahrenheit){constdoublea=1.8,b=32.0,c=273.16;printf("Fahrenheit=%lf\t",Fahrenheit);printf("Celsius=%lf\t",a*Fahrenheit+b);printf("Kelvin=%lf\n",a*Fahrenheit+b+c);}第6章C控制语句:循环编程练习1.编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母。并让该程序显示该数组的内容。#include<stdio.h>intmain(void){charABC[26];inti;for(i=0;i<26;i++)ABC[i]='a'+i;for(i=0;i<26;i++)printf("%c",ABC[i]);printf("\n");return(0);}2.使用嵌套循环产生下列图案:S$$$$$$$$$$$$$$#include<stdio.h>intmain(void){inti,j;for(i=0;i<5;i++){for(j=0;j<=i;j++)printf("$");printf("\n");}return(0);}3.使用嵌套循环产生下列图案:FFEFEDFEDCFEDCBFEDCBA请注意:如果您的系统不使用ASCⅡ或其他以数字顺序编码的码,您可以把一个字符数组初始化为字母表中的字母:charlets[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";然后就可以使用数组索引来选用单个的字母,例如lets[0]是'A',等等。#include<stdio.h>intmain(void){inti,j;for(i=0;i<6;i++){for(j=0;j<=i;j++)printf("%c",'F'-j);printf("\n");}return(0);}4.让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:AABAABCBAABCDCDAABCDEDCBA这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。如果您的系统不使用ASCII或类似的以严格数字顺序表示字母的编码,请参见在编程练习3中给出的建议。#include<stdio.h>intmain(void){inti,j,k;charletter;printf("Pleaseinputacapital:");scanf("%c",&letter);k=letter-'A'+1;for(i=0;i<k;i++){for(j=0;j<k-i;j++)printf("");for(j=0;j<=i;j++)printf("%c",'A'+j);for(j=i-1;j>=0;j--)printf("%c",'A'+j);printf("\n");}return(0);}5.编写一个程序打印一个表,表的每一行都给出一个整数、它的平方以及它的立方。要求用户输入表的上限与下限。使用一个for循环。#include<stdio.h>intmain(void){inti,min,max;printf("Pleaseinputtheminandmax:");scanf("%d%d",&min,&max);printf("%10s%10s%10s\n","num","square","cube");for(i=min;i<=max;i++){printf("%10d%10d%10d\n",i,i*i,i*i*i);}return(0);}6.编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词。提示:使用strlen()(第4章)计算数组中最后一个字符的索引。#include<stdio.h>#include<string.h>intmain(void){charword[20];inti;printf("Pleaseinputaword:");scanf("%s",&word);for(i=strlen(word)-1;i>=0;i--)printf("%c",word[i]);printf("\n");return(0);}7.编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。#include<stdio.h>intmain(void){floata,b;printf("Pleaseinputtwofloats:");while(scanf("%f%f",&a,&b)==2){printf("(%.2f-%.2f)/(%.2f*%.2f)=%.2f\n",a,b,a,b,(a-b)/(a*b));printf("Pleaseinputtwofloats:");}printf("end\n");return(0);}8.对练习7进行修改,让它使用一个函数来返回计算值。#include<stdio.h>floatcalculate(float,float);intmain(void){floata,b;printf("Pleaseinputtwofloats:");while(scanf("%f%f",&a,&b)==2){printf("(%.2f-%.2f)/(%.2f*%.2f)=%.2f\n",a,b,a,b,calculate(a,b));printf("Pleaseinputtwofloats:");}printf("end\n");return(0);}floatcalculate(floatx,floaty){return((x-y)/(x*y));}9.编写一个程序,要求用户输入下限整数和一个上限整数,然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果。程序将不断提示用户输入下限整数和上限整数并显示出答案,直到用户输入的上限整数等于或小于下限整数为止。程序运行的结果示例应该如下所示:Enterlowerandupperintegerlimits:59Thesumsofthesquaresfrom25t081is255Enternextsetoflimits:325Thesumsofthesquaresfrom9t0625iS5520Enternextsetoflimits:55Done#include<stdio.h>intmain(void){intlower,upper,sum,i;printf("Enterlowerandupperintegerlimits:");scanf("%d%d",&lower,&upper);while(lower<upper){for(i=lower,sum=0;i<=upper;i++)sum+=i*i;printf("Thesumsofthesquatesfrom%dto%dis%d\n",lower*lower,upper*upper,sum);printf("Enternextsetoflimits:");scanf("%d%d",&lower,&upper);}printf("Done\n");return(0);}10.编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。#include<stdio.h>intmain(void){intnum[8],i;printf("Enter8numbers:");for(i=0;i<8;i++)scanf("%d",&num[i]);for(i=7;i>=0;i--)printf("%d\t",num[i]);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.0/4.0+…编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。让用户交互地输入这个次数。看看在20次、100次和500次之后的总和。是否每个序列都看上去要收敛于某个值?提示:奇数个-1相乘的值为-1,而偶数个-1相乘的值为1。#include<stdio.h>intmain(void){doublei,sum1,sum2;intsign,count;printf("Enterthecount:");scanf("%d",&count);for(i=1.0,sign=1,sum1=0,sum2=0;i<=count;i++,sign-=sign){sum1+=1.0/i;sum2+=sign*1.0/i;}printf("1.0+1.0/2.0+1.0/3.0+1.0/4.0...(%dterms)=%lf\n",count,sum1);printf("1.0-1.0/2.0+1.0/3.0-1.0/4.0...(%dterms)=%lf\n",count,sum2);return(0);}12.编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为2的前8次幂,然后打印出它们的值。使用for循环来设置值;为了变化,使用dowhile循环来显示这些值。#include<stdio.h>#include<math.h>intmain(void){intnum[8],i;for(i=0;i<8;i++)num[i]=pow(2,i);//pow乘幂函数用到math头文件i=0;doprintf("%d\t",num[i]);while(++i<8);printf("\n");return(0);}13.编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和(使用嵌套循环可以做到这一点。不过利用第二个数组的第5个元素等于第二个数组的第4个元素加上第一个数组的第5个元素这一事实,可以避免嵌套而只使用单个循环来完成这个任务)。最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。#include<stdio.h>intmain(void){doublenum[8],sum[8];inti,j;printf("Enter8numbers:");for(i=0;i<8;i++){scanf("%lf",&num[i]);for(j=0,sum[i]=0;j<=i;j++)sum[i]+=num[j];}for(i=0;i<8;i++)printf("%8.3lf",num[i]);printf("\n");for(i=0;i<8;i++)printf("%8.3lf",sum[i]);printf("\n");return(0);}14.编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次读入一个字符,而且当您按下回车键时会产生换行字符(\n)。#include<stdio.h>#defineLENGTH20intmain(void){chara[255];inti;for(i=0;i<LENGTH;i++)scanf("%c",&a[i]);for(i=LENGTH-1;i>=0;i--)printf("%c",a[i]);printf("\n");return(0);}15.Daphne以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资的10%)。Deirdre则以每年5%的复合利息投资了10O美元(也就是说,利息是当前结余的5%,其中包括以前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人的投资额。#include<stdio.h>intmain(void){doubleDaphne=100,Deirdre=100;inti=0;while(Daphne>=Deirdre){Daphne+=100*0.1;Deirdre+=Deirdre*0.05;i++;}printf("After%dyears,Deirdre'sinvestmentis%lf,Daphne'sinvestmentis%lf\n",i,Deirdre,Daphne);return(0);}16.ChuckieLucky赢了100万美元,他把它存入一个每年赢得8%的帐户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算需要多少年Chuckie就会清空他的帐户。#include<stdio.h>intmain(void){doubleinvestment=100;inti=0;while(investment>0){investment+=investment*0.08;investment-=10;i++;}printf("After%dyears,ChuckieLucky'sinvestmentisout\n",i,investment);return(0);}第七章C控制语句:分支和跳转编程练习1.编写一个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。#include<stdio.h>intmain(void){intspace=0,newline=0,others=0;chara;printf("Pleaseinputastringendby#:");while((a=getchar())!='#')if(a=='')space++;elseif(a=='\n')newline++;elseothers++;printf("space:%d,newline:%d,others:%d\n",space,newline,others);return(0);}2.编写一个程序,该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII码。每行打印8个字符,编码对。建议:利用字符计数和模运算符(%)在每8个循环周期时打印一个换行符。#include<stdio.h>intmain(void){chara;inti;printf("Pleaseinputastringendby#:");for(i=1;(a=getchar())!='#';i++){printf("%c--%d\t",a,a);if(i%8==0)printf("\n");}printf("\n");return(0);}3.编写一个程序。该程序读取整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。#include<stdio.h>intmain(void){inti_even=0,sum_even=0,i_odd=0,sum_odd=0,num;printf("Pleaseinputnumbers(0toquit):");while(1){scanf("%d",&num);if(num==0)break;if(num%2==0){i_even++;sum_even+=num;}else{i_odd++;sum_odd+=num;}}printf("evennumber'scount:%d\n",i_even);printf("evennumber'ssum:%d\n",sum_even);printf("oddnumber'scount:%d\n",i_odd);printf("oddnumber'ssum:%d\n",sum_odd);return(0);}4.利用ifelse语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替代。#include<stdio.h>intmain(void){inta=0,b=0;charch;printf("Pleaseinputastringendby#:");while((ch=getchar())!='#'){if(ch=='.'){putchar('!');a++;}elseif(ch=='!'){putchar('!');putchar('!');b++;}elseputchar(ch);}printf("\nthetimesof'.'replacedby'!':%d\n",a);printf("thetimesof'!'replacedby'!!':%d\n",b);return(0);}5.用switch重做练习3。#include<stdio.h>intmain(void){inti_even=0,sum_even=0,i_odd=0,sum_odd=0,num;printf("Pleaseinputnumbers(0toquit):");while(1){scanf("%d",&num);if(num==0)break;switch(num%2){case0:i_even++;sum_even+=num;break;case1:i_odd++;sum_odd+=num;}}printf("evennumber'scount:%d\n",i_even);printf("evennumber'ssum:%d\n",sum_even);printf("oddnumber'scount:%d\n",i_odd);printf("oddnumber'ssum:%d\n",sum_odd);return(0);}6.编写一个程序读取输入,直到#,并报告序列ei出现的次数。此程序必须要记住前一个字符和当前的字符。用诸如“Receiveyoureieioaward.”的输入测试它。#include<stdio.h>intmain(void){charformer=0,present;intcount=0;while((present=getchar())!='#'){if((former=='e')&&(present=='i'))count++;former=present;}printf("eihasappeared%dtimes\n",count);return(0);}7.编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:a.基本工资等级=10.00美元//J,时b.加班(超过40小时)=1.5倍的时间c.税率前300美元为15%下一个150美元为20%余下的为25%用#define定义常量,不必关心本例是否符合当前的税法。#include<stdio.h>//a.基本工资#defineBASIC10.00//基本工资等级=BASIC美元/小时//b.加班#defineTIME40//加班(超过TIME小时)=#defineADD1.5//ADD倍的时间//c.税率#defineLIMIT1300//前LIMIT1美元为RATE1#defineRATE10.15#defineLIMIT2150//下一个LIMIT2美元为RATE2#defineRATE20.20#defineRATE30.25//余下的位RATE3intmain(void){doublehours,gross,tax;printf("inputtheworkhoursofaweek:");scanf("%lf",&hours);if(hours>40)hours=40+(hours-40)*1.5;gross=hours*BASIC;printf("grossincome:\t\t%lf\n",gross);if(gross<=LIMIT1)tax=gross*RATE1;elseif(gross<=LIMIT2)tax=LIMIT1*RATE1+(gross-LIMIT1)*RATE2;elsetax=LIMIT1*RATE1+LIMIT2*RATE2+(gross-LIMIT1-LIMIT2)*RATE3;printf("tax:\t\t\t%lf\n",tax);printf("netincome:\t\t%lf\n",gross-tax);return(0);}8.修改练习7中的假设a,使程序提供一个选择工资等级的菜单。用switch选择工资等级。程序运行的开头应该像这样:Enterthenumbercorrespondingtothedesiredpayrateoraction:1)$8.75/hr2)$9.33/hr3)$lO.OO/hr4)$11.20/hr5)quit如果选择l到4.那么程序应该请求输入工作小时数。程序应该一直循环运行,直到输入5。如果输入l到5以外的选项,那么程序应该提醒用户合适的选项是哪些,然后再循环。用#define为各种工资等级和税率定义常量。#include<stdio.h>intget_int(void);//b.加班#defineTIME40//加班(超过TIME小时)=#defineADD1.5//ADD倍的时间//c.税率#defineLIMIT1300//前LIMIT1美元为RATE1#defineRATE10.15#defineLIMIT2150//下一个LIMIT2美元为RATE2#defineRATE20.20#defineRATE30.25//余下的位RATE3intmain(void){doublebasic,hours,gross,tax;printf("Enterthenumbercorrespondingtothedesiredpayrateoraction:\n");printf("1)$8.75/hr\t\t\t2)$9.33/hr\n");printf("3)$10.00/hr\t\t\t4)$11.20/hr\n");printf("5)quit\n");switch(get_int()){case1:basic=8.75;break;case2:basic=9.33;break;case3:basic=10.00;break;case4:basic=11.20;break;default:printf("quit\n");return(0);//退出程序}printf("youhaveselect$%.2lf\n",basic);printf("inputtheworkhoursofaweek:");scanf("%lf",&hours);if(hours>40)hours=40+(hours-40)*1.5;gross=hours*basic;printf("grossincome:\t\t%lf\n",gross);if(gross<=LIMIT1)tax=gross*RATE1;elseif(gross<=LIMIT2)tax=LIMIT1*RATE1+(gross-LIMIT1)*RATE2;elsetax=LIMIT1*RATE1+LIMIT2*RATE2+(gross-LIMIT1-LIMIT2)*RATE3;printf("tax:\t\t\t%lf\n",tax);printf("netincome:\t\t%lf\n",gross-tax);return(0);}intget_int(void)//得到一个合适的整数,滤除非法数{intnum;charstr[40];while(scanf("%d",&num)!=1){gets(str);printf("error!%sisnotanumber.inputagain.\n",str);}while(getchar()!='\n');returnnum;}9.编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。#include<stdio.h>intisprime(int);intmain(void){intnum,i;printf("inputapositivenumber:");scanf("%d",&num);printf("alltheprimes<=%d:\n",num);for(i=2;i<=num;i++)if(isprime(i))printf("%d\t",i);printf("\n");return(0);}intisprime(intn)//如果n是素数返回1,反之返回0{intdiv;for(div=2;div*div<=n;div++)if(n%div==0)return0;return1;}10.1988年UnitedStatesFederalTaxSchedule是近期最基本的。它分为4类,每类有两个等级。下面是其摘要;美元数为应征税的收入。┏━━━━━━┳━━━━━━━━━━━━━━━━━━┓┃种类┃税金┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃单身┃前17·850美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃户主┃前23,900美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃已婚,共有┃前29,750美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃已婚,离异┃前14,875美元按l5%,超出部分按28%┃┗━━━━━━┻━━━━━━━━━━━━━━━━━━┛例如,有20000美元应征税收入的单身雇佣劳动者应缴税金0.15×17850美元+0.28×(20000美元-17850美元)。编写一个程序,让用户指定税金种类和应征税收入,然后计算税金。使用循环以便用户可以多次输入。#include<stdio.h>#defineSINGLE17850#defineHOST23900#defineMARRIED_SHARE29750#defineMARRIED_DIVORCE14875#defineRATE10.15#defineRATE20.28intmain(void){doubletype,pay,tax;charch;while(1){printf("Selectthetypeofmarriage:\n");printf("1)SINGLE\n2)HOST\n3)MARRIED_SHARE\n4)MARRIED_DIVORCE\n5)quit\n");while((ch=getchar())=='\n')continue;//滤掉回车switch(ch){case'1':type=SINGLE;break;case'2':type=HOST;break;case'3':type=MARRIED_SHARE;break;case'4':type=MARRIED_DIVORCE;break;case'5':printf("quit\n");return(0);//退出程序default:printf("inputerror\n");continue;}printf("youhaveselect%c\n",ch);printf("inputthepay:");scanf("%lf",&pay);if(pay<=type)tax=pay*RATE1;elsetax=type*RATE1+(pay-type)*RATE2;printf("waxis%.2lf\n",tax);}}11.ABCMailOrderGrocery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡萝卜的售价是0.89美元/磅。在添加运输费用之前,他们为100美元的订单提供5%的打折优惠。对5磅或以下的定单收取3.50美元的运输和装卸费用;超过5磅而不足20磅的定单收取1O.OO美元的运输和装卸费用:加磅或以上的运输,在8美元基础上每磅加收0.1美元。编写程序,在循环中使用switch语句,以便对输入a的响应是让用户输入所需的朝鲜蓟磅数,b为甜菜的磅数,c为胡萝卜的磅数,而q允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。#include<stdio.h>#include<ctype.h>//需要调用tolower函数#defineARTICHOKE1.25//单价#defineBEET0.65#defineCARROT0.89#defineDISCOUNT_LIMIT100#defineDISCOUNT_RATE0.05#defineFREIGHT_FEE13.50#defineFREIGHT_LIMIT15#defineFREIGHT_FEE210.00#defineFREIGHT_LIMIT220#defineFREIGHT_FEE38#defineFREIGHT_RATE0.1intmain(void){charch;doubleartichoke=0,beet=0,carrot=0;//磅数doublesum,discount,freight;printf("Pleaseselectyourvegetable:a,b,c,q\n");printf("a.artichokeprice:$%.2f\n",ARTICHOKE);printf("b.beetprice:$%.2f\n",BEET);printf("c.carrotprice:$%.2f\n",CARROT);printf("q.end\n");printf("(priceasdollarsperpound)\n");while((ch=tolower(getchar()))!='q')//tolower:大写转小写{switch(ch){case'a':printf("Howmanypoundsofartichokesdoyouwant?");scanf("%lf",&artichoke);printf("Pleaseselectyourvegetable:a,b,c,q:");continue;case'b':printf("Howmanypoundsofbeetsdoyouwant?");scanf("%lf",&beet);printf("Pleaseselectyourvegetable:a,b,c,q:");continue;case'c':printf("Howmanypoundsofcarrotsdoyouwant?");scanf("%lf",&carrot);printf("Pleaseselectyourvegetable:a,b,c,q:");continue;default:break;}}printf("%10s%10s%10s%10s\n","","artichoke","beet","carrot");printf("%10s%10.2lf%10.2lf%10.2lf\n","price",ARTICHOKE,BEET,CARROT);printf("%10s%10.2lf%10.2lf%10.2lf\n","pound",artichoke,beet,carrot);printf("%10s%10.2lf%10.2lf%10.2lf\n","charge",ARTICHOKE*artichoke,BEET*beet,CARROT*carrot);sum=ARTICHOKE*artichoke+BEET*beet+CARROT*carrot;if(sum>DISCOUNT_LIMIT)discount=sum*DISCOUNT_RATE;elsediscount=0;printf("discount:%.2f\n",discount);if(artichoke+beet+carrot<=5)freight=3.50;elseif(artichoke+beet+carrot<20)freight=10;elsefreight=8+(artichoke+beet+carrot)*0.1;printf("freight:%.2f\n",freight);sum=sum-discount+freight;printf("sum:%.2f\n",sum);return0;}第8章字符输入/输出和输入确认编程练习下面的一些程序要求输入以EOF终止。如果您的操作系统难以使用或不能使用重定向,则使用一些其他的判断来终止输入,例如读取&字符。1.设计一个程序,统计从输入到文件结尾为止的字符数。#include<stdio.h>intmain(void){inti;for(i=0;getchar()!=EOF;i++);printf("Thereare%dchar",i);return0;}2.编写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII序列中空格字符前面的字符是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分期打印\n或\t。否则,使用控制字符符号。例如,ASCII的l是Ctrl+A,可以显示为AA。注意A的ASCⅡ值是Ctrl+A的值加64。对其他非打印字符也保持相似的关系。除去每次遇到一个换行符时就开始一个新行之外,每行打印10对值。#include<stdio.h>intmain(void){charch;inti;for(i=1;(ch=getchar())!=EOF;i++){if(ch>=''||ch=='\n'||ch=='\t')printf("%-5c",ch);elseprintf("^%-4c",ch+64);printf("%-5d",ch);if(i%8==0)printf("\n");}return0;}3.编写一个程序,把输入作为字符流读取,直至遇到EOF。令其报告输入中的大写字母个数和小写字母个数。假设小写字母的数值是连续的,大写字母也是如此。或者你可以使用ctypc,h库中的合适的函数来区分大小写。#include<stdio.h>#include<ctype.h>intmain(void){charch;intlower=0,upper=0;while((ch=getc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省桐城市黄岗2025-2026学年全国卷Ⅰ化学试题中考模拟题含解析
- 从“概念验证”到“真刀真枪”:中国具身智能产业2026年进入实战阶段报告
- 2026年主要粮油作物良田良种良机良法集成增效技术手册
- 2026年超快激光与材料相互作用机理研究
- 2026年开放性中试平台服务定价与收费机制制定策略
- 2025年临床执业医师《儿科》练习题
- 2025年临床医学检验技师考试试卷
- 幼儿教育机构负责人面试经验及建议
- 跨国公司高级管理岗位面试要点
- 打造高效团队:青岛港船长秘书的工作策略
- 2024年广东省中学生生物学联赛试题解析(word)及答案(扫描版)
- 移植血管内瘘的护理
- GJB9001C-2017国军标标准培训讲义
- 人教版数学一年级下册第一单元《十几减9》真题同步测试3(含解析)
- 校园网网络工程分析需求报告
- 《杀死一只知更鸟》读书分享PPT
- 级自制书119本13黑今天穿什么
- Premiere 认证题库(整理版)
- 01厨房组织人员管理篇
- 考研考博-英语-华东理工大学考试押题卷含答案详解1
- 胆囊切除术 胆总管切开取石术
评论
0/150
提交评论