華中科技大學(xué)C++課件4_第1頁(yè)
華中科技大學(xué)C++課件4_第2頁(yè)
華中科技大學(xué)C++課件4_第3頁(yè)
華中科技大學(xué)C++課件4_第4頁(yè)
華中科技大學(xué)C++課件4_第5頁(yè)
已閱讀5頁(yè),還剩88頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章第四章 循環(huán)控制循環(huán)控制代碼復(fù)用,省代碼復(fù)用,省時(shí)時(shí)省力省力LOGO循環(huán)定義及要點(diǎn)n循環(huán)就是反復(fù)執(zhí)行某些動(dòng)作網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心循環(huán)體 歸納出哪些操作需要反復(fù)執(zhí)行循環(huán)控制條件 這些操作在什么情況下重復(fù)執(zhí)行n 隨著循環(huán)不斷地執(zhí)行,必須有一種方法使得循環(huán)控制條件最終不成立,循環(huán)可以退出,否則,就構(gòu)成死循環(huán),程序永遠(yuǎn)無(wú)法終止。LOGO引例引例n在現(xiàn)實(shí)生活中,經(jīng)常會(huì)遇到評(píng)委打分的情況,比如奧運(yùn)會(huì)中的跳水項(xiàng)目,評(píng)選優(yōu)秀班集體等。n評(píng)委打分的過(guò)程大致是這樣的,假設(shè)有n個(gè)評(píng)委,個(gè)評(píng)委,每個(gè)評(píng)委根據(jù)自己的判斷給出一個(gè)分值,然后在n個(gè)評(píng)委的打分中去掉最高分和最低分,對(duì)剩下的分?jǐn)?shù)取平均值分?jǐn)?shù)取平均值

2、。現(xiàn)在把問(wèn)題簡(jiǎn)化為不去掉最高分和最低分,直接取平均值作為選手的最終得分。LOGOEX4.1真假輸入一個(gè)評(píng)委的評(píng)分將評(píng)分累加到總分中求平均得分n評(píng)分: double score;n平均分: double avg;n評(píng)委人數(shù)nint n;n當(dāng)前評(píng)委編號(hào)nint i;n總分: double sum;還有評(píng)委的評(píng)分沒(méi)有輸入LOGOEX4.1真假輸入一個(gè)評(píng)委的評(píng)分將評(píng)分累加到總分中求平均得分n評(píng)分: double score;n平均分: double avg;n評(píng)委人數(shù)nint n;n當(dāng)前評(píng)委編號(hào)nint i;n總分: double sum;cinscore;sum+=score;avg=sum/n;還

3、有評(píng)委的評(píng)分沒(méi)有輸入i=nLOGOEX4.1真假nint n; /評(píng)委評(píng)委人數(shù)人數(shù)nint i; /當(dāng)前評(píng)委編號(hào)當(dāng)前評(píng)委編號(hào)ndouble score; /評(píng)分評(píng)分ndouble sum; /總分總分ndouble avg; /平均分平均分 iscore; sum+=score;avg=sum/n;i=1;sum=0;i+;LOGO4.14.1循環(huán)語(yǔ)句循環(huán)語(yǔ)句網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心for循環(huán)語(yǔ)句while循環(huán)語(yǔ)句do-while循環(huán)語(yǔ)句多重循環(huán)LOGO4.1.1 for4.1.1 for語(yǔ)句語(yǔ)句規(guī)范的結(jié)構(gòu)LOGOfor ( 表達(dá)式表達(dá)式1; 表達(dá)式表達(dá)式2; 表達(dá)式表達(dá)式3 ) 循環(huán)體循

