C語(yǔ)言教程第5章_循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第1頁(yè)
C語(yǔ)言教程第5章_循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第2頁(yè)
C語(yǔ)言教程第5章_循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第3頁(yè)
C語(yǔ)言教程第5章_循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第4頁(yè)
C語(yǔ)言教程第5章_循環(huán)結(jié)構(gòu)程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),概述 計(jì)算機(jī)解題過(guò)程中,經(jīng)常遇到要編制循環(huán)結(jié)構(gòu)的情況, 大量問(wèn)題均離不開(kāi)循環(huán)結(jié)構(gòu) 如求: 1+2+3+.+100 sinx = x -,x3 x5 x7,3!,5!,7!,+ ,準(zhǔn)備部分,工作部分,控制部分,準(zhǔn)備部分,控制部分,工作部分,修改部分,出循環(huán),出循環(huán),N,Y,N,修改部分,Y,兩種循環(huán)結(jié)構(gòu):,左邊是先執(zhí)行后判斷 右邊是先判斷后執(zhí)行,循環(huán)語(yǔ)句 while 語(yǔ)句 格式: while (表達(dá)式) 語(yǔ)句 功能: 當(dāng)表達(dá)式為非0值時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句。其特點(diǎn)是: 先判斷表達(dá)式,后執(zhí)行語(yǔ)句。,表達(dá)式值非 0,語(yǔ)句,編程: 求1+2+3+100的值 mai

2、n() int i=1, sum=0; /* 準(zhǔn)備部分 */ while (i =100) /* 控制部分 */ sum=sum+ i; /* 工作部分 */ i=i+1; /* 修改部分 */ printf (sum = %d n, sum); printf (i = %d n, i ); ,說(shuō)明: 1) 循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。 2) 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句。如果無(wú)此語(yǔ)句,則i的值始終不改變,循環(huán)永不結(jié)束。即形成了死循環(huán)。,do while 語(yǔ)句 格式: do 語(yǔ)句 while (表達(dá)式 ) ; 功能:先執(zhí)行一次指定的循環(huán)體語(yǔ)句,

3、然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。,表達(dá)式值不為0,語(yǔ)句,main( ) int i=1, sum=0; do sum=sum+i; i=i+1; while (i=100); printf(sum=%dn, sum); printf(i=%dn, i); ,while語(yǔ)句和do-while語(yǔ)句的比較: 在一般情況下,用while語(yǔ)句和用do-while語(yǔ)句處理同一問(wèn)題時(shí),若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達(dá)式一開(kāi)始就為假(0值)時(shí),兩種循環(huán)的結(jié)果是不同的。,while 與 do

