南開大學(xué) 高級(jí)語言程序設(shè)計(jì)(C++) 第4章 控制語句與導(dǎo)出類型_第1頁
南開大學(xué) 高級(jí)語言程序設(shè)計(jì)(C++) 第4章 控制語句與導(dǎo)出類型_第2頁
南開大學(xué) 高級(jí)語言程序設(shè)計(jì)(C++) 第4章 控制語句與導(dǎo)出類型_第3頁
南開大學(xué) 高級(jí)語言程序設(shè)計(jì)(C++) 第4章 控制語句與導(dǎo)出類型_第4頁
南開大學(xué) 高級(jí)語言程序設(shè)計(jì)(C++) 第4章 控制語句與導(dǎo)出類型_第5頁
已閱讀5頁,還剩234頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、張瑩張瑩 計(jì)算機(jī)與控制工程學(xué)院計(jì)算機(jī)與控制工程學(xué)院 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 C+C+語句概述語句概述 vC+

2、語句的分類語句的分類 說明語句(Declaration statement) 表達(dá)式語句(Expression statement) 空語句(Null statement) 控制語句 分支語句(Selection statement) 循環(huán)語句(iteration statement) 無條件轉(zhuǎn)向語句(Jump statement) 復(fù)合語句(Compound statement) 標(biāo)簽語句(Labeled statement) C+C+語句概述語句概述 v表達(dá)式語句表達(dá)式語句 任意有效表達(dá)式都可以作為表達(dá)式語句 在表達(dá)式后面加上“;” 當(dāng)表達(dá)式語句中不包含表達(dá)式時(shí),該語句是空 語句 什么也不

3、做 只由分割符“;”構(gòu)成 常見的表達(dá)式語句 賦值表達(dá)式語句 函數(shù)調(diào)用語句 C+C+語句概述語句概述 v控制語句控制語句 用來控制程序中各語句執(zhí)行的次序 分類 條件控制語句 分支語句 循環(huán)語句 無條件控制語句 C+C+語句概述語句概述 v控制語句的引入控制語句的引入 【例4.1】設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)整數(shù)的加 法 此程序功能很差 C+C+語句概述語句概述 v控制語句的引入控制語句的引入 為程序增加更多的功能 簡化解決問題的過程 例如,在計(jì)算器程序中 通過使用開關(guān)語句增加運(yùn)算的種類 教材P84,program4-2 通過使用循環(huán)語句控制程序的執(zhí)行 教材P85,program4-3 C+C+語句概

4、述語句概述 v復(fù)合語句復(fù)合語句 也稱為塊語句、語句塊(block) 若干語句的組合 由分割符“”和“”界定 構(gòu)成復(fù)合語句的語句 說明語句 表達(dá)式語句 控制語句 復(fù)合語句 空語句 C+C+語句概述語句概述 v復(fù)合語句復(fù)合語句 主要出現(xiàn)位置 函數(shù)體 循環(huán)體 分支語句的分支 C+C+語句概述語句概述 v標(biāo)簽語句標(biāo)簽語句 標(biāo)簽是為語句起的“名字” 語句的標(biāo)簽為標(biāo)識(shí)符 標(biāo)簽加在語句所在程序代碼行,用分割符“:” 與標(biāo)號(hào)指示的語句分開 L: int a = 5; L是語句的標(biāo)號(hào) 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循

5、環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 分支語句分支語句 開關(guān)語句開關(guān)語句 switchswitch casecase defaultdefault 條件語句條件語句 ifif語句語句 ifelseifelse語句語句 上述兩種語句都上述兩種語句都 可以再嵌套條件語可以再嵌套條件語 句句 分支語句分支語句 分支語句分支語句 v條件語句條件語句 由關(guān)鍵字if和else組成 if() if() else 表達(dá)式E 其值能夠等價(jià)為邏輯值的任何表達(dá)式 語句S、S1和S2 任何類型的語句 分支語句分支語句 v條件語

6、句條件語句 執(zhí)行流程 表達(dá)式E 語句S 語句T 真 假 分支語句分支語句 v條件語句條件語句 【例4.2】如果輸入字符為字母,則輸出“YES” 分支語句分支語句 v條件語句條件語句 執(zhí)行流程 表達(dá)式E 語句S1語句S2 真 假 語句T 分支語句分支語句 v條件語句條件語句 【例4.3】輸出數(shù)值型變量a與b中的較大者 分支語句分支語句 v條件語句條件語句 【例4.4】輸入一個(gè)年份,判斷是否為閏年 輸入年份 可以限定范圍,如0至9999年 判斷是否為閏年的條件 條件1 能夠被4整除 不能夠被100整除 條件2 能夠被400整除 上述兩個(gè)條件滿足其一即可 分支語句分支語句 分支語句分支語句 v條件語

7、句條件語句 【例4.5】若int型變量x的值小于y的值時(shí),則 將x與y的值互換;否則,將x與y的值各加上 100 分支語句分支語句 v條件語句條件語句 【例4.6】從鍵盤上輸入三個(gè)整數(shù),輸出其中最 大的數(shù) 輸入三個(gè)數(shù) 比較前兩個(gè)數(shù),得到最大數(shù) 用第三個(gè)數(shù)與最大數(shù)比較 第三個(gè)數(shù)大,則輸出該數(shù) “最大數(shù)”大,則輸出“最大數(shù)” 分支語句分支語句 分支語句分支語句 v條件語句條件語句 條件語句的嵌套 條件語句中的某個(gè)分支(if語句塊或else語句塊) 中仍包含條件語句 分支語句分支語句 v條件語句條件語句 if與else的匹配原則 else總是與其前面最近的if匹配 建議: if和else的語句塊最好

8、用“”和“”界定 當(dāng)if或else的語句只有一句時(shí),可以不加花括號(hào) 建議只用一條語句也加上花括號(hào) 分支語句分支語句 v條件語句條件語句 兩種語句的區(qū)別 分支語句分支語句 v條件語句條件語句 兩種條件語句舉例 分支語句分支語句 v條件語句條件語句 兩種條件語句舉例 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.7】用條件語句嵌套實(shí)現(xiàn)例4.6 在if子句中嵌套 分支語句分支語句 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.7】用條件語句嵌套實(shí)現(xiàn)例4.6 在else子句中嵌套 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.8】編程序,輸入一個(gè)溫度值,若輸入的 是

