C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案_第1頁(yè)
C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案_第2頁(yè)
C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案_第3頁(yè)
C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案_第4頁(yè)
C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C程序設(shè)計(jì)(第四版)(譚浩強(qiáng))第五章課后習(xí)題答案循環(huán)結(jié)構(gòu)程序設(shè)計(jì)P115 5.1 用while計(jì)算1至100的合.#include int main()int i=1,sum=0; while(i=100) /對(duì)于需要運(yùn)算的值,要么在運(yùn)算前可以賦值,要么一開始要指定.sum=sum+i;i+;printf(The sum is %d .n,sum);return 0;P117 5.2 用do-while來做1至100的合.#include int main()int i=1,sum=0;do / do-while可以做的事,用while都可以做到. /do-while先做一次執(zhí)行,再判斷條件,

2、而while卻是先做一個(gè)條件,再執(zhí)行.sum=sum+i;i+;while(i=100);printf(The sum is %d .n,sum);return 0;P118 5.3 比較do-while與while的差別.#include int main()int i,sum=0;printf(Please input a number :);scanf(%d,&i); /輸入10以內(nèi),正常,11的話,則sum仍然是0.while(i=10)sum=sum+i;i+;printf(The sum of 1-10 is %d .n,sum);return 0;#include int mai

3、n()int i,sum=0;printf(Please input a number :);scanf(%d,&i); /輸入10以內(nèi),結(jié)果一樣.輸入11的話,先做操作,所以sum=11.dosum=sum+i; i+;while(i=10); /此重點(diǎn)在于理解二者的差別.printf(The sum of 1-10 is %d .n,sum);return 0;P126 5.4 break的例子.#include int main()int i,b=0,a,c;for(i=0;i=100)break; /break是用于跳出循環(huán),對(duì)if無效,對(duì)while for switch 這一類.c=

4、b/i;printf(conut is %d , aver is %d ,i+1,c); /注意%號(hào)后的形式,否則可能輸出錯(cuò)誤.return 0;P127 5.5 continue的例子.#include int main() int i;for(i=1;i20;i+) if(i%3!=0)continue; /跳過本次I,執(zhí)行下一個(gè)i.printf(%d ,i); printf(n); return 0;P128 5.6 形成一個(gè)4*5的矩陣.#include int main()int i,j,a=0; /沒有給初值,會(huì)出現(xiàn)警告: 使用了未初始化的局部變量“a”.for(i=1;i=4;i

5、+) for(j=1;j=5;j+,a+) / a用來控制換行.if(a%5=0)printf(n);printf(%dt,i*j); printf(n);return 0;P131 5.7 用一個(gè)交錯(cuò)的式子求哌的近似值.#include #include int main() /四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).float s=1,n=1,m,sum=0,t; for(m=1;m=m+2) /不確定哪項(xiàng)才會(huì)小于等于十的負(fù)六次方,所以不指定,無限下去. /不指定第二項(xiàng),執(zhí)行語(yǔ)句中應(yīng)該有控制跳出的句子,否則死循環(huán).t=(s)*(n/m); /這是第

6、一項(xiàng),s是符號(hào),if(fabs(t)=1e-6) /應(yīng)該寫在這里,題目要求這一項(xiàng)不累加進(jìn)去.break;sum=sum+t; /因?yàn)槔奂禹?xiàng)在這里,所以,一旦跳出就不會(huì)累加進(jìn)來了.s=s*(-1); /變號(hào)一次.printf(四分之一哌的值是%f.n,sum); printf(一個(gè)完整哌的值是%f.n,sum*4);return 0;/下面這段小代碼用來驗(yàn)證關(guān)于數(shù)值型數(shù)據(jù)類型的關(guān)系.去掉注釋,可運(yùn)行./如果出現(xiàn)類似值為全1或是全零的話,一般可以考慮數(shù)據(jù)類型賦值或是定義錯(cuò)了的問題./#include /這是關(guān)于int float double三者關(guān)復(fù)雜關(guān)系的,亂啊,如果看不懂,可以通過實(shí)驗(yàn)自己明白

7、來./int main() /在C語(yǔ)言中,1.0認(rèn)為是實(shí)數(shù),即是double型,所以,如果你把它用float輸出的話,會(huì)有警告:警告1warning C4305: “=”: 從“double”到“float”截?cái)?/float m,a,b,c; /一旦定義了是這種類型的話,輸出或是賦值的時(shí)候只能擴(kuò)展不能截?cái)?意思就是能變成double型,不能變成int型啦.而且后面的賦值會(huì)跟著它變成相應(yīng)的類型.比如下面的m=1,其實(shí)得到的是m=1.0. /int d,e,f;/m=1;/a=1.0/3;/b=1/3;/c=m/3;/d=1.0;/e=1/4;/f=1.0/4;/printf(%lf(float

8、用double的%lf來輸出是可以的.)n%fn%fn%fn,m,a,b,c); /不管上面定義什么,這邊寫的輸出類型是什么,就按相應(yīng)的類型輸出,有可能會(huì)出錯(cuò),所以建議按定義的類型來輸出.當(dāng)然擴(kuò)展的是不會(huì)錯(cuò)的,截?cái)嗟氖菚?huì)錯(cuò)的,比如float可以用%lf來輸出,而不能用%d來輸出./printf(%dn%dn%dn,d,e,f); /但是,不相應(yīng)的int型不可以用%f來輸出的.因?yàn)閕nt float就不同種類,一個(gè)是整數(shù),一個(gè)是小數(shù),float double同樣是有小數(shù)點(diǎn)的!/return 0;/P133 5.8 著名的Fibonacci(費(fèi)波那契數(shù)列問題)#include int main()