4、環(huán)體語(yǔ)句語(yǔ)句 初始初始表達(dá)式:表達(dá)式:對(duì)表達(dá)式對(duì)表達(dá)式2 2中的循中的循環(huán)控制變量賦初值變量環(huán)控制變量賦初值變量 循環(huán)循環(huán)控制邏輯表達(dá)式控制邏輯表達(dá)式: 循環(huán)循環(huán)控制變量控制變量 循環(huán)后置循環(huán)后置表達(dá)式表達(dá)式: 改變改變表達(dá)式表達(dá)式2 2中的循環(huán)控制變量的值中的循環(huán)控制變量的值for 語(yǔ)句的格式LOGOEX4.1真假#includeusing namespace std;int main()int n=12; /評(píng)委人數(shù)評(píng)委人數(shù)int i; /當(dāng)前評(píng)委編號(hào)當(dāng)前評(píng)委編號(hào)double score; /評(píng)分評(píng)分double sum; /總分總分double avg; /平均分平均分 return 0

5、; iscore; sum+=score;avg=sum/n;i=1;sum=0;i+;LOGOEX4.1LOGOEX4.1sum=0;for( i=1; iscore; sum+=score; avg=sum/n;cout“avg=“avgendl;LOGOfor循環(huán)的變化形式n可以把賦初值的多個(gè)操作以逗號(hào)表達(dá)式的形式放在表達(dá)式1中。for( i=1,sum=0; iscore;sum+=score;for循環(huán)的變化形式LOGOfor循環(huán)的變化形式for循環(huán)的變化形式n表達(dá)式1可以為空,賦初值的操作可以放在循環(huán)語(yǔ)句之前 i=1; sum=0; for(; iscore;sum+=score;

6、LOGOfor循環(huán)的變化形式n表達(dá)式2可以為空,但兩個(gè)分號(hào)不能少,分號(hào)用來(lái)區(qū)分號(hào)用來(lái)區(qū)分分3個(gè)表達(dá)式個(gè)表達(dá)式,表達(dá)式2為空是表達(dá)式永遠(yuǎn)為真的情況,需要在循環(huán)體中,根據(jù)一定的條件,以break語(yǔ)句跳出。for( i=1,sum=0; ; i+)if(in) break;cinscore;sum+=score;for循環(huán)的變化形式LOGOfor循環(huán)的變化形式n表達(dá)式3可以為空f(shuō)or( i=1,sum=0; iscore;sum+=score;i+;for循環(huán)的變化形式編程計(jì)算 s=1+2+3+4+100s=s+1s=s+2s=s+3s=s+100s=s+i ;i+;舉例:舉例:變量:變量: int

7、int s=0, i=1 s=0, i=1舉例延伸:舉例延伸:求 s=1-1/3+1/5-1/7+.+1/n求 e=1+1/1!+1/2!+1/3!+.+1/n!s=s+1/item*sign;item=item+2;sign=-sign;s=s+1/item;i=i+1;item=item*i;LOGO4.1.2 4.1.2 whilewhile語(yǔ)句語(yǔ)句當(dāng)循環(huán)LOGOwhile (表達(dá)式表達(dá)式 ) 循環(huán)體循環(huán)體語(yǔ)句語(yǔ)句; 表達(dá)式while語(yǔ)句格式 循環(huán)開(kāi)始前對(duì)循環(huán)條件進(jìn)行初始化 在循環(huán)體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句,否則循環(huán)將不能終止而陷入死循環(huán)。LOGOEX4.1sum=0;i=1;wh

8、ile ( iscore; sum+=score; i+;avg=sum/n;cout“avg=“avgendl;循環(huán)開(kāi)始前對(duì)循環(huán)條件進(jìn)行初始化在循環(huán)體語(yǔ)句中要包含修改循環(huán)條件的語(yǔ)句LOGOfor循環(huán)與while循環(huán)對(duì)比i=1;while ( iscore; sum+=score; i+;for( i=1 ; iscore; sum+=score; for循環(huán)while循環(huán) 結(jié)構(gòu)上有差別 功能相同 循環(huán)初始表達(dá)式和后置表達(dá)式作為結(jié)構(gòu)的一部分LOGO4.1.3 4.1.3 dodowhilewhile語(yǔ)句語(yǔ)句直到循環(huán)LOGO do-while 語(yǔ)句格式 表達(dá)式do 循環(huán)體循環(huán)體語(yǔ)句語(yǔ)句; whi

9、le (表達(dá)式表達(dá)式 );LOGOEX4.1真假cinscore; sum+=score;avg=sum/n;i=1;sum=0;i+;iscore; sum+=score; i+; while ( i=n );avg=sum/n;cout“avg=“avgi;while ( i=5 ) sum+=i; i+;cout“sum=“sumi;do sum+=i; i+; while ( i=5 );cout“sum=“sumendl;Dowhile循環(huán)i5LOGO4.1.4 4.1.4 三三種語(yǔ)句的共性和種語(yǔ)句的共性和區(qū)別區(qū)別依據(jù)實(shí)際問(wèn)題選擇適合的語(yǔ)句LOGO三三種語(yǔ)句的共性和區(qū)別種語(yǔ)句的共性和

10、區(qū)別do-while 先執(zhí)行循環(huán)體,先執(zhí)行循環(huán)體,再判斷循環(huán)條再判斷循環(huán)條件是否滿足件是否滿足 至少執(zhí)行一次至少執(zhí)行一次while 先判斷條件是先判斷條件是否滿足,然后否滿足,然后才執(zhí)行循環(huán)體才執(zhí)行循環(huán)體 可能一次也不可能一次也不執(zhí)行。執(zhí)行。for 先判斷條件是先判斷條件是否滿足,然后否滿足,然后才執(zhí)行循環(huán)體才執(zhí)行循環(huán)體 可能一次也不可能一次也不執(zhí)行執(zhí)行LOGO三種語(yǔ)句的共性和區(qū)別可以相互替換,都能實(shí)現(xiàn)循環(huán)控制 如果循環(huán)次數(shù)已知或者能用表達(dá)式確定,則選擇如果循環(huán)次數(shù)已知或者能用表達(dá)式確定,則選擇for循環(huán)循環(huán) 循環(huán)次數(shù)未知時(shí),一般選擇循環(huán)次數(shù)未知時(shí),一般選擇while或者或者do-while循

11、環(huán)循環(huán) 在有些情況下,循環(huán)條件中的變量是在循環(huán)題中計(jì)算出在有些情況下,循環(huán)條件中的變量是在循環(huán)題中計(jì)算出來(lái)的,適合用來(lái)的,適合用do-while循環(huán)。循環(huán)。LOGO循環(huán)算法的設(shè)計(jì)循環(huán)條件表達(dá)式n找出決定循環(huán)次數(shù)的變量找出決定循環(huán)次數(shù)的變量n用這些變量構(gòu)成表達(dá)式用這些變量構(gòu)成表達(dá)式循環(huán)體:考慮一次循環(huán)過(guò)程的所有細(xì)節(jié)1. 每次循環(huán)要完成的每次循環(huán)要完成的目的操作目的操作2. 進(jìn)入下一次循環(huán)前要進(jìn)行的進(jìn)入下一次循環(huán)前要進(jìn)行的預(yù)處理操作預(yù)處理操作使用相同變量,相同程序語(yǔ)句完成每一次循環(huán)使用相同變量,相同程序語(yǔ)句完成每一次循環(huán)注意注意: 在每一次循環(huán)中,必須對(duì)決定循環(huán)執(zhí)行次在每一次循環(huán)中,必須對(duì)決定循環(huán)

12、執(zhí)行次數(shù)的變量的值進(jìn)行數(shù)的變量的值進(jìn)行更新更新LOGOEX4.4多少年: int i;初值: i=0;利滾利:循環(huán)結(jié)構(gòu)循環(huán)控制變量:小張的積蓄小張的積蓄:double m;循環(huán)執(zhí)行條件:m20循環(huán)控制變量的初值: m=10;n小張現(xiàn)在有10萬(wàn)元儲(chǔ)蓄,將這筆錢存在銀行,年利率為5%,并且利滾利,問(wèn):多少年后,小張的積蓄能夠翻一番?l循環(huán)體l計(jì)算積蓄:m=m*1.05;l累加年數(shù):i+;循環(huán)條件循環(huán)條件m20LOGOEX4.4#includeusing namespace std;int main()double m=10;int i=0;while(m20)m=m*1.05;i+;couti=i

13、endl;return 0;多少年: int i;初值: i=0;利滾利:循環(huán)結(jié)構(gòu)循環(huán)控制變量:小張的積蓄小張的積蓄:double m;循環(huán)控制變量的初值: m=10;循環(huán)執(zhí)行條件:m20l循環(huán)體l計(jì)算積蓄:m=m*1.05;l累加年數(shù):i+;LOGO4.1.5 4.1.5 多重循環(huán)多重循環(huán)把一個(gè)循環(huán)結(jié)構(gòu)看成一個(gè)整體LOGO多重循環(huán)n在用三種語(yǔ)句實(shí)現(xiàn)的循環(huán)結(jié)構(gòu)中,循環(huán)體語(yǔ)句是一條語(yǔ)句或者是用 括起來(lái)的復(fù)合語(yǔ)句。n如果把一個(gè)循環(huán)結(jié)構(gòu)看成一個(gè)整體,它相當(dāng)于把一個(gè)循環(huán)結(jié)構(gòu)看成一個(gè)整體,它相當(dāng)于一條語(yǔ)句一條語(yǔ)句,也可以出現(xiàn)在for、while或者do-while之下作為循環(huán)體語(yǔ)句,這樣就構(gòu)成了多重循環(huán)

14、。LOGO多重多重循環(huán)舉例循環(huán)舉例n編寫程序打印如下圖形。編寫程序打印如下圖形。n先解決打印一行的問(wèn)題:先解決打印一行的問(wèn)題: for(j=1;j=5;j+)for(j=1;j=5;j+) cout cout* *; ;將將其其重復(fù)重復(fù)5 5次次for for i=1;ii=1;i=5;i=5;i+)+) for(j=1;j=5;j+)for(j=1;j=5;j+) cout cout* *; ; coutendl; coutendl;LOGO多重多重循環(huán)舉例循環(huán)舉例n編寫程序打印如下圖形。編寫程序打印如下圖形。for for i=1;ii=1;i=5;i=5;i+)+) for(j=1;j=

15、5 ; j+)for(j=1;j=5 ; j+) cout cout* *; ; coutendl; coutendl;for(j=1;j=i ; j+)for(j=1;j=i ; j+)LOGO多重多重循環(huán)舉例循環(huán)舉例n編寫程序打印如下圖形。編寫程序打印如下圖形。for for i=1;ii=1;i=5;i=5;i+)+) coutendl; coutendl; for(j=1;j=i ; j+)for(j=1;j=i ; j+)coutcout* *; ;for(j=1;j=5 i ; j+)for(j=1;j=5 i ; j+) coutcout ; ;LOGOEX4.7n要解決這一類問(wèn)

16、題,主要有以下幾個(gè)問(wèn)題要解決:1.當(dāng)邊長(zhǎng)為n時(shí)共需要打印多少行2.每一行第一個(gè)*前有多少個(gè)空格,與n和行數(shù)是什么關(guān)系?3.每行的*號(hào)數(shù)及*后的空格數(shù),與n和行數(shù)是什么關(guān)系?n=4LOGO問(wèn)題的細(xì)化:上三角&下三角 * * * * * * * * * * * * * * * * 上三角下三角LOGO問(wèn)題的細(xì)化:上三角&下三角 * * * * * * * * * * * * * * * * 邊長(zhǎng)n=4上三角空格數(shù)空格數(shù)星號(hào)數(shù)星號(hào)數(shù)131222313404LOGO/輸出第i行,共執(zhí)行n次for( i=1; i=n; i+ ) 輸出n-i個(gè)空格輸出i個(gè)”星號(hào)空格”換行每行前的空格數(shù)及星號(hào)數(shù)與行數(shù)i及邊

17、長(zhǎng)n的關(guān)系打印上三角空格數(shù)空格數(shù)星號(hào)星號(hào)數(shù)數(shù)131222313404LOGOint j; /輸出上三角的輸出上三角的n行行,i為行號(hào)為行號(hào)for(i=1;i=n;i+) /輸出輸出n-i個(gè)空格個(gè)空格for( j=1;j=n-i;j+ ) cout ;/輸出輸出i個(gè)星號(hào)個(gè)星號(hào)及空格及空格for( j=1;j=i;j+ ) cout“* “; /換行換行coutendl;打印上三角LOGO/輸出第i行,共執(zhí)行n-1次for(i=1; i=n-1; i+) 輸出i個(gè)空格輸出n-i個(gè)”星號(hào)空格”換行每行前的空格數(shù)及星號(hào)數(shù)與行數(shù)i及邊長(zhǎng)n的關(guān)系打印下三角空格數(shù)空格數(shù)星號(hào)星號(hào)&空格空格數(shù)數(shù)11322233

18、1LOGO/輸出下三角的輸出下三角的n-1行行,i為行號(hào)為行號(hào)for(i=1;i=n-1;i+) /輸出輸出i個(gè)空格個(gè)空格for( j=1;j=i;j+ ) cout ;/輸出輸出n-i個(gè)星號(hào)個(gè)星號(hào)及空格及空格for( j=1;j=n-i;j+ ) cout“* “; /換行換行coutendl;打印下三角LOGO4.2 4.2 流程控制語(yǔ)句流程控制語(yǔ)句網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心breakcontinueLOGObreak & continuebreak語(yǔ)句語(yǔ)句 無(wú)條件地結(jié)束無(wú)條件地結(jié)束switch語(yǔ)語(yǔ)句,或循環(huán)語(yǔ)句句,或循環(huán)語(yǔ)句 轉(zhuǎn)向執(zhí)行語(yǔ)句塊的后續(xù)轉(zhuǎn)向執(zhí)行語(yǔ)句塊的后續(xù)語(yǔ)句語(yǔ)句contin

19、ue語(yǔ)句語(yǔ)句 用于循環(huán)體中,終止當(dāng)用于循環(huán)體中,終止當(dāng)前一次循環(huán)前一次循環(huán)LOGOwhile ( E1 ) 語(yǔ)句語(yǔ)句 1 if ( E2 ) continue ; 語(yǔ)句語(yǔ)句 2while ( E1 ) 語(yǔ)句語(yǔ)句 1 if ( E2 ) break ; 語(yǔ)句語(yǔ)句 2 語(yǔ)句2 E 1 語(yǔ)句1 E2 下一語(yǔ)句 breakbreak 語(yǔ)句2 E 1 語(yǔ)句1 E 2 下一語(yǔ)句 continuecontinueTTFFFFTTLOGOn例:輸出例:輸出1100內(nèi)內(nèi)3的倍數(shù)。的倍數(shù)。n分析:分析:設(shè)置整型變量設(shè)置整型變量I從從1變化到變化到100,依次測(cè)試,依次測(cè)試I是否是否3的的倍數(shù),算法屬于窮舉法。倍數(shù)

20、,算法屬于窮舉法。 for (int i=1;i=100;i+) if ( i%3!=0) continue; /i不是3的倍數(shù),轉(zhuǎn)向下一次循環(huán) coutit; /當(dāng)i是3的倍數(shù),輸出i; break & continueLOGOEX4.8n算法如下:nfor(i=2;im;for(i=2;i=m) /在在i從從2變到變到m-1中,中,m%i=0始終不成立始終不成立 coutm是素?cái)?shù)endl;else coutm不是素?cái)?shù)endl;標(biāo)標(biāo)志志變變量量的的引引入入LOGOEX4.8n算法如下:n設(shè)置一個(gè)標(biāo)志變量flag,flag,初值為初值為0 0nfor(i=2;im;i+)n判斷m能否被i整除n

