第二章基本制結(jié)構(gòu)程序設(shè)計習(xí)題.doc_第1頁
第二章基本制結(jié)構(gòu)程序設(shè)計習(xí)題.doc_第2頁
第二章基本制結(jié)構(gòu)程序設(shè)計習(xí)題.doc_第3頁
第二章基本制結(jié)構(gòu)程序設(shè)計習(xí)題.doc_第4頁
第二章基本制結(jié)構(gòu)程序設(shè)計習(xí)題.doc_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

1、第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題一基本概念與基礎(chǔ)知識自測題2.1 程序閱讀題2.1.1 設(shè)有說明:int a=3, b=100;下面的循環(huán)語句執(zhí)行 (1) 次,執(zhí)行后a、b的值分別為 (2) 、 (3) 。while(b/a5)if(b-a25) a+;else b/=a;解答:本題檢查學(xué)生整除的概念。跟蹤:abb/a循環(huán)次數(shù)b-a31003319741002529651002039515100613851610061484171005停(1)14(2)17(3)1002.1.2 設(shè)有說明:int x,y,n,k;下面程序段的功能是備選答案中的 (1) ,當(dāng)n=10,x=10打印結(jié)果是 (2)

2、 。cinxn;k=0;dox/=2;k+;while(kn);y=1+x;k=0;doy=y*y;k+;while(kn);coutyendl;備選答案:A. B. C. D. 解答:第一個循環(huán)使x成為:;y成為:;第二個循環(huán)使y成為:;(1)B考慮整除,當(dāng)x連除4次2以后即為0,所以:為0(2)12.1.3 請看如下程序段:if(num=1) cout”Alpha”;else if(num=2) cout”Bata”;else if(num=3) cout”Gamma”;else cout”Delta”;當(dāng)num的值分別為1、2、3時,上面程序段的輸出分別為(1) 、(2) 、(3) 。解

3、答:檢查條件語句與字符串輸出概念:(1)Alpha(2)Bata(3)Gamma2.1.4 執(zhí)行下面程序段后,m和k的值分別為 (1) 、 (2) 。int m,k;for(k=1,m=0;k=10) break;if(m%2=0)m+=5;continue;m-=3;解答:注意continue語句的使用初值m=0k=1第1次循環(huán)后m=5k=2第2次循環(huán)后m=2k=3第3次循環(huán)后m=7k=4第4次循環(huán)后m=4k=5第5次循環(huán)后m=9k=6第6次循環(huán)后m=6k=7第7次循環(huán)后m=11k=8第8次循環(huán)m=11結(jié)束k=8,k+未做(1)11(2)8二編程與綜合練習(xí)題2.2 有一個函數(shù):編寫程序,輸入

4、x,輸出y。解:#include using namespace std;int main()double x,y;coutx;if(x1) y=x;else if(x10) y=2*x-1;else y=3*x-11;couty=yendl;return 0; 2.3 設(shè)計程序?qū)⑤斎氲陌俜种瞥煽冝D(zhuǎn)換為五分制輸出,90分以上為5分,8089分為4分,7079分為3分,6069分為2分,60分以下為1分。解:10分一檔用10進(jìn)行整除獲得,轉(zhuǎn)換用開關(guān)語句實行。#include using namespace std;int main()int mark,result; /mark是百分制成績,re

5、sult是5分制cout請輸入百分制成績:mark;if(mark0) cout缺考!endl;return 0;switch (mark/10)case 9:case 10:result=5;cout輸出五分制成績:resultendl;break;case 8:result=4;cout輸出五分制成績:resultendl;break;case 7: result=3;cout輸出五分制成績:resultendl;break;case 6: result=2;cout輸出五分制成績:resultendl;break;case 5:case 4:case 3:case 2:case 1:ca

6、se 0: result=1;cout輸出五分制成績:resultendl;break;default: cout輸入錯誤!endl;return 0;2.4 編程計算個人所得稅。個人所得稅率表如下:月收入1200元起征,超過起征點500元以內(nèi)部分稅率5%,超過500元到2,000元部分稅率10%,超過2,000元到5,000元部分稅率15%,超過5,000元到20,000元部分稅率20%,超過20,000元到40,000元部分稅率25%,超過40,000元到60,000元部分稅率30%,超過60,000元到80,000元部分稅率35%,超過80,000元到100,000元部分稅率40%,超過

