結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)課件_第1頁
結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)課件_第2頁
結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)課件_第3頁
結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)課件_第4頁
結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)課件_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、結(jié)構(gòu)化程序設(shè)計基礎(chǔ)和C語言的控制結(jié)構(gòu)結(jié)構(gòu)化程序的優(yōu)點:結(jié)構(gòu)化程序的優(yōu)點: 具有結(jié)構(gòu)清晰、可讀性好、易于修改。具有結(jié)構(gòu)清晰、可讀性好、易于修改。 對于分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)都涉及到兩個方面對于分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)都涉及到兩個方面的基本問題:的基本問題:1 1)如何表示控制結(jié)構(gòu)中的條件;)如何表示控制結(jié)構(gòu)中的條件;2 2)對于控制結(jié)構(gòu)中的條件如何判斷成立與否;)對于控制結(jié)構(gòu)中的條件如何判斷成立與否; 程序設(shè)計語言中,用程序設(shè)計語言中,用關(guān)系運算關(guān)系運算和和邏輯運算邏輯運算來實現(xiàn)對程序控制結(jié)構(gòu)中條件的描述和處理。來實現(xiàn)對程序控制結(jié)構(gòu)中條件的描述和處理。 高優(yōu)先級高優(yōu)先級 例例2-1 2-1 關(guān)系運算示例。

2、關(guān)系運算示例。在在C C程序設(shè)計語言中沒有邏輯數(shù)據(jù)類型,所以在進(jìn)行程序設(shè)計語言中沒有邏輯數(shù)據(jù)類型,所以在進(jìn)行關(guān)系運算時關(guān)系運算時: :用數(shù)值用數(shù)值“1”1”表示邏輯概念上的表示邏輯概念上的“真真”,用數(shù)值用數(shù)值“0”0”表示邏輯概念上表示邏輯概念上的的“假假”; ;例如:例如:5=55=5/ /* *結(jié)果為結(jié)果為1 1* */ / 10=10 10=10/ /* *結(jié)果為結(jié)果為1 1* */ / 5 5!=5=5/ /* *結(jié)果為結(jié)果為0 0* */ / 53 53/ /* *結(jié)果為結(jié)果為1 1* */ / 35 35/ /* *結(jié)果為結(jié)果為0 0* */ / 該程序運行執(zhí)行語句該程序運行執(zhí)行

