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

下載本文檔

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

文檔簡介

1、語言程序設(shè)計(jì)1第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)語言程序設(shè)計(jì)2第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1 while5.1 while語句以及用語句以及用whilewhile語句構(gòu)成的循環(huán)結(jié)構(gòu)語句構(gòu)成的循環(huán)結(jié)構(gòu)5.2 do-while5.2 do-while語句和用語句和用do-whiledo-while構(gòu)成的循環(huán)結(jié)構(gòu)構(gòu)成的循環(huán)結(jié)構(gòu)5.3 for5.3 for語句以及用語句以及用forfor語句構(gòu)成的循環(huán)結(jié)構(gòu)語句構(gòu)成的循環(huán)結(jié)構(gòu)5.4 break5.4 break語句和語句和continuecontinue語句在循環(huán)結(jié)構(gòu)中應(yīng)用語句在循環(huán)結(jié)構(gòu)中應(yīng)用5.5 5.5 循環(huán)的嵌

2、套循環(huán)的嵌套5.6 5.6 三種循環(huán)的比較三種循環(huán)的比較5.7 5.7 程序舉例程序舉例主要內(nèi)容:主要內(nèi)容:語言程序設(shè)計(jì)3第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1 while5.1 while語句以及用語句以及用whilewhile語句構(gòu)成語句構(gòu)成的循環(huán)結(jié)構(gòu)的循環(huán)結(jié)構(gòu) 由由whilewhile語句構(gòu)成的循環(huán)也稱語句構(gòu)成的循環(huán)也稱“當(dāng)當(dāng)”循環(huán),循環(huán),whilewhile循環(huán)的一般形式如下:循環(huán)的一般形式如下: while(while(表達(dá)式表達(dá)式) ) 語句語句 其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。其中表達(dá)式是循環(huán)條件,語句為循環(huán)體。5.1.1 while5.1.1 while循環(huán)

3、的一般形式循環(huán)的一般形式語言程序設(shè)計(jì)4第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)說明:說明:whilewhile是是C C語言的關(guān)鍵字,要小寫。語言的關(guān)鍵字,要小寫。 whilewhile后一對圓括號中的表達(dá)式可以是后一對圓括號中的表達(dá)式可以是C C語言中任語言中任意合法的表達(dá)式,但不能為空,由它來控制循環(huán)體意合法的表達(dá)式,但不能為空,由它來控制循環(huán)體是否執(zhí)行。是否執(zhí)行。 在語法上,循環(huán)體只能是一條可執(zhí)行語句,若循環(huán)在語法上,循環(huán)體只能是一條可執(zhí)行語句,若循環(huán)體內(nèi)有多條語句,則必須用一對花括號體內(nèi)有多條語句,則必須用一對花括號括起來,括起來,構(gòu)成一條復(fù)合語句。構(gòu)成一條復(fù)合語句。 對于任何

4、循環(huán),只要掌握兩點(diǎn)內(nèi)容:一是循環(huán)條件對于任何循環(huán),只要掌握兩點(diǎn)內(nèi)容:一是循環(huán)條件是什么?二是循環(huán)體是誰?是什么?二是循環(huán)體是誰? 如何結(jié)束循環(huán),一般是兩種方式:一是正常結(jié)束(如何結(jié)束循環(huán),一般是兩種方式:一是正常結(jié)束(既不滿足循環(huán)條件了);二是中途結(jié)束。既不滿足循環(huán)條件了);二是中途結(jié)束。語言程序設(shè)計(jì)5第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1.2 while5.1.2 while循環(huán)的執(zhí)行過程循環(huán)的執(zhí)行過程 whilewhile循環(huán)的執(zhí)行過程如下:循環(huán)的執(zhí)行過程如下:(1 1)計(jì)算)計(jì)算whilewhile后圓括號中表后圓括號中表達(dá)式達(dá)式 的值。當(dāng)值為非的值。當(dāng)值為非0 0時(shí),執(zhí)

5、時(shí),執(zhí)行步驟(行步驟(2 2);當(dāng)值為);當(dāng)值為0 0時(shí),執(zhí)時(shí),執(zhí)行步驟(行步驟(4 4)。)。(2 2)執(zhí)行循環(huán)體一次。)執(zhí)行循環(huán)體一次。(3 3)轉(zhuǎn)去執(zhí)行步驟()轉(zhuǎn)去執(zhí)行步驟(1 1)。)。(4 4)退出)退出whilewhile循環(huán)。循環(huán)。圖圖5.1 while5.1 while循環(huán)語句循環(huán)語句的執(zhí)行流程的執(zhí)行流程語言程序設(shè)計(jì)6第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)注意:注意:(1 1)whilewhile語句的循環(huán)體可能一次都不執(zhí)行,因?yàn)檎Z句的循環(huán)體可能一次都不執(zhí)行,因?yàn)閣hilewhile后圓括號中的條件表達(dá)式可能一開始就為后圓括號中的條件表達(dá)式可能一開始就為0.0.(2

6、2)不要把由)不要把由ifif語句構(gòu)成的分支結(jié)構(gòu)與由語句構(gòu)成的分支結(jié)構(gòu)與由whilewhile語句語句構(gòu)成的循環(huán)結(jié)構(gòu)混同起來。若構(gòu)成的循環(huán)結(jié)構(gòu)混同起來。若ifif后條件表達(dá)式的值為后條件表達(dá)式的值為非非0 0,其后的,其后的ifif子句只可能執(zhí)行一次;而子句只可能執(zhí)行一次;而whilewhile后條件后條件表達(dá)式的值為非表達(dá)式的值為非0 0時(shí),其后的循環(huán)體語句可能重復(fù)執(zhí)行。時(shí),其后的循環(huán)體語句可能重復(fù)執(zhí)行。在設(shè)計(jì)循環(huán)時(shí),通常應(yīng)在循環(huán)體內(nèi)改變條件表達(dá)式中在設(shè)計(jì)循環(huán)時(shí),通常應(yīng)在循環(huán)體內(nèi)改變條件表達(dá)式中有關(guān)變量的值,使條件表達(dá)式的值最終變?yōu)橛嘘P(guān)變量的值,使條件表達(dá)式的值最終變?yōu)? 0,以便能,以便能

