C程序設(shè)計(jì)_第06章_循環(huán).ppt_第1頁(yè)
C程序設(shè)計(jì)_第06章_循環(huán).ppt_第2頁(yè)
C程序設(shè)計(jì)_第06章_循環(huán).ppt_第3頁(yè)
C程序設(shè)計(jì)_第06章_循環(huán).ppt_第4頁(yè)
C程序設(shè)計(jì)_第06章_循環(huán).ppt_第5頁(yè)
已閱讀5頁(yè),還剩47頁(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)控制,第六章,本章要點(diǎn),循環(huán)的基本概念 不同形式的循環(huán)控制 多重循環(huán)問(wèn)題,主要內(nèi)容,6.1 概述 6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán) 6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán) 6.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán) 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán) 6.6 循環(huán)的嵌套 6.7 幾種循環(huán)的比較 6.8 break語(yǔ)句continue和語(yǔ)句 6.9 程 序 舉 例,6.1 概述,什么是循環(huán)? 為什么要使用循環(huán)?,問(wèn)題1:,問(wèn)題2:求學(xué)生平均成績(jī) 分?jǐn)?shù)相加后除以課數(shù),在許多問(wèn)題中需要用到循環(huán)控制。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元

2、。,6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán),goto語(yǔ)句為無(wú)條件轉(zhuǎn)向語(yǔ)句,它的一般形式為 goto 語(yǔ)句標(biāo)號(hào); 語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示,它的定名規(guī)則與變量名相同,即由字母、數(shù)字和下劃線組成,其第一個(gè)字符必須為字母或下劃線。 例如:goto label_1; 合法; goto 123; 不合法.,6.2 goto語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán),結(jié)構(gòu)化程序設(shè)計(jì)方法主張限制使用goto語(yǔ)句, 因?yàn)闉E用goto語(yǔ)句將使程序流程無(wú)規(guī)律、可讀性差. 一般來(lái)說(shuō),可以有兩種用途: (1) 與if語(yǔ)句一起構(gòu)成循環(huán)結(jié)構(gòu); (2) 從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外。 但是這種用法不符合結(jié)構(gòu)化原則,一般不宜采用,只有在

3、不得已時(shí)(例如能大大提高效率)才使用.,例3.9 用if語(yǔ)句和goto語(yǔ)句構(gòu)成循環(huán),求1到100的和。void main( ) int i, sum=0; i=1;loop: if(i=100) sum=sum+i; i+; goto loop; printf(%dn,sum);,說(shuō)明:這里用的是“當(dāng)型”循環(huán)結(jié)構(gòu),當(dāng)滿足“i=100” 時(shí)執(zhí)行花括弧內(nèi)的循環(huán)體。,運(yùn)行結(jié)果:5050,6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán),一般形式: while (表達(dá)式) 語(yǔ)句 當(dāng)表達(dá)式為非0值時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語(yǔ)句。,例3.5 求1到100的和#include voi

4、d main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%dn,sum); ,說(shuō)明:(1)循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn).(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句 。,運(yùn)行結(jié)果:5050,6.3 用while語(yǔ)句實(shí)現(xiàn)循環(huán),注意: 循環(huán)體如果包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括弧括起來(lái),以復(fù)合語(yǔ)句形式出現(xiàn)。 在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句。如果無(wú)此語(yǔ)句,則i的值始終不改變,循環(huán)永不結(jié)束。,6.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán),do-while語(yǔ)句的特點(diǎn):先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否

5、成立。 一般形式: do 循環(huán)體語(yǔ)句 while (表達(dá)式);,執(zhí)行過(guò)程:先執(zhí)行一次指定的循環(huán)體語(yǔ)句,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”) 時(shí),返回重新執(zhí)行循環(huán)體語(yǔ)句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。,例3.6 求1到100的和#include void main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum); ,運(yùn)行結(jié)果:5050,6.4 用do-while語(yǔ)句實(shí)現(xiàn)循環(huán),while語(yǔ)句和用do-while語(yǔ)句的比較: 在一般情況下,用while語(yǔ)句和用do-while 語(yǔ)句處理

6、同一問(wèn)題時(shí),若二者的循環(huán)體部分是 一樣的,它們的結(jié)果也一樣。但是如果while后 面的表達(dá)式一開(kāi)始就為假(0值)時(shí),兩種循環(huán)的 結(jié)果是不同的。,例6.4 while和do-while循環(huán)的比較 (1) #include (2) #include void main ( ) void main( ) int sum=0,i; int sum=0,i; scanf(“%d, 判斷sum的值。,說(shuō)明:(1)當(dāng)while后面的表達(dá)式的第一次的值為“真”時(shí),兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),C語(yǔ)言中的for語(yǔ)句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情