3、語句c=5-1=a+2=a+2=a+2=a+2=和和=結(jié)合,即先計算表達(dá)式結(jié)合,即先計算表達(dá)式5-5-1=a+21=a+2得到結(jié)果得到結(jié)果0 0,然后計算表達(dá)式,然后計算表達(dá)式0=b-210c 且 a+cb 且 b+ca)。計算三角形的面積的公式為: 上面程序中,上面程序中,ifif結(jié)構(gòu)的語句部分是復(fù)合語句:結(jié)構(gòu)的語句部分是復(fù)合語句: s=(a+b+c)/2; s=(a+b+c)/2; area=sqrt(s area=sqrt(s* *(s-a)(s-a)* *(s-b)(s-b)* *(s-c);(s-c); printf(%fn,area); printf(%fn,area); 在在C

4、C程序的設(shè)計過程中,需要使用復(fù)合語句的地方必須使用復(fù)合語程序的設(shè)計過程中,需要使用復(fù)合語句的地方必須使用復(fù)合語句的形式,否則程序在語法上可能檢查不出任何錯誤,但程序運行的結(jié)句的形式,否則程序在語法上可能檢查不出任何錯誤,但程序運行的結(jié)果與程序設(shè)計者的期望會相去甚遠(yuǎn)。例如,如果將例果與程序設(shè)計者的期望會相去甚遠(yuǎn)。例如,如果將例2.52.5相關(guān)程序段描相關(guān)程序段描述為如下形式:述為如下形式:if(a+bc & a+cb & b+ca)/if(a+bc & a+cb & b+ca)/* *滿足三角形條件時求其面積滿足三角形條件時求其面積* */ /s=(a+b+c)/

5、2;s=(a+b+c)/2;area=sqrt(sarea=sqrt(s* *(s-a)(s-a)* *(s-b)(s-b)* *(s-c);(s-c);printf(%fn,area);printf(%fn,area); n雙分支結(jié)構(gòu)的形式:雙分支結(jié)構(gòu)的形式:if(expression) sentence1;else sentence2;2.2.3 if_else2.2.3 if_else語句與程序的雙分支結(jié)構(gòu)語句與程序的雙分支結(jié)構(gòu)注意注意: 作為條件的表達(dá)式可以是任何可以求出作為條件的表達(dá)式可以是任何可以求出0 0值或非值或非0 0值的表達(dá)式。值的表達(dá)式。 if if結(jié)構(gòu)或結(jié)構(gòu)或elsee

6、lse結(jié)構(gòu)后語句部分都可以是結(jié)構(gòu)后語句部分都可以是C C語言的任何合法語句。語言的任何合法語句。exps1s2yn例例2-6 2-6 求任意輸入的求任意輸入的3 3個整個整數(shù)中的最大數(shù)。數(shù)中的最大數(shù)。 2.2.4 2.2.4 條件運算符與條件表達(dá)式條件運算符與條件表達(dá)式 C C語言中,若語言中,若ifelseifelse語句結(jié)構(gòu)中的語句部分滿足語句結(jié)構(gòu)中的語句部分滿足下列兩個條件:下列兩個條件:無論表示條件的表達(dá)式取何值(真或假),語句部分無論表示條件的表達(dá)式取何值(真或假),語句部分都是一句簡單的賦值語句。都是一句簡單的賦值語句。兩條賦值語句都是為同一個變量賦值。兩條賦值語句都是為同一個變量

7、賦值。 則,可以使用則,可以使用C C語言中提供的條件運算符代替這種語言中提供的條件運算符代替這種ifelseifelse結(jié)構(gòu)。結(jié)構(gòu)。 條件運算符是條件運算符是C C語言中惟一的一個三元運算符,使用條語言中惟一的一個三元運算符,使用條件運算符構(gòu)成的表達(dá)式稱為條件表達(dá)式。件運算符構(gòu)成的表達(dá)式稱為條件表達(dá)式。exp1 ? exp2 : exp3exp1 ? exp2 : exp31) 條件表達(dá)式一般形式如下:條件表達(dá)式一般形式如下:2) 條件表達(dá)式的執(zhí)行過程條件表達(dá)式的執(zhí)行過程 : 首先計算表達(dá)式首先計算表達(dá)式exp1exp1的值,若的值,若exp1exp1的值為非的值為非0 0(真),則(真),

8、則計算出表達(dá)式計算出表達(dá)式exp2exp2的值作為整個條件表達(dá)式的值;若的值作為整個條件表達(dá)式的值;若exp1exp1的的值為值為0 0(假),則計算出表達(dá)式(假),則計算出表達(dá)式exp3exp3的值作為整個條件表達(dá)式的值作為整個條件表達(dá)式的值。的值。 條件運算符的優(yōu)先級別高于賦值運算符,但條件運算符的優(yōu)先級別高于賦值運算符,但低于關(guān)系運算符和算術(shù)運算符。低于關(guān)系運算符和算術(shù)運算符。 條件運算符的結(jié)合方向為右結(jié)合性,例如有條件運算符的結(jié)合方向為右結(jié)合性,例如有如下形式的條件表達(dá)式:如下形式的條件表達(dá)式: ab?a:cd?c:dab?a:cd?c:d可以看出,在數(shù)據(jù)對象可以看出,在數(shù)據(jù)對象cdc

9、d(關(guān)系表達(dá)式)的兩邊具(關(guān)系表達(dá)式)的兩邊具有同級的條件運算符(有同級的條件運算符(?:?:),由于條件運算符的結(jié)),由于條件運算符的結(jié)合性為右結(jié)合,數(shù)據(jù)對象合性為右結(jié)合,數(shù)據(jù)對象cdcd先與其右邊的的條件運先與其右邊的的條件運算符結(jié)合,即先計算算符結(jié)合,即先計算cd?c:dcd?c:d,所以整個條件表達(dá)式,所以整個條件表達(dá)式的計算過程與表達(dá)式的計算過程與表達(dá)式ab?a:(cd?c:d)ab?a:(cd?c:d)的計算過程相的計算過程相同。同。 例例2-7 2-7 從鍵盤上輸入一個英文字母,若其是大寫字母則轉(zhuǎn)從鍵盤上輸入一個英文字母,若其是大寫字母則轉(zhuǎn)換為小寫字母輸出;否則轉(zhuǎn)換為大寫字母輸出

10、。換為小寫字母輸出;否則轉(zhuǎn)換為大寫字母輸出。 在上面程序中,表達(dá)式在上面程序中,表達(dá)式ch=A&ch=A&ch=A&ch=A&ch=A&ch=Z?ch+32:ch-32; 2.2.5 if2.2.5 if語句的嵌套與程序的多分支結(jié)構(gòu)語句的嵌套與程序的多分支結(jié)構(gòu) if if結(jié)構(gòu)或者結(jié)構(gòu)或者elseelse結(jié)構(gòu)的語句部分又是一個另外一個結(jié)構(gòu)的語句部分又是一個另外一個ifif結(jié)構(gòu),稱為結(jié)構(gòu),稱為ifif語句的嵌套。語句的嵌套。 在在C C程序設(shè)計中,程序設(shè)計中,ifif語句的嵌套結(jié)構(gòu)用于解決在若干語句的嵌套結(jié)構(gòu)用于解決在若干種相關(guān)情況中選擇一種進(jìn)行處理的問題。

11、種相關(guān)情況中選擇一種進(jìn)行處理的問題。 例如,在一個二分例如,在一個二分支支ifif語句的兩個語語句的兩個語句部分分別嵌入了句部分分別嵌入了一個二分支一個二分支ifif語句語句的形式為:的形式為: if(exp1) if(exp2)sentence1; elsesentence2;else if(exp3)sentence3; elsesentence4;例例2-8 2-8 公司按照公司按照銷售人員收到的銷售人員收到的訂單金額數(shù)量評訂單金額數(shù)量評定等級,訂單總定等級,訂單總金額超過一萬的金額超過一萬的為為A A等,等,5000999950009999為為B B等,等,25004999250049

12、99為為C C等,等,25002500以下為以下為D D等。等。編制程序?qū)斎刖幹瞥绦驅(qū)斎氲挠唵慰偨痤~數(shù)的訂單總金額數(shù)判定等級。判定等級。 當(dāng)被嵌套的當(dāng)被嵌套的ifif結(jié)構(gòu)均被嵌套在結(jié)構(gòu)均被嵌套在elseelse的語句部分的語句部分時,形成了一種稱為時,形成了一種稱為else_ifelse_if的多分支選擇結(jié)構(gòu),這的多分支選擇結(jié)構(gòu),這是是if_elseif_else多重嵌套的變形。其一般形式為:多重嵌套的變形。其一般形式為: if(exp1) sentence1;else if(exp2)sentence2;else if(exp3)sentence3;else if(expN)senten

13、ceN;else sentenceN+1;注意:注意: 在這種特殊的在這種特殊的elseifelseif結(jié)構(gòu)中,表示條件的表達(dá)式結(jié)構(gòu)中,表示條件的表達(dá)式是相互排斥的,執(zhí)行該結(jié)構(gòu)時控制流程從是相互排斥的,執(zhí)行該結(jié)構(gòu)時控制流程從exp1exp1開始判斷,開始判斷,一旦有一個表達(dá)式的值為非一旦有一個表達(dá)式的值為非0 0(真)時,就執(zhí)行與之匹(真)時,就執(zhí)行與之匹配的語句,然后退出整個選擇結(jié)構(gòu);如果所有表示條件配的語句,然后退出整個選擇結(jié)構(gòu);如果所有表示條件的表達(dá)式值均為的表達(dá)式值均為0 0(假),則在執(zhí)行語句(假),則在執(zhí)行語句sentenceN+1sentenceN+1后后退出整個選擇結(jié)構(gòu);如果當(dāng)

14、所有的條件均為假時不需要退出整個選擇結(jié)構(gòu);如果當(dāng)所有的條件均為假時不需要進(jìn)行任何操作,則最后的一個進(jìn)行任何操作,則最后的一個elseelse和語句和語句sentenceN+1sentenceN+1可以缺省。嵌套的可以缺省。嵌套的elseifelseif結(jié)構(gòu)執(zhí)行流程如圖結(jié)構(gòu)執(zhí)行流程如圖2.62.6所示。所示。 例例2-9 2-9 編寫程序求如下所示多分支方程的解。編寫程序求如下所示多分支方程的解。 在程序中,變量在程序中,變量x x的取值區(qū)間為:(的取值區(qū)間為:(DBL_MINDBL_MIN,1 1)、)、11,1010)、)、1010,DBL_MAXDBL_MAX),其中),其中DBL_MIN

15、DBL_MIN和和DBL_MAXDBL_MAX分別表示雙精度實型數(shù)據(jù)所能取得的最小值分別表示雙精度實型數(shù)據(jù)所能取得的最小值和最大值。和最大值。 在包含了在包含了ifif語句嵌套結(jié)構(gòu)的程序中,語句嵌套結(jié)構(gòu)的程序中,elseelse子句與子句與ifif的的配對原則是非常重要的,按不同的方法配對則得到不同的配對原則是非常重要的,按不同的方法配對則得到不同的程序結(jié)構(gòu)。程序結(jié)構(gòu)。C C語言中規(guī)定:程序中的語言中規(guī)定:程序中的elseelse子句與在它前面距子句與在它前面距它最近的且尚未匹配的它最近的且尚未匹配的ifif配對。無論將程序書寫為何種形配對。無論將程序書寫為何種形式,系統(tǒng)總是按照上面的規(guī)定來解