9、攝氏值則將其轉(zhuǎn)換為華氏值,若輸入的是華 氏值則將其轉(zhuǎn)換為攝氏值,并將轉(zhuǎn)換結(jié)果顯示 出來 轉(zhuǎn)換公式如下(其中tc表示攝氏度,tf表示華氏度) tf = tc * 1.8 + 32; tc = (tf-32) / 1.8。 分支語句分支語句 #include using namespace std; int main() float t,tc,tf; /t用于存放初始輸入值用于存放初始輸入值,tc存放攝氏值存放攝氏值,tf存放華氏值存放華氏值 char corf; /取值大小寫字母取值大小寫字母C或或F,表示表示t值為攝氏值或華氏值值為攝氏值或華氏值 const float fac=1.8,inc

10、=32.0;/轉(zhuǎn)換時(shí)所需常數(shù)轉(zhuǎn)換時(shí)所需常數(shù) coutt; /溫度值溫度值t cincorf; /溫度單位溫度單位 if(corf=c|corf=C) tc=t; tf=t*fac+inc; else if(corf=f|corf=F) tf=t; tc=(t-inc)/fac; else /字母輸入有錯(cuò)字母輸入有錯(cuò)! tc=tf=0; /將將tc及及tf均置為均置為0 coutThe temperature is:; couttcC=tf0,方程有兩個(gè)不同實(shí)根; 若delta0,方程無實(shí)根。 分支語句分支語句 分支語句分支語句 分支語句分支語句 v條件語句處理多分支的情況條件語句處理多分支的情

11、況 分支語句分支語句 v開關(guān)語句開關(guān)語句 由關(guān)鍵字switch、case和default構(gòu)成 與break語句結(jié)合使用 多分支語句 if語句是兩個(gè)分支的語句 實(shí)現(xiàn)多分支很復(fù)雜 if.else.語句的多重嵌套 形式多樣 帶break語句與不帶break語句 帶default與不帶default case空語句 分支語句分支語句 v開關(guān)語句開關(guān)語句 使用方法 分支語句分支語句 v開關(guān)語句開關(guān)語句 給出進(jìn)行分支的條件,其值必須 是一個(gè)整型、字符型或枚舉型的表達(dá)式 關(guān)鍵字case用于引出一個(gè)分支。case后的各“” 均為switch后“” 的一個(gè)可能值(兩者的類型應(yīng)該相同)。實(shí)際 上,每個(gè)“case

12、:”都只起一個(gè)語 句標(biāo)號(hào)的作用 分支語句分支語句 v開關(guān)語句開關(guān)語句 若switch后“”的取值恰與某個(gè) “”的值相同, 則直接跳轉(zhuǎn)到 “case :”后的那一分支的起始點(diǎn) 處去執(zhí)行(直到遇到break語句或者遇到了 switch語句體的右花括號(hào)后結(jié)束本switch句)。 若“”的值與任一個(gè)“”的值都不相同, 那么: 若有default分支, 則 跳轉(zhuǎn)到“default:”后的那一分支的起始點(diǎn)處去 執(zhí)行, 否則什么都不執(zhí)行(而結(jié)束本switch句) 分支語句分支語句 v開關(guān)語句開關(guān)語句 不帶break的 開關(guān)語句 分支語句分支語句 v開關(guān)語句開關(guān)語句 與break語句 一起使用的開 關(guān)語句 分

13、支語句分支語句 v開關(guān)語句開關(guān)語句 不含 default 語句的 情況 分支語句分支語句 v開關(guān)語句開關(guān)語句 【例4.11】若int型變量i=2, 執(zhí)行下述switch語 句后, 將輸出 “i=2”以及“i=2”兩行;若i=5, 則什么也不輸出(而結(jié)束該switch句);若i=1 時(shí),要輸出3行“i=1” switch (i) case 1: couti=iendl; case 2: couti=iendl; case 3: couti=iendl; 分支語句分支語句 v開關(guān)語句開關(guān)語句 多個(gè)case并列的情況 分支語句分支語句 v開關(guān)語句開關(guān)語句 【例4.12】輸入成績,輸出成績的等級(jí)。例如

14、成 績score=86, 運(yùn)行程序后, 將輸出“grade=B”; 若score處于90到100之間,將輸出“grade=A”; . ;若score/10不處于6到10之間(如, score為 59, 0, 123, -12等), 將輸出“grade=E” 分支語句分支語句 分支語句分支語句 v開關(guān)語句開關(guān)語句 【例4.13】利用開關(guān)語句設(shè)計(jì)計(jì)算器程序,實(shí) 現(xiàn)運(yùn)算:+、-、*、/和% 由不同的運(yùn)算產(chǎn)生分支 多個(gè)分支 分支語句分支語句 分支語句分支語句 v開關(guān)語句開關(guān)語句 【例4.14】運(yùn)輸公司對所運(yùn)貨物實(shí)行分段計(jì)費(fèi)。 設(shè)運(yùn)輸里程為s,則運(yùn)費(fèi)打折情況如下: s250 不打折扣不打折扣 250=s

15、500 2%折扣折扣 500=s1000 5%折扣折扣 1000=s2000 8%折扣折扣 2000=s3000 10%折扣折扣 3000=s 15%折扣折扣 2000=s3000 10%折扣折扣 1000=s2000 8%折扣折扣 500=s1000 5%折扣折扣 250=s500 2%折扣折扣 s score1 score2 score3 score4 score5; avg = (score1 + score2 + score3 + score4 + score5)/5.0; cout avg= avg endl; /重復(fù)寫重復(fù)寫89個(gè)個(gè)相同相同的的程序段程序段 61 v 分別編寫若干個(gè)

16、相同或相似的語句或程序段分別編寫若干個(gè)相同或相似的語句或程序段 v 工作量大、程序冗長、重復(fù)、難以閱讀和維護(hù)工作量大、程序冗長、重復(fù)、難以閱讀和維護(hù) v 可實(shí)現(xiàn)要求,但不可??!最笨的辦法!可實(shí)現(xiàn)要求,但不可取!最笨的辦法! 循環(huán) 用循環(huán)來用循環(huán)來實(shí)現(xiàn)實(shí)現(xiàn) 62 v 用一個(gè)循環(huán)語句用一個(gè)循環(huán)語句(for語語句句)解決了重復(fù)解決了重復(fù)100次相似語句問題次相似語句問題 用循環(huán)來實(shí)現(xiàn)用循環(huán)來實(shí)現(xiàn) 63 問題問題2:輸入全班:輸入全班90個(gè)學(xué)生個(gè)學(xué)生5門課程的成績,門課程的成績, 分別計(jì)算每名學(xué)生的平均成績并輸出分別計(jì)算每名學(xué)生的平均成績并輸出。 int score1,score2,score3,sc

