譚浩強(qiáng)C程序設(shè)計(jì)課件第5章_第1頁
譚浩強(qiáng)C程序設(shè)計(jì)課件第5章_第2頁
譚浩強(qiáng)C程序設(shè)計(jì)課件第5章_第3頁
譚浩強(qiáng)C程序設(shè)計(jì)課件第5章_第4頁
譚浩強(qiáng)C程序設(shè)計(jì)課件第5章_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,5,循環(huán)結(jié)構(gòu)程序設(shè)計(jì),第,章,為什么需要循環(huán)控制,i=1; /設(shè)整型變量i初值為1 while(i=50) /當(dāng)i的值小于或等于50時(shí)執(zhí)行花括號內(nèi)的語句 scanf(%f,%f,%f,%f,%f, /每執(zhí)行完一次循環(huán)使i的值加1 ,重復(fù)寫49個(gè)同樣的程序段,scanf(%f,%f,%f,%f,%f, /輸出該學(xué)生平均成績,要向計(jì)算機(jī)輸入全班50個(gè)學(xué)生的成績; (重復(fù)50次相同的輸入操作) 分別統(tǒng)計(jì)全班50個(gè)學(xué)生的平均成績; (重復(fù)50次相同的計(jì)算操作),解決 方法,用while語句實(shí)現(xiàn)循環(huán),while(表達(dá)式) 語句,while語句可簡單地記為: 只要當(dāng)循環(huán)條件表達(dá)式為真(即給定的條件成立)

2、,就執(zhí)行循環(huán)體語句。 “語句”就是循環(huán)體。循環(huán)體可以是一個(gè)簡單的語句,可以是復(fù)合語句(用花括號括起來的若干語句)。 執(zhí)行循環(huán)體的次數(shù)是由循環(huán)條件控制的,這個(gè)循環(huán)條件就是上面一般形式中的“表達(dá)式”,它也稱為循環(huán)條件表達(dá)式。當(dāng)此表達(dá)式的值為“真” (以非0值表示)時(shí),就執(zhí)行循環(huán)體語句;為“假” (以0表示)時(shí),就不執(zhí)行循環(huán)體語句。,while語句實(shí)現(xiàn)循環(huán),【例5.1】求1+2+3+100,即 =1 100 ,#include int main() int i=1,sum=0; /定義變量i的初值為1,sum的初值為0 while(i100,條件表達(dá)式i=100的值為假,不執(zhí)行循環(huán)體 /循環(huán)體開始

3、sum=sum+i; /第1次累加后,sum的值為1 i+; /加完后,i的值加1,為下次累加做準(zhǔn)備 /循環(huán)體結(jié)束 printf(sum=%dn,sum); /輸出1+2+3+100的累加和 return 0; ,用dowhile語句實(shí)現(xiàn)循環(huán),do 語句 while(表達(dá)式);,用dowhile語句實(shí)現(xiàn)循環(huán),【例5.2】用dowhile語句求1+2+3+100,即 =1 100 ,#include int main() int i=1,sum=0; do sum=sum+i; i+; while(i=100); printf(sum=%dn,sum); return 0; ,用dowhile語

4、句實(shí)現(xiàn)循環(huán),【例5.3】while和dowhile循環(huán)的比較。,#include int main() int i,sum=0; printf(please enter i,i=?); scanf(%d, ,#include int main() int i,sum=0; printf(please enter i,i=?); scanf(%d, ,用for語句實(shí)現(xiàn)循環(huán),for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,表達(dá)式1: 設(shè)置初始條件,只執(zhí)行一次。可以為零個(gè)、一個(gè)或多個(gè)變量設(shè)置初值。 表達(dá)式2: 是循環(huán)條件表達(dá)式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循

5、環(huán)。 表達(dá)式3: 作為循環(huán)的調(diào)整,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的。,用for語句實(shí)現(xiàn)循環(huán),for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,for語句更為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,還可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。 表達(dá)式1: 設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值。 表達(dá)式2: 是循環(huán)條件表達(dá)式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)。 表達(dá)式3: 作為循環(huán)的調(diào)整,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的。,for(循環(huán)變量賦值;表達(dá)式2;表達(dá)式3

6、) 語句,用for語句實(shí)現(xiàn)循環(huán),for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,for語句的執(zhí)行過程如下: (1) 求解表達(dá)式1。 (2) 求解表達(dá)式2,若此條件表達(dá)式的值為真(非0),則執(zhí)行for語句中的循環(huán)體,然后執(zhí)行第(3)步。若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。 (3) 求解表達(dá)式3。 (4) 轉(zhuǎn)回步驟(2)繼續(xù)執(zhí)行。 注意: 在執(zhí)行完循環(huán)體后,循環(huán)變量的值“超過”循環(huán)終值,循環(huán)結(jié)束。 (5) 循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句。,表達(dá)式1; while 表達(dá)式2 語句 表達(dá)式3 ,用for語句實(shí)現(xiàn)循環(huán),for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,循環(huán)的嵌套,幾種循環(huán)的比較,

7、(1) 3種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。 (2) 在while循環(huán)和dowhile循環(huán)中,只在while后面的括號內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)體中包含使循環(huán)趨于結(jié)束的語句(如i+,或i=i+1等)。 for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。 (3) 用while和dowhile循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和dowhile語句之前完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。 (4) whil

8、e循環(huán)、dowhile循環(huán)和for循環(huán)都可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)。,用break語句提前終止循環(huán),【例5.4】在全系1000名學(xué)生中舉行慈善募捐,當(dāng)總數(shù)達(dá)到10萬元時(shí)就結(jié)束,統(tǒng)計(jì)此時(shí)捐款的人數(shù)以及平均每人捐款的數(shù)目。,#include #define SUM 100000 /指定符號常量SUM代表10萬 int main() float amount,aver,total; int i; for (i=1,total=0;i=SUM) break; aver=total/i; printf(num=%dnaver=%10.2fn,i,aver); ret