16、釋程序的結(jié)構(gòu)。式,系統(tǒng)總是按照上面的規(guī)定來解釋程序的結(jié)構(gòu)。 請看如下兩個用于比較的程序段:請看如下兩個用于比較的程序段: 例例2.102.10和例和例2.112.11描述了兩種情況下程序的執(zhí)行情況。其中:描述了兩種情況下程序的執(zhí)行情況。其中:例例2.102.10程序執(zhí)行的結(jié)果為:程序執(zhí)行的結(jié)果為:a=-1,b=10a=-1,b=10,例例2.112.11程序執(zhí)行的結(jié)果為:程序執(zhí)行的結(jié)果為:a=-1,b=11a=-1,b=11。例例2-10 else2-10 else與與ifif配對原則示例。配對原則示例。例例2-11 else2-11 else與與ifif配對原則示例(使用復(fù)合語句改變程序結(jié)構(gòu)

17、)配對原則示例(使用復(fù)合語句改變程序結(jié)構(gòu)) 2.2.6 switch2.2.6 switch語句與程序的多分支結(jié)構(gòu)語句與程序的多分支結(jié)構(gòu) C C語言中可以使用語言中可以使用switchswitch語句結(jié)構(gòu)實現(xiàn)對多分支選擇結(jié)語句結(jié)構(gòu)實現(xiàn)對多分支選擇結(jié)構(gòu)情況的直接處理。構(gòu)情況的直接處理。1 1)switchswitch語句結(jié)構(gòu)的一般形式如下:語句結(jié)構(gòu)的一般形式如下: switch(expession)case constand1:sentences1; break;case constand2:sentences2;break;case constandN:sentencesN;break;def

18、ault:sentencesN+12 2)執(zhí)行過程:)執(zhí)行過程:首先,首先,對作為條件的表達(dá)式(對作為條件的表達(dá)式(expressionexpression)求值;)求值; 然后,然后,在語句結(jié)構(gòu)的花括號內(nèi)在語句結(jié)構(gòu)的花括號內(nèi)從上至下從上至下查找所有的查找所有的casecase分支,分支,當(dāng)找到與條件表達(dá)式值相匹配的當(dāng)找到與條件表達(dá)式值相匹配的casecase時,將其作為控制流程時,將其作為控制流程執(zhí)行的入口,并執(zhí)行的入口,并從此處開始執(zhí)行相應(yīng)的語句段,直到遇到從此處開始執(zhí)行相應(yīng)的語句段,直到遇到breakbreak語句或者是語句或者是switchswitch語句結(jié)構(gòu)的右花括號語句結(jié)構(gòu)的右花括

19、號“”為止。為止。 switch(number) case 1: statement1; case 2: statement2; case 3: statement3; default: statement4;statement5;?2作為條件的表達(dá)式作為條件的表達(dá)式expressionexpression的值必須是有序型的,即只的值必須是有序型的,即只能是能是整型、字符型、枚舉型整型、字符型、枚舉型三者之一。三者之一。語句段語句段sentencessentences可以是單條語句,也可以是多條語句,但可以是單條語句,也可以是多條語句,但這多條語句并不是復(fù)合語句,不需要使用花括號這多條語句并不

20、是復(fù)合語句,不需要使用花括號 。語句段語句段sentencessentences中的語句可以使任意合法的中的語句可以使任意合法的C C語句。語句。結(jié)構(gòu)中的常數(shù)值應(yīng)與表示條件的表達(dá)式值對應(yīng)一致,且各結(jié)構(gòu)中的常數(shù)值應(yīng)與表示條件的表達(dá)式值對應(yīng)一致,且各常數(shù)的值不能相同。常數(shù)的值不能相同。結(jié)構(gòu)中的結(jié)構(gòu)中的breakbreak語句和語句和defaultdefault可選項可選項可根據(jù)需要確定是否可根據(jù)需要確定是否選用。選用。 3 3)使用使用switchswitch語句結(jié)構(gòu)時應(yīng)注意的問題:語句結(jié)構(gòu)時應(yīng)注意的問題:例例2-12 2-12 從鍵盤上輸入一個字符,判斷它是數(shù)字、空格還是其它鍵;若從鍵盤上輸入一

21、個字符,判斷它是數(shù)字、空格還是其它鍵;若是數(shù)字,還要求顯示出是哪一個數(shù)字。是數(shù)字,還要求顯示出是哪一個數(shù)字。 在語句段中包含了在語句段中包含了switchswitch語句,稱為語句,稱為switchswitch語句的嵌套。對于內(nèi)嵌的語句的嵌套。對于內(nèi)嵌的switchswitch結(jié)構(gòu)處理方法與單層結(jié)構(gòu)處理方法與單層switchswitch結(jié)構(gòu)處理方法相同,需要注意的是:當(dāng)結(jié)構(gòu)處理方法相同,需要注意的是:當(dāng)從內(nèi)嵌的從內(nèi)嵌的switchswitch結(jié)構(gòu)中退出(執(zhí)行中遇到了內(nèi)嵌結(jié)構(gòu)中退出(執(zhí)行中遇到了內(nèi)嵌swithcswithc結(jié)構(gòu)中的結(jié)構(gòu)中的breakbreak語語句或執(zhí)行到了內(nèi)嵌句或執(zhí)行到了內(nèi)嵌s

22、witchswitch語句體的右邊花括號)時語句體的右邊花括號)時, ,只是退出內(nèi)嵌的只是退出內(nèi)嵌的switchswitch結(jié)構(gòu),而不是退出整個結(jié)構(gòu),而不是退出整個switchswitch結(jié)構(gòu),例結(jié)構(gòu),例2.132.13程序展示了這種情況程序展示了這種情況。 例例2-13 swithc2-13 swithc結(jié)構(gòu)的嵌套示例。結(jié)構(gòu)的嵌套示例。 多分支結(jié)構(gòu)程序設(shè)計中:多分支結(jié)構(gòu)程序設(shè)計中:ifif語句結(jié)構(gòu)的嵌套可以解決任何條件下的多分支問題;語句結(jié)構(gòu)的嵌套可以解決任何條件下的多分支問題;對于對于switchswitch語句結(jié)構(gòu),則要求條件是在某個范圍內(nèi)的一些語句結(jié)構(gòu),則要求條件是在某個范圍內(nèi)的一些離

23、散的等值點離散的等值點(描述為:與什么相匹配(描述為:與什么相匹配, ,就做什么)就做什么)。 在實際的程序設(shè)計過程中,可以使用在實際的程序設(shè)計過程中,可以使用switchswitch語句結(jié)構(gòu)解語句結(jié)構(gòu)解決的問題,一定也可以用決的問題,一定也可以用ifif語句結(jié)構(gòu)的嵌套來解決;但語句結(jié)構(gòu)的嵌套來解決;但用用ifif語句結(jié)構(gòu)的嵌套可以解決得問題,使用語句結(jié)構(gòu)的嵌套可以解決得問題,使用switchswitch語句語句結(jié)構(gòu)就不一定能夠解決。結(jié)構(gòu)就不一定能夠解決。 2.3 2.3 循環(huán)程序結(jié)構(gòu)循環(huán)程序結(jié)構(gòu) 在實際問題中經(jīng)常會遇到許多在實際問題中經(jīng)常會遇到許多具有規(guī)律性的重復(fù)計算處具有規(guī)律性的重復(fù)計算處