7、100,000元部分稅率45%。解:應(yīng)該從最高稅率段開始計算,分段疊加。先算兩萬元以上各段,每兩萬為一檔,采用switch語句,注意沒有使用break語句。后面各低收入段,用if語句,也沒有使用else,這兩種方法是對應(yīng)的。第二要注意計算的入口處,收入減去該段的下限,進(jìn)行計算,以后各段都是完整的段,計算十分簡單。#include using namespace std;int main()double income,tax=0;int k;cout請輸入個人月收入:income;if(income=1200)cout免征個人所得稅20000)k=income/20000;switch(k)de

8、fault: tax+=(income-100000)*0.45;income=100000;case 4: tax+=(income-80000)*0.40;income=80000;case 3: tax+=(income-60000)*0.35;income=60000;case 2: tax+=(income-40000)*0.30;income=40000;case 1: tax+=(income-20000)*0.25;income=20000;if(income5000)tax+=(income-5000)*0.20;income=5000;if(income2000)tax+=

9、(income-2000)*0.15;income=2000;if(income500)tax+=(income-500)*0.10;income=500;tax+=income*0.05;cout應(yīng)征所得稅:taxendl;return 0;2.5 編程打印如下圖形: * * * * * * * * * * * * * * * * * * * * * * * * *解:難點在三角形左邊的空格的控制,嵌套一個循環(huán)語句完成此任務(wù)。#include using namespace std;int main()int i,j;for (i=1;i0;j-) cout ;/三角形每行前部的空格for(

10、j=1;j=2*i-1;j+) cout *;coutendl;for(i=1;i=3;i+) cout * * *n;return 0;2.6 編程輸出下列圖形,中間一行英文字母由輸入得到。AB B BC C C C C D D D D D D D C C C C C B B B A解:分上三角和下三角兩部分分別處理左邊的空格。#include using namespace std;int main()char in;int i,j;docoutin;if(in=97)&(in=122) in-=32;/小寫改大寫while(in90);int line=in-A;for (i=0;i0;

11、j-) cout ;/前方空格for(j=1;j=2*i+1;j+) cout char(i+A);cout0;i-)/下三角(少一行)for(j=0;j=line-i;j+) cout ;for(j=1;j=2*i-1;j+) cout char(i-1+A);coutendl;return 0;2.7 輸入n,求1!+2!+3!+n!解:通常求和作為外循環(huán),階乘作為內(nèi)循環(huán)。這里考慮到:n!=n*(n-1)!,利用遞推法運(yùn)算速度大大提高,同時兩者可合并為一個循環(huán)。本程序考慮了輸入的健壯性。#include #include using namespace std;int main()int

12、n,i,jch=1;double result=0; /result是結(jié)果cout請輸入正整數(shù)n:n;if(n1)cout輸入錯誤!endl;return 1;result=1;for(i=2;i=n;i+)jch*=i; /jch是i的階乘,注意n!=n*(n-1)!這樣可少一層循環(huán)result+=jch;coutresultendl;return 0;2.8 猴子吃桃問題:猴子摘下若干個桃子,第一天吃了桃子的一半多一個,以后每天吃了前一天剩下的一半多一個,到第十天吃以前發(fā)現(xiàn)只剩下一個桃子,問猴子共摘了幾個桃子。解:采用遞推法。從最后一天逆推到第一天,9次循環(huán)。#include using

13、namespace std;const int day=10;int main()int i,x=1;/最后一天只有一個for(i=1;iday;i+)x=(x+1)*2; /從一天前推到九天前cout開始共有桃子x個。n;return 0;2.9 從鍵盤輸入一組非0整數(shù),以輸入0標(biāo)志結(jié)束,求這組整數(shù)的平均值,并統(tǒng)計其中正數(shù)和負(fù)數(shù)的個數(shù)。解:將這組整數(shù)放在整型數(shù)組中,一邊輸入一邊求和及統(tǒng)計正數(shù)和負(fù)數(shù)的個數(shù),平均數(shù)由和除以整數(shù)數(shù)量取得。#include #include using namespace std;int main()int stem256,sum=0,pnum=0,nnum=0,i

