C語言PPT譚浩強教材配套版第6章_第1頁
C語言PPT譚浩強教材配套版第6章_第2頁
C語言PPT譚浩強教材配套版第6章_第3頁
C語言PPT譚浩強教材配套版第6章_第4頁
C語言PPT譚浩強教材配套版第6章_第5頁
已閱讀5頁,還剩60頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、6.1 概述概述6.2 goto語句以及用語句以及用goto語句構(gòu)成循環(huán)語句構(gòu)成循環(huán)6.3 while語句語句6.4 do while語句語句6.5 for 語句語句6.6 循環(huán)的嵌套循環(huán)的嵌套6.7 幾種循環(huán)的比較幾種循環(huán)的比較6.8 break語句和語句和continue語句語句6.9程序舉例程序舉例習題習題第第6 6章章 循循 環(huán)環(huán) 控控 制制6.1 概述概述在許多問題中需要用到循環(huán)控制。例如,要輸入全校學在許多問題中需要用到循環(huán)控制。例如,要輸入全校學生成績;求若干個數(shù)之和;迭代求根等。幾乎所有實生成績;求若干個數(shù)之和;迭代求根等。幾乎所有實用的程序都包含循環(huán)。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計

2、的用的程序都包含循環(huán)。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各基本結(jié)構(gòu)之一,它和順序結(jié)構(gòu)、選擇結(jié)構(gòu)共同作為各種復雜程序的基本構(gòu)造單元。種復雜程序的基本構(gòu)造單元。因此熟練掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念及使用是程序因此熟練掌握選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的概念及使用是程序設計的最基本的要求。設計的最基本的要求。 (1) 用用goto語句和語句和if語句構(gòu)成循環(huán);語句構(gòu)成循環(huán); (2) 用用while語句;語句; (3) 用用do|while語句;語句; (4) 用用for語句。語句。在下面各節(jié)中將分別作介紹。在下面各節(jié)中將分別作介紹。6.2 goto語句以及用語句以及用goto

3、語句構(gòu)成循環(huán)語句構(gòu)成循環(huán)goto語句為無條件轉(zhuǎn)向語句,它的一般形式為語句為無條件轉(zhuǎn)向語句,它的一般形式為 goto語句標號;語句標號;語句標號用標識符表示,它的定名規(guī)則與變量名相語句標號用標識符表示,它的定名規(guī)則與變量名相同,即由字母、數(shù)字和下劃線組成,其第一個字符同,即由字母、數(shù)字和下劃線組成,其第一個字符必須為字母或下劃線。不能用整數(shù)來做標號。例如:必須為字母或下劃線。不能用整數(shù)來做標號。例如:goto label-1;是合法的,而是合法的,而goto 123;是不合法的。結(jié)構(gòu)化程序設計方法主張限制使用是不合法的。結(jié)構(gòu)化程序設計方法主張限制使用goto語句,因為濫用語句,因為濫用goto語

4、句將使程序流程無規(guī)律、語句將使程序流程無規(guī)律、可讀性差。但也不是絕對禁止使用可讀性差。但也不是絕對禁止使用goto語句。一般語句。一般來說,可以有兩種用途:來說,可以有兩種用途:(1) 與與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);語句一起構(gòu)成循環(huán)結(jié)構(gòu);(2) 從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外,但在從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外,但在c語言中可以語言中可以用用break語句和語句和continue語句語句(見見6.8節(jié)節(jié))跳出本層循跳出本層循環(huán)和結(jié)束本次循環(huán)。環(huán)和結(jié)束本次循環(huán)。goto語句的使用機會已大大減語句的使用機會已大大減少,只是需要從多層循環(huán)的內(nèi)層循環(huán)跳到外層循少,只是需要從多層循環(huán)的內(nèi)層循環(huán)跳到外層循環(huán)外時才用到

5、環(huán)外時才用到goto語句。但是這種用法不符合結(jié)構(gòu)語句。但是這種用法不符合結(jié)構(gòu)化原則,一般不宜采用,只有在不得已時化原則,一般不宜采用,只有在不得已時(例如能例如能大大提高效率大大提高效率)才使用。才使用。例例6.1用用if語句和語句和goto語句構(gòu)成循環(huán),求語句構(gòu)成循環(huán),求n。 此問題的算法是比較簡單的,可以直接寫出程序:此問題的算法是比較簡單的,可以直接寫出程序: main( ) int i, sum=0;i=1;loop: if(i=100) sum=sum+i; i+; goto loop; printf(%d,sum); 100n=1運行結(jié)果如下:運行結(jié)果如下:5050這里用的是這里用