24、理理問題,在處理此類問題的程序中就需要將某些語句或語句問題,在處理此類問題的程序中就需要將某些語句或語句組重復(fù)執(zhí)行多次。程序設(shè)計中,一組被重復(fù)執(zhí)行的語句稱之組重復(fù)執(zhí)行多次。程序設(shè)計中,一組被重復(fù)執(zhí)行的語句稱之為為循環(huán)體循環(huán)體,每一次執(zhí)行完循環(huán)體后都必須根據(jù)某種條件的判,每一次執(zhí)行完循環(huán)體后都必須根據(jù)某種條件的判斷決定是繼續(xù)循環(huán),還是停止循環(huán);決定所依據(jù)的條件稱之?dāng)鄾Q定是繼續(xù)循環(huán),還是停止循環(huán);決定所依據(jù)的條件稱之為為循環(huán)條件循環(huán)條件。這種由重復(fù)執(zhí)行的語句或語句組,以及循環(huán)條。這種由重復(fù)執(zhí)行的語句或語句組,以及循環(huán)條件的判斷所構(gòu)成的程序結(jié)構(gòu)就稱為件的判斷所構(gòu)成的程序結(jié)構(gòu)就稱為循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)。

25、循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)之一,是構(gòu)循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計的三種基本結(jié)構(gòu)之一,是構(gòu)成各種復(fù)雜程序的基本構(gòu)造單元。成各種復(fù)雜程序的基本構(gòu)造單元。 在在C C語言中提供了三種用以實現(xiàn)程序循環(huán)結(jié)構(gòu)的語句,語言中提供了三種用以實現(xiàn)程序循環(huán)結(jié)構(gòu)的語句,它們是:它們是:whilewhile語句、語句、do_whiledo_while語句和語句和forfor語句語句。 2.3.1 while2.3.1 while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu)1) while1) while型循環(huán)控制結(jié)構(gòu)的一般形式為:型循環(huán)控制結(jié)構(gòu)的一般形式為: while(exp)Loop-Body2) while2) while型循

26、環(huán)結(jié)構(gòu)的執(zhí)行過程型循環(huán)結(jié)構(gòu)的執(zhí)行過程: : 首先計算作為判斷條件的表達(dá)式首先計算作為判斷條件的表達(dá)式expexp的值;對表達(dá)式的值;對表達(dá)式expexp的值進(jìn)行判的值進(jìn)行判斷,若條件表達(dá)式的值為非斷,若條件表達(dá)式的值為非0 0(真),則執(zhí)行一次循環(huán)體(真),則執(zhí)行一次循環(huán)體Loop-BodyLoop-Body;然;然后再一次計算條件表達(dá)式后再一次計算條件表達(dá)式expexp的值,若計算結(jié)果仍為非的值,若計算結(jié)果仍為非0 0(真),再一次(真),再一次執(zhí)行循環(huán)體。重復(fù)上述過程,直到某次計算出的條件表達(dá)式值為執(zhí)行循環(huán)體。重復(fù)上述過程,直到某次計算出的條件表達(dá)式值為0 0(假)(假)時,則退出循環(huán)結(jié)構(gòu)

27、;控制流程轉(zhuǎn)到該循環(huán)結(jié)構(gòu)之后的語句。時,則退出循環(huán)結(jié)構(gòu);控制流程轉(zhuǎn)到該循環(huán)結(jié)構(gòu)之后的語句。while循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖2-4所示。所示。 3) 3) 使用使用whilewhile循環(huán)結(jié)構(gòu)時需要注意以下幾點:循環(huán)結(jié)構(gòu)時需要注意以下幾點: 由于整個結(jié)構(gòu)的執(zhí)行過程是先判斷、后執(zhí)行,因而循由于整個結(jié)構(gòu)的執(zhí)行過程是先判斷、后執(zhí)行,因而循環(huán)體有可能一次都不執(zhí)行。環(huán)體有可能一次都不執(zhí)行。 在循環(huán)結(jié)構(gòu)的控制部分中,如果表示條件的表達(dá)式是在循環(huán)結(jié)構(gòu)的控制部分中,如果表示條件的表達(dá)式是一個非一個非0 0值常量表達(dá)式,則構(gòu)成了死循環(huán)。例如:值常量表達(dá)式,則構(gòu)成了死循環(huán)。例如:whi

28、le(1)while(1)Loop-BodyLoop-Body C C程序設(shè)計中,如果不是有意造成死循環(huán),則在程序設(shè)計中,如果不是有意造成死循環(huán),則在whilewhile循循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)必須有能夠改變循環(huán)控制條件的語句存環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)必須有能夠改變循環(huán)控制條件的語句存在。在。 循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、空語句等任意合法的空語句等任意合法的C C語句。語句。 例例2-14 2-14 使用使用whilewhile循環(huán)控制結(jié)構(gòu)求循環(huán)控制結(jié)構(gòu)求 的值。的值。 在例在例2.142.14程序中,循環(huán)控制變量程序中,循環(huán)控制變量n n從

29、初值從初值1 1開始,在循環(huán)開始,在循環(huán)結(jié)構(gòu)的執(zhí)行過程中通過循環(huán)體中的表達(dá)式語句結(jié)構(gòu)的執(zhí)行過程中通過循環(huán)體中的表達(dá)式語句n+;n+;修改循環(huán)修改循環(huán)控制變量,使其逐漸趨近于控制變量,使其逐漸趨近于100100。循環(huán)結(jié)構(gòu)中的循環(huán)體是由兩。循環(huán)結(jié)構(gòu)中的循環(huán)體是由兩條條C C語句組成的,所以需要使用復(fù)合語句的形式。當(dāng)然也可以語句組成的,所以需要使用復(fù)合語句的形式。當(dāng)然也可以通過語句的組合使得循環(huán)體由一條語句構(gòu)成,這樣就不需通過語句的組合使得循環(huán)體由一條語句構(gòu)成,這樣就不需要使用復(fù)合語句形式,上面程序中的循環(huán)結(jié)構(gòu)可以改寫為如要使用復(fù)合語句形式,上面程序中的循環(huán)結(jié)構(gòu)可以改寫為如下形式:下形式: whil

30、e (n=100)while (n=100)sum+=i+;sum+=i+; 在程序中還需要注意變量在程序中還需要注意變量sumsum的初值問題,由于變量的初值問題,由于變量sumsum用用于存放和數(shù),所以其初值必須從某一固定值開始。一般意義下,于存放和數(shù),所以其初值必須從某一固定值開始。一般意義下,用于存放和數(shù)、計數(shù)等目的的變量初始值均應(yīng)為用于存放和數(shù)、計數(shù)等目的的變量初始值均應(yīng)為0 0值。值。 2.3.2 do_while2.3.2 do_while型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu)1 1) dowhiledowhile型循環(huán)控制結(jié)構(gòu)的一般形式為:型循環(huán)控制結(jié)構(gòu)的一般形式為: do Loop-Body

31、while(exp);2 2) dowhiledowhile型循環(huán)結(jié)構(gòu)的執(zhí)行過程型循環(huán)結(jié)構(gòu)的執(zhí)行過程 :首先執(zhí)行一次循環(huán)體首先執(zhí)行一次循環(huán)體Loop-Body;Loop-Body;然后計算作為判斷條件的表達(dá)式然后計算作為判斷條件的表達(dá)式expexp的的值;對表達(dá)式值;對表達(dá)式expexp的值進(jìn)行判斷,若表達(dá)式的值為非的值進(jìn)行判斷,若表達(dá)式的值為非0 0(真),則執(zhí)行(真),則執(zhí)行一次循環(huán)體;執(zhí)行完循環(huán)體后再一次計算條件表達(dá)式的值,若計算結(jié)一次循環(huán)體;執(zhí)行完循環(huán)體后再一次計算條件表達(dá)式的值,若計算結(jié)果仍為非果仍為非0 0(真),再一次執(zhí)行循環(huán)體。重復(fù)上述過程,直到某次計算(真),再一次執(zhí)行循環(huán)體