21、能整除則: 置標(biāo)志變量flag=1;flag=1; 已經(jīng)知道m(xù)不是素?cái)?shù),提前退出循環(huán)n如果標(biāo)志變量的值為1,則m不是素?cái)?shù),否則是素?cái)?shù)。n對(duì)于某個(gè)數(shù)m,在2至m-1之間,只要有個(gè)數(shù)能被m整除,就能說(shuō)明m不是素?cái)?shù),只有所有的數(shù)都不能整除,才能說(shuō)明m不是素?cái)?shù)LOGOEX4.8flag=0;for( i=2; im; i+ )if(m%i=0)flag=1; / m被某個(gè)被某個(gè)i整除了,改變標(biāo)志變量的值整除了,改變標(biāo)志變量的值break; /提前退出循環(huán)提前退出循環(huán)if(flag=0) /在在i從從2變到變到m-1中,中,m%i=0始終不成立始終不成立coutm是素?cái)?shù)endl;elsecoutm不是素

22、數(shù)endl;return 0;優(yōu)化n=sqrt(m);for( i=2; i=n; i+ )LOGO標(biāo)志變量判斷是否提前退出循環(huán)nflag 是一個(gè)標(biāo)志變量,它在程序中的作用是標(biāo)志m是否被某個(gè)i整除。n一開(kāi)始它的初值設(shè)置為0n在循環(huán)體中使用if(m%i=0) 來(lái)判斷m是否被整除,如果表達(dá)式為真,則m被i整除,將flag的值置為1。n因此,只要有一個(gè)i使m被i整除,則flag的值為1。n除非所有的i都不能滿足m被i整除,flag的值才為0;這剛好為循環(huán)體外通過(guò)flag的值判斷m是否為素?cái)?shù)提供了條件。LOGO4.34.3常用常用算法應(yīng)用舉例算法應(yīng)用舉例網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心窮舉法迭代法遞推法L