9、 /這個(gè)就是著名的Fibonacci(費(fèi)波那契數(shù)列問題)int f1=1,f2=1,f3,i;printf(%12dn%12dn,f1,f2);for(i=1;i=38;i+) /注意,這是個(gè)基礎(chǔ)問題,(i=1;i=5;i+)這里其實(shí)進(jìn)行了次運(yùn)算,因?yàn)橛衒1,f2,要求有個(gè),所以要有個(gè).要么寫=38,要么寫39,邊界問題一定要注意,不可以太隨意!f3=f1+f2;printf(%12dn,f3); /這個(gè)問題同樣適用于一對(duì)兔子一個(gè)月生一對(duì)的問題.,f1=f2; /f1=f1+f2;此時(shí)它們各是,所以,現(xiàn)在的f1是.f2=f3; /f2=f2+f1;此時(shí)的f1已經(jīng)是最先二者之和了.可以不用到f3

10、.return 0;P135 5.9 還是求素?cái)?shù),方法不一樣.#include #include int main()double num;int i;printf(Please input a number :);scanf(%lf,&num); /因?yàn)閟qrt要求是浮點(diǎn)型,那就給它浮點(diǎn)型,需要時(shí)再?gòu)?qiáng)制轉(zhuǎn)換.for(i=2;i=sqrt(num);i+) /這邊是=號(hào)沒錯(cuò).if(int)num%i=0) /如果在這期間有任何一個(gè)可以為零的話,則不是素?cái)?shù).break; /當(dāng)然跳出. /執(zhí)行到這里的時(shí)候,i=5,已經(jīng)變成了!if(i=sqrt(num) printf(Not %d,(int)nu

11、m);else /如上所述,i=5,超出了求根的值,所以是素?cái)?shù).printf(Yes %d,(int)num); return 0;P137 5.10 求100至200間的素?cái)?shù).#include /不解釋,HOHO.#include int main()double j;int i,k=0;for(j=100;j=200;j+)for(i=2;i=sqrt(j);i+) if(int)j%i=0) break; k=k+1; /這里是布局的開頭.學(xué)習(xí)一下,有助邏輯.if(i=sqrt(j) printf(Not %d ,(int)j);if(k%5=0) /5個(gè)換一次行.printf(n);e

12、lse printf(Yes %d ,(int)j);if(k%5=0)printf(n);return 0;P139 5.11 密碼轉(zhuǎn)換.#include int main()char c;c=getchar();while(c!=n) /這也可以用數(shù)組來實(shí)現(xiàn).if(c=a&c=A&c=w&c=W&c=Z)c=c-22;elsec=c+4;printf(%c,c);c=getchar(); /套在循環(huán)里,依次得到字母,而while中判斷回車為結(jié)束.printf(n); /這是布局問題.return 0;P140 0.3 最大公約數(shù)和最小公倍數(shù).#include /最大公約數(shù)用累除法,除到無余

13、數(shù)時(shí)的被除數(shù)是最大公約數(shù).main ()int m, n, c, d;int gcd(); /這是最大公約數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參.int lcm(); /這是最小公倍數(shù)的縮寫,此處調(diào)用函數(shù),可以不寫里面的實(shí)參.printf(Please input two number :n);scanf(%d %d,&m,&n);c=gcd(m,n); /c獲取最大公約數(shù)d=lcm(m,n); /d獲取最小公倍數(shù)printf(The GCD of %d and %d is : %d !n, m, n, c);printf(The LCM of %d and %d is : %d !n,

14、m, n, d); return 0;int gcd(int x, int y) /最大公約數(shù)Greatest Common Divisorint temp;while(x%y!=0) temp=y; /y在下一輪中作為除數(shù),即是下一輪中的X,所以先閃一邊去.y=x%y; /x,y的余數(shù)作為下一輪中的Y,由x%y來取得.x=temp; /剛才temp中存儲(chǔ)了y的值,現(xiàn)在拿出來作為下一輪中的X使用.return y; /這是每一輪中的被除數(shù),按原理來,這就是最大公約數(shù),即累除法的原理.int lcm(int x, int y) /最小公倍數(shù)Lowest Common Multipleint i,