17、ore4,score5; double avg = 0; int i = 1; while (i score1 score2 score3 score4 score5; avg = (score1 + score2 + score3 + score4 + score5)/5; cout avg= avg endl; i+; v 用一個(gè)循環(huán)語句用一個(gè)循環(huán)語句(while語句語句)解決了重復(fù)解決了重復(fù)90次相同程序段問題次相同程序段問題 循環(huán)循環(huán) (Loop) v根據(jù)一定的根據(jù)一定的條件條件控制一段程序控制一段程序重復(fù)執(zhí)行重復(fù)執(zhí)行若干若干次次 v循環(huán)結(jié)構(gòu),又稱重復(fù)結(jié)構(gòu)循環(huán)結(jié)構(gòu),又稱重復(fù)結(jié)構(gòu) v構(gòu)成

18、構(gòu)成有效循環(huán)的條件:循環(huán)體和有效循環(huán)的條件:循環(huán)體和循環(huán)結(jié)束條件循環(huán)結(jié)束條件 v三種循環(huán)語句三種循環(huán)語句 for循環(huán) while循環(huán) do.while循環(huán) 64 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 循環(huán)的概念循環(huán)的概念 用三種循環(huán)語句實(shí)現(xiàn)循環(huán)用三種循環(huán)語句實(shí)現(xiàn)循環(huán) 循環(huán)的嵌套循環(huán)的嵌套 改變循環(huán)執(zhí)改變循環(huán)執(zhí)行的狀態(tài)行的狀態(tài) 循環(huán)程序示例循環(huán)程序示例 65 用用for語句實(shí)現(xiàn)循環(huán)語句實(shí)現(xiàn)循環(huán) 66 i=1 i100 sum=sum+i i=i+1 Y N sum=0 輸出sum for 循 環(huán) 結(jié) 構(gòu) v 開始時(shí)聲明變量開始時(shí)聲明變量sum,并賦初始值,并賦初始值0 v 進(jìn)入進(jìn)入for循環(huán)結(jié)構(gòu)循環(huán)

19、結(jié)構(gòu) “int i=1”聲明變量i并設(shè)置初值為1 “i=100”是指定循環(huán)條件:當(dāng)循環(huán)變量i的值小于或等于 100時(shí),循環(huán)執(zhí)行循環(huán)體中的語句,否則循環(huán)結(jié)束 “sum=sum+i”是循環(huán)體,執(zhí)行累加 “i+”的作用是循環(huán)變量i值不斷變化,以便最終滿足終止循環(huán)條件 v 循環(huán)結(jié)束后繼續(xù)執(zhí)行輸出累加的結(jié)果循環(huán)結(jié)束后繼續(xù)執(zhí)行輸出累加的結(jié)果 int sum = 0; for ( int i = 1; i = 100; i+) sum = sum + i; cout sum = sum endl; for語句語句 v 最常用、功能最強(qiáng)的循環(huán)語句最常用、功能最強(qiáng)的循環(huán)語句 v 一般形式一般形式 for (表達(dá)

20、式表達(dá)式E1;表達(dá)式表達(dá)式E2;表達(dá)式表達(dá)式E3) 語句語句S 表達(dá)式E1:聲明并初始化循環(huán)變量;只在循環(huán)開始執(zhí)行1次 表達(dá)式E2:循環(huán)條件,一般是具有邏輯值的表達(dá)式,判定是否繼續(xù)循環(huán); 在每次執(zhí)行循環(huán)體前執(zhí)行,如為真繼續(xù)執(zhí)行循環(huán)體 表達(dá)式E3:循環(huán)變量調(diào)整,使得最終結(jié)束循環(huán); 執(zhí)行完循環(huán)體后進(jìn)行 語句S:循環(huán)體,即反復(fù)執(zhí)行的語句或語句塊(復(fù)合語句) 67 for loop v General form: for (init; condition; step) statements v init done once at start of loop only v condition check

21、ed before every iteration trough loop We execute statements if condition is true v step every time through loop after statements 68 forfor循環(huán)語句循環(huán)語句 v 執(zhí)行過程執(zhí)行過程 (1)求解表達(dá)式E1 (2)求解表達(dá)式E2,若值為真(非0),執(zhí)行循環(huán)體語句S, 然后執(zhí)行第(3)步;若為假(0),則結(jié)束循環(huán),轉(zhuǎn)至第(5)步 (3)求解表達(dá)式E3 (4)轉(zhuǎn)回步驟(2)繼續(xù)執(zhí)行 (5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句 69 表達(dá)式表達(dá)式E1表達(dá)式表達(dá)式E2 表

22、達(dá)式表達(dá)式E3表達(dá)式表達(dá)式E2 表達(dá)式表達(dá)式E3表達(dá)式表達(dá)式E2 表達(dá)式表達(dá)式E3表達(dá)式表達(dá)式E2 表達(dá)式E1 表達(dá)式E2 語句S 表達(dá)式E3 真 假 forfor循環(huán)循環(huán)語句語句舉例舉例 v 舉例:舉例: int sum = 0,i; for (i = 1; i = 5; i+) sum = sum + i; cout i = i sum = sum endl; cout i = i 0; i -= 2) coutiendl; v運(yùn)行結(jié)果運(yùn)行結(jié)果 71 6 4 2 v注意注意”0”沒有被輸出沒有被輸出 for語句幾點(diǎn)說明語句幾點(diǎn)說明 v “表達(dá)式表達(dá)式E1”可以省略,即不設(shè)置初值,可以省略,

23、即不設(shè)置初值,但其后但其后的分號(hào)不能省略的分號(hào)不能省略 int sum=0,i=1;/在在for語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行 for(;i=100; i+) sum=sum+i; /省略省略了了”表達(dá)式表達(dá)式E1” v “表達(dá)式表達(dá)式E2”也可以也可以省略省略,即不設(shè)置和檢查循環(huán)條件,即不設(shè)置和檢查循環(huán)條件 for(int i=1;i+) sum=sum+i;/循環(huán)無終止,即表達(dá)式循環(huán)無終止,即表達(dá)式E2始終為真始終為真 v “表達(dá)式表達(dá)式E3”也可以省略也可以省略,但通常另外設(shè)法保證循環(huán)能正常結(jié)束,但通常另外設(shè)法保證循環(huán)能正常結(jié)束 for(

24、int i=1;i=100;) /省略了省略了”表達(dá)式表達(dá)式E3” sum=sum+i; i+; /在循環(huán)體中控制循環(huán)變量增值,效果一樣在循環(huán)體中控制循環(huán)變量增值,效果一樣 72 for語句幾點(diǎn)說明語句幾點(diǎn)說明 v 省略省略“表達(dá)式表達(dá)式E1”和和”表達(dá)式表達(dá)式E3” int sum=0,i=1;/在在for語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行 for(;i=100;) /省略省略了了”表達(dá)式表達(dá)式E1”和和”表達(dá)式表達(dá)式E3” sum=sum+i; i+; /在循環(huán)體中控制循環(huán)變量增值,效果一樣在循環(huán)體中控制循環(huán)變量增值,效果一樣 v 甚至可以省略

25、甚至可以省略3個(gè)表達(dá)式個(gè)表達(dá)式 for(;) sum=sum+i;/循環(huán)無終止循環(huán)無終止,循環(huán)變量,循環(huán)變量i值無變化值無變化 v 語句語句S也可以省略,通常用于某種延時(shí)也可以省略,通常用于某種延時(shí) for(int i=1;i=10000;i+) ; 73 for語句幾點(diǎn)說明語句幾點(diǎn)說明 v “表達(dá)式表達(dá)式E1”可以是設(shè)置循環(huán)可以是設(shè)置循環(huán)變量變量初值的賦值表達(dá)式,初值的賦值表達(dá)式, 也可是與循環(huán)變量無關(guān)的其他表達(dá)式也可是與循環(huán)變量無關(guān)的其他表達(dá)式 int i=1,sum; for(sum=0;i=100;i+) sum=sum+i; “表達(dá)式表達(dá)式E3”也可是與循環(huán)變量無關(guān)的任意表達(dá)式,無論

26、怎樣也可是與循環(huán)變量無關(guān)的任意表達(dá)式,無論怎樣 寫,都必須使循環(huán)能正常執(zhí)行寫,都必須使循環(huán)能正常執(zhí)行 v “表達(dá)式表達(dá)式E1”和和“表達(dá)式表達(dá)式E3”可以是簡單的表達(dá)式,也可是逗號(hào)可以是簡單的表達(dá)式,也可是逗號(hào) 表達(dá)式,即包含一個(gè)以上的簡單表達(dá)式,中間用逗號(hào)分隔表達(dá)式,即包含一個(gè)以上的簡單表達(dá)式,中間用逗號(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; 注:注:逗號(hào)表達(dá)式內(nèi)左至右順序求解,整個(gè)逗號(hào)表達(dá)的值為最右逗號(hào)表達(dá)式內(nèi)左至右順序求解,整個(gè)逗號(hào)表達(dá)的值為最右 邊表達(dá)式的值邊表達(dá)式的值 74 for語句

27、幾點(diǎn)說明語句幾點(diǎn)說明 v “表達(dá)式表達(dá)式E2”一般是關(guān)系表達(dá)式一般是關(guān)系表達(dá)式(如如i=100)或邏輯表達(dá)式或邏輯表達(dá)式(如如 ab double avg = 0; for (int i=1;i = 90;i+)/循環(huán)變量循環(huán)變量i初始為初始為1,循環(huán)條件是,循環(huán)條件是 i90退出循環(huán)退出循環(huán) /循環(huán)體開循環(huán)體開始始 cinscore1score2score3score4score5; avg=(score1+score2+score3+score4+score5)/5; cout avg = avg endl; /循環(huán)體結(jié)束循環(huán)體結(jié)束 i=1 i90 輸入第i個(gè)學(xué)生成績 i=i+1 Y N

28、計(jì)算平均成績 輸出平均成績 v 注:注:循環(huán)體包含一個(gè)以上的語句,應(yīng)該用循環(huán)體包含一個(gè)以上的語句,應(yīng)該用花括號(hào)花括號(hào)括起括起 來,作為復(fù)合語句出現(xiàn),如果不加花括號(hào),則循環(huán)語來,作為復(fù)合語句出現(xiàn),如果不加花括號(hào),則循環(huán)語 句范圍只到第句范圍只到第1個(gè)分號(hào)處個(gè)分號(hào)處 循環(huán)語句循環(huán)語句 vfor語句語句 【例4.16】讀下述程序,注意其中的三個(gè)for循 環(huán)語句以及所累加出的三個(gè)不同的sum結(jié)果 #include using namespace std; void main() int i, x, sum=0; for(i=1; i=10; i+) sum+=2; coutsum=sumendl; s

29、um=0; for(i=1; i=10; i+) sum+=i; coutsum=sumendl; 循環(huán)語句循環(huán)語句 sum=0; for(i=1; ix; sum+=x; coutsum=sumendl; return 0; 循環(huán)語句循環(huán)語句 vfor語句語句 【例4.16】 第一個(gè)for語句,循環(huán)10次,每次往sum上累加2 (注意,循環(huán)體中并沒有使用循環(huán)變量i之值,i只起 控制次數(shù)的作用)。 第二個(gè)for語句,循環(huán)10次,每次往sum上累加i(循 環(huán)體中使用了循環(huán)變量i之值)。 第三個(gè)for語句,循環(huán)10次,每次往sum上累加一個(gè) 從鍵盤輸入的x(注意,循環(huán)體中并沒有使用循環(huán)變 量i之值

30、) 循環(huán)語句循環(huán)語句 vfor語句語句 【例4.17】設(shè)計(jì)程序輸出Fibonacci數(shù)列的前20 項(xiàng),要求每行輸出5個(gè)數(shù)據(jù) Fibonacci數(shù)列: 除了第0項(xiàng)和第1項(xiàng)外,每一項(xiàng)都是由類似方法產(chǎn)生, 即前兩項(xiàng)之和;所以求當(dāng)前項(xiàng)時(shí),只需要記住前兩 項(xiàng);程序不需要為每一項(xiàng)設(shè)置專用變量。 1n 1)-fib(n2)-fib(n 1n 1 0n 0 fib(n) 循環(huán)語句循環(huán)語句 while語句語句 v 形式簡單的循環(huán)語句形式簡單的循環(huán)語句 v 一般形式一般形式 while (表達(dá)式表達(dá)式E) 語句語句S 表達(dá)式E:循環(huán)條件,一般是具有邏輯值的表達(dá)式, 判定是否繼續(xù)循環(huán);在每次執(zhí)行循環(huán)體前執(zhí)行 表達(dá)式

31、E為真(非0),繼續(xù)執(zhí)行循環(huán)體 表達(dá)式E為假(0),則結(jié)束循環(huán) 語句S:循環(huán)體,即反復(fù)執(zhí)行的簡單語句或語句塊 (復(fù)合語句) v 先判斷表達(dá)式,后執(zhí)行循環(huán)體語句先判斷表達(dá)式,后執(zhí)行循環(huán)體語句 v 當(dāng)當(dāng)循環(huán)條件表達(dá)式為循環(huán)條件表達(dá)式為真真,就,就執(zhí)行執(zhí)行循環(huán)體語句循環(huán)體語句 v for語句中省略表達(dá)式語句中省略表達(dá)式E1和和E3的特殊情形的特殊情形 82 表達(dá)式E 語句S 真 假 while loop v General form: while (condition) statements v condition checked before every iteration trough loop

32、 We execute statements if condition is true 83 whilewhile循環(huán)語句循環(huán)語句 v執(zhí)行過程執(zhí)行過程 (1)求解表達(dá)式E,若值為真(非0),轉(zhuǎn)至第(2)步; 若值為假(0),則結(jié)束循環(huán),跳轉(zhuǎn)至第(3)步 (2)執(zhí)行循環(huán)體語句S,轉(zhuǎn)回第(1)步繼續(xù)執(zhí)行 (3)執(zhí)行while語句下面的一個(gè)語句 84 表達(dá)式E 語句S 真 假 whilewhile循環(huán)語句循環(huán)語句 v若第一次判斷若第一次判斷”表達(dá)式表達(dá)式E”的值就為假時(shí),的值就為假時(shí), 會(huì)立刻結(jié)束該會(huì)立刻結(jié)束該while語句語句 作為循環(huán)體的一次也沒被執(zhí)行則結(jié)束了 該while語句 v循環(huán)的控制循環(huán)

33、的控制 通過表達(dá)式E控制循環(huán) 在循環(huán)體中應(yīng)給出使循環(huán)趨向于結(jié)束的語句, 否則容易形成死循環(huán),循環(huán)永不結(jié)束 如果表達(dá)式E的值恒為真值 死循環(huán) 遇到轉(zhuǎn)向語句結(jié)束循環(huán) 85 用用while語句實(shí)現(xiàn)循環(huán)語句實(shí)現(xiàn)循環(huán) 86 問題問題2:輸入全班:輸入全班90個(gè)學(xué)生個(gè)學(xué)生5門課程的成績,門課程的成績, 分別計(jì)算每名學(xué)生的平均成績并輸出。分別計(jì)算每名學(xué)生的平均成績并輸出。 解題思路:重復(fù)完成解題思路:重復(fù)完成90名學(xué)生成績統(tǒng)計(jì),顯然可用循環(huán)結(jié)名學(xué)生成績統(tǒng)計(jì),顯然可用循環(huán)結(jié) 構(gòu)來實(shí)現(xiàn)。重復(fù)執(zhí)行構(gòu)來實(shí)現(xiàn)。重復(fù)執(zhí)行90次循環(huán)體;循環(huán)體完成:輸入次循環(huán)體;循環(huán)體完成:輸入5門門 成績成績-計(jì)算平均成績計(jì)算平均成績-

34、輸出平均成績。輸出平均成績。 int score1,score2,score3,score4,score5; double avg = 0; int i = 1; while (i score1score2score3score4score5; avg=(score1+score2+score3+score4+score5)/5; cout“avg=”avgendl; i+; /循環(huán)體結(jié)束循環(huán)體結(jié)束 i=1 i90 輸入第i個(gè)學(xué)生成績 i=i+1 Y N 計(jì)算平均成績 輸出平均成績 while循環(huán)結(jié)構(gòu) for循環(huán)和循環(huán)和while循環(huán)的關(guān)系循環(huán)的關(guān)系 for (表達(dá)式表達(dá)式E1;表達(dá)式表達(dá)式E

35、2;表達(dá)式表達(dá)式E3) 語句語句S 可以改寫成可以改寫成 表達(dá)式表達(dá)式E1; while (表達(dá)式表達(dá)式E2) 語句語句S; 表達(dá)式表達(dá)式E3; 二者無條件等價(jià)二者無條件等價(jià) 87 for ( int i = 1; i = 100; i+) sum = sum + i; int i = 1; while (i 1) x /= 2; countxendl; v運(yùn)行結(jié)果運(yùn)行結(jié)果 88 7 3 1 while循環(huán)舉例循環(huán)舉例 v今年小明今年小明10歲,父親歲,父親39歲,問多少年后,歲,問多少年后, 父親的年齡是小明的父親的年齡是小明的2倍?倍? 89 int MingAge = 10,Father

36、Age = 39,count = 0; while(2 * MingAge != FatherAge ) MingAge+; FatherAge+; count+; cout count; 循環(huán)語句循環(huán)語句 vwhile語句語句 【例4.19】修改例4.12計(jì)算器程序,增加控制 計(jì)算器運(yùn)行的功能 運(yùn)行程序進(jìn)行一次計(jì)算后,系統(tǒng)提示: Do you want to continue?(y or n): 輸入字符y則繼續(xù)計(jì)算 輸入其它字符則結(jié)束計(jì)算 循環(huán)語句循環(huán)語句 dowhile語句語句 v 形式簡單的循環(huán)語句形式簡單的循環(huán)語句 v 一般形式一般形式 do 語句語句S while(表達(dá)式表達(dá)式E)

37、 表達(dá)式E:循環(huán)條件,一般是具有邏輯值的表達(dá)式, 判定是否繼續(xù)循環(huán);在每次執(zhí)行循環(huán)體前執(zhí)行 表達(dá)式E為真(非0),繼續(xù)執(zhí)行循環(huán)體 表達(dá)式E為假(0),則結(jié)束循環(huán) 語句S:循環(huán)體,即反復(fù)執(zhí)行的簡單語句或語句塊(復(fù)合語句) v 先無條件地執(zhí)行循環(huán)體語句先無條件地執(zhí)行循環(huán)體語句,然后判斷循環(huán)條件是否成立然后判斷循環(huán)條件是否成立 v 執(zhí)行執(zhí)行(do)循環(huán)體語句循環(huán)體語句,當(dāng)當(dāng)(while)循環(huán)條件表達(dá)式為循環(huán)條件表達(dá)式為真真,則反,則反 復(fù)執(zhí)行循環(huán)體復(fù)執(zhí)行循環(huán)體 92 表達(dá)式E 真 假 語句S 用用dowhile語句實(shí)現(xiàn)循環(huán)語句實(shí)現(xiàn)循環(huán) v 執(zhí)行過程執(zhí)行過程 (1)執(zhí)行循環(huán)體語句S (2)求解表達(dá)式E

38、,若值為真(非0),轉(zhuǎn)至第(1)步; 若值為假(0), 則結(jié)束循環(huán) (3)執(zhí)行dowhile語句下面的一個(gè)語句 v 注:循環(huán)體至少要被執(zhí)行一遍!注:循環(huán)體至少要被執(zhí)行一遍! 93 表達(dá)式E 真 假 語句S 用用dowhile語句實(shí)現(xiàn)循環(huán)語句實(shí)現(xiàn)循環(huán) 問題問題1:求:求1+2+3+100 94 for ( int i = 1; i = 100; i+) sum = sum + i; int i = 1; while (i = 100) sum = sum + i; i+; int i = 1; do sum = sum + i; i+; while (i = 100) 循環(huán)語句循環(huán)語句 vdo.

39、while語句語句 【例4.20】用dowhile語句改寫例4.19的計(jì)算 器程序 while語句首先判斷字符cont的值,因此必須先對 cont進(jìn)行賦值,如 cont = “Y”; dowhile的循環(huán)體至少執(zhí)行一次,無論cont的初始 值是什么,循環(huán)體都要執(zhí)行,也就是計(jì)算器的第一 次計(jì)算一定能夠執(zhí)行。因此,沒有必要對cont進(jìn)行 初始化 循環(huán)語句循環(huán)語句 循環(huán)語句循環(huán)語句 vdo.while語句語句 【例4.21】計(jì)算常數(shù)e的近似值(精確到累加項(xiàng) 1/(n!) 小于 0.1e-10 時(shí)為止) 計(jì)算公式 e = 1 + 1/(1!) + 1/(2!) + 1/(3!) + . + 1/(n!

40、) + . 程序步驟 計(jì)算整數(shù)n的階乘 取倒數(shù) 累加 循環(huán)語句循環(huán)語句 vdo.while語句語句 【例4.21】編程分析 循環(huán)語句選擇 第一項(xiàng)為0!,值為1 不是計(jì)算得到的,是約定的 與其它項(xiàng)存在“非共性”,選擇dowhile語句 循環(huán)體 從1!開始計(jì)算 計(jì)算e值:e = 1/0! 計(jì)算1!并取倒數(shù) 循環(huán)控制條件 1/n!0.1e-10即退出循環(huán) 循環(huán)語句循環(huán)語句 while和和dowhile循環(huán)的比較循環(huán)的比較 v凡是能用凡是能用while循環(huán)處理,都能用循環(huán)處理,都能用dowhile循環(huán)處循環(huán)處理理 dowhile循環(huán)結(jié)構(gòu)可以轉(zhuǎn)換成循環(huán)結(jié)構(gòu)可以轉(zhuǎn)換成while循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) v在一般情

41、況下,用在一般情況下,用while語句和用語句和用do-while語句處語句處理理 同一問題時(shí),若二同一問題時(shí),若二者的循環(huán)體部分是一樣者的循環(huán)體部分是一樣的,它們的,它們 的結(jié)果也一樣的結(jié)果也一樣 v但是如果但是如果while后后面的表達(dá)式一開始就為假面的表達(dá)式一開始就為假(0值值)時(shí),時(shí), 兩種循環(huán)兩種循環(huán)的結(jié)果是不同的的結(jié)果是不同的 100 while和和dowhile循環(huán)的比較循環(huán)的比較 101 #include using namespace std; int main() int i,sum=0; couti; while (i = 10) sum = sum + i; i+; c

42、out“sum=“iendl; return 0; #include using namespace std; int main() int i,sum=0; couti; do sum = sum + i; i+; while (i = 10) cout“sum=“iendl; return 0; Please enter i=?1 sum=55 Please enter i=?11 sum=0 Please enter i=?1 sum=55 Please enter i=?11 sum=11 循環(huán)語句循環(huán)語句 v三類循環(huán)語句之間的等價(jià)變換三類循環(huán)語句之間的等價(jià)變換 int i=1,sum

43、=0; /循環(huán)初始條件循環(huán)初始條件 while(i=4) sum+=i; i+; /修改循環(huán)條件修改循環(huán)條件 int i=1,sum=0; /循環(huán)初始條件循環(huán)初始條件 do sum+=i; i+;/修改循環(huán)條件修改循環(huán)條件 while(i=4); int i,sum=0; for( i=1; i=4; i+ ) sum+=i; / /* *習(xí)慣上:表達(dá)式習(xí)慣上:表達(dá)式1 1:循環(huán)初始條件;表達(dá)式:循環(huán)初始條件;表達(dá)式2 2:循環(huán):循環(huán) 終止條件;表達(dá)式終止條件;表達(dá)式3 3:修改循環(huán)條件:修改循環(huán)條件* */ / 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 循環(huán)的概念循環(huán)的概念 用三種循環(huán)語句實(shí)現(xiàn)循環(huán)用

44、三種循環(huán)語句實(shí)現(xiàn)循環(huán) 循環(huán)的嵌套循環(huán)的嵌套 改變循環(huán)執(zhí)改變循環(huán)執(zhí)行的狀態(tài)行的狀態(tài) 循環(huán)程序綜合舉例循環(huán)程序綜合舉例 103 循環(huán)的嵌套循環(huán)的嵌套 v一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為整的循環(huán)結(jié)構(gòu)稱為 循環(huán)的嵌套循環(huán)的嵌套 v內(nèi)嵌的循環(huán)中還可以嵌套循環(huán)內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)這就是多層循環(huán) v三種循環(huán)三種循環(huán)(while循環(huán)、循環(huán)、do-while循環(huán)和循環(huán)和for循環(huán)循環(huán)) 可以互相嵌套可以互相嵌套 104 循環(huán)的嵌套循環(huán)的嵌套 105 while() while() do do while(); while(); for(;) for(;)

45、 while() do while(); for(;) while() do for(;) while(); 循環(huán)語句循環(huán)語句 v循環(huán)嵌套循環(huán)嵌套 循環(huán)語句的循環(huán)體中仍然包含循環(huán)語句 先執(zhí)行內(nèi)層循環(huán),后執(zhí)行外層循環(huán) 嵌套層次一般不超過3層,以保證可讀性 循環(huán)語句循環(huán)語句 v循環(huán)嵌套循環(huán)嵌套 【例4.22】打印九九表,格式為: * 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 9 9 18 27 36 45 54 63 72 81 輸出表頭輸出表頭 輸出第輸出第n n行,每一行輸出行,每一行輸出n n個(gè)數(shù)(個(gè)數(shù)(n=1,2,9n=1,2,9) 內(nèi)層內(nèi)層循環(huán)輸出數(shù)循環(huán)輸出

46、數(shù) 外層循環(huán)輸出行外層循環(huán)輸出行 循環(huán)語句循環(huán)語句 #include #include using namespace std; int main() int i,j; coutsetw(3)*setw(4) ; for(i=1;i10;i+) coutsetw(4)i; /輸出表頭輸出表頭( (乘數(shù)乘數(shù)) ) coutendl; for(i=1;i10;i+) coutsetw(3)isetw(4) ;/輸出行號(hào)輸出行號(hào)( (被乘數(shù)被乘數(shù)) ) for(j=1;j=i;j+) coutsetw(4)i*j; /輸出表中數(shù)據(jù)輸出表中數(shù)據(jù)( (乘積乘積) ) cout 100) break; s

47、um = sum + i; for(int i=1;i=100;i+) sum = sum + i; int i = 1; while (i 100) break; sum = sum + i; i+; 用用continue語句提前結(jié)束本次循環(huán)語句提前結(jié)束本次循環(huán) v continue語句語句 用于結(jié)束本次循環(huán) 即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行 循環(huán)的判定 v 一般一般形式形式 continue; v 執(zhí)行流程示例執(zhí)行流程示例 116 continue語句示例語句示例 117 問題:輸出問題:輸出1100之內(nèi)之內(nèi)3的倍數(shù)的倍數(shù) 解題思路:用解題思路:用1100內(nèi)的每個(gè)數(shù)

48、與內(nèi)的每個(gè)數(shù)與3相除相除 -能夠被能夠被3整除,則輸出該數(shù)整除,則輸出該數(shù) -不能被不能被3整除,則跳過輸整除,則跳過輸 出,進(jìn)入下一次循環(huán)出,進(jìn)入下一次循環(huán) int counter = 0; for(int i=1;i=100;i+) if(i%3!=0) continue; cout i “ “; counter+; if(counter % 10 = 0) cout endl; continue語句和語句和break語句的區(qū)別語句的區(qū)別 v continue語句只結(jié)束本次循環(huán),不是終止整個(gè)循環(huán)語句只結(jié)束本次循環(huán),不是終止整個(gè)循環(huán) v break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)條

49、語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)條 件是否成立件是否成立 118 while(表達(dá)式表達(dá)式E1) if(表達(dá)式表達(dá)式E2) break; while(表達(dá)式表達(dá)式E1) if(表達(dá)式表達(dá)式E2) continue; 表達(dá)式 E1 真 假 表達(dá)式 E2 真 假 break 表達(dá)式 E1 真 假 表達(dá)式 E2 真 假 continue 用用break語句提前終止循環(huán)語句提前終止循環(huán) v多重循環(huán)中多重循環(huán)中,break語句只能終止其語句只能終止其 所在的循環(huán)語句所在的循環(huán)語句 119 for(int i=1;i=10;i+) int j; for(j=1;j=10;j+) coutj“”;

50、 if(i+j=10) break; coutendl“i=”i“ j=”jendl; 用用continue語句提前終止循環(huán)語句提前終止循環(huán) v多重循環(huán)中,多重循環(huán)中,continue語句只能結(jié)束語句只能結(jié)束 其所在循環(huán)的本次循環(huán)語句,繼續(xù)執(zhí)其所在循環(huán)的本次循環(huán)語句,繼續(xù)執(zhí) 行該所在循環(huán)的下次循環(huán)條件判定行該所在循環(huán)的下次循環(huán)條件判定 120 for(int i=1;i=10;i+) int j; for(j=1;j=10;j+) coutj“ “; if(i+j!=10) continue; cout“i=”i“ j=”j“ “; coutendl; 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 循環(huán)的

51、概念循環(huán)的概念 用三種循環(huán)語句實(shí)現(xiàn)循環(huán)用三種循環(huán)語句實(shí)現(xiàn)循環(huán) 循環(huán)的嵌套循環(huán)的嵌套 改變循環(huán)執(zhí)改變循環(huán)執(zhí)行的狀態(tài)行的狀態(tài) 循環(huán)程序綜合舉例循環(huán)程序綜合舉例 121 循環(huán)程序舉例循環(huán)程序舉例 v例:判斷例:判斷m是否是素?cái)?shù)是否是素?cái)?shù) 素?cái)?shù),又稱質(zhì)數(shù),是一個(gè)大于1的自然數(shù),除了1和它本 身外,不能被其他自然數(shù)整除;即該數(shù)除了1和它本身以 外不再有其他的因數(shù) 讓m被2m-1間的每個(gè)自然數(shù)除,如果都不能被整除, 則m是一個(gè)素?cái)?shù),如果被任何一個(gè)整除,則不是素?cái)?shù) 循環(huán)變量i從2到m-1,每次加1,循環(huán)體中判斷m是否能 被i值整除,如果能則提前結(jié)束循環(huán),此時(shí)i必然小于m; 如果m不能被2m-1之間的任一整數(shù)