7、結(jié)束循環(huán)。結(jié)束循環(huán)。(3 3)當(dāng)循環(huán)體需要無條件循環(huán),條件表達(dá)式可以設(shè)為)當(dāng)循環(huán)體需要無條件循環(huán),條件表達(dá)式可以設(shè)為1 1(恒真),但在循環(huán)體內(nèi)要有帶條件的非正常出口(恒真),但在循環(huán)體內(nèi)要有帶條件的非正常出口(breakbreak等)。等)。語言程序設(shè)計(jì)7第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.15.1】用用whilewhile語句求語句求s=1+2+3+ +100s=1+2+3+ +100 (a a) (b b)圖圖5.2 5.2 例例5.15.1算法流程圖算法流程圖語言程序設(shè)計(jì)8第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#includemain() int i,s

8、um=0; i=1; while(i=100) sum=sum+i; i+; printf(“sum=%dn”,sum); 結(jié)果:sum=5050語言程序設(shè)計(jì)9第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.25.2】用用whilewhile語句求語句求s=1+1/ (2s=1+1/ (2* *2)+1/ 2)+1/ (3(3* *3)+1/ (43)+1/ (4* *4)+ +1/ (1004)+ +1/ (100* *100)100) 分析:本題的算法也是求累加和,只是求和分析:本題的算法也是求累加和,只是求和的每一項(xiàng)與例的每一項(xiàng)與例5.15.1不同。本題是求分式的累加和,不同。

9、本題是求分式的累加和,因此需要注意:求和變量因此需要注意:求和變量sumsum應(yīng)該是應(yīng)該是doubledouble或或floatfloat類型。由于分式中每一項(xiàng)的分子小于分母,類型。由于分式中每一項(xiàng)的分子小于分母,因此為使分式的值不為零,累加的每一項(xiàng)應(yīng)該寫因此為使分式的值不為零,累加的每一項(xiàng)應(yīng)該寫成成1.0/(i1.0/(i* *i)i)。 語言程序設(shè)計(jì)10第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() double sum=0; double sum=0; int i; int i; i=1; i=1; while(i=100) wh

10、ile(i=100) sum=sum+1.0/(i sum=sum+1.0/(i* *i);i); i+; i+; printf(“sum=%fn”,sum); printf(“sum=%fn”,sum); 結(jié)果:結(jié)果:sum=1.634984sum=1.634984語言程序設(shè)計(jì)11第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.35.3】用用 公式求公式求 的近的近似值,直到最后一項(xiàng)的絕對值小于似值,直到最后一項(xiàng)的絕對值小于1010-6-6為止。為止。 -11111.43579 分析:分析:(1 1)用分母的值來控制循環(huán)的次數(shù)。若用)用分母的值來控制循環(huán)的次數(shù)。若用n n存放分母的

11、值,存放分母的值,則每累加一次則每累加一次n n應(yīng)當(dāng)增應(yīng)當(dāng)增2 2。每次累加的數(shù)不是整數(shù),而是一個(gè)。每次累加的數(shù)不是整數(shù),而是一個(gè)實(shí)數(shù),因此實(shí)數(shù),因此n n應(yīng)當(dāng)定義成應(yīng)當(dāng)定義成floatfloat類型。類型。(2 2)可以看成隔一項(xiàng)的加數(shù)是負(fù)數(shù)。若用)可以看成隔一項(xiàng)的加數(shù)是負(fù)數(shù)。若用t t來表示相加的每來表示相加的每一項(xiàng),則每加一項(xiàng)之后,一項(xiàng),則每加一項(xiàng)之后,t t的符號的符號s s應(yīng)當(dāng)改變,這可用交替乘應(yīng)當(dāng)改變,這可用交替乘1 1和和-1-1來實(shí)現(xiàn)。來實(shí)現(xiàn)。(3 3)從以上求)從以上求的公式來看,不能決定的公式來看,不能決定n n的最終值應(yīng)該是多的最終值應(yīng)該是多少,但可以用最后一項(xiàng)的絕對值小

12、于少,但可以用最后一項(xiàng)的絕對值小于1010-6-6來作為循環(huán)的結(jié)束來作為循環(huán)的結(jié)束條件。條件。語言程序設(shè)計(jì)12第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#include#include#includemain()main() float n,t,pi; float n,t,pi; int s; int s; s=1; s=1; n=1.0; t=1.0; n=1.0; t=1.0; pi=0; pi=0; while(fabs(t)=1e-6) while(fabs(t)=1e-6) pi+=t; pi+=t; n+=2; n+=2; s=-s; s=-s; t=s/n;

13、 t=s/n; pi=pi pi=pi* *4;4; printf(“pi=%fn”,pi); printf(“pi=%fn”,pi); 結(jié)果:結(jié)果:pi=3.141594pi=3.141594語言程序設(shè)計(jì)13第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.2 do-while5.2 do-while語句以及用語句以及用do-whiledo-while語語句構(gòu)成的循環(huán)結(jié)構(gòu)句構(gòu)成的循環(huán)結(jié)構(gòu) 5.2.1 do-while5.2.1 do-while語句構(gòu)成的循環(huán)結(jié)構(gòu)語句構(gòu)成的循環(huán)結(jié)構(gòu) do-whiledo-while循環(huán)結(jié)構(gòu)的形式如下循環(huán)結(jié)構(gòu)的形式如下: :dodo 循環(huán)體循環(huán)體whilewh

14、ile(表達(dá)式);(表達(dá)式);語言程序設(shè)計(jì)14第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)說明:說明:(1 1)dodo是是C C語言的關(guān)鍵字,必須和語言的關(guān)鍵字,必須和whilewhile聯(lián)合使聯(lián)合使用。用。(2 2)do-whiledo-while循環(huán)由循環(huán)由dodo開始,至開始,至whilewhile結(jié)束。結(jié)束。必須注意的是:在必須注意的是:在whilewhile(表達(dá)式)后的(表達(dá)式)后的“;”不可丟,它表示不可丟,它表示do-whiledo-while語句的結(jié)束。語句的結(jié)束。(3 3)whilewhile后一對圓括號中的表達(dá)式,可以是后一對圓括號中的表達(dá)式,可以是C C語言中任意