32、。重復(fù)上述過程,直到某次計算出的條件表達(dá)式值為出的條件表達(dá)式值為0 0(假)時,則退出循環(huán)結(jié)構(gòu);控制流程轉(zhuǎn)到該循(假)時,則退出循環(huán)結(jié)構(gòu);控制流程轉(zhuǎn)到該循環(huán)結(jié)構(gòu)之后的語句。環(huán)結(jié)構(gòu)之后的語句。Do_while循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖2.10所示。所示。 3) 3) 在使用在使用do_whiledo_while循環(huán)結(jié)構(gòu)時需要注意以下幾點:循環(huán)結(jié)構(gòu)時需要注意以下幾點: 由于整個結(jié)構(gòu)的執(zhí)行過程是先執(zhí)行、后判斷,所以循環(huán)由于整個結(jié)構(gòu)的執(zhí)行過程是先執(zhí)行、后判斷,所以循環(huán)結(jié)構(gòu)中的循環(huán)體至少被執(zhí)行一次。結(jié)構(gòu)中的循環(huán)體至少被執(zhí)行一次。 在循環(huán)結(jié)構(gòu)的控制部分中,如果表示條件的表達(dá)式是一

33、在循環(huán)結(jié)構(gòu)的控制部分中,如果表示條件的表達(dá)式是一個非個非0 0值常量表達(dá)式,則構(gòu)成了死循環(huán)。例如:值常量表達(dá)式,則構(gòu)成了死循環(huán)。例如:dodo Loop-Body Loop-Body while(1); while(1);C C程序設(shè)計中,如果不是有意造成死循環(huán),則在程序設(shè)計中,如果不是有意造成死循環(huán),則在do_whiledo_while循循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)必須有能改變循環(huán)控制條件的語句存在。環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)必須有能改變循環(huán)控制條件的語句存在。 循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、空循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、空語句等任意合法的語句等任意合法的C C語句。語句。 例

34、例2-15 2-15 使用使用do_whiledo_while循環(huán)控制結(jié)構(gòu)求循環(huán)控制結(jié)構(gòu)求 的值。的值。 例例2-16 2-16 編程序?qū)崿F(xiàn)功能:將一個整數(shù)的各位數(shù)字顛倒后輸出。編程序?qū)崿F(xiàn)功能:將一個整數(shù)的各位數(shù)字顛倒后輸出。 2.3.3 for2.3.3 for型循環(huán)結(jié)構(gòu)型循環(huán)結(jié)構(gòu) for for語句構(gòu)成的循環(huán)是語句構(gòu)成的循環(huán)是C C語言中提供的使用最為靈活、語言中提供的使用最為靈活、適應(yīng)范圍最廣的循環(huán)結(jié)構(gòu),它不僅可以用于循環(huán)次數(shù)已確適應(yīng)范圍最廣的循環(huán)結(jié)構(gòu),它不僅可以用于循環(huán)次數(shù)已確定的情況,而且也可以用于循環(huán)次數(shù)不確定但能給出循環(huán)定的情況,而且也可以用于循環(huán)次數(shù)不確定但能給出循環(huán)結(jié)束條件的

35、循環(huán)結(jié)束條件的循環(huán) 。1 1) forfor循環(huán)結(jié)構(gòu)的一般形式為:循環(huán)結(jié)構(gòu)的一般形式為: for(exp1; exp2; exp3) Loop-Body 其中,括號內(nèi)的三個表達(dá)式稱為循環(huán)控制表達(dá)式,其中,括號內(nèi)的三個表達(dá)式稱為循環(huán)控制表達(dá)式,exp1exp1的作用的作用是為循環(huán)控制變量賦初值或者為循環(huán)體中的其他數(shù)據(jù)對象賦初值,是為循環(huán)控制變量賦初值或者為循環(huán)體中的其他數(shù)據(jù)對象賦初值,exp2exp2的作用是作為條件用于控制循環(huán)的執(zhí)行,的作用是作為條件用于控制循環(huán)的執(zhí)行,exp3exp3的主要作用是對的主要作用是對循環(huán)控制變量進(jìn)行修改,三個表達(dá)式之間用分號分隔。循環(huán)控制變量進(jìn)行修改,三個表達(dá)式之

36、間用分號分隔。 2 2) forfor循環(huán)結(jié)構(gòu)的執(zhí)行過程:循環(huán)結(jié)構(gòu)的執(zhí)行過程: 首先計算表達(dá)式首先計算表達(dá)式exp1exp1的值對循環(huán)控制變量進(jìn)行初始的值對循環(huán)控制變量進(jìn)行初始化,如果有需要也同時對循環(huán)體中的其他數(shù)據(jù)對象進(jìn)行化,如果有需要也同時對循環(huán)體中的其他數(shù)據(jù)對象進(jìn)行初始化操作;然后計算作為循環(huán)控制條件使用的表達(dá)式初始化操作;然后計算作為循環(huán)控制條件使用的表達(dá)式exp2exp2的值;根據(jù)的值;根據(jù)exp2exp2計算的結(jié)果決定循環(huán)是否進(jìn)行,當(dāng)計算的結(jié)果決定循環(huán)是否進(jìn)行,當(dāng)exp2exp2的值為真(非的值為真(非0 0)時則執(zhí)行循環(huán)體)時則執(zhí)行循環(huán)體Loop-BodyLoop-Body一次;

37、一次;執(zhí)行完循環(huán)體后,計算表達(dá)式執(zhí)行完循環(huán)體后,計算表達(dá)式exp3exp3的值以修改循環(huán)控制的值以修改循環(huán)控制變量;然后再次計算表達(dá)式變量;然后再次計算表達(dá)式exp2exp2的值以確定是否再次執(zhí)的值以確定是否再次執(zhí)行循環(huán)體;反復(fù)執(zhí)行上述過程直到某一次表達(dá)式行循環(huán)體;反復(fù)執(zhí)行上述過程直到某一次表達(dá)式exp2exp2的的值為值為0 0(假)為止(假)為止 。 forfor循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖循環(huán)控制結(jié)構(gòu)的執(zhí)行過程如圖2.122.12所示。所示。 3 3)使用)使用forfor循環(huán)結(jié)構(gòu)時需要注意以下幾點:循環(huán)結(jié)構(gòu)時需要注意以下幾點: 由于整個結(jié)構(gòu)的執(zhí)行過程是先判斷、后執(zhí)行,因而循環(huán)體有可能一次

38、由于整個結(jié)構(gòu)的執(zhí)行過程是先判斷、后執(zhí)行,因而循環(huán)體有可能一次都不執(zhí)行。都不執(zhí)行。 C C語言的語言的forfor循環(huán)控制結(jié)構(gòu)不僅提供在其控制部分的表達(dá)式循環(huán)控制結(jié)構(gòu)不僅提供在其控制部分的表達(dá)式3 3中修改循環(huán)中修改循環(huán)控制變量的值,而去還允許在控制變量的值,而去還允許在forfor循環(huán)的循環(huán)體中存在能改變循環(huán)控制條循環(huán)的循環(huán)體中存在能改變循環(huán)控制條件的語句,使用時需特別注意。件的語句,使用時需特別注意。 循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、空語句等任意合循環(huán)結(jié)構(gòu)的循環(huán)體可以是一條語句、一個復(fù)合語句、空語句等任意合法的法的C C語句。語句。 根據(jù)程序功能的需要,循環(huán)控制部分的三個表達(dá)式