52、整除,則在完成最 后一次循環(huán)后,i還要加1,因此i=m,然后才終止循環(huán) 在循環(huán)之后判別i的值是否小于m,若是則表明提前結(jié)束 循環(huán),則m不是素?cái)?shù);若未曾被2m-1之間任一整數(shù)整 除過,則m是素?cái)?shù) 122 循環(huán)程序舉例循環(huán)程序舉例 123 #include using namespace std; int main() int i,m; cinm; for(i=2;i=m-1;i+) if(m%i=0) break; /如果被整除,跳出循環(huán)如果被整除,跳出循環(huán) if(im) /如果循環(huán)提前終止如果循環(huán)提前終止 coutm不是素?cái)?shù)不是素?cái)?shù)endl; else coutm是素?cái)?shù)是素?cái)?shù)endl; ret

53、urn 0; v 程序改進(jìn)程序改進(jìn) 考慮是否能夠改進(jìn)算法呢? 進(jìn)一步提前算法的效率 不必被2m-1各整數(shù)去除 運(yùn)算m-2次,最笨的方法 循環(huán)程序舉例循環(huán)程序舉例 v 一個(gè)數(shù)去除比它一半還 大的數(shù),一定除不盡的 v 因此,只需被2m/2 的整數(shù)除即可 v 還能不能繼續(xù)改進(jìn)呢? 124 #include using namespace std; int main() int i,m,k; cinm; k = m/2+1; for(i=2;ik;i+) if(m%i=0) break; /如果被整除,跳出循環(huán)如果被整除,跳出循環(huán) if(ik) /如果循環(huán)提前終止如果循環(huán)提前終止 coutm不是素?cái)?shù)不