23、OGOn窮舉法基本思想是,在有限范圍內(nèi)列舉所有可能的結(jié)果,找出其中符合要求的解。n窮舉法適合求解的問(wèn)題是:可能的答案是有限個(gè)且答案是可知的,但又難以用解析法描述。這種算法通常用循環(huán)結(jié)構(gòu)來(lái)完成。窮舉法LOGO 設(shè)雞翁、母、雛分別為i,j,k,根據(jù)題意可得 i*5+j*3+k/3=100; i+j+k=100; EX4.12n“百雞問(wèn)題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問(wèn)雞翁、母、雛各幾何? 兩個(gè)方程無(wú)法解出三個(gè)變量,只能將各種可能的取值代入,其中能滿足兩個(gè)方程的就是所需的解,這就是枚舉算法LOGO 設(shè)雞翁、母、雛分別為i,j,k,根據(jù)題意可得 i*5+j*3+k/3

24、=100; i+j+k=100; EX4.12n“百雞問(wèn)題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問(wèn)雞翁、母、雛各幾何? i、j、k可能的取值有哪些?分析可知,百錢最多可買雞翁20,雞母33,雞雛300LOGOfor (i=0; i=20;i+)for (j=0; j=33;j+) for (k=0; k=300;k=k+3) if (i+j+k=100)&(5*i+3*j+k/3=100) coutijk;EX4.12n算法算法使用三重循環(huán),執(zhí)行時(shí)間函數(shù)是立方使用三重循環(huán),執(zhí)行時(shí)間函數(shù)是立方階,循環(huán)體將執(zhí)行階,循環(huán)體將執(zhí)行20*33*300=198000次。次。n如如

