C primer plus(第五版)課后編程練習(xí)答案_第1頁
C primer plus(第五版)課后編程練習(xí)答案_第2頁
C primer plus(第五版)課后編程練習(xí)答案_第3頁
C primer plus(第五版)課后編程練習(xí)答案_第4頁
C primer plus(第五版)課后編程練習(xí)答案_第5頁
已閱讀5頁,還剩104頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Cprimerplus(第五版)課后編程練習(xí)答案Cprimerplus(第五版)課后編程練習(xí)答案Cprimerplus(第五版)課后編程練習(xí)答案Cprimerplus(第五版)課后編程練習(xí)答案編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:第一章概覽編程練習(xí)1.您剛剛被MacroMuscle有限公司(SoftwareforHardBodies)聘用。該公司要進(jìn)入歐洲市場(chǎng),需要一個(gè)將英寸轉(zhuǎn)換為厘米(1英寸=cm)的程序。他們希望建立的該程序可提示用戶輸入英寸值。您的工作是定義程序目標(biāo)并設(shè)計(jì)該程序(編程過程的第1步和第2步)。1.將英寸值轉(zhuǎn)化為厘米值2.顯示“輸入英寸值”->得到該值->轉(zhuǎn)換為厘米值->存儲(chǔ)->告知用戶已結(jié)束第二章C語言概述編程練習(xí)1.編寫一個(gè)程序,調(diào)用printf()函數(shù)在一行上輸出您的名和姓,再調(diào)用一次printf()函數(shù)在兩個(gè)單獨(dú)的行上輸出您的名和姓,然后調(diào)用一對(duì)printf()函數(shù)在一行上輸出您的名和姓。輸出應(yīng)如下所示(當(dāng)然里面要換成您的姓名):AntonBrucknerAntonBrucknerAntonBruckner第一個(gè)輸出語句第二個(gè)輸出語句仍然是第二個(gè)輸出語句第三個(gè)和第四個(gè)輸出語句#include<>intmain(void){printf("HeJin\n");printf("He\n");printf("Jin\n");printf("HeJin\n");return(0);}2.編寫一個(gè)程序輸出您的姓名及地址。#include<>intmain(void){printf("Name:HeJin\n");printf("Address:CAUC\n");return(0);}3.編寫一個(gè)程序,把您的年齡轉(zhuǎn)換成天數(shù)并顯示二者的值。不用考慮平年(fractionalyear)和閏年(leapyear)的問題。#include<>intmain(void){intage=22;printf("Age:%d\n",age);printf("Day:%d\n",age*356);return(0);}4.編寫一個(gè)能夠產(chǎn)生下面輸出的程序:Forhe'sajollygoodfellow!Forhe'sajollygoodfellow!Forhe'sajollygoodfellow!Whichnobodycandeny!程序中除了main()函數(shù)之外,要使用兩個(gè)用戶定義的函數(shù):一個(gè)用于把上面的夸獎(jiǎng)消息輸出一次:另一個(gè)用于把最后一行輸出一次。#include<>voidprintf1(void);voidprintf2(void);intmain(void){printf1();printf1();printf1();printf2();return(0);}voidprintf1(void){printf("Forhe'sajollygoodfellow!\n");}voidprintf2(void){printf("Whichnobodycandeny!\n");}5.編寫一個(gè)程序,創(chuàng)建一個(gè)名為toes的整數(shù)變量。讓程序把toes設(shè)置為10。再讓程序計(jì)算兩個(gè)toes的和以及toes的平方。程序應(yīng)該輸出所有的3個(gè)值,并分別標(biāo)識(shí)它們。#include<>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.編寫一個(gè)能夠產(chǎn)生下列輸出的程序:Smile!Smile!SmileSmile!Smile!Smile!在程序中定義一個(gè)能顯示字符串smile卜一次的函數(shù),并在需要時(shí)使用該函數(shù)。#include<>voiddisplay(void);intmain(void){display();display();display();printf("\n");display();display();printf("\n");display();printf("\n");return(0);}voiddisplay(void){printf("Smile!");}7.編寫一個(gè)程序,程序中要調(diào)用名為one_three()的函數(shù)。該函數(shù)要在一行中顯示單詞"one",再調(diào)用two()函數(shù),然后再在另一行中顯示單詞"three"。函數(shù)two()應(yīng)該能在一行中顯示單詞"two"。main()函數(shù)應(yīng)該在調(diào)用one_three()函數(shù)之前顯示短語"startingnow:",函數(shù)調(diào)用之后要顯示"done!"o這樣,最后的輸出結(jié)果應(yīng)如下所示:startingnowonetwothreedone!#include<>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");}第三章數(shù)據(jù)和C編程練習(xí)1.通過試驗(yàn)的方法(即編寫帶有此類問題的程序)觀察系統(tǒng)如何處理整數(shù)上溢、浮點(diǎn)數(shù)上溢和浮點(diǎn)數(shù)下溢的情況。#include<>intmain(void){unsignedinta=95;floatb=;floatc=b*10;floatd=;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.編寫一個(gè)程序,要求輸入一個(gè)ASCII碼值(如66),然后輸出相應(yīng)的字符。#include<>intmain(void){chara;scanf("%d",&a);printf("%c\n",a);return(0);}3.編寫一個(gè)程序,發(fā)出警報(bào)聲,并打印下列文字:Startledbythesuddensound,Sallyshouted,"BytheGreatPumpkin,whatwasthat!"#include<>intmain(void){printf("\aStartledbythesuddensound,Sallyshouted,\"BytheGreatpumpkin,whatwasthat!\"\n");return(0);}4.編寫一個(gè)程序,讀入一個(gè)浮點(diǎn)數(shù),并分別以小數(shù)形式和指數(shù)形式打印。輸出應(yīng)如同下面格式(實(shí)際顯示的指數(shù)位數(shù)也許因系統(tǒng)而不同):Theinputisor+001.#include<>intmain(void){floata;scanf("%f",&a);printf("Theinputis%for%e\n",a,a);return(0);}5.一年約有×l07S。編寫一個(gè)程序,要求輸入您的年齡,然后顯示該年齡合多少秒。#include<>intmain(void){floata;printf("Pleaseinputyourage:");scanf("%f",&a);printf("Yourageis%eseconds\n",a*;return(0);}個(gè)水分子的質(zhì)量約為×10^-23g,l夸脫水大約有950g。編寫一個(gè)程序,要求輸入水的夸脫數(shù),然后顯示這么多水中包含多少個(gè)水分子。#include<>intmain(void){floata;printf("Pleaseinputhowmuchquartsthewateris:");scanf("%f",&a);printf("%fquartswaterhas%emolecules.\n",a,a*950/3E-23);return(0);}7.1英寸等于。編寫一個(gè)程序,要求輸入您的身高(以英寸為單位),然后顯示該身高值等于多少厘米。如果您愿意,也可以要求以厘米為單位輸入身高,然后以英寸為單位進(jìn)行顯示。#include<>intmain(void){floata;printf("Pleaseinputyourheightbyinches:");scanf("%f",&a);printf("Yourheightis%fcm.\n",a*;return(0);}第4章字符串和格式化輸入/輸出編程練習(xí)1.編寫一個(gè)程序,要求輸入名字和姓氏,然后以“名字,姓氏”的格式打印。#include<>intmain(void){charsurname[20],firstname[20];printf("Pleaseinputyourfirstnameandsurname:");scanf("%s",firstname);scanf("%s",surname);printf("Youare%s,%s.\n",firstname,surname);return(0);}2.編寫一個(gè)程序,要求輸入名字,并執(zhí)行以下操作:a.把名字引在雙引號(hào)中打印出來。b.在寬度為20個(gè)字符的字段內(nèi)打印名字,并且整個(gè)字段引在引號(hào)內(nèi)。c.在寬度為20個(gè)字符的字段的左端打印名字,并且整個(gè)字段引在引號(hào)內(nèi)。d.在比名字寬3個(gè)字符的字段內(nèi)打印它。#include<>#include<>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);Theinputisor+001.b.Theinputis+or+001.#include<>intmain(void){floata;printf("Pleaseinputafloat:");scanf("%f",&a);printf("inputis%.1for%.1e\n",a,a);printf("inputis%+.3for%.3E\n",a,a);return(0);}4.編寫—個(gè)程序,要求輸入身高(以英寸為單位)和名字,然后以如下形式顯示:Dabney,youarefeettall使用float類型,使用/作為除號(hào)。如果您愿意,可以要求以厘米為單位輸入身高,并以米為單位進(jìn)行顯示。#include<>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.編寫一個(gè)程序,首先要求用戶輸入名字,然后要求用戶輸入姓氏。在一行打印輸入的姓名,在下行打印每個(gè)名字中字母的個(gè)數(shù)。把字母?jìng)€(gè)數(shù)與相應(yīng)名字的結(jié)尾對(duì)齊,如下所示:MelissaHoneybee78然后打印相同的信息,但是字母?jìng)€(gè)數(shù)與相應(yīng)單詞的開始對(duì)齊。#include<>#include<>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));n",firstname,surname);printf("%-*d%-*d\n",strlen(firstname),strlen(firstname),strlen(surname),strlen(surname));e\n",a);printf("%.12e\n",a);printf("%.16e\n\n",a);printf("floatb=:\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.編寫一個(gè)程序,要求用戶輸入行駛的英里數(shù)和消耗汽油的加侖數(shù)。接著應(yīng)該計(jì)算和顯示消耗每加侖汽油行駛的英里數(shù),顯示方式是在小數(shù)點(diǎn)右側(cè)顯示一個(gè)數(shù)字。然后,根據(jù)l加侖約等于升,l英里約等于公里的規(guī)則,它應(yīng)該把每加侖英里數(shù)轉(zhuǎn)換成每100公里的升數(shù)(歐洲通用的燃料消耗表示法),并顯示結(jié)果,顯示方式是在小數(shù)點(diǎn)右側(cè)顯示一個(gè)數(shù)字(請(qǐng)注意,美國(guó)方案測(cè)量每單位距離消耗的燃料數(shù),而歐洲方案測(cè)量每單位燃料的行駛距離)。用符號(hào)常量表示兩個(gè)轉(zhuǎn)換系數(shù)(使用const或#define)。#include<>#defineGALLONf\n",mile/gallon);printf("Litresper100kilometre:%.1f\n",gallon*GALLON/(100*mile*MILE));return(0);}第5章運(yùn)算符、表達(dá)式和語句編程練習(xí)1.編寫一個(gè)程序。將用分鐘表示的時(shí)間轉(zhuǎn)換成以小時(shí)和分鐘表示的時(shí)間。使用#define或者const來創(chuàng)建一個(gè)代表60的符號(hào)常量。使用while循環(huán)來允許用戶重復(fù)鍵入值,并且當(dāng)鍵入一個(gè)小于等于0的時(shí)間時(shí)終止循環(huán)。#include<>#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.編寫一個(gè)程序,此程序要求輸入一整數(shù),然后打印出從(包括)輸入的值到(包括)比輸入的值大10的所有整數(shù)值(也就是說,如果輸入為5,那么輸出就從5到15)。要求在各個(gè)輸出值之間用空格、制表符或換行符分開。#include<>intmain(void){intnum,i=0;printf("Pleaseinputthenumber:");scanf("%d",&num);while(i++<11){printf("%d",num++);}return(0);}3.編寫一個(gè)程序,該程序要求用戶輸入天數(shù),然后將該值轉(zhuǎn)換為周數(shù)和天數(shù)。例如,此程序?qū)?8天轉(zhuǎn)換成2周4天。用下面的格式顯示結(jié)果:使用一個(gè)while循環(huán)讓用戶重復(fù)輸入天數(shù);當(dāng)用戶輸入一個(gè)非正數(shù)(如0或-20)時(shí),程序?qū)⒔K止循環(huán)。#include<>#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.編寫一個(gè)程序讓用戶按厘米輸入一個(gè)高度值,然后,程序按照厘米和英尺英寸顯示這個(gè)高度值。允許厘米和英寸的值出現(xiàn)小數(shù)部分。程序允許用戶繼續(xù)輸入,直到用戶輸入一個(gè)非正的數(shù)值。程序運(yùn)行的示例如下面所示:Enteraheightincentimeters:182cm=5feet,inchesEnteraheightincentimeters(<=Otoquit):168cm=5feet,inchesEnteraheightincentimeters(<=Otoquit):0bye#include<>#defineINCHfcm=%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個(gè)整數(shù)之和的程序(程序清單)(如果您愿意,可以把程序看成是一個(gè)計(jì)算如果您第一天得到$l,第二天得到$2,第三天得到$3,以此類推,您在20天里會(huì)掙多少錢的程序)。修改該程序,目的是您能交q地告訴程序計(jì)算將進(jìn)行到哪里。也就是說,用一個(gè)讀入的變量來代替20。#include<>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.現(xiàn)在修改編程練習(xí)5中的程序,使它能夠計(jì)算整數(shù)平方的和(如果您喜歡,可以這樣認(rèn)為:如果您第一天得到$l,第二天得到$4,第三天得到$9,以此類推您將得到多少錢。這看起來像一個(gè)很好的買賣)。C沒有平方函數(shù),但是您可以利用n的平方是n*n的事實(shí)。#include<>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.編寫一個(gè)程序,該程序要求輸入一個(gè)float型數(shù)并打印該數(shù)的立方值。使用您自己設(shè)計(jì)的函數(shù)來計(jì)算該值的立方并且將它的立方打印出來。main()程序把輸入的值傳遞給該函數(shù)。#include<>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.編寫一個(gè)程序,該程序要求用戶輸入一個(gè)華氏溫度。程序以double類型讀入溫度值,并將它作為一個(gè)參數(shù)傳遞給用戶提供的函數(shù)Temperatures()。該函數(shù)將計(jì)算相應(yīng)的攝氏溫度和絕對(duì)溫度,并以小數(shù)點(diǎn)右邊有兩位數(shù)字的精度顯示這三種溫度。它應(yīng)該用每個(gè)值所代表的溫度刻度來標(biāo)識(shí)這3個(gè)值。下面是將華氏溫度轉(zhuǎn)換成攝氏溫度的方程:通常用在科學(xué)上的絕對(duì)溫度的刻度是0代表絕對(duì)零,是可能溫度的下界。下面是將攝氏溫度轉(zhuǎn)換為絕對(duì)溫度的方程:Kelvin=Celsius+Temperatures()函數(shù)使用const來創(chuàng)建代表該轉(zhuǎn)換里的3個(gè)常量的符號(hào)。main()函數(shù)將使用一個(gè)循環(huán)來允許用戶重復(fù)地輸入溫度,當(dāng)用戶輸入q或其他非數(shù)字值時(shí),循環(huán)結(jié)束。#include<>voidTemperatures(double);intmain(void){doubleFahrenheit;printf("PleaseinputtheFahrenheit:");while(scanf("%lf",&Fahrenheit)==1)f-%.2f)/(%.2f*%.2f)=%.2f\n",a,b,a,b,(a-b)/(a*b));printf("Pleaseinputtwofloats:");}printf("end\n");return(0);}8.對(duì)練習(xí)7進(jìn)行修改,讓它使用一個(gè)函數(shù)來返回計(jì)算值。#include<>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.編寫一個(gè)程序,要求用戶輸入下限整數(shù)和一個(gè)上限整數(shù),然后,依次計(jì)算從下限到上限的每一個(gè)整數(shù)的平方的加和,最后顯示結(jié)果。程序?qū)⒉粩嗵崾居脩糨斎胂孪拚麛?shù)和上限整數(shù)并顯示出答案,直到用戶輸入的上限整數(shù)等于或小于下限整數(shù)為止。程序運(yùn)行的結(jié)果示例應(yīng)該如下所示:Enterlowerandupperintegerlimits:59Thesumsofthesquaresfrom25t081is255Enternextsetoflimits:325Thesumsofthesquaresfrom9t0625iS5520Enternextsetoflimits:55Done#include<>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.編寫一個(gè)程序把8個(gè)整數(shù)讀入一個(gè)數(shù)組中,然后以相反的順序打印它們。#include<>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.考慮這兩個(gè)無限序列:++++…-+-+…編寫一個(gè)程序來計(jì)算這兩個(gè)序列不斷變化的總和,直到達(dá)到某個(gè)次數(shù)。讓用戶交互地輸入這個(gè)次數(shù)??纯丛?0次、100次和500次之后的總和。是否每個(gè)序列都看上去要收斂于某個(gè)值提示:奇數(shù)個(gè)-1相乘的值為-1,而偶數(shù)個(gè)-1相乘的值為1。#include<>intmain(void){doublei,sum1,sum2;intsign,count;printf("Enterthecount:");scanf("%d",&count);for(i=,sign=1,sum1=0,sum2=0;i<=count;i++,sign-=sign){sum1+=/i;sum2+=sign*/i;}printf("+++...(%dterms)=%lf\n",count,sum1);printf("-+-...(%dterms)=%lf\n",count,sum2);return(0);}12.編寫一個(gè)程序,創(chuàng)建一個(gè)8個(gè)元素的int數(shù)組,并且把元素分別設(shè)置為2的前8次冪,然后打印出它們的值。使用for循環(huán)來設(shè)置值;為了變化,使用dowhile循環(huán)來顯示這些值。#include<>#include<>intmain(void){intnum[8],i;for(i=0;i<8;i++)num[i]=pow(2,i);寫一個(gè)程序,創(chuàng)建兩個(gè)8元素的double數(shù)組,使用一個(gè)循環(huán)來讓用戶鍵入第一個(gè)數(shù)組的8個(gè)元素的值。程序把第二個(gè)數(shù)組的元素設(shè)置為第一個(gè)數(shù)組元素的累積和。例如,第二個(gè)數(shù)組的第4個(gè)元素應(yīng)該等于第一個(gè)數(shù)組的前4個(gè)元素的和,第二個(gè)數(shù)組的第5個(gè)元素應(yīng)該等于第一個(gè)數(shù)組的前5個(gè)元素的和(使用嵌套循環(huán)可以做到這一點(diǎn)。不過利用第二個(gè)數(shù)組的第5個(gè)元素等于第二個(gè)數(shù)組的第4個(gè)元素加上第一個(gè)數(shù)組的第5個(gè)元素這一事實(shí),可以避免嵌套而只使用單個(gè)循環(huán)來完成這個(gè)任務(wù))。最后,使用一個(gè)循環(huán)來顯示兩個(gè)數(shù)組中的內(nèi)容,第一個(gè)數(shù)組在一行中顯示,而第二個(gè)數(shù)組中的每個(gè)元素在第一個(gè)數(shù)組的對(duì)應(yīng)元素之下進(jìn)行顯示。#include<>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("%",num[i]);printf("\n");for(i=0;i<8;i++)printf("%",sum[i]);printf("\n");return(0);}14.編寫一個(gè)程序讀入一行輸入,然后反向打印該行。您可以把輸入存儲(chǔ)在一個(gè)char數(shù)組中;假定該行不超過255個(gè)字符?;貞浺幌拢梢允褂镁哂?c說明符的scanf()從輸入中一次讀入一個(gè)字符,而且當(dāng)您按下回車鍵時(shí)會(huì)產(chǎn)生換行字符(\n)。#include<>#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%的復(fù)合利息投資了10O美元(也就是說,利息是當(dāng)前結(jié)余的5%,其中包括以前的利息)。編寫一個(gè)程序,計(jì)算需要多少年Deirdre的投資額才會(huì)超過Daphne,并且顯示出到那時(shí)兩個(gè)人的投資額。#include<>intmain(void){doubleDaphne=100,Deirdre=100;inti=0;while(Daphne>=Deirdre){Daphne+=100*;Deirdre+=Deirdre*;i++;}printf("After%dyears,Deirdre'sinvestmentis%lf,Daphne'sinvestmentis%lf\n",i,Deirdre,Daphne);return(0);}16.ChuckieLucky贏了100萬美元,他把它存入一個(gè)每年贏得8%的帳戶。在每年的最后一天,Chuckie取出10萬美元。編寫一個(gè)程序,計(jì)算需要多少年Chuckie就會(huì)清空他的帳戶。#include<>intmain(void){doubleinvestment=100;inti=0;while(investment>0){investment+=investment*;investment-=10;i++;}printf("After%dyears,ChuckieLucky'sinvestmentisout\n",i,investment);return(0);}第七章C控制語句:分支和跳轉(zhuǎn)編程練習(xí)1.編寫一個(gè)程序。該程序讀取輸入直到遇到#字符,然后報(bào)告讀取的空格數(shù)目、讀取的換行符數(shù)目以及讀取的所有其他字符數(shù)目。#include<>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.編寫一個(gè)程序,該程序讀取輸入直到遇到#字符。使程序打印每個(gè)輸入的字符以及它的十進(jìn)制ASCII碼。每行打印8個(gè)字符,編碼對(duì)。建議:利用字符計(jì)數(shù)和模運(yùn)算符(%)在每8個(gè)循環(huán)周期時(shí)打印一個(gè)換行符。#include<>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.編寫一個(gè)程序。該程序讀取整數(shù),直到輸入0。輸入終止后,程序應(yīng)該報(bào)告輸入的偶數(shù)(不包括0)總個(gè)數(shù)、偶數(shù)的平均值,輸入的奇數(shù)總個(gè)數(shù)以及奇數(shù)的平均值。#include<>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語句編寫程序讀取輸入,直到#。用一個(gè)感嘆號(hào)代替每個(gè)句號(hào),將原有的每個(gè)感嘆號(hào)用兩個(gè)感嘆號(hào)代替,最后報(bào)告進(jìn)行了多少次替代。#include<>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重做練習(xí)3。#include<>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.編寫一個(gè)程序讀取輸入,直到#,并報(bào)告序列ei出現(xiàn)的次數(shù)。此程序必須要記住前一個(gè)字符和當(dāng)前的字符。用諸如“Receiveyoureieioaward.”的輸入測(cè)試它。#include<>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.編寫程序,要求輸入一周中的工作小時(shí)數(shù),然后打印工資總額、稅金以及凈工資。作如下假設(shè):a.基本工資等級(jí)=美元本工資#defineBASIC班#defineTIME40率#defineLIMIT1300班#defineTIME40率#defineLIMIT1300lf\n",basic);printf("inputtheworkhoursofaweek:");scanf("%lf",&hours);if(hours>40)hours=40+(hours-40)*;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)inputagain.\n",str);}while(getchar()!='\n');returnnum;}9.編寫一個(gè)程序,接受一個(gè)整數(shù)輸入,然后顯示所有小于或等于該數(shù)的素?cái)?shù)。#include<>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)1988年UnitedStatesFederalTaxSchedule是近期最基本的。它分為4類,每類有兩個(gè)等級(jí)。下面是其摘要;美元數(shù)為應(yīng)征稅的收入。┏━━━━━━┳━━━━━━━━━━━━━━━━━━┓┃種類┃稅金┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃單身┃前17·850美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃戶主┃前23,900美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃已婚,共有┃前29,750美元按15%,超出部分按28%┃┣━━━━━━╋━━━━━━━━━━━━━━━━━━┫┃已婚,離異┃前14,875美元按l5%,超出部分按28%┃┗━━━━━━┻━━━━━━━━━━━━━━━━━━┛例如,有20000美元應(yīng)征稅收入的單身雇傭勞動(dòng)者應(yīng)繳稅金×17850美元+×(20000美元-17850美元)。編寫一個(gè)程序,讓用戶指定稅金種類和應(yīng)征稅收入,然后計(jì)算稅金。使用循環(huán)以便用戶可以多次輸入。#include<>#defineSINGLE17850#defineHOST23900#defineMARRIED_SHARE29750#defineMARRIED_DIVORCE14875#defineRATE1#defineRATE2intmain(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;lf\n",tax);}}11.ABCMailOrderGrocery朝鮮薊的售價(jià)是美元/磅,甜菜的售價(jià)是美元/磅,胡蘿卜的售價(jià)是美元/磅。在添加運(yùn)輸費(fèi)用之前,他們?yōu)?00美元的訂單提供5%的打折優(yōu)惠。對(duì)5磅或以下的定單收取美元的運(yùn)輸和裝卸費(fèi)用;超過5磅而不足20磅的定單收取美元的運(yùn)輸和裝卸費(fèi)用:加磅或以上的運(yùn)輸,在8美元基礎(chǔ)上每磅加收美元。編寫程序,在循環(huán)中使用switch語句,以便對(duì)輸入a的響應(yīng)是讓用戶輸入所需的朝鮮薊磅數(shù),b為甜菜的磅數(shù),c為胡蘿卜的磅數(shù),而q允許用戶退出訂購(gòu)過程。然后程序計(jì)算總費(fèi)用、折扣和運(yùn)輸費(fèi)用(如果有運(yùn)輸費(fèi)的話),以及總數(shù)。隨后程序應(yīng)該顯示所有的購(gòu)買信息:每磅的費(fèi)用、訂購(gòu)的磅數(shù)、該訂單每種蔬菜的費(fèi)用、訂單的總費(fèi)用、折扣,如果有的話加上運(yùn)輸費(fèi)用,以及所有費(fèi)用的總數(shù)。#include<>#include<>f\n",ARTICHOKE);printf("price:$%.2f\n",BEET);printf("price:$%.2f\n",CARROT);printf("\n");printf("(priceasdollarsperpound)\n");while((ch=tolower(getchar()))!='q')f\n",discount);if(artichoke+beet+carrot<=5)freight=;elseif(artichoke+beet+carrot<20)freight=10;elsefreight=8+(artichoke+beet+carrot)*;printf("freight:%.2f\n",freight);sum=sum-discount+freight;printf("sum:%.2f\n",sum);return0;}第8章字符輸入/輸出和輸入確認(rèn)編程練習(xí)下面的一些程序要求輸入以EOF終止。如果您的操作系統(tǒng)難以使用或不能使用重定向,則使用一些其他的判斷來終止輸入,例如讀取&字符。1.設(shè)計(jì)一個(gè)程序,統(tǒng)計(jì)從輸入到文件結(jié)尾為止的字符數(shù)。#include<>intmain(void){inti;for(i=0;getchar()!=EOF;i++);printf("Thereare%dchar",i);return0;}2.編寫一個(gè)程序,把輸入作為字符流讀取,直到遇到EOF。令該程序打印每個(gè)輸入字符及其ASCII編碼的十進(jìn)制值。注意在ASCII序列中空格字符前面的字符是非打印字符,要特殊處理這些字符。如果非打印字符是換行符或制表符,則分期打印\n或\t。否則,使用控制字符符號(hào)。例如,ASCII的l是Ctrl+A,可以顯示為AA。注意A的ASCⅡ值是Ctrl+A的值加64。對(duì)其他非打印字符也保持相似的關(guān)系。除去每次遇到一個(gè)換行符時(shí)就開始一個(gè)新行之外,每行打印10對(duì)值。#include<>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.編寫一個(gè)程序,把輸入作為字符流讀取,直至遇到EOF。令其報(bào)告輸入中的大寫字母?jìng)€(gè)數(shù)和小寫字母?jìng)€(gè)數(shù)。假設(shè)小寫字母的數(shù)值是連續(xù)的,大寫字母也是如此?;蛘吣憧梢允褂胏typc,h庫(kù)中的合適的函數(shù)來區(qū)分大小寫。#include<>#include<>intmain(void){charch;intlower=0,upper=0;while((ch=getchar())!=EOF){if(islower(ch))lower++;if(isupper(ch))upper++;}printf("lower:%d,upper:%d\n",lower,upper);return0;}4.編寫一個(gè)程序,把輸入作為字符流讀取,直至遇到EOF。令其報(bào)告每個(gè)單詞的平均字母數(shù)。不要將空白字符記為單詞中的字母。實(shí)際上,標(biāo)點(diǎn)符號(hào)也不應(yīng)該計(jì)算,但現(xiàn)在不必考慮這一點(diǎn)(如果您想做得好一些,可以考慮使用系列中的ispunct()函數(shù))。#include<>#include<>intmain(void){intnum=0;charch;boolword=0;while((ch=getchar())!=EOF){if(isalpha(ch)&&!word){word=1;num++;}if(!isalpha(ch)){word=0;}}printf("words:%d\n",num);return0;}5,修改程序清單8,4中的猜測(cè)程序,使其使用更智能的猜測(cè)策略。例如,程序最初猜50,讓其詢問用戶該猜測(cè)值是大、小還是正確。如果該猜測(cè)值小,則令下一次猜測(cè)值為50和100的中值,也就是75。如果75大,則下一次猜測(cè)值為75和50的中值,等等。使用這種二分搜索(binarysearch)策略,起碼如果用戶沒有欺騙,該程序很快會(huì)獲得正確答案。#include<>intmain(void){intguess,max=100,min=1;charresponse;printf("Pickanintegerfrom1towilltrytoguess");printf("it.\nRespondwithabifmyquessisbigandwith");printf("\nanlifitislittle.\n");printf("Also,Respondayifitisright.\n");printf("Uh...isyournumber%d\n",guess=(max+min)/2);while((response=getchar())!='y'){if(response=='b'){max=guess-1;printf("Well,then,isit%d\n",guess=(max+min)/2);}elseif(response=='l'){min=guess+1;printf("Well,then,isit%d\n",guess=(max+min)/2);}elseprintf("Sorry,Iunderstandonlyyorn.\n");while(getchar()!='\n');}printf("IknowIcoulddoit!\n");return0;}6.修改程序清單中的get_first()函數(shù),使其返回所遇到的第一個(gè)非空白字符。在一個(gè)簡(jiǎn)單的程序中測(cè)試該函數(shù)。#include<>#include<>charget_first(void);intmain(void){charch;while((ch=get_first())!=EOF){putchar(ch);}return0;}charget_first(void){intch;while(isspace(ch=getchar()));while(getchar()!='\n');returnch;}7.修改第7章的練習(xí)8,使菜單選項(xiàng)由字符代替數(shù)字進(jìn)行標(biāo)記。#include<>#include<>charget_first(void);班#defineTIME40率#defineLIMIT1300lf\n",basic);printf("inputtheworkhoursofaweek:");scanf("%lf",&hours);if(hours>40)hours=40+(hours-40)*;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);}charget_first(void)adds.subtractm.multiplyd.divideq.quicEnterfirstnumber:Entersecondnumber:oneoneisnotannumber.Pleaseenteranumber,suchas.,or3.1+1=Entertheoperationofyourchoice:a.adds.subtractm.multiplyd.divideq.quitEnterfirstnumber:Entersecondnumber:OEnteranumberotherthan0:/=92Entertheoperationofyourchoice:a.adds.subtractm.multiplyd.divideq.quitqBye.#include<>#include<>floatget_float(void);charget_first(void);intmain(void){charselect;floatnum1,num2;while(1){printf("Entertheoperationofyourchoice:\n");printf(":\n");printf("\n");printf("\n");select=get_first();if(select!='a'&&select!='s'&&select!='m'&&select!='d'){printf("Bye.\n");break;}printf("Enterfirstnumber:");num1=get_float();printf("Entersecondnumber:");num2=get_float();while(select=='d'&&num2==0){printf("Enteranumberotherthan0:");num2=get_float();}switch(select){case'a':printf("%.2f+%.2f=%.2f\n",num1,num2,num1+num2);break;case's':printf("%.2f-%.2f=%.2f\n",num1,num2,num1-num2);break;case'm':printf("%.2f*%.2f=%.2f\n",num1,num2,num1*num2);break;case'd':printf("%.2f/%.2f=%.2f\n",num1,num2,num1/num2);break;default:break;}}return(0);}floatget_float(void)n",str);printf("Pleaseenteranumbe,suchas,,or3:");}while(getchar()!='\n');returnnum;}charget_first(void)計(jì)函數(shù)min(x,y),返回兩個(gè)double數(shù)值中較小的數(shù)值,同時(shí)用一個(gè)簡(jiǎn)單的驅(qū)動(dòng)程序測(cè)試該函數(shù)。#include<>doublemin(double,double);intmain(void){doublex,y;printf("inputtwodoubles:");scanf("%lf%lf",&x,&y);printf("thesmalleris:%.2lf\n",min(x,y));return(0);}doublemin(doublea,doubleb){returna<ba:b;}2.設(shè)計(jì)函數(shù)chline(ch,i,j),實(shí)現(xiàn)指定字符在i列到j(luò)列的輸出,并用一個(gè)簡(jiǎn)單的驅(qū)動(dòng)程序測(cè)試該函數(shù)。#include<>voidchline(char,int,int);intmain(void){intx,y;charch;printf("inputachar:");scanf("%c",&ch);printf("inputtwoint:");scanf("%d%d",&x,&y);chline(ch,x,y);return0;}voidchline(charch,inti,intj){intk;for(k=1;k<i;k++)printf("");for(;k<=j;k++)printf("%c",ch);printf("\n");}3.編寫一個(gè)函數(shù)。函數(shù)的3個(gè)參數(shù)是一個(gè)字符和兩個(gè)整數(shù)。字符參數(shù)是需要輸出的字符。第一個(gè)整數(shù)說明了在每行中該字符輸出的個(gè)數(shù),而第二個(gè)整數(shù)指的是需要輸出的行數(shù)。編寫一個(gè)調(diào)用該函數(shù)的程序。#include<>voidchline(char,int,int);intmain(void){intx,y;charch;printf("inputachar:");scanf("%c",&ch);printf("inputcolumnandrow:");scanf("%d%d",&x,&y);chline(ch,x,y);return0;}voidchline(charch,intcolumn,introw){intx,y;for(y=0;y<row;y++){for(x=0;x<column;x++)printf("%c",ch);printf("\n");}}4.兩數(shù)值的諧均值可以這樣計(jì)算:首先對(duì)兩數(shù)值的倒數(shù)取平均值,最后再取倒數(shù)。編寫一個(gè)帶有兩個(gè)double參數(shù)的函數(shù),計(jì)算這兩個(gè)參數(shù)的諧均值。#include<>doublecalculate(double,double);intmain(void){doublea,b;printf("inputtwodoubles:");scanf("%lf%lf",&a,&b);printf("1/((1/x+1/y)/2)=%\n",calculate(a,b));return0;}doublecalculate(doublex,doubley){return1/((1/x+1/y)/2);}5.編寫并測(cè)試函數(shù)larger_of(),其功能是將兩個(gè)double類型變量的數(shù)值替換成它們中的較大值。例如,larger_of(x,y)會(huì)把x和y中的較大數(shù)值重新賦給變量x和y#include<>voidlarge_of(double*,double*);intmain(void){doublea,b;printf("inputtwodoubles:");scanf("%lf%lf",&a,&b);large_of(&a,&b);printf("theresultis:a=%,b=%\n",a,b);return0;}voidlarge_of(double*x,double*y){*x=*y=*x>*y*x:*y;}6.編寫一個(gè)程序,使其從標(biāo)準(zhǔn)輸入讀取字符,直到遇到文件結(jié)尾。對(duì)于每個(gè)字符,程序需要檢查并報(bào)告該字符是否是一個(gè)字母。如果是的話,程序還應(yīng)報(bào)告該字母在字母表中的數(shù)值位置。例如,c和C的字母位置都是3??梢韵葘?shí)現(xiàn)這樣一個(gè)函數(shù):接受一個(gè)字符參數(shù),如果該字符為字母則返回該字母的數(shù)值位置,否則返回-1。#include<>#include<>intABC(charch);intmain(void){charch;printf("inputachar:");scanf("%c",&ch);printf("thepositionofthecharinABCis:%d\n",ABC(ch));return0;}intABC(charch){if(isalpha(ch))returntolower(ch)-'a'+1;elsereturn-1;}7.在第6章“C控制語句:循環(huán)”的程序清單中,函數(shù)power()的功能是返回一個(gè)double類型數(shù)的某個(gè)正整數(shù)次冪。現(xiàn)在改進(jìn)該函數(shù),使其能正確地計(jì)算負(fù)冪。同時(shí),用該函數(shù)實(shí)現(xiàn)0的任何次冪為0,并且任何數(shù)值的0次冪為l。使用循環(huán)的方法編寫該函數(shù)并在一個(gè)程序中測(cè)試它。#include<>doublepower(double,int);intmain(void){doublex;intexp;printf("inputthebasenumberandtheexponent:");scanf("%lf%d",&x,&exp);printf("%.3gtothepower%dis%.5g\n",x,exp,power(x,exp));return0;}doublepower(doublen,intp){inti;doublepow=1;if(p>0)for(i=1;i<=p;i++)pow*=n;elseif(p<0)for(i=-1;i>=p;i--)pow/=n;elseif(n!=0)pow=1;elsepow=1/n;INF)代替returnpow;}8.使用遞歸函數(shù)重做練習(xí)7。#include<>doublepower(double,int);intmain(void){doublex;intexp;printf("inputthebasenumberandtheexponent:");scanf("%lf%d",&x,&exp);printf("%.3gtothepower%dis%.5g\n",x,exp,power(x,exp));return0;}doublepower(doublen,intp){inti;doublepow=1;if(p>0)for(i=1;i<=p;i++)pow*=n;elseif(p<0)pow=1/power(n,-p);elseif(n!=0)pow=1;elsepow=1/n;INF)代替returnpow;}9.為了使程序清單9.八中的函數(shù)to_binary()更一般化,可以在新的函數(shù)to_base_n()中使用第二個(gè)參數(shù),且該參數(shù)的范圍從2到10。然后,這個(gè)新函數(shù)輸出第一個(gè)參數(shù)在第二個(gè)參數(shù)規(guī)定的進(jìn)制數(shù)下的數(shù)值結(jié)果。例如,to_base_n(129,8)的輸出是201,也就是129的八進(jìn)制數(shù)值。最后在一個(gè)完整的程序中對(duì)該函數(shù)進(jìn)行測(cè)試。#include<>voidto_base_n(unsignedlong,unsignedint);intmain(void){unsignedlongnumber;unsignedintbase;printf("Enteraninteger(qtoquit):\n");while(scanf("%lu%u",&number,&base)==2)n");return0;}voidto_base_n(unsignedlongn,unsignedintbase)寫并測(cè)試一個(gè)函數(shù)Fibonacci(),在該函數(shù)中使用循環(huán)代替遞歸完成斐波納契數(shù)列的計(jì)算。#include<>longFibonacci(int);intmain(void){intn;printf("Enteraninteger(qtoquit):\n");while(scanf("%d",&n)==1){printf("Theterm%dofFibonaccisequenceis%d\n",n,Fibonacci(n));printf("Enteraninteger(qtoquit):\n");}printf("Done.\n");return0;}longFibonacci(intn){intn1,n2,temp,i;if(n>2)for(n1=1,n2=1,i=3;i<=n;i++){temp=n1+n2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論