C語(yǔ)言PPT譚浩強(qiáng)教材配套版第6章_第1頁(yè)
C語(yǔ)言PPT譚浩強(qiáng)教材配套版第6章_第2頁(yè)
C語(yǔ)言PPT譚浩強(qiáng)教材配套版第6章_第3頁(yè)
C語(yǔ)言PPT譚浩強(qiáng)教材配套版第6章_第4頁(yè)
C語(yǔ)言PPT譚浩強(qiáng)教材配套版第6章_第5頁(yè)
已閱讀5頁(yè),還剩60頁(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、6.1 概述概述6.2 goto語(yǔ)句以及用語(yǔ)句以及用goto語(yǔ)句構(gòu)成循環(huán)語(yǔ)句構(gòu)成循環(huán)6.3 while語(yǔ)句語(yǔ)句6.4 do while語(yǔ)句語(yǔ)句6.5 for 語(yǔ)句語(yǔ)句6.6 循環(huán)的嵌套循環(huán)的嵌套6.7 幾種循環(huán)的比較幾種循環(huán)的比較6.8 break語(yǔ)句和語(yǔ)句和continue語(yǔ)句語(yǔ)句6.9程序舉例程序舉例習(xí)題習(xí)題第第6 6章章 循循 環(huán)環(huán) 控控 制制6.1 概述概述在許多問(wèn)題中需要用到循環(huán)控制。例如,要輸入全校學(xué)在許多問(wèn)題中需要用到循環(huán)控制。例如,要輸入全校學(xué)生成績(jī);求若干個(gè)數(shù)之和;迭代求根等。幾乎所有實(shí)生成績(jī);求若干個(gè)數(shù)之和;迭代求根等。幾乎所有實(shí)用的程序都包含循環(huán)。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)

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

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

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

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

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

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

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

9、圖先畫(huà)出流程圖,見(jiàn)圖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時(shí),二者結(jié)

10、果就不同了。這是因?yàn)榇藭r(shí)對(duì)時(shí),二者結(jié)果就不同了。這是因?yàn)榇藭r(shí)對(duì)while循循環(huán)來(lái)說(shuō),一次也不執(zhí)行循環(huán)體環(huán)來(lái)說(shuō),一次也不執(zhí)行循環(huán)體(表達(dá)式表達(dá)式“i10時(shí),二者結(jié)果就不同了。這是時(shí),二者結(jié)果就不同了。這是因?yàn)榇藭r(shí)對(duì)因?yàn)榇藭r(shí)對(duì)while循環(huán)來(lái)說(shuō),一次也不執(zhí)行循環(huán)體循環(huán)來(lái)說(shuō),一次也不執(zhí)行循環(huán)體(表達(dá)式表達(dá)式“i100”。因?yàn)橐驗(yàn)椤爱?dāng)當(dāng)i100時(shí)繼續(xù)執(zhí)行循環(huán)時(shí)繼續(xù)執(zhí)行循環(huán)”和和“直到直到i100結(jié)結(jié)束循環(huán)束循環(huán)”是對(duì)同一問(wèn)題的兩種表述方式。千萬(wàn)不是對(duì)同一問(wèn)題的兩種表述方式。千萬(wàn)不要在圖要在圖5|4(b)中寫(xiě)成中寫(xiě)成“直到直到i100”。6.5 for 語(yǔ)語(yǔ) 句句C語(yǔ)言中的語(yǔ)言中的for語(yǔ)句使用最為靈活

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

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

13、+) sum=sum+i;它的執(zhí)行過(guò)程與圖它的執(zhí)行過(guò)程與圖6.2完全一樣??梢钥吹剿喈?dāng)于完全一樣??梢钥吹剿喈?dāng)于以下語(yǔ)句:以下語(yǔ)句:i=1; while(i=100) sum=sum+i; i+; 顯然,用顯然,用for語(yǔ)句簡(jiǎn)單、方便。對(duì)于以上語(yǔ)句簡(jiǎn)單、方便。對(duì)于以上for語(yǔ)句的一般形式語(yǔ)句的一般形式也可以改寫(xiě)為也可以改寫(xiě)為while循環(huán)的形式:循環(huán)的形式:表達(dá)式表達(dá)式1;while(表達(dá)式表達(dá)式2) 語(yǔ)句語(yǔ)句 表達(dá)式表達(dá)式3; 說(shuō)明:說(shuō)明:(1) for語(yǔ)句的一般形式中的語(yǔ)句的一般形式中的“表達(dá)式表達(dá)式1”可以省略,此時(shí)應(yīng)在可以省略,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值。注意省略表達(dá)式

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

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

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

17、i;表達(dá)式表達(dá)式3也可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式。也可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式。 表達(dá)式表達(dá)式1和表達(dá)式和表達(dá)式3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(dá)可以是逗號(hào)表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(dá)式,中間用逗號(hào)間隔。如:式,中間用逗號(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á)式表達(dá)式1和表達(dá)式和表達(dá)式3都是逗號(hào)表達(dá)式,各包含兩個(gè)賦都是逗號(hào)表達(dá)式,各包含兩個(gè)賦值表達(dá)式,即同時(shí)設(shè)兩個(gè)初值,使兩個(gè)變量增值,值表達(dá)式,即同時(shí)設(shè)兩個(gè)初

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

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

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

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

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