25、能在能在算法上改進(jìn)一下算法上改進(jìn)一下,減少,減少一重循環(huán),一重循環(huán),將大大縮短運(yùn)行時(shí)間。將大大縮短運(yùn)行時(shí)間。LOGOn實(shí)際上,當(dāng)i、j確定時(shí),k就可由題目要求確定為100-i-j,因此實(shí)際上只要用i、j去測(cè)試就可以了n循環(huán)體將執(zhí)行:20*33=660次算法優(yōu)化EX4.12for (i=0; i+=20;) for (j=0; j=33;j+) k=100-i-j; if(5*i+3*j+k/3=100)&(k%3=0) coutijk;LOGO 用用i,j,k,m四個(gè)變量分別表示千、百、十、個(gè)位上的數(shù)。四個(gè)變量分別表示千、百、十、個(gè)位上的數(shù)。 則則i的取值為的取值為03,j 的的取值為取值為0

26、2, k的的取值為取值為02, m的的取取值為值為03 。 用四重循環(huán)實(shí)現(xiàn),但要注意各位數(shù)字不能相同。用四重循環(huán)實(shí)現(xiàn),但要注意各位數(shù)字不能相同。EX4.11n由由0 0到到3 3四個(gè)數(shù)字,組成四個(gè)數(shù)字,組成4 4位數(shù),每個(gè)數(shù)字用一次,但十位位數(shù),每個(gè)數(shù)字用一次,但十位和百位不能為和百位不能為3 3,輸出所有可能的四位數(shù)。要求每行顯示,輸出所有可能的四位數(shù)。要求每行顯示5 5個(gè)數(shù)。個(gè)數(shù)。LOGOEX4.11n算法使用四重算法使用四重循環(huán)循環(huán),逐一列舉每位上可能,逐一列舉每位上可能出現(xiàn)的數(shù)字出現(xiàn)的數(shù)字for(i=1;i=3;i+) for(j=0;j3;j+) if(j=i)continue; f