54、是素?cái)?shù)endl; else coutm是素?cái)?shù)是素?cái)?shù)=sqrt(m), 一個(gè)=sqrt(m) v 只需被2sqrt(m)的整數(shù) 除即可 v 還能不能繼續(xù)改進(jìn)呢? for(i=2;i*i=m;i+) v 省去了調(diào)用sqrt函數(shù) v 再改進(jìn)就要考慮偶數(shù)了, 請自行思考 125 #include #include using namespace std; int main() int i,m,k; cinm; k = sqrt(m); for(i=2;i=k;i+) if(m%i=0) break; /如果被整除,跳出循環(huán)如果被整除,跳出循環(huán) if(i=k) /如果循環(huán)提前終止如果循環(huán)提前終止 cou

55、tm不是素?cái)?shù)不是素?cái)?shù)endl; else coutm是素?cái)?shù)是素?cái)?shù)endl; return 0; 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vC+提供了四種用于實(shí)現(xiàn)跳轉(zhuǎn)的語句提供了四種用于實(shí)現(xiàn)跳轉(zhuǎn)的語句 用于從循環(huán)體或switch句體跳出的break語句 用于立即結(jié)束本次循環(huán)而去繼續(xù)下一次循環(huán)的 continue語句 用于跳轉(zhuǎn)到本函數(shù)內(nèi)某一語句標(biāo)號(hào)處(去

56、繼續(xù) 執(zhí)行)的goto語句 用于立即從某個(gè)函數(shù)中返回到調(diào)用該函數(shù)位置 的return語句 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vgoto語句語句 是一種用于無條件跳轉(zhuǎn)到本函數(shù)內(nèi)某一語句標(biāo) 號(hào)處(去繼續(xù)執(zhí)行)的語句 格式 goto ; 為一個(gè)標(biāo)識(shí)符,標(biāo)識(shí)符的名字由用戶任起,它 放于某一個(gè)語句之前(與語句以冒號(hào)相分割),用于指出 goto語句所要轉(zhuǎn)向的具體位置(該位置可以在本goto語句 之前或者之后) 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vgoto語句語句 【例】用goto語句計(jì)算1+2+3+100的和 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vreturn語句語句 用于立即從被調(diào)函數(shù)中返回到主調(diào)函數(shù)處, 實(shí) 現(xiàn)從被