6、的是“當型當型”循環(huán)結(jié)構(gòu),當滿足循環(huán)結(jié)構(gòu),當滿足“i=100” 時時執(zhí)行花括弧內(nèi)的循環(huán)體。請讀者自己畫出流程圖。執(zhí)行花括弧內(nèi)的循環(huán)體。請讀者自己畫出流程圖。6.3while語句語句while語句用來實現(xiàn)語句用來實現(xiàn)“當型當型”循環(huán)結(jié)構(gòu)。其一般形式循環(huán)結(jié)構(gòu)。其一般形式如下:如下:while (表達式表達式) 語句語句當表達式為非當表達式為非0值時,執(zhí)行值時,執(zhí)行while語句中的內(nèi)嵌語句。語句中的內(nèi)嵌語句。其流程圖見圖其流程圖見圖6.1。其特點是:先判斷表達式,后。其特點是:先判斷表達式,后執(zhí)行語句。執(zhí)行語句。圖圖6.1圖圖6.2例例6.2求求n。用傳統(tǒng)流程圖和。用傳統(tǒng)流程圖和NS結(jié)構(gòu)流程圖表示

7、算法,見圖結(jié)構(gòu)流程圖表示算法,見圖6.2(a)和圖和圖6.2(b)。根據(jù)流程圖寫出程序:根據(jù)流程圖寫出程序:main() int i,sum=0; i=1; while (i100”,因此在,因此在循環(huán)體中應該有使循環(huán)體中應該有使i增值以最終導致增值以最終導致i100的語句,的語句,今用今用“i+;”語句來達到此目的。如果無此語句,語句來達到此目的。如果無此語句,則則i的值始終不改變,循環(huán)永不結(jié)束。的值始終不改變,循環(huán)永不結(jié)束。6.4 do while語句語句do while語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán)語句的特點是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式為條件是否成立。其一