27、or(k=0;k3;k+) if (k=j|k=i) continue; for(m=0;m=3;m+) if(m=k|m=i|m=j) continue; coutijkmt; count+; LOGOif (count%5=0) coutendl; v每每行顯示行顯示5個(gè)數(shù)如何處理個(gè)數(shù)如何處理?EX4.11LOGO迭代法迭代法n迭代是數(shù)值分析中通過(guò)從一個(gè)初始估計(jì)出發(fā)尋找一系列近似解來(lái)解決問(wèn)題的過(guò)程,為實(shí)現(xiàn)這一過(guò)程所使用的方法統(tǒng)稱為迭代法。LOGOEX4.5n牛頓迭代法求解平方根na是已知正數(shù),x 0是迭代初值,給x 0一個(gè)值,假定 x 0 = a/2;則用迭代公式迭代公式依次計(jì)算:ox1=

28、(x0+a/x0)/2;x2=(x1+a/x1)/2;nxk+1=(xk+a/xk)/2;n當(dāng)|xk+1 xk|(是一個(gè)較小的正數(shù))時(shí),迭代終止,取xk+1的值為a的平方根近似值LOGOEX4.5#include #include using namespace std;int main()double a;/a的輸入do couta;while (a=1e-5 );cout a的平方根為:x1=1e-5,而x1和x0都是在循環(huán)體中被賦值,這種情況用do-while循環(huán)更好。如果要改成while循環(huán),會(huì)稍復(fù)雜些。LOGO遞推法遞推法n遞推算法是通過(guò)問(wèn)題的一個(gè)或多個(gè)已知解,用同樣的方法逐個(gè)推算出