15、合法的表達(dá)式,由它控制循環(huán)是否執(zhí)語言中任意合法的表達(dá)式,由它控制循環(huán)是否執(zhí)行。行。(4 4)按語法,在)按語法,在dodo和和whilewhile之間的循環(huán)體只能之間的循環(huán)體只能是一條可執(zhí)行語句。若循環(huán)體內(nèi)需要多個(gè)語句,是一條可執(zhí)行語句。若循環(huán)體內(nèi)需要多個(gè)語句,應(yīng)該使用復(fù)合語句。應(yīng)該使用復(fù)合語句。 語言程序設(shè)計(jì)15第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.2.2 do-while5.2.2 do-while循環(huán)的執(zhí)行過程循環(huán)的執(zhí)行過程圖圖5.3 do-while5.3 do-while語句的執(zhí)行流程語句的執(zhí)行流程do-whiledo-while循環(huán)的執(zhí)行過程如下:循環(huán)的執(zhí)行過程如下:

16、(1 1)執(zhí)行)執(zhí)行dodo后面循環(huán)體后面循環(huán)體中的語句。中的語句。(2 2)計(jì)算)計(jì)算whilewhile后一對后一對圓括號中表達(dá)式的值。當(dāng)圓括號中表達(dá)式的值。當(dāng)值為非值為非0 0時(shí),轉(zhuǎn)去執(zhí)行步時(shí),轉(zhuǎn)去執(zhí)行步驟(驟(1 1);當(dāng)值為);當(dāng)值為0 0時(shí),執(zhí)時(shí),執(zhí)行步驟(行步驟(3 3)。)。(3 3)退出)退出do-whiledo-while循環(huán)循環(huán)語言程序設(shè)計(jì)16第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)do-whiledo-while循環(huán)與循環(huán)與whilewhile循環(huán)的重要區(qū)別是:循環(huán)的重要區(qū)別是:whilewhile循環(huán)的控制出現(xiàn)在循環(huán)體之前,只有當(dāng)循環(huán)的控制出現(xiàn)在循環(huán)體之前,只

17、有當(dāng)whilewhile后面條件表達(dá)式的值為非后面條件表達(dá)式的值為非0 0時(shí),才可能執(zhí)行時(shí),才可能執(zhí)行循環(huán)體,因此循環(huán)體可能一次都不執(zhí)行;在循環(huán)體,因此循環(huán)體可能一次都不執(zhí)行;在do-do-whilewhile構(gòu)成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然構(gòu)成的循環(huán)中,總是先執(zhí)行一次循環(huán)體,然后再求條件表達(dá)式的值,因此,無論條件表達(dá)式后再求條件表達(dá)式的值,因此,無論條件表達(dá)式的值是的值是0 0還是非還是非0 0,循環(huán)體至少要被執(zhí)行一次。,循環(huán)體至少要被執(zhí)行一次。在在do-whiledo-while循環(huán)體中,一定要有能使循環(huán)體中,一定要有能使whilewhile后后表達(dá)式的值變?yōu)楸磉_(dá)式的值變?yōu)? 0的操

18、作,否則,循環(huán)將會無限制的操作,否則,循環(huán)將會無限制地進(jìn)行下去,除非循環(huán)體中有帶條件的非正常出地進(jìn)行下去,除非循環(huán)體中有帶條件的非正常出口(口(breakbreak等)。等)。 語言程序設(shè)計(jì)17第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.45.4】用用do-whiledo-while語句求語句求s=1+2+3+ +100s=1+2+3+ +100。 (a (a) (b b) 圖圖5.4 5.4 例例5.35.3算法流程圖算法流程圖語言程序設(shè)計(jì)18第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int i,sum=0; in

19、t i,sum=0; i=1; i=1; do do sum=sum+i; sum=sum+i; i+; i+; while(i=100); while(i=100); printf(“%dn”,sum); printf(“%dn”,sum); 結(jié)果:結(jié)果:sum=5050sum=5050語言程序設(shè)計(jì)19第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.55.5】用迭代法求方程用迭代法求方程cosy=ycosy=y的根,要求誤的根,要求誤差小于差小于1010-6-6。分析:迭代法的求解思想是從一個(gè)初始值開始,分析:迭代法的求解思想是從一個(gè)初始值開始,將初始值代入迭代公式,得到一個(gè)迭代輸

20、出值。將初始值代入迭代公式,得到一個(gè)迭代輸出值。再次迭代時(shí),將上一次的迭代輸出當(dāng)作本次的迭再次迭代時(shí),將上一次的迭代輸出當(dāng)作本次的迭代輸入,不斷重復(fù)以上過程,直到滿足要求。代輸入,不斷重復(fù)以上過程,直到滿足要求。 根據(jù)迭代法的基本思想,求解步驟如下:根據(jù)迭代法的基本思想,求解步驟如下:(1 1)?。┤1y1的初值為的初值為0.00.0。(2 2)y0=y1y0=y1,把,把y1y1的初值賦給的初值賦給y0y0。(3 3)y1=cosy1=cos(y0y0),求出一個(gè)新的),求出一個(gè)新的y1y1。(4 4)判斷)判斷| y0-y1|10-6| y0-y1|10-6是否成立,若是否成立,若y0-

21、y1y0-y1的的絕對值小于絕對值小于10-610-6,則執(zhí)行步驟(,則執(zhí)行步驟(5 5),否則執(zhí)行步),否則執(zhí)行步驟(驟(2 2)。)。(5 5)所求)所求y1y1就是方程就是方程cosy=ycosy=y的根。計(jì)算結(jié)束,的根。計(jì)算結(jié)束,輸出結(jié)果。輸出結(jié)果。語言程序設(shè)計(jì)20第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#include#include#includemain()main() double y0,y1=0.0 double y0,y1=0.0 ; ; do do y0=y1 y0=y1 ; ; y1=cos(y0) y1=cos(y0) ; ; while(fa