7、況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語(yǔ)句。 一般形式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),for語(yǔ)句的執(zhí)行過(guò)程: (1) 先求解表達(dá)式1。 (2) 求解表達(dá)式2,若其值為真(值為非0),則執(zhí) 行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下 面第(3)步。若為假(值為0),則結(jié)束循環(huán), 轉(zhuǎn)到第(5)步。 (3) 求解表達(dá)式3。 (4) 轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5) 循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),循環(huán)初始條件,循環(huán)控制條件,循環(huán)體,for語(yǔ)句等價(jià)于下列語(yǔ)句:

8、 表達(dá)式1; while (表達(dá)式2) 語(yǔ)句; 表達(dá)式3; , 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),for語(yǔ)句最簡(jiǎn)單的應(yīng)用形式也就是最易 理解的如下形式: for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值),例如: for(i=1;i=100;i+) sum=sum+i;,它相當(dāng)于以下語(yǔ)句: i=1; while(i=100) sum=sum+i;i+;,顯然,用for語(yǔ)句簡(jiǎn)單、方便。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (1) for語(yǔ)句的一般形式中的“表達(dá)式1”可以省略,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。注意省略表達(dá)式1時(shí),其后的分號(hào)不能省略。如 for(;i=100;i+) sum

9、=sum+i; 執(zhí)行時(shí),跳過(guò)“求解表達(dá)式1”這一步,其他不變。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (2) 如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終 止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。 例如:for(i=1; ;i+) sum=sum+i; 表達(dá)式1是一個(gè)賦值表達(dá)式,表達(dá)式2空缺。它相當(dāng)于: i=1; while(1) sum=sum+1;i+;, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (3) 表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。如: for(i=1;i=100;) sum=sum+i;i+; 在上面的for語(yǔ)句中只有表達(dá)式1和表達(dá)式2,而沒(méi)有

10、表達(dá)式3。i+的操作不放在for語(yǔ)句的表達(dá)式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (4) 可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只 給循環(huán)條件。如: for(;i=100;) while(i=100) sum=sum+i; 相當(dāng)于 sum=sum+i; i+; i+; 在這種情況下,完全等同于while語(yǔ)句??梢?jiàn)for語(yǔ) 句比while語(yǔ)句功能強(qiáng),除了可以給出循環(huán)條件外,還 可以賦初值,使循環(huán)變量自動(dòng)增值等。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (5) 3個(gè)表達(dá)式都可省略,如: for(; ;) 語(yǔ)句 相當(dāng)于