29、其他解,如數(shù)列問(wèn)題,近似計(jì)算問(wèn)題等,通常也要借助于循環(huán)結(jié)構(gòu)完成。LOGO ! 7x! 5x! 3xx)xsin(753EX4.13n輸入一個(gè)小于1的數(shù)x,求sinx的近似值,要求誤差小于0.0001。近似計(jì)算公式如下這個(gè)近似計(jì)算可以看作一個(gè)累加過(guò)程,關(guān)鍵在于累加項(xiàng)數(shù)的確定。double p; /累加項(xiàng)doubel sin;/累加和累加:sin+=p;LOGOEX4.13fabs(p)0.0001Sin=0; i=1;P=x;主操作: sin+=p;預(yù)處理:p=p *(-1) *x*x /(2*i*(2*i+1); i+;)!1i2(x)1()1i(次累加時(shí)i第1i21iipT)1(2*2x*1

30、)(*pp下一次累加時(shí)2iiiLOGOEX4.14n一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子,假設(shè)兔子不存在死亡問(wèn)題,請(qǐng)問(wèn)從第1個(gè)月到第20個(gè)月,每個(gè)月有多少對(duì)兔子?n這個(gè)問(wèn)題的答案是Fibonacci數(shù)列1n 1)-fib(n2)-fib(n1n 1 0n 1 fib(n)LOGOEX4.14: Fibonacci數(shù)列n除了第0項(xiàng)和第1項(xiàng)外,每一項(xiàng)都是由類似方法產(chǎn)生,即前兩項(xiàng)之和n所以求當(dāng)前項(xiàng)時(shí),只需要記住前兩項(xiàng)n程序不需要為每一項(xiàng)設(shè)置專用變量;屬遞推算法。1n 1)-fib(n2)-fib(n1n 1 0n 1 fib(n)LOGO /4_12

31、.cpp,兔子繁衍問(wèn)題int main() int fib0=0,fib1=1,fib2;int n; /當(dāng)前計(jì)算的是第幾項(xiàng)當(dāng)前計(jì)算的是第幾項(xiàng)coutsetw(5)fib0setw(5)fib1endl;for(n=3;n=20;n+)fib2=fib0+fib1;coutsetw(5)fib2;if(n%5=0) coutendl; /控制每控制每行只顯示行只顯示5個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)fib0=fib1; fib1=fib2; /遞推遞推 return 0;EX4.14 Fibonacci數(shù)列LOGO4.5 4.5 輸入輸出文件簡(jiǎn)介輸入輸出文件簡(jiǎn)介網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心ofstreamifst

32、reamLOGO文件輸入輸出文件輸入輸出輸入100個(gè)數(shù),求平均值for(i=1;ia; s+=a;couts/100.0endl;有個(gè)數(shù)字輸入錯(cuò)了怎么辦?有什么辦法把要輸入的數(shù)據(jù)事先用記事本編輯好,然后再輸入?文件輸入的要點(diǎn)1. 定義輸入文件2.打開(kāi)文件3.從文件輸入數(shù)據(jù)4.關(guān)閉文件 ifstream ifile;ifile.open(d:my_in_file.txt);for(i=1;ia; s+=a;ifile.close();couts/100.0endl;#include LOGO文件輸入與輸出對(duì)比文件輸入與輸出對(duì)比 #include #include 文件輸入的要點(diǎn)1. 定義輸入文件

33、2.打開(kāi)文件3.從文件輸入數(shù)據(jù)4.關(guān)閉文件文件輸出的要點(diǎn)1. 定義輸出文件2.打開(kāi)文件3.將數(shù)據(jù)輸出到文件4.關(guān)閉文件 ifstream ifile; ofstream ofile; ifile.open(d:my_in_file.txt); ofile.open(d:my_out_file.txt); for(i=1;ia; s+=a; ofiles/100.0 x; n+; sum+=x;判斷數(shù)據(jù)是否讀完LOGO4.3 4.3 綜合綜合舉例舉例網(wǎng)絡(luò)與計(jì)算中心網(wǎng)絡(luò)與計(jì)算中心 劃拳 龜兔賽跑LOGO【例 4.9】 兩個(gè)小孩用石頭剪刀布劃拳,游戲規(guī)則:每個(gè)人有5滴血,如果兩人出的拳相同,則重新來(lái)

34、,否則,石頭勝剪刀,剪刀勝布,布勝石頭,劃拳輸一次血滴數(shù)減1,誰(shuí)的血滴數(shù)先減到0者輸分析以下問(wèn)題:1.每個(gè)人有5滴血,如何表示?2.出的拳如何表示?3.石頭勝剪刀,剪刀勝布,布勝石頭,如何表示?4.如何判斷勝負(fù)?5.有需要重復(fù)執(zhí)行的步驟嗎?int c1=5,c2=5;int p1,p2;/1:石頭2:剪刀3:布(p1=1&p2=2)|(p1=2&p2=3)|(p1=3&p2=1)c1=0&c20|p1-p2|=1 &p1p1LOGO程序流程圖程序流程圖c1=5,c2=5輸入p1,p2c10&c20判斷出拳是否相同輸出p1,p2的文字c2-判斷p1的輸贏c1-判斷勝負(fù)輸出贏家1輸出贏家2TFTFTFFTLOGO核心代碼while(c10&c20) cinp1p2; if(p1=p2)continue; if(p1=1&p2=2)|(p1=2&p2=3)| (p1=3&p2=1)c2-; elsec1-;if(c10) cout1Win!n;elsecout2Win!n;switch(p1) case 1:cout石頭石頭;break; case 2:cout剪刀剪刀;break; case 3:cout布布;break; coutt

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論