9、urn 0; ,用break語句提前終止循環(huán),break;,作用:使流程跳到循環(huán)體之外,接著執(zhí)行循環(huán)體下面的語句。 注意:break語句只能用于循環(huán)語句和switch語句之中,而不能單獨(dú)使用。,用continue語句提前結(jié)束本次循環(huán),【例5.5】要求輸出100200之間的不能被3整除的數(shù)。,#include int main() int n; for (n=100;n=200;n+) if (n%3=0) continue; printf(%d ,n); printf(n); return 0; ,用continue語句提前結(jié)束本次循環(huán),continue;,作用:結(jié)束本次循環(huán),即跳過循環(huán)體中下

10、面尚未執(zhí)行的語句,轉(zhuǎn)到循環(huán)體結(jié)束點(diǎn)之前,接著執(zhí)行for語句中的“表達(dá)式3”,然后進(jìn)行下一次是否執(zhí)行循環(huán)的判定。,break語句和continue語句的區(qū)別,break;,continue;,while(表達(dá)式1) 語句1 if(表達(dá)式2) break; 語句2 ,while(表達(dá)式1) 語句1 if(表達(dá)式2) continue; 語句2 ,continue語句只結(jié)束本次循環(huán),而非終止整個(gè)循環(huán)。break語句結(jié)束整個(gè)循環(huán),不再判斷執(zhí)行循環(huán)的條件是否成立。,#include int main() int i,j,n=0; for(i=1;i=4;i+) for(j=1;j=1e-6) /檢查當(dāng)前

11、項(xiàng)term的絕對值是否大于或等于10-6 pi=pi+term; /把當(dāng)前項(xiàng)term累加到pi中 n=n+2; /n+2是下一項(xiàng)的分母 sign=-sign; /sign代表符號,下一項(xiàng)的符號與上一項(xiàng)符號相反 term=sign/n; /求出下一項(xiàng)的值term pi=pi*4; /多項(xiàng)式的和pi乘以4,才是的近似值 printf(pi=%10.8fn,pi); /輸出的近似值 return 0; ,解題思路: 找規(guī)律: (1) 每項(xiàng)的分子都是1。 (2) 后一項(xiàng)的分母是前一項(xiàng)的分母加2。 (3) 第1項(xiàng)的符號為正,從第2項(xiàng)起,每一項(xiàng)的符號與前一項(xiàng)的符號相反。 在每求出一項(xiàng)后,檢查它的絕對值是否

12、大于或等于10-6。,循環(huán)程序舉例,【例5.8】求Fibonacci(斐波那契)數(shù)列的前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn): 第1,2兩個(gè)數(shù)為1,1。從第3個(gè)數(shù)開始,該數(shù)是其前面兩個(gè)數(shù)之和。即該數(shù)列為1,1,2,3,5,8,13,用數(shù)學(xué)方式表示為: 1 =1 2 =1 = 1 + 2 (=1) (=2) (3),這是一個(gè)有趣的古典數(shù)學(xué)問題: 有一對兔子,從出生后第3個(gè)月起每個(gè)月都生一對兔子。小兔子長到第3個(gè)月后每個(gè)月又生一對兔子。假設(shè)所有兔子都不死,問每個(gè)月的兔子總數(shù)為多少?,注: 假設(shè)不滿1個(gè)月的為小兔子,滿1個(gè)月不滿2個(gè)月的為中兔子,滿2個(gè)月以上的為老兔子。,循環(huán)程序舉例,【例5.8】求Fibo

13、nacci(斐波那契)數(shù)列的前40個(gè)數(shù)。,#include int main() int f1=1,f2=1,f3; int i; printf(%12dn%12dn,f1,f2); for(i=1; i=38; i+) f3=f1+f2; printf(%12dn,f3); f1=f2; f2=f3; return 0; ,#include int main() int f1=1,f2=1; int i; for(i=1; i=20; i+) /每個(gè)循環(huán)輸出2個(gè)月的數(shù)據(jù),故只需循環(huán)20次 printf(%12d %12d ,f1,f2); /輸出已知的兩個(gè)月的兔子數(shù) if(i%2=0) pr

14、intf(n); f1=f1+f2; /計(jì)算出下一個(gè)月的兔子數(shù),并存放在f1中 f2=f2+f1; /計(jì)算出下兩個(gè)月的兔子數(shù),并存放在f2中 return 0; ,循環(huán)程序舉例,【例5.9】輸入一個(gè)大于3的整數(shù)n,判定它是否為素?cái)?shù)(prime,又稱質(zhì)數(shù))。,#include int main() int n,i; printf(please enter a integer number,n=?); scanf(%d, ,n被i整除,in,循環(huán)程序舉例,【例5.9】輸入一個(gè)大于3的整數(shù)n,判定它是否為素?cái)?shù)(prime,又稱質(zhì)數(shù))。,#include int main() int n,i; printf(please enter a integer number,n=?); scanf(%d, ,#include #include int main() int n,i,k; printf(please enter a integer number,n=?); scanf(%d, ,循環(huán)程序舉例,【例5.9】輸入一個(gè)大于3的整數(shù)n,判定它是否為素?cái)?shù)(prime,又稱質(zhì)數(shù))。,for(t=1,i=2; i=(int)sqrt(n); i+) /先定義t為int型,t作為標(biāo)志變量 if(n%i=0) t=0; /t=0表示n能被i整除,n不是素?cái)?shù)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論