11、 while(1) 語(yǔ)句 即不設(shè)初值,不判斷條件(認(rèn)為表達(dá)式2為真值), 循環(huán)變量不增值。無(wú)終止地執(zhí)行循環(huán)體。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (6) 表達(dá)式1可以是設(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á)式。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: 表達(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

12、=0,j=100;i=j;i+,j-) k=i+j; 表達(dá)式1和表達(dá)式3都是逗號(hào)表達(dá)式,各包含兩個(gè)賦值 表達(dá)式,即同時(shí)設(shè)兩個(gè)初值,使兩個(gè)變量增值., 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: 在逗號(hào)表達(dá)式內(nèi)按自左至右順序求解,整個(gè)逗號(hào)表 達(dá)式的值為其中最右邊的表達(dá)式的值。如: for(i=1;i=100;i+,i+) sum=sum+i; 相當(dāng)于 for(i=1;i=100;i=i+2) sum=sum+i;, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: (7) 表達(dá)式一般是關(guān)系表達(dá)式(如i=100)或邏輯表達(dá)式 (如ab (c=getchar()!=n;i+=c); 在表達(dá)式2中先從終端接收一個(gè)字

13、符賦給c,然后判斷 此賦值表達(dá)式的值是否不等于n(換行符),如果 不等于n,就執(zhí)行循環(huán)體。 注意:此for語(yǔ)句的循環(huán)體為空語(yǔ)句,把本來(lái)要在循環(huán) 體內(nèi)處理的內(nèi)容放在表達(dá)式3中,作用是一樣的。可見(jiàn) for語(yǔ)句功能強(qiáng),可以在表達(dá)式中完成本來(lái)應(yīng)在循環(huán)體 內(nèi)完成的操作。, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),說(shuō)明: for( ;(c=getchar()!=n;) printf(%c,c); for語(yǔ)句中只有表達(dá)式2,而無(wú)表達(dá)式1和表達(dá)式3。 其作用是每讀入一個(gè)字符后立即輸出該字符,直到輸入 一個(gè)“換行”為止。請(qǐng)注意,從終端鍵盤向計(jì)算機(jī)輸入 時(shí),是在按Enter鍵以后才將一批數(shù)據(jù)一起送到內(nèi)存緩 沖區(qū)中去的。,

14、運(yùn)行情況: Computer (輸入) Computer (輸出) 而不是 Ccoommppuutteerr, 6.5 用for 語(yǔ)句實(shí)現(xiàn)循環(huán),注意: C語(yǔ)言中的for語(yǔ)句比其他語(yǔ)言(如BASIC, PASCAL)中的FOR語(yǔ)句功能強(qiáng)得多??梢园蜒h(huán)體 和一些與循環(huán)控制無(wú)關(guān)的操作也作為表達(dá)式1或 表達(dá)式3出現(xiàn),這樣程序可以短小簡(jiǎn)潔。但過(guò)分 地利用這一特點(diǎn)會(huì)使for語(yǔ)句顯得雜亂,可讀性 降低,最好不要把與循環(huán)控制無(wú)關(guān)的內(nèi)容放到 for語(yǔ)句中。,6.6循環(huán)的嵌套,一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu) 稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套 循環(huán),這就是多層循環(huán)。 三種循環(huán)(while循環(huán)、do-

15、while循環(huán)和for循 環(huán))可以互相嵌套。,6.6循環(huán)的嵌套,下面幾種都是合法的形式: (1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( );,6.6循環(huán)的嵌套,(4) while( ) (5) for(;) (6) do do while( ) for(;) while( ) while( ),6.7幾種循環(huán)的比較,(1)三種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。,(2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號(hào)內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)體中

16、包含使循環(huán)趨于結(jié)束的語(yǔ)句(如i+,或i=i+1等)。 for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語(yǔ)句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。,6.7幾種循環(huán)的比較,(3)用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語(yǔ)句之前完成。而for語(yǔ)句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。,6.7幾種循環(huán)的比較,(4)while循環(huán)、do-while循環(huán)和for循環(huán),可以 用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本 次循環(huán)(break語(yǔ)句和continue語(yǔ)句見(jiàn)下

17、節(jié))。而 對(duì)用goto語(yǔ)句和if語(yǔ)句構(gòu)成的循環(huán),不能用 break語(yǔ)句和continue語(yǔ)句進(jìn)行控制.,6.8 break語(yǔ)句和continue語(yǔ)句,6.8.1 break語(yǔ)句 break語(yǔ)句可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句。 一般形式: break; 注意:break語(yǔ)句不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其他語(yǔ)句中。,6.8 break語(yǔ)句和continue語(yǔ)句,例: float pi=3.14159; for(r=1;r100) break; printf(r=%f,area=%fn,r,area); ,程序的作用是計(jì)算r=1到r=10時(shí)的圓面

18、積,直到面積area大于100為止。從上面的for循環(huán)可以看到:當(dāng)area100時(shí),執(zhí)行break語(yǔ)句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。,6.8 break語(yǔ)句和continue語(yǔ)句,6.8.2 continue語(yǔ)句 作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定. 一般形式: continue;,6.8 break語(yǔ)句和continue語(yǔ)句,continue語(yǔ)句和break語(yǔ)句的區(qū)別 continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。,while(表達(dá)式1) if(表達(dá)式2) continue; ,6.8 break語(yǔ)句和con

19、tinue語(yǔ)句,continue語(yǔ)句和break語(yǔ)句的區(qū)別: break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)的條件是否成立。,while(表達(dá)式1) for if(表達(dá)式2) break; ,例3.8 把100200之間的不能被3整除的數(shù)輸出。 #include void main() int n; for (n=100;n=200;n+) if (n%3=0) continue; printf(%d ,n); ,說(shuō)明:當(dāng)n能被3整除時(shí),執(zhí)行continue語(yǔ)句,結(jié)束本次循環(huán)(即跳過(guò)printf函數(shù)語(yǔ)句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。,6.9 程 序 舉 例,例6.6 用

20、/41-1/3+1/5-1/7+公式求的近似值,直到某一項(xiàng)的絕對(duì)值小于1e-6為止。,例6.6 求pi的近似值 #include #includevoid main() int s; float n,t,pi; t=1;pi=0; n=1.0; s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi);,運(yùn)行結(jié)果: pi= 3.141594,6.9 程 序 舉 例,例6.7 求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1,2兩個(gè)數(shù)為1,1。從第3個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)

21、數(shù)之和。即: F(1)=1 (n=1) F(2)=1 (n=2) F(n)=F(n-1)+F(n-2) (n3),例6.7求Fibonacci數(shù)列前40個(gè)數(shù)。 #include void main() long int f1,f2; int i; f1=1;f2=1; for(i=1; i=20; i+) printf(%12ld %12ld ,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f2+f1; ,運(yùn)行結(jié)果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155,6.9 程 序 舉 例,例6.8 判斷m是否素?cái)?shù)。 算法思想

溫馨提示

  • 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)論