22、bs(y0-y1)=1e-6 while(fabs(y0-y1)=1e-6 ) ) ; ; printf(”y1=%fn”,y1) printf(”y1=%fn”,y1) ; ; 結(jié)果:結(jié)果:y1=y1= 0.7390860.739086語言程序設(shè)計(jì)21第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.65.6】計(jì)算計(jì)算FibonacciFibonacci數(shù)列,直到某項(xiàng)大于數(shù)列,直到某項(xiàng)大于10001000為止,并輸出該項(xiàng)的值。為止,并輸出該項(xiàng)的值。 分析:分析:FibonacciFibonacci數(shù)列,數(shù)列,f f0 0=0=0,f f1 1=1=1,f f2 2=1=1,f f3

23、3=2=2,f f4 4=3=3,.,f fn n=f=fn-2n-2+f+fn-1n-1。程序中可定義。程序中可定義三個(gè)變量三個(gè)變量f1f1、f2f2和和f f,給,給f1f1賦初值賦初值0 0,f2f2賦初值賦初值1 1,然后進(jìn)行以下步驟:,然后進(jìn)行以下步驟:(1 1)f=f1+f2f=f1+f2;f1=f2f1=f2;f2=ff2=f;(2 2)判斷)判斷f2f2是否大于是否大于10001000,若不大于,重復(fù),若不大于,重復(fù)步驟(步驟(1 1)繼續(xù)循環(huán);否則執(zhí)行步驟()繼續(xù)循環(huán);否則執(zhí)行步驟(3 3)。)。(3 3)循環(huán)結(jié)束,輸出)循環(huán)結(jié)束,輸出f2f2的值。的值。語言程序設(shè)計(jì)22第第

24、5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int f1,f2,f ; int f1,f2,f ; f1=0; f2=1; f1=0; f2=1; do do f=f1+f2; f=f1+f2; f1=f2; f1=f2; f2=f; f2=f; while(f2=1000); while(f2=1000); printf(“F=%dn”,f2); printf(“F=%dn”,f2); 結(jié)果:結(jié)果:F=1597F=1597語言程序設(shè)計(jì)23第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.3 for5.3 for語句以及用語句以及用f

25、orfor語句構(gòu)成的循環(huán)語句構(gòu)成的循環(huán)結(jié)構(gòu)結(jié)構(gòu) 5.3.1 for5.3.1 for語句構(gòu)成的循環(huán)結(jié)構(gòu)語句構(gòu)成的循環(huán)結(jié)構(gòu) forfor循環(huán)的一般形式如下:循環(huán)的一般形式如下: for(for(表達(dá)式表達(dá)式1 1;表達(dá)式;表達(dá)式2 2;表達(dá)式;表達(dá)式3) 3) 循環(huán)體循環(huán)體forfor語句最簡單最容易理解的形式如下:語句最簡單最容易理解的形式如下:for(for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量) ) 循環(huán)體循環(huán)體語言程序設(shè)計(jì)24第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例如例如: :for(i=1; i=100; i+) sum=sum+i;

26、for(i=1; i=100; i+) sum=sum+i; 以上以上forfor循環(huán)的作用是求循環(huán)的作用是求s=1+2+3+ +100s=1+2+3+ +100,它相,它相當(dāng)于以下語句:當(dāng)于以下語句: i=1;i=1; while while(i=100i=100) sum=sum+i; sum=sum+i; i+; i+; 語言程序設(shè)計(jì)25第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)對于以上對于以上forfor語句的一般形式也可以改寫成語句的一般形式也可以改寫成whilewhile循環(huán)的形式:循環(huán)的形式: 表達(dá)式表達(dá)式1;1; while while(表達(dá)式(表達(dá)式2 2) 循環(huán)體循環(huán)

27、體 表達(dá)式表達(dá)式3;3; 在在C C語言中,語言中,forfor語句使用最為靈活,不僅可以用語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替替whilewhile語句。語句。 語言程序設(shè)計(jì)26第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.3.2 for5.3.2 for循環(huán)的執(zhí)行過程循環(huán)的執(zhí)行過程圖5.5 for語句的執(zhí)行流程forfor循環(huán)的執(zhí)行過程如下:循環(huán)的執(zhí)行過程如下:(1 1)求解表達(dá)式)求解表達(dá)式1 1。(2 2

28、)求解表達(dá)式)求解表達(dá)式2 2,若其值為非,若其值為非0 0,轉(zhuǎn)去執(zhí)行步驟(轉(zhuǎn)去執(zhí)行步驟(3 3);若其值為);若其值為0 0,轉(zhuǎn)步驟(轉(zhuǎn)步驟(5 5)。)。(3 3)執(zhí)行一次)執(zhí)行一次forfor循環(huán)體。循環(huán)體。(4 4)求解表達(dá)式)求解表達(dá)式3 3,轉(zhuǎn)向步驟(,轉(zhuǎn)向步驟(2 2)(5 5)循環(huán)結(jié)束。)循環(huán)結(jié)束。 語言程序設(shè)計(jì)27第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.3.3 5.3.3 有關(guān)有關(guān)forfor語句的說明語句的說明 1 1、表達(dá)式的省略、表達(dá)式的省略如果在如果在forfor語句之前給循環(huán)變量賦了初值,則表語句之前給循環(huán)變量賦了初值,則表達(dá)式達(dá)式1 1可以省略,但其后

29、的分號不可省略??梢允÷?,但其后的分號不可省略。對于從對于從1 1到到100100求和的求和的forfor循環(huán)語句:循環(huán)語句:for(i=1; i=100; i+) sum=sum+i;for(i=1; i=100; i+) sum=sum+i;如果省略表達(dá)式如果省略表達(dá)式1 1,可以寫成如下形式:,可以寫成如下形式:i=1; /i=1; /* * 在在forfor語句之前給循環(huán)變量賦初值語句之前給循環(huán)變量賦初值* */ /for( ; i=100; i+) sum=sum+i;for( ; i=100; i+) sum=sum+i;語言程序設(shè)計(jì)28第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序