8、般形式為do 循環(huán)體語句循環(huán)體語句 while (表達式表達式);它是這樣執(zhí)行的:先執(zhí)行一次指定的循環(huán)體語句,它是這樣執(zhí)行的:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達式,當表達式的值為非零然后判別表達式,當表達式的值為非零(“真真”) 時,時,返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達返回重新執(zhí)行循環(huán)體語句,如此反復,直到表達式的值等于式的值等于0為止,此時循環(huán)結(jié)束??梢杂脠D為止,此時循環(huán)結(jié)束。可以用圖6.3表表示其流程。請注意示其流程。請注意dowhile循環(huán)用循環(huán)用NS流程圖的流程圖的表示形式表示形式(圖圖6.3(b)。圖圖6.3例例6.3用用dowhile語句求語句求n。先畫出流程圖,見

9、圖先畫出流程圖,見圖6.4。圖圖6.46.4圖圖6.56.5100n=1程序如下:程序如下:main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%d,sum); 例例6.4while和和do-while循環(huán)的比較。循環(huán)的比較。(1) main ( ) (2) main( ) int sum=0,i; int sum=0,i; scanf(“%d”,&i); scanf(%d,&i); while (i=10) do sum=sum+i; sum=sum+i;i+; i+; while (i10時,二者結(jié)

10、果就不同了。這是因為此時對時,二者結(jié)果就不同了。這是因為此時對while循循環(huán)來說,一次也不執(zhí)行循環(huán)體環(huán)來說,一次也不執(zhí)行循環(huán)體(表達式表達式“i10時,二者結(jié)果就不同了。這是時,二者結(jié)果就不同了。這是因為此時對因為此時對while循環(huán)來說,一次也不執(zhí)行循環(huán)體循環(huán)來說,一次也不執(zhí)行循環(huán)體(表達式表達式“i100”。因為因為“當當i100時繼續(xù)執(zhí)行循環(huán)時繼續(xù)執(zhí)行循環(huán)”和和“直到直到i100結(jié)結(jié)束循環(huán)束循環(huán)”是對同一問題的兩種表述方式。千萬不是對同一問題的兩種表述方式。千萬不要在圖要在圖5|4(b)中寫成中寫成“直到直到i100”。6.5 for 語語 句句C語言中的語言中的for語句使用最為靈活

11、,不僅可以用于循語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替替while語句。語句。 for語句的一般形式為語句的一般形式為for(表達式表達式1;表達式;表達式2;表達式;表達式3) 語句語句 它的執(zhí)行過程如下:它的執(zhí)行過程如下: (1) 先求解表達式先求解表達式1。 (2) 求解表達式求解表達式2,若其值為真,若其值為真(值為非值為非0),則執(zhí)行,則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第語句中指定的內(nèi)嵌語句,然后執(zhí)行下

12、面第(3)步。步。若為假若為假(值為值為0),則結(jié)束循環(huán),轉(zhuǎn)到第,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。步。 (3) 求解表達式求解表達式3。 (4) 轉(zhuǎn)回上面第轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)步驟繼續(xù)執(zhí)行。行。 (5) 循環(huán)結(jié)束,執(zhí)行循環(huán)結(jié)束,執(zhí)行for語句語句下面的一個語句。下面的一個語句。 可以用圖可以用圖6.6來表示來表示for語句的語句的執(zhí)行過程。執(zhí)行過程。for語句最簡單的應用形式也就語句最簡單的應用形式也就是最易理解的如下形式:是最易理解的如下形式:圖圖6.6for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 語語句句 例如例如:for(i=1;i=100;i

13、+) sum=sum+i;它的執(zhí)行過程與圖它的執(zhí)行過程與圖6.2完全一樣。可以看到它相當于完全一樣??梢钥吹剿喈斢谝韵抡Z句:以下語句:i=1; while(i=100) sum=sum+i; i+; 顯然,用顯然,用for語句簡單、方便。對于以上語句簡單、方便。對于以上for語句的一般形式語句的一般形式也可以改寫為也可以改寫為while循環(huán)的形式:循環(huán)的形式:表達式表達式1;while(表達式表達式2) 語句語句 表達式表達式3; 說明:說明:(1) for語句的一般形式中的語句的一般形式中的“表達式表達式1”可以省略,此時應在可以省略,此時應在for語句之前給循環(huán)變量賦初值。注意省略表達式

14、語句之前給循環(huán)變量賦初值。注意省略表達式1時,其時,其后的分號不能省略。如后的分號不能省略。如for(;i=100;i+) sum=sum+i;執(zhí)行執(zhí)行時,跳過時,跳過“求解表達式求解表達式1”這一步,其他不變。這一步,其他不變。(2) 如果表達式如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認為表達式行下去。也就是認為表達式2始終為真。見圖始終為真。見圖6.7。圖圖6.76.7例如:例如:for(i=1; ;i+) sum=sum+i;表達式表達式1是一個賦值表達式,表達式是一個賦值表達式,表達式2空缺。它相當空缺。它相當于:于:i=1

15、; while(1) sum=sum+1; i+;(3) 表達式表達式3也可以省略,但此時程序設計者應另外也可以省略,但此時程序設計者應另外設法保證循環(huán)能正常結(jié)束。如:設法保證循環(huán)能正常結(jié)束。如:(4)可以省略表達式)可以省略表達式1和表達式和表達式3,只有表達式,只有表達式2,即只給循環(huán)條件,如:即只給循環(huán)條件,如:for(;i=100;) while(i=100) sum=sum+i; 相當于相當于 sum=sum+i; i+; i+;在這種情況下,完全等同于在這種情況下,完全等同于while語句??梢娬Z句??梢奻or語句語句比比while語句功能強,除了可以給出循環(huán)條件外,語句功能強,除

16、了可以給出循環(huán)條件外,還可以賦初值,使循環(huán)變量自動增值等。還可以賦初值,使循環(huán)變量自動增值等。(5)三個表達式都可省略,如:)三個表達式都可省略,如:for(;) 語句語句相當于相當于while(1)語句。語句。即不設初值,不判斷條件即不設初值,不判斷條件(認為表達式認為表達式2為真值為真值),循,循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。(6) 表達式表達式1可以是設置循環(huán)變量初值的賦值表達式,可以是設置循環(huán)變量初值的賦值表達式,也可以是與循環(huán)變量無關(guān)的其他表達式。如也可以是與循環(huán)變量無關(guān)的其他表達式。如:for (sum=0;i=100;i+) sum=sum+