39、分別都可以逗號表根據(jù)程序功能的需要,循環(huán)控制部分的三個表達(dá)式分別都可以逗號表達(dá)式,這也是逗號表達(dá)式最主要的用法之一。達(dá)式,這也是逗號表達(dá)式最主要的用法之一。 根據(jù)程序功能的需要,循環(huán)控制部分的三個表達(dá)式中可以缺省一個、根據(jù)程序功能的需要,循環(huán)控制部分的三個表達(dá)式中可以缺省一個、兩個、三個,但作為分隔符使用的分號不能缺省。兩個、三個,但作為分隔符使用的分號不能缺省。 例例2-18 2-18 編程序?qū)崿F(xiàn)功能:判斷從鍵盤輸入一個大于編程序?qū)崿F(xiàn)功能:判斷從鍵盤輸入一個大于2 2的正整數(shù)是否為的正整數(shù)是否為素數(shù)。素數(shù)。 所謂素數(shù),就是只能被所謂素數(shù),就是只能被1 1和自身整除的自然數(shù)。根據(jù)素數(shù)的和自身整

40、除的自然數(shù)。根據(jù)素數(shù)的定義,判斷一個正整數(shù)定義,判斷一個正整數(shù)m m是否為素數(shù)最簡單的方法就是:將是否為素數(shù)最簡單的方法就是:將2 2到到m-1m-1之間的每一個整數(shù)去除之間的每一個整數(shù)去除m m,若其間有一個能整除,若其間有一個能整除m m,則則m m不是素數(shù);若不是素數(shù);若2 2到到m-1m-1之間的所有整數(shù)都不能整除之間的所有整數(shù)都不能整除m m,則,則m m為素數(shù)。為素數(shù)。 例例2-17 2-17 使用使用forfor循環(huán)控制結(jié)構(gòu)求循環(huán)控制結(jié)構(gòu)求 的值。的值。 2.3.4 2.3.4 空語句及其在程序中的使用空語句及其在程序中的使用 在在C C語言中,只由分號語言中,只由分號“;”構(gòu)成

41、的構(gòu)成的C C語句稱為語句稱為空語句空語句。 空語句不進(jìn)行任何操作(或者稱之為進(jìn)行空操作),在空語句不進(jìn)行任何操作(或者稱之為進(jìn)行空操作),在C C程序的設(shè)計中,程序的某個位置從程序的設(shè)計中,程序的某個位置從C C語言的語法要求上應(yīng)該語言的語法要求上應(yīng)該有一個有一個C C語句存在,但語義上(即程序的邏輯功能上)又不語句存在,但語義上(即程序的邏輯功能上)又不需要進(jìn)行任何操作時,就可以使用空語句來占據(jù)這個語句需要進(jìn)行任何操作時,就可以使用空語句來占據(jù)這個語句位置以同時滿足語法和語義上的需求。位置以同時滿足語法和語義上的需求。例如有如下形式的例如有如下形式的C C程序段:程序段: while(ge

42、tchar()!=n)while(getchar()!=n) ; ; 該段程序中,當(dāng)循環(huán)條件為真時(即接收到的字符不該段程序中,當(dāng)循環(huán)條件為真時(即接收到的字符不是換行符時),程序不進(jìn)行任何操作(執(zhí)行空語句后)進(jìn)是換行符時),程序不進(jìn)行任何操作(執(zhí)行空語句后)進(jìn)入下一次循環(huán)過程。該段程序通過這樣的方式實現(xiàn)了入下一次循環(huán)過程。該段程序通過這樣的方式實現(xiàn)了“反反復(fù)從鍵盤上接收輸入字符直至換行為止復(fù)從鍵盤上接收輸入字符直至換行為止”的語義。的語義。例例2-19 2-19 編寫程序?qū)崿F(xiàn)求階乘的功能,要求循環(huán)體用空語句實現(xiàn)。編寫程序?qū)崿F(xiàn)求階乘的功能,要求循環(huán)體用空語句實現(xiàn)。 2.3.5 2.3.5 循環(huán)

43、的嵌套循環(huán)的嵌套 一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)又包含另外一個完整的一個循環(huán)結(jié)構(gòu)的循環(huán)體內(nèi)又包含另外一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套循環(huán)的嵌套。 循環(huán)的嵌套層數(shù)可以是多層,稱為循環(huán)的嵌套層數(shù)可以是多層,稱為多重循環(huán)多重循環(huán)。 在在C C語言中三種循環(huán)結(jié)構(gòu)語句語言中三種循環(huán)結(jié)構(gòu)語句“do.whiledo.while循環(huán)循環(huán)”、“whilewhile循環(huán)循環(huán)”、“forfor循環(huán)循環(huán)”可以根據(jù)需要,任意地互可以根據(jù)需要,任意地互相嵌套,下面是一些常見的循環(huán)嵌套結(jié)構(gòu):相嵌套,下面是一些常見的循環(huán)嵌套結(jié)構(gòu): 使用多重循環(huán)結(jié)構(gòu)時應(yīng)注意以下幾點:使用多重循環(huán)結(jié)構(gòu)時應(yīng)注意以下幾點: 三種循環(huán)結(jié)構(gòu)(三

44、種循環(huán)結(jié)構(gòu)(“whilewhile循環(huán)循環(huán)”結(jié)構(gòu)、結(jié)構(gòu)、“dowhiledowhile循環(huán)循環(huán)”結(jié)構(gòu)、結(jié)構(gòu)、“forfor循環(huán)循環(huán)”結(jié)構(gòu))可以相互嵌套。結(jié)構(gòu))可以相互嵌套。 一般情況下,嵌套結(jié)構(gòu)中的外層循環(huán)和內(nèi)層循環(huán)的一般情況下,嵌套結(jié)構(gòu)中的外層循環(huán)和內(nèi)層循環(huán)的循環(huán)控制變量不得同名。循環(huán)控制變量不得同名。 例例2-20 2-20 編程序輸出如下所示由字符構(gòu)成的圖形。編程序輸出如下所示由字符構(gòu)成的圖形。 例例2.202.20程序是一個雙重循環(huán)結(jié)構(gòu),其中外程序是一個雙重循環(huán)結(jié)構(gòu),其中外層循環(huán)結(jié)構(gòu)控制輸出圖形的行數(shù)。層循環(huán)結(jié)構(gòu)控制輸出圖形的行數(shù)。循環(huán)體中完成了循環(huán)體中完成了3 3件事情:件事情:按照