15、 temp;if(xy) /此段代碼結(jié)果是保證二者大的數(shù)在X上,小的數(shù)在Y上.即小于號(hào)降序. /以下為經(jīng)典三行碼,實(shí)現(xiàn)兩個(gè)數(shù)的互換.temp=x;x=y;y=temp;for(i=1; i=y; i+) /設(shè)定一個(gè)區(qū)間,從1至大的數(shù)之間的循環(huán).if(!(x*i)%y) /此式子如有余數(shù),加上!號(hào),會(huì)是假,則不返回,進(jìn)行下一輪. /如此往復(fù),直到取模無余數(shù),那么小的數(shù)X乘以區(qū)間當(dāng)前的I值,就是最小公倍數(shù). return x*i;P140 0.4 判斷一串輸入的字符.#include int main() char ch;int a=0,b=0,c=0,d=0,e=0;printf(Please

16、input the stringn);while(ch=getchar()!=n) /直到回車.if(ch=a)a+;else if(ch= )c+;else if(ch47)d+;else if(ch=A)b+;elsee+;printf(大寫%d 小寫%d 空格%d 數(shù)字%d 其它%dn,a,b,c,d,e);P140 0.5 2+22+222+2222系列的和.#include /不理解時(shí)可以百度或是谷歌更多的信息.int main() /想辦法既快速做完,又要消化理解!int temp,i,a,n,sum=0; /主邏輯,友好性暫時(shí)放松.scanf(%d %d,&a,&n); /a是數(shù)

17、字,n是要乘的個(gè)數(shù).temp=a; /先把第一階的值存起來.for(i=0;in;i+)sum=sum+a;printf(%d + ,a); /事關(guān)布局.a=a*10+temp; /重點(diǎn)是每次乘,然后加上上一個(gè)數(shù).printf(= %d .,sum);return 0;P140 0.6 1!+2!+3!+4!.的值.#include int main() /1!+2!+3!+4!.int i,j,k,sum=0,m=1;scanf(%d,&k); /比如設(shè)定為,值為.for(i=1;i=k;i+) /第一層循環(huán),指定到.for(j=1;j=i;j+) /第二層循環(huán),指定至當(dāng)前數(shù).m=m*j;

18、/到此是階乘的結(jié)構(gòu).sum=sum+m;m=1;printf(%d,sum); /完全不理解時(shí),搜索并參考.return 0; /嘗試自己做,第一次做出來就是自己的東西了.P140 0.7 1至100,1至50平方,1至10倒數(shù)的總和.#include int main() int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a=100;a+) /三個(gè)塊分別注釋驗(yàn)證結(jié)果.asum=asum+a;for(b=1;b=50;b+) /在VS運(yùn)行中,注意*.cpp為C+語(yǔ)言.bsum=bsum+b*b; /為了避免語(yǔ)言差別,請(qǐng)注意文件名為*.c.for(c=1

19、;c=10;c+) /c作浮點(diǎn)運(yùn)算,所以定義在double類型中.csum=csum+1/c;printf(%lf,asum+bsum+csum);return 0;PP#include #include int main()int j,k,s6,x=100,y,sum=0;for(j=153;j=0;k-)sk=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(sk,3);sum+=y;printf(%d-%d-%dt,k,sk,j);printf(%dn,sum);return 0;P140 0.8 水仙花數(shù)./#include /一步步的發(fā)現(xiàn)問題./int

20、main() /在%和/號(hào)之間,以前pow.以后再做./int i,j,k,a,b,c,sum=0; /這里邏輯對(duì),算出來卻錯(cuò)了./for(i=2;i=4;i+) /計(jì)算機(jī)在想什么,看來它的大腦難以模擬./for(j=pow(10,i);j=pow(10,i+1)-1;j+) /我不完全明白它遵守的邏輯./for(k=0;k=i;k+)/sum+=pow(j%pow(10,i+1)/pow(10,i),3);/if(sum=j)/printf(%d 是水仙花數(shù)!n,j);/sum=0;/return 0;/ /為什么還是無法實(shí)現(xiàn)?!#include #include int main()int

21、 a,b,c,i,sum=0; /這里只計(jì)算三位數(shù)的.for(i=100;i1000;i+)a=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum=i)printf(%d 是水仙花數(shù).n,i);sum=0;return 0;P141 0.9 完數(shù).#include int main()int i,j,r;for(i=1;i=1000;i+) /零是個(gè)臨界值,不能包括它.r=0; /每次清零重來.類似水仙中的sum.for(j=1;ji;j+)if(i%j=0) /除得盡即是因子.r=r+j; /然后累加進(jìn)去.if(r=i) /若相等.printf(%d 是完數(shù).n,i);return 0;P141 0.10 2/1+3/2+5/3+8/5+13/8#include int main() /10.double i,a=2,b=1,c,s=0; /a是分子,b是分母.for(i=0;i6;i+) /二十可以用戶指定.s+=a/b; /中間儲(chǔ)值變量.c=a+b;b=a;a=c;printf(%lfn,s);return 0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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)論