17、i;表達式表達式3也可以是與循環(huán)控制無關(guān)的任意表達式。也可以是與循環(huán)控制無關(guān)的任意表達式。 表達式表達式1和表達式和表達式3可以是一個簡單的表達式,也可以是一個簡單的表達式,也可以是逗號表達式,即包含一個以上的簡單表達可以是逗號表達式,即包含一個以上的簡單表達式,中間用逗號間隔。如:式,中間用逗號間隔。如:for(sum=0,i=1;i=100;i+) sum=sum+i;或或for(i=0,j=100;i=j;i+,j-) k+=i*j;表達式表達式1和表達式和表達式3都是逗號表達式,各包含兩個賦都是逗號表達式,各包含兩個賦值表達式,即同時設兩個初值,使兩個變量增值,值表達式,即同時設兩個初

18、值,使兩個變量增值,執(zhí)行情況見圖執(zhí)行情況見圖6.8。在逗號表達式內(nèi)按自左至右順。在逗號表達式內(nèi)按自左至右順序求解,整個逗號表達式的值為其中最右邊的表達序求解,整個逗號表達式的值為其中最右邊的表達式的值。如式的值。如:for(i=1;i=100;i+,i+) sum=sum+i;相當于相當于for(i=1;i=100;i=i+2) sum=sum+i;。圖圖6.9圖圖6.8(7) 表達式一般是關(guān)系表達式表達式一般是關(guān)系表達式(如如i=100)或邏輯表達或邏輯表達式式(如如ab & xy),但也可以是數(shù)值表達式或字,但也可以是數(shù)值表達式或字符表達式,只要其值為非零,就執(zhí)行循環(huán)體。分符表達式