4、 while區(qū)別 i10 時(shí)不同,main() int sum=0, i; scanf(%d, ,main() int sum=0,i; scanf(%d, ,main() int c; while(c=getchar()!=n) putchar(c); ,將輸入的字符原樣輸出,main() int c; c=getchar(); while(c!=n) putchar(c); c=getchar(); ,例:用 0.1mm 厚紙對(duì)折, 對(duì)折多少次后其厚度超過(guò)地球直徑 (12742公里) main() int n=1; float ans ; ans=2*1e-7; while(ans=127

5、42) n=n+1; ans=ans*2; printf(n=%d, ans=%f n, n, ans); getch(); ,運(yùn)行結(jié)果: n=37,ans=13743.895347,求:框里數(shù)字(19):111111=111*11* 1,運(yùn)行結(jié)果: i=9,main() long int i=1, ans; ans=111*11*(i*10+1); while(111111 != ans) i+; ans=111*11*(i*10+1); printf(i=%dn, i) ; ,main() long int i=1, ans; do ans=111*11*(i*10+1); i+; whi

6、le(111111 != ans); printf(i=%dn, i-1); ,運(yùn)行結(jié)果: i =9,設(shè)有一階梯,每步階,最后余階;每步階,最后余階;每步階,最后余階;每步階,最后余階;每步階,正好到樓頂。問(wèn)共有多少階梯。,main( ) int ladders=7; while (ladders%3!=2 | ladders%5!=4 | ladders%6!=5) ladders+=14; printf(%dn, ladders); ,求兩個(gè)非負(fù)整數(shù)u和v 的最大公因子(即最大公約數(shù))。,main() int a,b,i; printf(please enter 2 integers:);

7、 scanf(%d,%d, ,for語(yǔ)句 格式: for (; ; ) 語(yǔ)句,C語(yǔ)言中的for語(yǔ)句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語(yǔ)句。,表達(dá)式1,表達(dá)式2值非0?,語(yǔ)句,表達(dá)式3,Y,下一語(yǔ)句,N,等價(jià)于: 表達(dá)式1; while (表達(dá)式2) 語(yǔ)句; 表達(dá)式3; ,for語(yǔ)句最簡(jiǎn)單最常用的應(yīng)用形式: for (循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 如: for(i=1;i=100;i+) sum=sum+i; 相當(dāng)于: i=1; while (i=100) sum=sum+i; i+; ,f

8、or語(yǔ)句的一般形式中的“表達(dá)式1”可以省略,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。注意省略表達(dá)式1時(shí),其后的分號(hào)不能省略。如: for(; i=100; i+) sum=sum+i; 執(zhí)行時(shí),跳過(guò)“表達(dá)式1” ,其他不變。,若省略表達(dá)式2,即不判斷循環(huán)條件,即認(rèn)為表達(dá)式2始終為真。如: for(i=1; ;i+) sum=sum+i; 相當(dāng)于: i=1; while(1) sum=sum+1; i+; ,為避免死循環(huán),應(yīng)加上 if (i100) break;,表達(dá)式3也可以省略,但此時(shí)應(yīng)保證循環(huán)能正常結(jié)束。如: for (i=1;i=100;) sum=sum+i; i+; 此時(shí)由于省略表達(dá)

9、式3,而將語(yǔ)句i+; 作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。,可以同時(shí)省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。如: for(;i=100;) while(i=100) sum=sum+i; sum=sum+i; i+; i+; 在這種情況下,完全等同于while語(yǔ)句。可見(jiàn)for語(yǔ)句比while語(yǔ)句功能強(qiáng),除了可以給出循環(huán)條件外,還可以賦初值,使循環(huán)變量自動(dòng)增值等。,也可以將3個(gè)表達(dá)式都省略,如: for(; ;) 語(yǔ)句 相當(dāng)于 while(1) 語(yǔ)句 即不設(shè)初值,不判斷條件(認(rèn)為表達(dá)式2為真值),循環(huán)變量不增值。此時(shí)應(yīng)在循環(huán)體中設(shè)置退出循環(huán)的語(yǔ)句。,表達(dá)式1可以是

10、設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式。如: for (sum=0;i=100;i+) sum=sum+i; 表達(dá)式3也可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式。如: for (sum=0;i=100;sum+) i+;,表達(dá)式1和表達(dá)式3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(dá)式,中間用逗號(hào)間隔。如: for (sum=0,i=1; i=100; i+) sum=sum+i; 或 for (i=0,j=100; i=j; i+,j-) k=i+j;,表達(dá)式2一般是關(guān)系表達(dá)式(如i=100)或邏輯表達(dá)式(如ab 在表達(dá)式2中先從終端接收一個(gè)字符賦給

11、c,然后判斷此字符是否非n,如果非n,就執(zhí)行循環(huán)體。此for語(yǔ)句的循環(huán)體為空語(yǔ)句,把本來(lái)要在循環(huán)體內(nèi)處理的內(nèi)容放在表達(dá)式3中。,for( ;(c=getchar()!=n;) printf(“%c”,c); for語(yǔ)句中只有表達(dá)式2,而無(wú)表達(dá)式1和表達(dá)式3。其作用是讀入一個(gè)字符后即輸出該字符,直到輸入一個(gè)“換行”為止。,運(yùn)行情況: ComputerComputer,請(qǐng)注意,從終端鍵盤(pán)向計(jì)算機(jī)輸入時(shí),是在按Enter鍵以后才將一批輸入數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去的。,main() int i=1, sum=0; for (; i=100; i+) sum += i; printf(sum=%dn,

12、 sum); 省略表達(dá)式1,求: 1 + 2 + 3 + + 100的值,main ( ) int i, sum; for (i=1, sum=0; i=100; i+) sum+= i; printf(sum=%dn, sum); main() int i, sum; for (i=1, sum=0; i=100; sum+=i, i+); printf(sum=%dn, sum); ,使用逗號(hào)表達(dá)式,驗(yàn)證素?cái)?shù) int prime(int n) int m; for (m=2;m=n/2;m+) if (n%m=0) return(0); return(1); main() int i; s

13、canf(%d, ,說(shuō)明 1. 用計(jì)數(shù)法設(shè)置循環(huán)時(shí),要特別留心循環(huán)變量的“邊界值”。 2. 要使循環(huán)體最終能結(jié)束,應(yīng)當(dāng)在表達(dá)式3中或在循環(huán)體中存在改變條件表達(dá)式的值的操作。 3. 循環(huán)體內(nèi)如果包含一個(gè)以上的語(yǔ)句,應(yīng)該使用花括號(hào),以復(fù)合語(yǔ)句形式出現(xiàn)。,break和continue break-退出switch語(yǔ)句或當(dāng)前循環(huán) continue-結(jié)束本次循環(huán),接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定. while(表達(dá)式1) if (表達(dá)式2) continue; if (表達(dá)式3) break; ,計(jì)算100以?xún)?nèi)的圓面積 main() int r; float pi=3.14159,area; for(r

14、=1;r100) break; printf(r=%d, area=%fn, r, area); ,輸出100200之間不能被3整除的數(shù)。 main() int n; for (n=100;n=200;n+) if (n%3=0)continue; printf(%d ,n); ,多重循環(huán) 一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱(chēng)為循環(huán)的嵌套,即多重循環(huán)。 三種循環(huán)結(jié)構(gòu)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。 注意: 結(jié)構(gòu)之間僅可嵌套, 不可交叉,不允許:,允許:,例: 編程并輸出乘法表 main() int i,j; for(i=0; i=9; i+) for(j=

15、1; j=9; j+) printf(%d*%d=%2d , i, j, i*j ); if (j=9) printf(n); ,運(yùn)行結(jié)果: 1*1= 1 1*2= 2 1*9= 9 9*1= 9 2*9=18 9*9=81,打印乘法表 1 2 3 4 5 6 7 8 9 - 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49

16、 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 1: 打印表頭 2: 打印隔線 3: 打印表體,main( ) int i, j; for (i=1;i=9; i+) printf(%4d,i); printf(n); for (i=1;i=40;i+) printf(%c,-); printf(n); for (i=1; i=9;i+) for (j=1;j=9;j+) printf(%4d, i*j); printf(n); ,打印隔線,打印表體,打印表頭,36塊磚,36人搬;男4,女3,兩個(gè)小孩抬一塊。求一次搬完,需男

17、、女、小孩個(gè)若干? main() int men=0,women,children; while(men=8) women=0; while (women=11) children=36-women-men; if (4.0*men+3.0*women+children/2=36) printf(nmen is %d,men); printf(t women is %d, women); printf(t children is %dn, children); women+; men+; ,例: 鍵入1個(gè)正整數(shù), 求這個(gè)數(shù)的階乘 main ( ) int num, i1; long int t

18、; scanf(%d, ,運(yùn)行結(jié)果: 3 ans=9,for (t=1; i1=1; i1=num;) t=t*i1; i1+; ,t=1; i1=1; do t=t*i1; i1+; while (i=num);,例: 求A, B, 使 AB-BA=45 成立 main() int a, b, k, ans=45; for (a=1; a10; a+) for (b=0; b10; b+) k=(10*a+b)-(b*10+a); if (k=ans) printf(a=%d, b=%d n, a, b); ,窮舉法,例: 求 A,B,C, 使 ABC+BCC=532 成立 main() i

19、nt a, b, c, k, ans=532; for (a=0; a10; a+) for (b=0; b10; b+) for (c=0; c10; c+) k=(100*a+10*b+c)+(b*100+c*10+c); if (k=ans) printf(a=%d,b=%d,c=%dn,a,b,c); ,窮舉法,例.編程產(chǎn)生 main() int i, j; for (i=2; i5; i+) for (j=2; j5; j+) printf(%2d , i*j); if (j=5) printf(n); ,4 6 8 6 9 12 8 12 16,計(jì)算水仙花數(shù) (如:153=1*1*1+5*5*5+3*3*3) main() int i, j, k, n; for (n=100; n1000; n+) i=n/100; j=n/10 - i*10; k=n%10; if (i*100+j*10+k=i*i*i+j*j*j+k

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論