30、設(shè)計(jì)如果省略表達(dá)式如果省略表達(dá)式3 3,則應(yīng)在,則應(yīng)在forfor語句的循環(huán)體內(nèi)修改循語句的循環(huán)體內(nèi)修改循環(huán)控制變量,例如:環(huán)控制變量,例如:for(i=1; i=100;) for(i=1; i=100;) sum=sum+i; sum=sum+i; i+; / i+; /* * 修改循環(huán)控制變量修改循環(huán)控制變量* */ / 如果表達(dá)式如果表達(dá)式1 1和表達(dá)式和表達(dá)式3 3都省略,則都省略,則forfor語句就相當(dāng)于語句就相當(dāng)于whilewhile語句,例如:語句,例如: i=1;i=1; for for(;i=100;i100 if(i100)break; break; / /* * 如果

31、如果i i大于大于100100,則退出循環(huán),則退出循環(huán) * */ / 總之總之,forfor語句中的三個(gè)表達(dá)式可以都省略語句中的三個(gè)表達(dá)式可以都省略,也也可以部分省略可以部分省略,但是起分隔作用的兩個(gè)分號是絕不能但是起分隔作用的兩個(gè)分號是絕不能省略的。省略的。 語言程序設(shè)計(jì)30第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)2 2、forfor語句中的逗號表達(dá)式語句中的逗號表達(dá)式 逗號運(yùn)算符的主要應(yīng)用就是在逗號運(yùn)算符的主要應(yīng)用就是在forfor語句中。語句中。forfor語句中的表達(dá)式語句中的表達(dá)式1 1和表達(dá)式和表達(dá)式3 3可以是逗號表達(dá)式,特可以是逗號表達(dá)式,特別是在有兩個(gè)循環(huán)變量參與對循

32、環(huán)控制的情況下。別是在有兩個(gè)循環(huán)變量參與對循環(huán)控制的情況下。若表達(dá)式若表達(dá)式1 1和表達(dá)式和表達(dá)式3 3為逗號表達(dá)式,將使程序顯得為逗號表達(dá)式,將使程序顯得非常清晰非常清晰. . 例如:例如: #include #include main() main() int i,j; int i,j; for(i=1,j=10;ij;i+,j-) for(i=1,j=10;ij;i+,j-) printf(“i=%d,j=%dn”,i,j); printf(“i=%d,j=%dn”,i,j);運(yùn)行結(jié)果為運(yùn)行結(jié)果為:i=1,j=10i=1,j=10i=2,j=9i=2,j=9i=3,j=8i=3,j=8i

33、=4,j=7i=4,j=7i=5,j=6i=5,j=6語言程序設(shè)計(jì)31第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3 3、循環(huán)體為空語句、循環(huán)體為空語句對于對于forfor語句,循環(huán)體為空語句的一般形式為:語句,循環(huán)體為空語句的一般形式為: for(for(表達(dá)式表達(dá)式1 1; ;表達(dá)式表達(dá)式2 2; ;表達(dá)式表達(dá)式3)3) ; ;例如求例如求s=1+2+3+ +100s=1+2+3+ +100可以用如下循環(huán)語句完成??梢杂萌缦卵h(huán)語句完成。 for for(sum=0,i=1;i=100;sum+=i,i+sum=0,i=1;i=100;sum+=i,i+) ; ;上述上述forfor語

34、句的循環(huán)體為空語句,不做任何操作。語句的循環(huán)體為空語句,不做任何操作。實(shí)際上已把求累加和的運(yùn)算放入表達(dá)式實(shí)際上已把求累加和的運(yùn)算放入表達(dá)式3 3中了。中了。 語言程序設(shè)計(jì)32第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.75.7】根據(jù)公式根據(jù)公式S=1+1/(1+2)+1/(1+2+3)+ S=1+1/(1+2)+1/(1+2+3)+ +1/(1+2+3+ +n),+1/(1+2+3+ +n),求前求前2020項(xiàng)之和。項(xiàng)之和。分析:本題主要是利用分析:本題主要是利用forfor循環(huán)來實(shí)現(xiàn)累加及循環(huán)來實(shí)現(xiàn)累加及遞推運(yùn)算,可由題中所給計(jì)算公式獲得遞推關(guān)遞推運(yùn)算,可由題中所給計(jì)算公式獲得

35、遞推關(guān)系,程序中需要有累加和變量系,程序中需要有累加和變量sumsum,初值為,初值為0 0,循環(huán)變量循環(huán)變量i i從從1 1到到2020,以及一個(gè)累計(jì)量,以及一個(gè)累計(jì)量t t,t=1+2+3+ +it=1+2+3+ +i。 語言程序設(shè)計(jì)33第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() float sum=0.0; float sum=0.0; int t=0,i; int t=0,i; for(i=1;i=20;i+) for(i=1;i=20;i+) t+=i; t+=i; sum+=1.0/t; sum+=1.0/t; prin

36、tf(“the result is :sum=%fn”,sum); printf(“the result is :sum=%fn”,sum); 結(jié)果:結(jié)果:the result is :sum=1.904762the result is :sum=1.904762語言程序設(shè)計(jì)34第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.85.8】從鍵盤輸入一個(gè)正整數(shù),判斷它是否從鍵盤輸入一個(gè)正整數(shù),判斷它是否為素?cái)?shù)(質(zhì)數(shù))?為素?cái)?shù)(質(zhì)數(shù))? 分析:按照素?cái)?shù)的定義,如果一個(gè)數(shù)只能被分析:按照素?cái)?shù)的定義,如果一個(gè)數(shù)只能被1 1和它和它本身整除,則這個(gè)數(shù)是素?cái)?shù)。反過來說,如果一個(gè)數(shù)本身整除,則這個(gè)數(shù)

37、是素?cái)?shù)。反過來說,如果一個(gè)數(shù)x x能被能被2 2到到x-1x-1之間的某個(gè)數(shù)整除,則這個(gè)數(shù)之間的某個(gè)數(shù)整除,則這個(gè)數(shù)i i就不是素?cái)?shù)就不是素?cái)?shù)。由此推理可得。由此推理可得判斷一個(gè)正整數(shù)判斷一個(gè)正整數(shù)x x是否為素?cái)?shù)的條件有是否為素?cái)?shù)的條件有三個(gè):三個(gè):(1 1)x x被被2 2 x-1x-1來除,若都不能被整除,則來除,若都不能被整除,則x x就是素就是素?cái)?shù)。數(shù)。(2 2)x x被被2 2 x/2x/2來除,若都不能被整除,則來除,若都不能被整除,則x x就是素就是素?cái)?shù)。數(shù)。(3 3)x x被被2 2 來除,若都不能被整除,則來除,若都不能被整除,則x x就是素就是素?cái)?shù)。數(shù)。 x語言程序設(shè)計(jì)3