14、=0;cout從鍵盤輸入一組非0整數(shù),以輸入0標(biāo)志結(jié)束:stemi;while(stemi!=0)sum+=stemi;/求和if(stemi0) pnum+;/正數(shù)數(shù)量else nnum+;/負(fù)數(shù)數(shù)量i+;cinstemi;if(!i) cout0個數(shù)endl;else cout平均值(double)sum/(pnum+nnum)endl;/平均值習(xí)慣不用整數(shù)cout正數(shù)個數(shù)pnumendl;cout負(fù)數(shù)個數(shù)nnumendl;return 0;2.10 編程找出1500之中滿足除以3余2,除以5余3,除以7余2的整數(shù)。解:中國古代數(shù)學(xué)問題(韓信點兵),采用窮舉法。注意三個條件同時成立用&。#

15、include using namespace std;int main()int i;for(i=1;i=500;i+)if(i%3=2)&(i%5=3)&(i%7=2) coutiendl;return 0;2.11 編程求1000之內(nèi)的所有完全數(shù)。所謂完全數(shù)指的是一個數(shù)恰好等于它的所有因子和。例如6=1+2+3,就是一個完全數(shù)。解:采用窮舉法。兩重循環(huán),外層是從1到999依次處理,內(nèi)層是求該數(shù)的所有因子的和,并判斷是否等于該數(shù)。#include using namespace std;int main()int i,a,sum_yz; /sum_yz是a的因子和for(a=1;a1000

16、;a+)sum_yz=0;for(i=1;ia;i+) if (a%i=0) sum_yz+=i;if (a=sum_yz)coutaendl;return 0;2.12 將100元換成用10元、5元和1元的組合,共有多少種組合方法。解:采用窮舉法??紤]10元最多10張,5元最多20張,余下是1元。#include using namespace std;int main()int i,j,k,count=0;for(i=0;i=10;i+)/i是10元張數(shù),j是5元張數(shù),k是1元張數(shù)for(j=0;j=0)coutitjtkendl;count+;coutcountendl;return 0

17、;2.13 利用反正切展開計算p的近似值,要求誤差10-5,公式如下:令x=1,可計算出p/4的近似值。解:采用遞推法。初看每一項的遞推通式不易寫出,但每一項全看作奇數(shù)項,而偶數(shù)項全為零,則很容易寫出:第1項為x,第3項為第1項乘以x的平方除以項序號3乘以-1,其余類推。同時和的誤差小于最后一項的絕對值。#include#includeusing namespace std;const double e=1e-5;int main()double x,a,sum;int i=3;cout請輸入正切值:x;a=x;sum=x;doa*=x*x*(-1);sum+=a/i;i+=2;while(f

18、abs(a/i)e);coutarctg(x)=sumendl;return 0;2.14 用迭代法求方程x2+10cosx=0的根,誤差限為10-5。迭代公式如下:解:迭代法也是用循環(huán)語句實現(xiàn),數(shù)學(xué)上#include#includeusing namespace std;const double e=1e-5;int main()double x0,x1;int n=0;cout輸入初始近似值:x1;dox0=x1;x1=(x0*x0-10*(x0*sin(x0)+cos(x0)/(2*x0-10*sin(x0);/x0是上次算出的結(jié)果,x1用作保存新算出的結(jié)果n+; while (fabs

19、(x1-x0) e)&(n1e5)cout超出迭代1e5次n;else cout方程x*x+10*cos(x)=0的一個根為:x1endl;cout方程誤差為:x1*x1+10*cos(x1)endl;return 0;2.15 兩隊選手每隊5人進(jìn)行一對一的比賽,甲隊為A、B、C、D、E,乙隊為J、K、L、M、N,經(jīng)過抽簽決定比賽配對名單。規(guī)定A不和J比賽,M不和D及E比賽。列出所有可能的比賽名單。解:這是一個組合問題,使用窮舉法。共有5個位置,設(shè)甲隊5名隊員位置不變,乙隊改變隊員位置,進(jìn)行配對。注意第1個位置可在5個隊員中任選一個,以后的位置必須扣除已選過的隊員。并扣除不能配對的情況,即得所