57、調(diào)函數(shù)到主調(diào)函數(shù)的跳轉(zhuǎn)功能。具體參 見函數(shù)章節(jié)內(nèi)容 主函數(shù)中的return語句將結(jié)束整個(gè)程序 格式: return ; 表達(dá)式E的值與函數(shù)返回值的數(shù)據(jù)類型相同 函數(shù)返回值為空(void)時(shí),return語句不包含表達(dá)式。 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vreturn語句語句 控制語句舉例控制語句舉例 v【例例】任意輸入任意輸入n個(gè)數(shù)個(gè)數(shù),找出其中的最大數(shù)以及最找出其中的最大數(shù)以及最 小數(shù)并顯示出來小數(shù)并顯示出來 輸入n 循環(huán)n次,每次輸入一個(gè)數(shù)并進(jìn)行如下處理 比max大,則將該數(shù)賦值給變量max 比min大,則將該數(shù)賦值給變量min 變量max表示最大數(shù),min表示最小數(shù) 控制語句舉例控制語句

58、舉例 #include using namespace std; int main() int n; /共輸入共輸入n個(gè)數(shù)個(gè)數(shù) coutn; double x, max, min; /新輸入的數(shù)放新輸入的數(shù)放x,最大數(shù)放最大數(shù)放max,最小數(shù)放最小數(shù)放min coutPlease input n numbers:endl; for(int i=1; ix; /新輸入一個(gè)數(shù),放入變量新輸入一個(gè)數(shù),放入變量x if(i=1) /第一個(gè)數(shù)既是目前的最大數(shù),又是最小數(shù)第一個(gè)數(shù)既是目前的最大數(shù),又是最小數(shù) max=min=x; 控制語句舉例控制語句舉例 else /非第一數(shù)時(shí)非第一數(shù)時(shí) if(xmax)

59、 max=x; /新輸入的數(shù)比目前的新輸入的數(shù)比目前的max更大,更新更大,更新max if(xmin) min=x; /新輸入的數(shù)比目前的新輸入的數(shù)比目前的min還小,更新還小,更新min / for i coutmax=maxendl; coutmin=minendl; return 0; 控制語句舉例控制語句舉例 v【例例】求求1000以內(nèi)的素?cái)?shù),以每以內(nèi)的素?cái)?shù),以每10個(gè)數(shù)為一行個(gè)數(shù)為一行 輸出到屏幕輸出到屏幕 素?cái)?shù)的判別方法參見【例4.24】 對21000中的每個(gè)數(shù)進(jìn)行素?cái)?shù)判定,是素?cái)?shù) 則輸出,輸出到第10個(gè)、第20個(gè)、后換行 2 3 5 7 11 13 17 19 23 292 3

60、 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 73 79 83 89 97 101 103 107 109 113 877 881 883 887 907 911 919 929 937 941 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 947 953 967 971 977 983 991 997 控制語

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論