19、,只要其值為非零,就執(zhí)行循環(huán)體。分析下面兩個例子:析下面兩個例子: for(i=0;(c=getchar()!=n;i+=c);在表達式在表達式2中先從終端接收一個字符賦給中先從終端接收一個字符賦給c,然后判,然后判斷此賦值表達式的值是否不等于斷此賦值表達式的值是否不等于n(換行符換行符),如果不等于如果不等于n,就執(zhí)行循環(huán)體。此,就執(zhí)行循環(huán)體。此for語句的語句的執(zhí)行過程見圖執(zhí)行過程見圖6.9,它的作用是不斷輸入字符,將,它的作用是不斷輸入字符,將它們的它們的ascII碼相加,直到輸入一個碼相加,直到輸入一個“換行換行”符為符為止。止。注意:此注意:此for語句的循環(huán)體為空語句,把本來要在循

20、語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達式環(huán)體內(nèi)處理的內(nèi)容放在表達式3中,作用是一樣的。中,作用是一樣的??梢娍梢奻or語句功能強,可以在表達式中完成語句功能強,可以在表達式中完成本來應在循環(huán)體內(nèi)完成的操作。本來應在循環(huán)體內(nèi)完成的操作。 for( ;(c=getchar()!=n;) printf(%c,c);只有表達式只有表達式2,而無表達式,而無表達式1和表達式和表達式3。其作用是每。其作用是每讀入一個字符后立即輸出該字符,直到輸入一個讀入一個字符后立即輸出該字符,直到輸入一個“換行換行”為止。請注意,從終端鍵盤向計算機輸為止。請注意,從終端鍵盤向計算機輸入時,是在按入時

21、,是在按Enter鍵以后才送到內(nèi)存緩沖區(qū)中去鍵以后才送到內(nèi)存緩沖區(qū)中去的。運行情況:的。運行情況:computer (輸入輸入)computer (輸出輸出)而不是而不是ccoommppuutteerr即不是從終端敲入一個字符馬上輸出一個字符,而即不是從終端敲入一個字符馬上輸出一個字符,而是按是按Enter鍵后數(shù)據(jù)送入內(nèi)存緩沖區(qū),然后每次從鍵后數(shù)據(jù)送入內(nèi)存緩沖區(qū),然后每次從緩沖區(qū)讀一個字符,再輸出該字符。緩沖區(qū)讀一個字符,再輸出該字符。從上面介紹可以知道從上面介紹可以知道c語言中的語言中的for語句比其他語言語句比其他語言(如如baSIc,PascaL)中的中的fOR語句功能強得多??烧Z句功能

22、強得多??梢园蜒h(huán)體和一些與循環(huán)控制無關(guān)的操作也作為以把循環(huán)體和一些與循環(huán)控制無關(guān)的操作也作為表達式表達式1或表達式或表達式3出現(xiàn),這樣程序可以短小簡潔。出現(xiàn),這樣程序可以短小簡潔。但過分地利用這一特點會使但過分地利用這一特點會使for語句顯得雜亂,可語句顯得雜亂,可讀性降低,建議不要把與循環(huán)控制無關(guān)的內(nèi)容放讀性降低,建議不要把與循環(huán)控制無關(guān)的內(nèi)容放到到for語句中。語句中。6.6 循環(huán)的嵌套循環(huán)的嵌套一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。

23、各種語言中關(guān)于循環(huán)的嵌套的概念都是一樣的。循環(huán)。各種語言中關(guān)于循環(huán)的嵌套的概念都是一樣的。三種循環(huán)三種循環(huán)(while循環(huán)、循環(huán)、dowhile循環(huán)和循環(huán)和for循環(huán)循環(huán))可以互可以互相嵌套。例如,下面幾種都是合法的形式:相嵌套。例如,下面幾種都是合法的形式:(1) while( ) while( ) (2) do do while( ); while( );(3) for(;) for(; ;) (4) while( ) do while( ); (5) for(; ;) while( ) (6) do for (; ;) while( );6.7 幾種循環(huán)的比較幾種循環(huán)的比較(1) 四種循

24、環(huán)都可以用來處理同一問題,一般情況下它們四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡用可以互相代替。但一般不提倡用goto型循環(huán)。型循環(huán)。(2) while和和dowhile循環(huán),只在循環(huán),只在while后面指定循環(huán)條件,后面指定循環(huán)條件,在循環(huán)體中應包含使循環(huán)趨于結(jié)束的語句在循環(huán)體中應包含使循環(huán)趨于結(jié)束的語句(如如i+,或,或i=i+1等等)。 for循環(huán)可以在表達式循環(huán)可以在表達式3中包含使循環(huán)趨于結(jié)束的操作,中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達式甚至可以將循環(huán)體中的操作全部放到表達式3中。因此中。因此for語句的功能更強,凡用語句的

25、功能更強,凡用while循環(huán)能完成的,用循環(huán)能完成的,用for循環(huán)都能實現(xiàn)。循環(huán)都能實現(xiàn)。(3) 用用while和和dowhile循環(huán)時,循環(huán)變量初始化的操作循環(huán)時,循環(huán)變量初始化的操作應在應在while和和dowhile語句之前完成。而語句之前完成。而for語句可以語句可以在表達式在表達式1中實現(xiàn)循環(huán)變量的初始化。中實現(xiàn)循環(huán)變量的初始化。(4) while循型、循型、dowhile循環(huán)和循環(huán)和for循環(huán),可以用循環(huán),可以用break語句跳出循環(huán),用語句跳出循環(huán),用continue語句結(jié)束本次循語句結(jié)束本次循環(huán)環(huán)(break語句和語句和continue語句見語句見6.8節(jié)節(jié))。而對用。而對用g

26、oto語句和語句和if語句構(gòu)成的循環(huán),不能用語句構(gòu)成的循環(huán),不能用break語句語句和和continue語句進行控制。語句進行控制。在在4.4節(jié)中已經(jīng)介紹過用節(jié)中已經(jīng)介紹過用break語句可以使流程跳出語句可以使流程跳出Switch結(jié)構(gòu),繼續(xù)執(zhí)行結(jié)構(gòu),繼續(xù)執(zhí)行Switch語句下面的一個語句。語句下面的一個語句。實際上,實際上,break語句還可以用來從循環(huán)體內(nèi)跳出循語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。如:句。如:for(r=1;r100) break; printf(%f,area); 6.8break語句和語句

27、和continue語句語句計算計算r=1到到r=10時的圓面積,直到面積時的圓面積,直到面積area大于大于100為為止。從上面的止。從上面的for循環(huán)可以看到:當循環(huán)可以看到:當area100時,時,執(zhí)行執(zhí)行break語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。其余的幾次循環(huán)。break語句的一般形式為:語句的一般形式為:break;break語句不能用于循環(huán)語句和語句不能用于循環(huán)語句和Switch語句之外的任語句之外的任何其他語句中。何其他語句中。 一般形式為:一般形式為:continue;其作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行其作用為結(jié)束

28、本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。continue語句和語句和break語句的區(qū)別是:語句的區(qū)別是:continue語句只結(jié)語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行。而break語語句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件句則是結(jié)束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。如果有以下兩個循環(huán)結(jié)構(gòu):是否成立。如果有以下兩個循環(huán)結(jié)構(gòu):(1) while(表達式表達式1) if(表達式表達式2) break; (2) while(表達式表達式1)if(表達式表達

29、式2) continue;圖圖6.10圖圖6.11例例6.5把把100200之間的不能被之間的不能被3整除的數(shù)輸出。整除的數(shù)輸出。main() int n; for (n=100;n=200;n+) if (n%3=0)continue; printf(%d,n); 當當n能被能被3整除時,執(zhí)行整除時,執(zhí)行continue語句,結(jié)束本次循環(huán)語句,結(jié)束本次循環(huán)(即跳過即跳過printf函數(shù)語句函數(shù)語句),只有,只有n不能被不能被3整除時才整除時才執(zhí)行執(zhí)行printf函數(shù)。函數(shù)。當然,例當然,例6.5中循環(huán)體也可以改用一個語句處理:中循環(huán)體也可以改用一個語句處理:if (n%3!=0) print

30、f(%d,n);我們在程序中用我們在程序中用continue語句無非為了說明語句無非為了說明continue語句的作用。語句的作用。6.9 程序舉例程序舉例例例6.6用用/41-13+15-17+公式求公式求的近似的近似值,直到最后一項的值,直到最后一項的絕對值小于絕對值小于10-6為止。為止。用用N|S結(jié)構(gòu)化流程圖表結(jié)構(gòu)化流程圖表示算法示算法(見圖見圖6.12)。圖圖6.126.12程序如下:程序如下:#includemain()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/

31、n;Pi=Pi*4;printf(Pi=%10.6fn,Pi);運行結(jié)果為:運行結(jié)果為:Pi= 3.141594例例6.7求求fibonacci數(shù)列數(shù)列40個數(shù)。這個數(shù)列有如下特點:個數(shù)。這個數(shù)列有如下特點:第第1,2兩個數(shù)為兩個數(shù)為1,1。從第。從第3個數(shù)開始,該數(shù)是其個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。即前面兩個數(shù)之和。即:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n3)這是一個有趣的古典數(shù)學問題:有一對兔子,從出這是一個有趣的古典數(shù)學問題:有一對兔子,從出生后第生后第3個月起每個月都生一對兔子。小兔子長到個月起每個月都生一對兔子。小兔子長到第第3個月后每個月又生一

32、對兔子。假設所有兔子都個月后每個月又生一對兔子。假設所有兔子都不死,問每個月的兔子總數(shù)為多少?不死,問每個月的兔子總數(shù)為多少?解此題的算法如圖解此題的算法如圖6.13所示。所示。 圖圖6.13程序如下:程序如下: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; 運行結(jié)果為:運行結(jié)果為: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

33、2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 57022887 9227465 14930352 24157817 39088169 63245986 102334155圖圖6.14程序中在程序中在printf函數(shù)中輸出格式符用函數(shù)中輸出格式符用“%12 ld”,而,而不是用不是用“%12d”,這是由于在第,這是由于在第23個數(shù)之后,整個數(shù)之后,整數(shù)值已超過整數(shù)最大值數(shù)值已超過整數(shù)最大值32767,因此必須用,因此必須用“%ld”格式

34、輸出。格式輸出。if語句的作用是使輸出語句的作用是使輸出4個數(shù)后換行。個數(shù)后換行。i是循環(huán)變量,當是循環(huán)變量,當i為偶數(shù)時換行,而為偶數(shù)時換行,而i每增值每增值1,就,就要計算和輸出要計算和輸出2個數(shù)個數(shù)(f1,f2),因此,因此i每隔每隔2換一次行換一次行相當于每輸出相當于每輸出4個數(shù)后換行輸出。個數(shù)后換行輸出。例例6.8判斷判斷m是否素數(shù)。算法如圖是否素數(shù)。算法如圖6.14所示。所示。我們采用的算法是這樣的:讓我們采用的算法是這樣的:讓m被被2到到m 除,如果除,如果m能被能被2m 之中任何一個整數(shù)整除,則提前結(jié)束循之中任何一個整數(shù)整除,則提前結(jié)束循環(huán),此時環(huán),此時i必然小于或等于必然小于

35、或等于k(即即m);如果;如果m不能不能被被2k(即即m)之間的任一整數(shù)整除,則在完成最后之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,一次循環(huán)后,i還要加還要加1,因此,因此i=k+1,然后才終止,然后才終止循環(huán)。在循環(huán)之后判別循環(huán)。在循環(huán)之后判別i的值是否大于或等于的值是否大于或等于k+1,若是,則表明未曾被若是,則表明未曾被2k之間任一整數(shù)整除過,之間任一整數(shù)整除過,因此輸出因此輸出“是素數(shù)是素數(shù)”。程序如下:程序如下:#include main() int m,i,k; scanf(%d,&m); k=sqrt(m+1);/*加加1是為了避免在求是為了避免在求m時可能出現(xiàn)的時可能

36、出現(xiàn)的誤差誤差*/ for (i=2;i=k+1) printf(%d is a Prime mubern,m); else printf(%d is not a Prime numbern,m); 運行情況如下:運行情況如下:1717 is a Prime number 例例6.9求求100200間的全部素數(shù)。間的全部素數(shù)。 在例在例6.8的基礎上,對本題用一個嵌套的的基礎上,對本題用一個嵌套的for循環(huán)即循環(huán)即可處理。程序如下:可處理。程序如下:# include main() int m,k,i,n=0; for(m=101;m=200;m=m+2) k=sqrt(m); for (i=

37、2;i=k+1)printf(%d ,m);n=n+1;if(n%10=0) printf(n); printf (n); 運行結(jié)果如下:運行結(jié)果如下:101 103 107 109 113 127 131 137 139 149151 157 163 167 173 179 181 191 193 197199 n的作用是累計輸出素數(shù)的個數(shù),控制每行輸出的作用是累計輸出素數(shù)的個數(shù),控制每行輸出10個數(shù)據(jù)。個數(shù)據(jù)。 例例6.10譯密碼。為使電文保密,往往按一定規(guī)律將譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報人再按約定的規(guī)律將其譯回其轉(zhuǎn)換成密碼,收報人再按約定的規(guī)律將其譯回原文。例