38、5第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)解法解法1 1:( (標(biāo)志變量法標(biāo)志變量法 ) ) #include#includemain()main() int x,i,f=1; / int x,i,f=1; /* * f f是標(biāo)志變量是標(biāo)志變量 * */ / scanf(“%d”,&x); scanf(“%d”,&x); for(i=2;ix;i+) for(i=2;ix;i+) if(x%i=0) f=0;break; if(x%i=0) f=0;break; if(f=1) printf(“ if(f=1) printf(“是素?cái)?shù)是素?cái)?shù)”);); else prin

39、tf(“ else printf(“不是素?cái)?shù)不是素?cái)?shù)”);); 語言程序設(shè)計(jì)36第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)解法解法2 2:利用判斷循環(huán)是如何退出的方法,編寫:利用判斷循環(huán)是如何退出的方法,編寫程序如下:程序如下:#include#includemain()main() int x,i; int x,i; scanf(“%d”,&x); scanf(“%d”,&x); for(i=2;ix;i+) for(i=2;ix;i+) if(x%i=0) break; if(x%i=0) break; if(i=x) printf(“ if(i=x) printf(

40、“是素?cái)?shù)是素?cái)?shù)”); ); else printf(“ else printf(“不是素?cái)?shù)不是素?cái)?shù)”);); 語言程序設(shè)計(jì)37第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.4 break5.4 break語句和語句和continuecontinue語句在循環(huán)語句在循環(huán)結(jié)構(gòu)中的應(yīng)用結(jié)構(gòu)中的應(yīng)用5.4.1 break5.4.1 break語句語句用用breakbreak語句可以使流程跳出語句可以使流程跳出switchswitch語句體,也語句體,也可用可用breakbreak語句在循環(huán)結(jié)構(gòu)中終止本層循環(huán)體,語句在循環(huán)結(jié)構(gòu)中終止本層循環(huán)體,從而提前結(jié)束本層循環(huán)。從而提前結(jié)束本層循環(huán)?!纠?.

41、95.9】計(jì)算計(jì)算s=1+2+3+ +is=1+2+3+ +i,直到累加到,直到累加到s s大于大于50005000為止,并輸出為止,并輸出s s和和i i的值。的值。語言程序設(shè)計(jì)38第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int i,s; int i,s; s=0; s=0; for(i=1; ;i+) for(i=1; ;i+) s=s+i; s=s+i; if if(s5000s5000)break;break; printf(“s=%d,i=%dn”,s,i); printf(“s=%d,i=%dn”,s,i); 結(jié)果:

42、結(jié)果:s=5050,i=100 s=5050,i=100 語言程序設(shè)計(jì)39第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)breakbreak語句的使用說明:語句的使用說明:(1 1)只能在循環(huán)體內(nèi)和)只能在循環(huán)體內(nèi)和switchswitch語句體內(nèi)使用語句體內(nèi)使用breakbreak語句。語句。(2 2)當(dāng))當(dāng)breakbreak出現(xiàn)在循環(huán)體中的出現(xiàn)在循環(huán)體中的switchswitch語句語句體內(nèi)時(shí),其作用只是跳出該體內(nèi)時(shí),其作用只是跳出該switchswitch語句體,并語句體,并不能終止循環(huán)體的執(zhí)行。若想強(qiáng)行終止循環(huán)體不能終止循環(huán)體的執(zhí)行。若想強(qiáng)行終止循環(huán)體的執(zhí)行,可以在循環(huán)體中,但并不

43、在的執(zhí)行,可以在循環(huán)體中,但并不在switchswitch語語句中設(shè)置句中設(shè)置breakbreak語句,當(dāng)滿足限定條件時(shí)則跳出語句,當(dāng)滿足限定條件時(shí)則跳出本層循環(huán)體。本層循環(huán)體。語言程序設(shè)計(jì)40第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.4.2 continue5.4.2 continue語句語句 continuecontinue語句的作用是跳過本次循環(huán)體中余下尚未語句的作用是跳過本次循環(huán)體中余下尚未執(zhí)行的語句,立刻進(jìn)行下一次的循環(huán)條件判定,可以執(zhí)行的語句,立刻進(jìn)行下一次的循環(huán)條件判定,可以理解為僅結(jié)束本次循環(huán)。注意:執(zhí)行理解為僅結(jié)束本次循環(huán)。注意:執(zhí)行continuecontinue

44、語句并語句并沒有使整個(gè)循環(huán)終止。沒有使整個(gè)循環(huán)終止。在在whilewhile和和do-whiledo-while循環(huán)中,循環(huán)中,continuecontinue語句使得流程語句使得流程直接跳到循環(huán)控制條件的測試部分,然后決定循環(huán)是直接跳到循環(huán)控制條件的測試部分,然后決定循環(huán)是否繼續(xù)進(jìn)行。在否繼續(xù)進(jìn)行。在forfor循環(huán)中,遇到循環(huán)中,遇到continuecontinue后,跳過后,跳過循環(huán)體中余下的語句,而去對循環(huán)體中余下的語句,而去對forfor語句中的語句中的“表達(dá)式表達(dá)式3”3”求值,然后進(jìn)行求值,然后進(jìn)行“表達(dá)式表達(dá)式2”2”的條件測試,最后根的條件測試,最后根據(jù)據(jù)“表達(dá)式表達(dá)式2”2

45、”的值來決定的值來決定forfor循環(huán)是否執(zhí)行。循環(huán)是否執(zhí)行。語言程序設(shè)計(jì)41第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.105.10】把把100100200200之間的不能被之間的不能被3 3整除的數(shù)輸出。整除的數(shù)輸出。#include#includemain()main() int n; int n; for(n=100;n=200;n+) for(n=100;n=200;n+) if(n%3= =0) if(n%3= =0) continue; continue; printf(“%d ”,n); printf(“%d ”,n); printf(“n”); printf(“