45、要求輸出按照要求輸出前導(dǎo)空格,使用了一個內(nèi)嵌的循環(huán)結(jié)構(gòu)完前導(dǎo)空格,使用了一個內(nèi)嵌的循環(huán)結(jié)構(gòu)完成該功能,注意該內(nèi)嵌循環(huán)結(jié)構(gòu)的控制條成該功能,注意該內(nèi)嵌循環(huán)結(jié)構(gòu)的控制條件件j5-ij5-i使得其輸出的前導(dǎo)空格數(shù)會隨著外使得其輸出的前導(dǎo)空格數(shù)會隨著外層循環(huán)的控制變量值得變化而變化,從而層循環(huán)的控制變量值得變化而變化,從而實現(xiàn)每行少輸出一個前導(dǎo)空格的要求;實現(xiàn)每行少輸出一個前導(dǎo)空格的要求;按照要求輸出若干規(guī)定的字符(本例中通按照要求輸出若干規(guī)定的字符(本例中通過過ch+i-jch+i-j計算得到),同樣使用了一個內(nèi)計算得到),同樣使用了一個內(nèi)嵌的循環(huán)結(jié)構(gòu)完成該功能,請注意內(nèi)嵌內(nèi)嵌的循環(huán)結(jié)構(gòu)完成該功能,

46、請注意內(nèi)嵌內(nèi)嵌循環(huán)結(jié)構(gòu)的控制條件嵌循環(huán)結(jié)構(gòu)的控制條件j=ij=i的意義;的意義;使使用用printf(n);printf(n);語句實現(xiàn)輸出一行字符后語句實現(xiàn)輸出一行字符后的換行功能。的換行功能。 例例2-21 2-21 編程序在屏幕上打印出如下所示的乘法九九表。編程序在屏幕上打印出如下所示的乘法九九表。 * 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 4

47、5 54 63 72 812.4 C2.4 C語言中的其它簡單控制結(jié)構(gòu)語言中的其它簡單控制結(jié)構(gòu) 2.4.1 break2.4.1 break語句語句 breakbreak語句是一條限定轉(zhuǎn)移語句,其一般形式為:語句是一條限定轉(zhuǎn)移語句,其一般形式為: break; break語句的使用范圍只能在下面兩種程序結(jié)構(gòu)之一: switch語句結(jié)構(gòu)中。 循環(huán)控制結(jié)構(gòu)中。breakbreak語句的功能:語句的功能: 把程序的控制流程從直接包含該把程序的控制流程從直接包含該breakbreak語句的循環(huán)控制語句的循環(huán)控制結(jié)構(gòu)或結(jié)構(gòu)或switchswitch語句結(jié)構(gòu)中轉(zhuǎn)出。語句結(jié)構(gòu)中轉(zhuǎn)出。 C C程序中的程序中的

48、breakbreak語句總是出現(xiàn)在語句總是出現(xiàn)在ifif結(jié)構(gòu)的語句部分,構(gòu)成如下結(jié)構(gòu)的語句部分,構(gòu)成如下形式的語句結(jié)構(gòu)形式:形式的語句結(jié)構(gòu)形式: if(exp)if(exp) break; break;例如,在下面例如,在下面C C程序段中,程序段中,breakbreak語句結(jié)束了語句結(jié)束了for for 循環(huán),使得循環(huán),使得for for 循環(huán)不是循環(huán)不是i i從從1 1到到100100循環(huán),而是循環(huán),而是i i從從1 1到到1010循環(huán)。循環(huán)。 for(i=1;i=100;i+)/for(i=1;i9) break; if(i9) break; 表表2.22.2中分別給出的是中分別給出的是

49、whilewhile、forfor和和do whiledo while三種循環(huán)三種循環(huán)結(jié)構(gòu)循環(huán)體中包含的結(jié)構(gòu)循環(huán)體中包含的breakbreak語句執(zhí)行時控制流程的轉(zhuǎn)向情況。語句執(zhí)行時控制流程的轉(zhuǎn)向情況。 例例2-22 2-22 編制程序?qū)崿F(xiàn)功能:從鍵盤輸入兩個正整數(shù)編制程序?qū)崿F(xiàn)功能:從鍵盤輸入兩個正整數(shù)a(a2)a(a2)和和b b,求,求a a與與b b之間的全部素數(shù)。之間的全部素數(shù)。 例例2-23 2-23 編程需實現(xiàn)功能:求調(diào)和級數(shù)中至多少項后的和值編程需實現(xiàn)功能:求調(diào)和級數(shù)中至多少項后的和值大于大于1010。 分析:需要判定數(shù)分析:需要判定數(shù)n n是否為素數(shù)時,可以用是否為素數(shù)時,可以

50、用2 2到到sqrt(n)sqrt(n)之之間的所有整數(shù)去除間的所有整數(shù)去除n n,若其中任意一次能夠除盡,則說明,若其中任意一次能夠除盡,則說明n n不是素數(shù);否則不是素數(shù);否則n n是素數(shù)。是素數(shù)。分析:調(diào)和級數(shù)的第分析:調(diào)和級數(shù)的第n n項形式為:項形式為: 2.4.2 continue2.4.2 continue語句語句continuecontinue語句是一條限定轉(zhuǎn)移語句,其一般形式為:語句是一條限定轉(zhuǎn)移語句,其一般形式為:continue; continue; continue語句的功能:語句的功能: 提前結(jié)束本次循環(huán)體的執(zhí)行過程而直接進(jìn)入下提前結(jié)束本次循環(huán)體的執(zhí)行過程而直接進(jìn)入下

51、一次循環(huán)。一次循環(huán)。 continue語句只能使用在循環(huán)結(jié)構(gòu)的循環(huán)體中。 C C程序中的程序中的continuecontinue語句總是出現(xiàn)在語句總是出現(xiàn)在ifif結(jié)構(gòu)的語結(jié)構(gòu)的語句部分,構(gòu)成如下形式的語句結(jié)構(gòu)形式:句部分,構(gòu)成如下形式的語句結(jié)構(gòu)形式: if(expression)if(expression) continue; continue; 表表2.32.3中分別給出的是中分別給出的是whilewhile、forfor和和do whiledo while三種循環(huán)結(jié)構(gòu)循環(huán)體中包含的三種循環(huán)結(jié)構(gòu)循環(huán)體中包含的continuecontinue語句執(zhí)行時語句執(zhí)行時控制流程的轉(zhuǎn)向情況??刂屏鞒痰?/p>

52、轉(zhuǎn)向情況。 例例2-24 2-24 編程序?qū)崿F(xiàn)功能:檢測從鍵盤上輸入的以換行符結(jié)束編程序?qū)崿F(xiàn)功能:檢測從鍵盤上輸入的以換行符結(jié)束的字符流,統(tǒng)計非字母字符的個數(shù)。的字符流,統(tǒng)計非字母字符的個數(shù)。 程序通過循環(huán)依次檢查每一個輸入的字符,當(dāng)字符不是換程序通過循環(huán)依次檢查每一個輸入的字符,當(dāng)字符不是換行符并且是字母時通過執(zhí)行行符并且是字母時通過執(zhí)行continuecontinue語句提前結(jié)束本輪循環(huán)語句提前結(jié)束本輪循環(huán)(即不執(zhí)行循環(huán)體中的(即不執(zhí)行循環(huán)體中的counter+;counter+;語句);當(dāng)字符不是換行符語句);當(dāng)字符不是換行符并且是不是字母時,條件并且是不是字母時,條件c=A&c