38、如,可以按以下規(guī)律將電文變成密碼:原文。例如,可以按以下規(guī)律將電文變成密碼:將字母將字母a變成字母變成字母E,a變成變成e,即變成其后的第,即變成其后的第4個字個字母,母,W變成變成a,X變成變成b,Y變成變成c,Z變成變成D。見圖。見圖6.15。字母按上述規(guī)律轉(zhuǎn)換,非字母字符不變。如。字母按上述規(guī)律轉(zhuǎn)換,非字母字符不變。如“china!”轉(zhuǎn)換為轉(zhuǎn)換為“Glmre!” 。輸入一行字符,要求輸出其相應的密碼。輸入一行字符,要求輸出其相應的密碼。圖圖6.15程序如下:程序如下: #include main() char c; while(c=getchar()!=n) if(c=a & c=a & cZ & cz) c=c-26; printf(%c,c); 運行結(jié)果如下:運行結(jié)果如下:china! Glmre!程序中對輸入的字符處理辦法是:先判定它是否大程序中對輸入的字符處理辦法是:先判定它是否大寫字母或小寫字母,若是,則將其值加寫字母或小寫字母,若是,則將其值加4(變成其后變成其后的第的第4個字母個字母)。如果加。如果加4以后字符值大于以后字符值大于Z或或z,則表示原來的字母在,則表示原來的字母在V(

溫馨提示

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

評論

0/150

提交評論