46、n”); 語言程序設(shè)計(jì)42第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.5 5.5 循環(huán)的嵌套循環(huán)的嵌套在一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱在一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。前面介紹的三種類型的循環(huán)都可以為循環(huán)的嵌套。前面介紹的三種類型的循環(huán)都可以互相嵌套,循環(huán)的嵌套可以多層,但每一層循環(huán)在互相嵌套,循環(huán)的嵌套可以多層,但每一層循環(huán)在邏輯上必須是完整的。邏輯上必須是完整的。在編寫程序時(shí),為了增強(qiáng)程序的可讀性,循環(huán)嵌在編寫程序時(shí),為了增強(qiáng)程序的可讀性,循環(huán)嵌套的書寫要采用縮進(jìn)形式,像以下例題程序所示,套的書寫要采用縮進(jìn)形式,像以下例題程序所示,內(nèi)循環(huán)中的語句

47、應(yīng)該比外循環(huán)中的語句有規(guī)律地向內(nèi)循環(huán)中的語句應(yīng)該比外循環(huán)中的語句有規(guī)律地向右縮進(jìn)右縮進(jìn)24列,這樣的程序?qū)哟畏置?,易于閱讀。列,這樣的程序?qū)哟畏置鳎子陂喿x。語言程序設(shè)計(jì)43第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.115.11】輸出輸出n nn n個(gè)字符個(gè)字符“* *”。分析:分析:(1 1)n n行行“* *”的輸出,可用下列循環(huán)控制。的輸出,可用下列循環(huán)控制。 for(i=1;i=n;i+)for(i=1;i=n;i+)(2 2)每行)每行n n個(gè)個(gè)“* *”的輸出,可用下列循環(huán)語句實(shí)現(xiàn):的輸出,可用下列循環(huán)語句實(shí)現(xiàn): for(j=1;j=n;j+)for(j=1;j=n

48、;j+) putchar( putchar(* *);); putchar(n); putchar(n);所以輸出所以輸出n nn n行行“* *”可用雙重循環(huán)語句可用雙重循環(huán)語句實(shí)現(xiàn)實(shí)現(xiàn), ,程序如下:程序如下:語言程序設(shè)計(jì)44第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int i,j; int i,j; for(i=1;i=n;i+) for(i=1;i=n;i+) for(j=1;j=n;j+) / for(j=1;j=n;j+) /* * 輸出一行輸出一行* * * */ / putchar( putchar(* *); )

49、; putchar(n); / putchar(n); /* * 換行換行 * */ / 語言程序設(shè)計(jì)45第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.125.12】編寫程序輸出如下圖形。編寫程序輸出如下圖形。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *分析:分析:(1 1)用循環(huán)控制變量)用循環(huán)控制變量i i(1i51i5)控制輸出行)控制輸出行 for(i=1;i=5;i+)for(i=1;i=5;i+)語言程序設(shè)計(jì)46第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(2 2)每行上的)每行上的“* *

50、”個(gè)數(shù)是隨著行控制變量個(gè)數(shù)是隨著行控制變量i i的的值變化而變化的。值變化而變化的。 i=1i=1時(shí),執(zhí)行時(shí),執(zhí)行1 1次次putchar(putchar(* *);); i=2 i=2時(shí),執(zhí)行時(shí),執(zhí)行2 2次次putchar(putchar(* *);); i=5 i=5時(shí),執(zhí)行時(shí),執(zhí)行5 5次次putchar(putchar(* *););輸出第輸出第i i行時(shí)執(zhí)行行時(shí)執(zhí)行i i次次“putchar(putchar(* *);”);”,所,所以內(nèi)循環(huán)體語句應(yīng)如下:以內(nèi)循環(huán)體語句應(yīng)如下: for(j=1;j=i;j+)for(j=1;j=i;j+) putchar( putchar(* *)

51、; /); /* * 輸出一行輸出一行* * * */ /語言程序設(shè)計(jì)47第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int i,j; int i,j; for(i=1;i=5;i+) for(i=1;i=5;i+) for(j=1;j=i;j+) / for(j=1;j=i;j+) /* * 輸出第輸出第i i行行* * * */ / putchar( putchar(* *); ); putchar(n); putchar(n); 語言程序設(shè)計(jì)48第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.135.13】編寫程序,

52、找出編寫程序,找出2100以內(nèi)的所有素以內(nèi)的所有素?cái)?shù)(質(zhì)數(shù))。數(shù)(質(zhì)數(shù))。 #include#includemain()main() int x,i,j,f; / int x,i,j,f; /* * f f是標(biāo)志變量是標(biāo)志變量* */ / for(i=2;i=100;i+) for(i=2;i=100;i+) f=1; f=1; for(j=2;ji;j+) for(j=2;ji;j+) if(i%j=0) f=0;break; if(i%j=0) f=0;break; if(f=1) printf(“%d, ”i); if(f=1) printf(“%d, ”i); 語言程序設(shè)計(jì)49第第5

53、5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例例5.145.14】編寫程序,找出大于正整數(shù)編寫程序,找出大于正整數(shù)m m且靠近且靠近m m的的k k個(gè)素?cái)?shù),個(gè)素?cái)?shù),m m和和k k均從鍵盤輸入。均從鍵盤輸入。分析:本題中要求找出大于分析:本題中要求找出大于m m且靠近且靠近m m的的k k個(gè)素個(gè)素?cái)?shù),因此需要從數(shù),因此需要從m+1m+1開始循環(huán)查找素?cái)?shù),如果開始循環(huán)查找素?cái)?shù),如果是素?cái)?shù)則將其輸出,同時(shí)計(jì)數(shù)器是素?cái)?shù)則將其輸出,同時(shí)計(jì)數(shù)器n n加加1 1,直到,直到n=kn=k為止。而驗(yàn)證一個(gè)數(shù)為止。而驗(yàn)證一個(gè)數(shù)i i是不是素?cái)?shù),則需要是不是素?cái)?shù),則需要利用循環(huán)從利用循環(huán)從2 2到到i-1i-1逐個(gè)