20、有可能的比賽名單。#includeusing namespace std;int main()char st15=A,B,C,D,E,st25=J,K,L,M,N;int i=0,j,k,l,m,n;for(j=0;j5;j+)/0號位if(j=0) continue;/A不與J比賽,即st10不與st20比賽for(k=0;k5;k+)/1號位if(k=j) continue;for(l=0;l5;l+)/2號位if(l=j|l=k) continue;for(m=0;m5;m+)/3號位if(m=j|m=k|m=l) continue;if(m=3) continue;/M不與D比賽,即s

21、t13不與st23比賽for(n=0;n5;n+)/4號位if(n=3) continue;/M不與E比賽,即st14不與st23比賽if(n=j|n=k|n=l|n=m) continue;coutst10-st2jtst11-st2kt;coutst12-st2ltst13-st2mt;coutst14-st2nendl;i+;coutiendl;return 0;2.16 編程模擬選舉過程。假定四位候選人:zhang、wang、li、zhao,代號分別為1、2、3、4。選舉人直接鍵入候選人代號,14之外的整數(shù)視為棄權(quán)票,-1為終止標(biāo)志。打印各位候選人的得票以及當(dāng)選者(得票數(shù)超過選票總數(shù)一

22、半)名單。解:用5個元素的整型數(shù)組,分別放棄權(quán)票和各候選人的得票,然后用開關(guān)語句打印。#include#includeusing namespace std;int main()enum candidatefeipiao,zhang,wang,li,zhaocand;int vote5=0,i,k=0,n;cinn;while(n!=-1)k+;if(n=1&nn;for(i=0;i5;i+)cand=(candidate)i;switch(cand)case feipiao:coutsetw(10)feipiaotvotecandendl;break;case zhang:coutsetw(

23、10)zhangtk/2) cout 當(dāng)選endl;else coutendl;break;case wang:coutsetw(10)wangtk/2) cout 當(dāng)選endl;else coutendl;break;case li:coutsetw(10)litk/2) cout 當(dāng)選endl;else coutendl;break;case zhao:coutsetw(10)zhaotk/2) cout 當(dāng)選endl;else coutendl;break;return 0;2.17 改造【例2.14】,將運(yùn)行結(jié)果(Fibonacii數(shù)列的前20項)存入文件。解:采用3步法。所謂3步法,

24、是將書上的第1和第2步合并,格式如下:首先建立或打開一個輸出文件,并與磁盤文件聯(lián)系:ofstream ofile(myfile2_17.txt);再按一定格式存入數(shù)據(jù):ofilesetw(15)fib0setw(15)ijkl;等,并輸出最后關(guān)閉文件:file.close();#include#include#includeusing namespace std;const int m=20;int main()int fib0=0,fib1=1,fib2,i,j,k,l,n;char ch;ofstream ofile(myfile2_17.txt);ofilesetw(15)fib0set

25、w(15)fib1;for(n=3;n=m;n+)fib2=fib0+fib1;ofilesetw(15)fib2;if(n%5=0) ofileendl;/控制每行5個數(shù)據(jù)fib0=fib1; fib1=fib2;ofile.close();cout是否要將文件輸出?Y或Nch;if(ch=y|ch=Y)ifstream ifile(myfile2_17.txt);while(1)ifileijkln;/由文件讀入if(ifile.eof()!=0) break;coutsetw(15)isetw(15)jsetw(15)ksetw(15)lsetw(15)nendl;/顯示 ifile.c

26、lose();return 0;2.18 改造【例2.19】,將運(yùn)行結(jié)果(100以內(nèi)素數(shù))存入文件。解:采用4步法。首先定義一個輸出文件:ofstream ofile;再打開該文件并與并與磁盤文件聯(lián)系:ofile.open(myfile2_18.txt);按一定格式把數(shù)據(jù)存入文件。最后關(guān)閉文件。效果與3步法相同。讀文件同樣可用3步法或4步法。#include#include#include#includeusing namespace std;const int n=100;int main()int an,i,j;char ch,b256;ofstream ofile;ifstream ifile;for(i=0;in;i+) ai=1+i;/用數(shù)組保存整數(shù)1-100a0=0;/1不是素數(shù),置0for(i=0;in;i+)if(ai=0) continue;/該數(shù)已經(jīng)置0,判斷下一個數(shù)for(j=i+1;jn;j+) if(aj%ai=0) aj=0;/是ai倍數(shù)的元素置0;ofile.

溫馨提示

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

最新文檔

評論

0/150

提交評論