53、=a&c=A&c=a&c=z不成立,不會執(zhí)行不成立,不會執(zhí)行continuecontinue語句,從而程序執(zhí)行計數(shù)器增一的操作語句,從而程序執(zhí)行計數(shù)器增一的操作counter+;counter+;;當(dāng)遇到換行字符是循環(huán)結(jié)束并輸出變量當(dāng)遇到換行字符是循環(huán)結(jié)束并輸出變量countercounter的值。的值。 程序的某次執(zhí)行情況和輸出結(jié)果如下所示:程序的某次執(zhí)行情況和輸出結(jié)果如下所示:Input a string: Input a string: skjdf4623784908% skjdf4623784908%* *& &* *(%SDFsdfk(%SDF

54、sdfk Counter=18 Counter=18 2.4.3 goto2.4.3 goto語句和標(biāo)號語句語句和標(biāo)號語句gotogoto語句是無條件轉(zhuǎn)移語句,其一般形式為:語句是無條件轉(zhuǎn)移語句,其一般形式為:goto goto 語句標(biāo)號;語句標(biāo)號; 其中:標(biāo)號語句用標(biāo)識符加上冒號表示,其定義規(guī)則同變量,即由字其中:標(biāo)號語句用標(biāo)識符加上冒號表示,其定義規(guī)則同變量,即由字母、數(shù)字和下劃線組成且第一個字符必須是字母或下劃線。母、數(shù)字和下劃線組成且第一個字符必須是字母或下劃線。 gotogoto語句的功能:語句的功能: 將程序的控制流程無條件地轉(zhuǎn)移到語句標(biāo)號所指的標(biāo)號將程序的控制流程無條件地轉(zhuǎn)移到語

55、句標(biāo)號所指的標(biāo)號語句處。語句處。 注意:注意:gotogoto語句的使用范圍局限于函數(shù)內(nèi)部,不允許在一語句的使用范圍局限于函數(shù)內(nèi)部,不允許在一個函數(shù)中使用個函數(shù)中使用gotogoto語句將程序控制轉(zhuǎn)移到本函數(shù)之外。語句將程序控制轉(zhuǎn)移到本函數(shù)之外。 在程序設(shè)計中,使用在程序設(shè)計中,使用gotogoto語句和語句和ifif語句配合也可以構(gòu)語句配合也可以構(gòu)成循環(huán)結(jié)構(gòu),但不提倡使用成循環(huán)結(jié)構(gòu),但不提倡使用gotogoto語句來構(gòu)成循環(huán)結(jié)構(gòu)。例如語句來構(gòu)成循環(huán)結(jié)構(gòu)。例如下面循環(huán)結(jié)構(gòu)程序的形式:下面循環(huán)結(jié)構(gòu)程序的形式:#include #include void main()void main() int

56、 j=1,sum=0; int j=1,sum=0;loop: loop: if(k=100)if(knmn)的最大公倍數(shù)可以使用)的最大公倍數(shù)可以使用輾轉(zhuǎn)相除法。其算法可以描述為:輾轉(zhuǎn)相除法。其算法可以描述為: m m除以除以n n得到余數(shù)得到余數(shù)r(0rr(0rn)n)。 若若r=0r=0則算法結(jié)束,則算法結(jié)束,n n為最大公約數(shù)。否則執(zhí)行步驟為最大公約數(shù)。否則執(zhí)行步驟。mnmn,nrnr,轉(zhuǎn)回到步驟,轉(zhuǎn)回到步驟。 當(dāng)已知兩個非負(fù)整數(shù)當(dāng)已知兩個非負(fù)整數(shù)m m和和n n的最大公約數(shù)后,求其最小公的最大公約數(shù)后,求其最小公倍數(shù)的算法可以簡單描述為:兩個正整數(shù)之積除以它們的倍數(shù)的算法可以簡單描述

57、為:兩個正整數(shù)之積除以它們的最大公約數(shù)。最大公約數(shù)。 例例2-25 2-25 求兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)。求兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)。 2.5.2 2.5.2 窮舉思想及程序?qū)崿F(xiàn)窮舉思想及程序?qū)崿F(xiàn) 在計算機的應(yīng)用中,許多問題的解在計算機的應(yīng)用中,許多問題的解“隱藏隱藏”在多個的可在多個的可能之中。窮舉就是對多種可能的情形一一測試,從眾多的可能之中。窮舉就是對多種可能的情形一一測試,從眾多的可能中找出符合條件的能中找出符合條件的( (一個或一組一個或一組) )解,或者無解的結(jié)論。在解,或者無解的結(jié)論。在一個集合內(nèi)對集合中的每一個元素進(jìn)行一一測試的方法稱為一個集合內(nèi)對集合中的每

58、一個元素進(jìn)行一一測試的方法稱為窮舉法。窮舉本質(zhì)上就是在某個特定范圍中的查找,是一種窮舉法。窮舉本質(zhì)上就是在某個特定范圍中的查找,是一種典型的重復(fù)型算法,其重復(fù)操作(循環(huán)體)的核心是對問題典型的重復(fù)型算法,其重復(fù)操作(循環(huán)體)的核心是對問題的一種可能狀態(tài)的測試。的一種可能狀態(tài)的測試。 窮舉方法的實現(xiàn)主要依賴于以下兩個基本要點:窮舉方法的實現(xiàn)主要依賴于以下兩個基本要點: 搜尋可能值的范圍如何確定。搜尋可能值的范圍如何確定。 被搜尋可能值的判定方法。被搜尋可能值的判定方法。 對于被搜索的可能值,一般都是問題中所要查找對于被搜索的可能值,一般都是問題中所要查找的對象或者是要查找對象應(yīng)該滿足的條件,因而

59、在問的對象或者是要查找對象應(yīng)該滿足的條件,因而在問題中都會有清晰的描述。但對于搜尋范圍,在有些問題中都會有清晰的描述。但對于搜尋范圍,在有些問題是比較確定的,而在另外一些問題則是不確定的。題是比較確定的,而在另外一些問題則是不確定的。 例例2-26 2-26 編程序找出所有的編程序找出所有的“水仙花數(shù)水仙花數(shù)”?!八苫〝?shù)水仙花數(shù)”是指一個是指一個3 3位數(shù),位數(shù),其各位上數(shù)字的立方之和等于這個數(shù)本身。例如其各位上數(shù)字的立方之和等于這個數(shù)本身。例如153=1153=13 3+5+53 3+3+33 3,所以,所以153153是是“水仙花數(shù)水仙花數(shù)”。 分析:依題意可以得出,搜尋可能值的范圍為分

60、析:依題意可以得出,搜尋可能值的范圍為100999100999;判定方法為各位上數(shù)字的立方之和等于被判定數(shù)。程序可判定方法為各位上數(shù)字的立方之和等于被判定數(shù)。程序可以依次取出區(qū)間以依次取出區(qū)間100100,999999之間的每一個數(shù),然后將該數(shù)之間的每一個數(shù),然后將該數(shù)分解為分解為3 3個數(shù)字,按照判定條件判定即可。個數(shù)字,按照判定條件判定即可。 上面求取上面求取“水仙花數(shù)水仙花數(shù)”的可以稱之為的可以稱之為分離數(shù)據(jù)的方法。分離數(shù)據(jù)的方法。 除此之外還可以使用組合數(shù)據(jù)的方法求取除此之外還可以使用組合數(shù)據(jù)的方法求取“水仙花數(shù)水仙花數(shù)”。如果用如果用a a、b b和和c c分別表示分別表示3 3位數(shù)的百位、十位和個位,則該位數(shù)的百位、十位和個位,則該3 3位位數(shù)可以表示為:數(shù)可以表示為:a a* *100+b100+b* *10+c1

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論