54、去取余,都除不盡則是逐個(gè)去取余,都除不盡則是素?cái)?shù)。素?cái)?shù)。 語言程序設(shè)計(jì)50第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain()main() int i,j,m,k,n=0; int i,j,m,k,n=0; printf(“please enter m and k:”); printf(“please enter m and k:”); scanf(“%d%d”,&m,&k); scanf(“%d%d”,&m,&k); for(i=m+1;nk;i+) for(i=m+1;nk;i+) for(j=2;ji;j+) for

55、(j=2;j=i) printf(“%d ”,i); n+; if(j=i) printf(“%d ”,i); n+; 輸入:輸入:20 5 20 5 (回車)(回車)輸出:輸出:23 29 31 37 4123 29 31 37 41語言程序設(shè)計(jì)51第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)以上以上4 4個(gè)例子都是兩重個(gè)例子都是兩重forfor循環(huán)嵌套。另外,循環(huán)嵌套。另外,3 3種種循環(huán)(循環(huán)(whilewhile循環(huán)、循環(huán)、dowhiledowhile循環(huán)和循環(huán)和forfor循環(huán))循環(huán))也可以互相嵌套。例如,下面幾種都是合法的形也可以互相嵌套。例如,下面幾種都是合法的形式式: :

56、注意:循環(huán)嵌套的程序中,要求內(nèi)循環(huán)必須被包含在注意:循環(huán)嵌套的程序中,要求內(nèi)循環(huán)必須被包含在外循環(huán)的循環(huán)體中,不允許出現(xiàn)內(nèi)外層循環(huán)體交叉的外循環(huán)的循環(huán)體中,不允許出現(xiàn)內(nèi)外層循環(huán)體交叉的情況。情況。 語言程序設(shè)計(jì)52第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.6 5.6 三種循環(huán)的比較三種循環(huán)的比較 三種循環(huán)都可以用來處理同一個(gè)問題,一般可以三種循環(huán)都可以用來處理同一個(gè)問題,一般可以互相代替。例如,用三種循環(huán)方法都實(shí)現(xiàn)了求互相代替。例如,用三種循環(huán)方法都實(shí)現(xiàn)了求“s=1+2+3+ +100s=1+2+3+ +100(即從(即從1 1到到100100的和)的和)”。forfor循環(huán)語句和循

57、環(huán)語句和whilewhile循環(huán)語句都是先檢查循環(huán)條循環(huán)語句都是先檢查循環(huán)條件是否成立,后執(zhí)行循環(huán)體,因此循環(huán)體可能一件是否成立,后執(zhí)行循環(huán)體,因此循環(huán)體可能一次也不執(zhí)行;而次也不執(zhí)行;而do-whiledo-while循環(huán)語句是先執(zhí)行循環(huán)循環(huán)語句是先執(zhí)行循環(huán)體,后檢查循環(huán)條件是否成立,因此循環(huán)體至少體,后檢查循環(huán)條件是否成立,因此循環(huán)體至少被執(zhí)行一次。被執(zhí)行一次。語言程序設(shè)計(jì)53第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)對于對于whilewhile和和do-whiledo-while循環(huán)語句,對循環(huán)語句,對“表達(dá)式表達(dá)式”中循環(huán)控制變量賦初始值是在執(zhí)行這兩個(gè)循環(huán)語中循環(huán)控制變量賦初始值

58、是在執(zhí)行這兩個(gè)循環(huán)語句之前完成的;而對于句之前完成的;而對于forfor循環(huán)語句,對循環(huán)語句,對“表達(dá)表達(dá)式式2”2”中的循環(huán)控制變量賦初始值既可在中的循環(huán)控制變量賦初始值既可在“表達(dá)表達(dá)式式1”1”中完成,又可在執(zhí)行中完成,又可在執(zhí)行forfor循環(huán)語句之前完成。循環(huán)語句之前完成。 為了防止出現(xiàn)為了防止出現(xiàn)“死循環(huán)死循環(huán)”,whilewhile和和do-whiledo-while循循環(huán)語句的循環(huán)體中一般應(yīng)包括改變環(huán)語句的循環(huán)體中一般應(yīng)包括改變“表達(dá)式表達(dá)式”中中循環(huán)控制變量值的語句,以便使循環(huán)操作趨于結(jié)循環(huán)控制變量值的語句,以便使循環(huán)操作趨于結(jié)束;而束;而forfor循環(huán)語句通常是在循環(huán)語句

59、通常是在“表達(dá)式表達(dá)式3”3”中包含中包含改變循環(huán)控制變量的值,進(jìn)而使循環(huán)趨于結(jié)束。改變循環(huán)控制變量的值,進(jìn)而使循環(huán)趨于結(jié)束。 語言程序設(shè)計(jì)54第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.7 5.7 程序舉例程序舉例【例例5.155.15】計(jì)算并輸出計(jì)算并輸出100100以內(nèi)(包括以內(nèi)(包括100100),能),能被被3 3或或7 7整除的所有自然數(shù)的倒數(shù)之和。整除的所有自然數(shù)的倒數(shù)之和。分析:本例中要找到小于等于分析:本例中要找到小于等于100100的每一個(gè)整的每一個(gè)整數(shù),即用變量數(shù),即用變量i i從從1 1到到100100循環(huán),判斷條件能否循環(huán),判斷條件能否被被3 3或者被或者被7

60、 7整除即整除即i%3=0|i%7=0i%3=0|i%7=0,最后求得,最后求得符合要求的倒數(shù)的累加和符合要求的倒數(shù)的累加和. . 語言程序設(shè)計(jì)55第第5 5章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include#includemain( )main( ) int i; int i; double sum=0.0; double sum=0.0; for(i=1;i=100;i+) for(i=1;i=100;i+) if(i%3=0 | i%7=0) if(i%3=0 | i%7=0) sum+=1.0/i; sum+=1.0/i; printf(“sum=%f”,sum); printf(“sum=%f”,sum); 運(yùn)行結(jié)果:運(yùn)行結(jié)果:sum=

溫馨提示

  • 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

提交評論