23、各種語(yǔ)言中關(guān)于循環(huán)的嵌套的概念都是一樣的。循環(huán)。各種語(yǔ)言中關(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)都可以用來(lái)處理同一問(wèn)題,一般情況下它們四種循環(huán)都可以用來(lái)處理同一問(wèn)題,一般情況下它們可以互相代替。但一般不提倡用可以互相代替。但一般不提倡用goto型循環(huán)。型循環(huán)。(2) while和和dowhile循環(huán),只在循環(huán),只在while后面指定循環(huán)條件,后面指定循環(huán)條件,在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句在循環(huán)體中應(yīng)包含使循環(huán)趨于結(jié)束的語(yǔ)句(如如i+,或,或i=i+1等等)。 for循環(huán)可以在表達(dá)式循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此中。因此for語(yǔ)句的功能更強(qiáng),凡用語(yǔ)句的

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

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

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

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

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); 當(dāng)當(dāng)n能被能被3整除時(shí),執(zhí)行整除時(shí),執(zhí)行continue語(yǔ)句,結(jié)束本次循環(huán)語(yǔ)句,結(jié)束本次循環(huán)(即跳過(guò)即跳過(guò)printf函數(shù)語(yǔ)句函數(shù)語(yǔ)句),只有,只有n不能被不能被3整除時(shí)才整除時(shí)才執(zhí)行執(zhí)行printf函數(shù)。函數(shù)。當(dāng)然,例當(dāng)然,例6.5中循環(huán)體也可以改用一個(gè)語(yǔ)句處理:中循環(huán)體也可以改用一個(gè)語(yǔ)句處理:if (n%3!=0) print

30、f(%d,n);我們?cè)诔绦蛑杏梦覀冊(cè)诔绦蛑杏胏ontinue語(yǔ)句無(wú)非為了說(shuō)明語(yǔ)句無(wú)非為了說(shuō)明continue語(yǔ)句的作用。語(yǔ)句的作用。6.9 程序舉例程序舉例例例6.6用用/41-13+15-17+公式求公式求的近似的近似值,直到最后一項(xiàng)的值,直到最后一項(xiàng)的絕對(duì)值小于絕對(duì)值小于10-6為止。為止。用用N|S結(jié)構(gòu)化流程圖表結(jié)構(gòu)化流程圖表示算法示算法(見(jiàn)圖見(jiàn)圖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);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:Pi= 3.141594例例6.7求求fibonacci數(shù)列數(shù)列40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第第1,2兩個(gè)數(shù)為兩個(gè)數(shù)為1,1。從第。從第3個(gè)數(shù)開(kāi)始,該數(shù)是其個(gè)數(shù)開(kāi)始,該數(shù)是其前面兩個(gè)數(shù)之和。即前面兩個(gè)數(shù)之和。即:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n3)這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題:有一對(duì)兔子,從出這是一個(gè)有趣的古典數(shù)學(xué)問(wèn)題:有一對(duì)兔子,從出生后第生后第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第第3個(gè)月后每個(gè)月又生一

32、對(duì)兔子。假設(shè)所有兔子都個(gè)月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?不死,問(wèn)每個(gè)月的兔子總數(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; 運(yùn)行結(jié)果為:運(yùn)行結(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個(gè)數(shù)之后,整個(gè)數(shù)之后,整數(shù)值已超過(guò)整數(shù)最大值數(shù)值已超過(guò)整數(shù)最大值32767,因此必須用,因此必須用“%ld”格式

34、輸出。格式輸出。if語(yǔ)句的作用是使輸出語(yǔ)句的作用是使輸出4個(gè)數(shù)后換行。個(gè)數(shù)后換行。i是循環(huán)變量,當(dāng)是循環(huán)變量,當(dāng)i為偶數(shù)時(shí)換行,而為偶數(shù)時(shí)換行,而i每增值每增值1,就,就要計(jì)算和輸出要計(jì)算和輸出2個(gè)數(shù)個(gè)數(shù)(f1,f2),因此,因此i每隔每隔2換一次行換一次行相當(dāng)于每輸出相當(dāng)于每輸出4個(gè)數(shù)后換行輸出。個(gè)數(shù)后換行輸出。例例6.8判斷判斷m是否素?cái)?shù)。算法如圖是否素?cái)?shù)。算法如圖6.14所示。所示。我們采用的算法是這樣的:讓我們采用的算法是這樣的:讓m被被2到到m 除,如果除,如果m能被能被2m 之中任何一個(gè)整數(shù)整除,則提前結(jié)束循之中任何一個(gè)整數(shù)整除,則提前結(jié)束循環(huán),此時(shí)環(huán),此時(shí)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ù)整除過(guò),之間任一整數(shù)整除過(guò),因此輸出因此輸出“是素?cái)?shù)是素?cái)?shù)”。程序如下:程序如下:#include main() int m,i,k; scanf(%d,&m); k=sqrt(m+1);/*加加1是為了避免在求是為了避免在求m時(shí)可能出現(xiàn)的時(shí)可能

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); 運(yùn)行情況如下:運(yùn)行情況如下:1717 is a Prime number 例例6.9求求100200間的全部素?cái)?shù)。間的全部素?cái)?shù)。 在例在例6.8的基礎(chǔ)上,對(duì)本題用一個(gè)嵌套的的基礎(chǔ)上,對(duì)本題用一個(gè)嵌套的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); 運(yùn)行結(jié)果如下:運(yùn)行結(jié)果如下:101 103 107 109 113 127 131 137 139 149151 157 163 167 173 179 181 191 193 197199 n的作用是累計(jì)輸出素?cái)?shù)的個(gè)數(shù),控制每行輸出的作用是累計(jì)輸出素?cái)?shù)的個(gè)數(shù),控制每行輸出10個(gè)數(shù)據(jù)。個(gè)數(shù)據(jù)。 例例6.10譯密碼。為使電文保密,往往按一定規(guī)律將譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回其轉(zhuǎn)換成密碼,收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文。例

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

溫馨提示

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