![南開大學(xué) 高級(jí)語(yǔ)言程序設(shè)計(jì)(C++) 第4章 控制語(yǔ)句與導(dǎo)出類型_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/25/2b79bb19-b21e-4d8f-a87d-5a442cb0431a/2b79bb19-b21e-4d8f-a87d-5a442cb0431a1.gif)
![南開大學(xué) 高級(jí)語(yǔ)言程序設(shè)計(jì)(C++) 第4章 控制語(yǔ)句與導(dǎo)出類型_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/25/2b79bb19-b21e-4d8f-a87d-5a442cb0431a/2b79bb19-b21e-4d8f-a87d-5a442cb0431a2.gif)
![南開大學(xué) 高級(jí)語(yǔ)言程序設(shè)計(jì)(C++) 第4章 控制語(yǔ)句與導(dǎo)出類型_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/25/2b79bb19-b21e-4d8f-a87d-5a442cb0431a/2b79bb19-b21e-4d8f-a87d-5a442cb0431a3.gif)
![南開大學(xué) 高級(jí)語(yǔ)言程序設(shè)計(jì)(C++) 第4章 控制語(yǔ)句與導(dǎo)出類型_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/25/2b79bb19-b21e-4d8f-a87d-5a442cb0431a/2b79bb19-b21e-4d8f-a87d-5a442cb0431a4.gif)
![南開大學(xué) 高級(jí)語(yǔ)言程序設(shè)計(jì)(C++) 第4章 控制語(yǔ)句與導(dǎo)出類型_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-6/25/2b79bb19-b21e-4d8f-a87d-5a442cb0431a/2b79bb19-b21e-4d8f-a87d-5a442cb0431a5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、張瑩張瑩 計(jì)算機(jī)與控制工程學(xué)院計(jì)算機(jī)與控制工程學(xué)院 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語(yǔ)句概述語(yǔ)句概述 1 分支語(yǔ)句分支語(yǔ)句 2 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 3 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 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+語(yǔ)句概述語(yǔ)句概述 1 分支語(yǔ)句分支語(yǔ)句 2 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 3 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 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+語(yǔ)句概述語(yǔ)句概述 vC+
2、語(yǔ)句的分類語(yǔ)句的分類 說(shuō)明語(yǔ)句(Declaration statement) 表達(dá)式語(yǔ)句(Expression statement) 空語(yǔ)句(Null statement) 控制語(yǔ)句 分支語(yǔ)句(Selection statement) 循環(huán)語(yǔ)句(iteration statement) 無(wú)條件轉(zhuǎn)向語(yǔ)句(Jump statement) 復(fù)合語(yǔ)句(Compound statement) 標(biāo)簽語(yǔ)句(Labeled statement) C+C+語(yǔ)句概述語(yǔ)句概述 v表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句 任意有效表達(dá)式都可以作為表達(dá)式語(yǔ)句 在表達(dá)式后面加上“;” 當(dāng)表達(dá)式語(yǔ)句中不包含表達(dá)式時(shí),該語(yǔ)句是空 語(yǔ)句 什么也不
3、做 只由分割符“;”構(gòu)成 常見的表達(dá)式語(yǔ)句 賦值表達(dá)式語(yǔ)句 函數(shù)調(diào)用語(yǔ)句 C+C+語(yǔ)句概述語(yǔ)句概述 v控制語(yǔ)句控制語(yǔ)句 用來(lái)控制程序中各語(yǔ)句執(zhí)行的次序 分類 條件控制語(yǔ)句 分支語(yǔ)句 循環(huán)語(yǔ)句 無(wú)條件控制語(yǔ)句 C+C+語(yǔ)句概述語(yǔ)句概述 v控制語(yǔ)句的引入控制語(yǔ)句的引入 【例4.1】設(shè)計(jì)一個(gè)計(jì)算器程序,實(shí)現(xiàn)整數(shù)的加 法 此程序功能很差 C+C+語(yǔ)句概述語(yǔ)句概述 v控制語(yǔ)句的引入控制語(yǔ)句的引入 為程序增加更多的功能 簡(jiǎn)化解決問(wèn)題的過(guò)程 例如,在計(jì)算器程序中 通過(guò)使用開關(guān)語(yǔ)句增加運(yùn)算的種類 教材P84,program4-2 通過(guò)使用循環(huán)語(yǔ)句控制程序的執(zhí)行 教材P85,program4-3 C+C+語(yǔ)句概
4、述語(yǔ)句概述 v復(fù)合語(yǔ)句復(fù)合語(yǔ)句 也稱為塊語(yǔ)句、語(yǔ)句塊(block) 若干語(yǔ)句的組合 由分割符“”和“”界定 構(gòu)成復(fù)合語(yǔ)句的語(yǔ)句 說(shuō)明語(yǔ)句 表達(dá)式語(yǔ)句 控制語(yǔ)句 復(fù)合語(yǔ)句 空語(yǔ)句 C+C+語(yǔ)句概述語(yǔ)句概述 v復(fù)合語(yǔ)句復(fù)合語(yǔ)句 主要出現(xiàn)位置 函數(shù)體 循環(huán)體 分支語(yǔ)句的分支 C+C+語(yǔ)句概述語(yǔ)句概述 v標(biāo)簽語(yǔ)句標(biāo)簽語(yǔ)句 標(biāo)簽是為語(yǔ)句起的“名字” 語(yǔ)句的標(biāo)簽為標(biāo)識(shí)符 標(biāo)簽加在語(yǔ)句所在程序代碼行,用分割符“:” 與標(biāo)號(hào)指示的語(yǔ)句分開 L: int a = 5; L是語(yǔ)句的標(biāo)號(hào) 第第4 4章章 基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型基本控制結(jié)構(gòu)與導(dǎo)出數(shù)據(jù)類型 C+語(yǔ)句概述語(yǔ)句概述 1 分支語(yǔ)句分支語(yǔ)句 2 循環(huán)語(yǔ)句循
5、環(huán)語(yǔ)句 3 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 分支語(yǔ)句分支語(yǔ)句 開關(guān)語(yǔ)句開關(guān)語(yǔ)句 switchswitch casecase defaultdefault 條件語(yǔ)句條件語(yǔ)句 ifif語(yǔ)句語(yǔ)句 ifelseifelse語(yǔ)句語(yǔ)句 上述兩種語(yǔ)句都上述兩種語(yǔ)句都 可以再嵌套條件語(yǔ)可以再嵌套條件語(yǔ) 句句 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 由關(guān)鍵字if和else組成 if() if() else 表達(dá)式E 其值能夠等價(jià)為邏輯值的任何表達(dá)式 語(yǔ)句S、S1和S2 任何類型的語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)
6、句條件語(yǔ)句 執(zhí)行流程 表達(dá)式E 語(yǔ)句S 語(yǔ)句T 真 假 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 【例4.2】如果輸入字符為字母,則輸出“YES” 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 執(zhí)行流程 表達(dá)式E 語(yǔ)句S1語(yǔ)句S2 真 假 語(yǔ)句T 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 【例4.3】輸出數(shù)值型變量a與b中的較大者 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 【例4.4】輸入一個(gè)年份,判斷是否為閏年 輸入年份 可以限定范圍,如0至9999年 判斷是否為閏年的條件 條件1 能夠被4整除 不能夠被100整除 條件2 能夠被400整除 上述兩個(gè)條件滿足其一即可 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)
7、句條件語(yǔ)句 【例4.5】若int型變量x的值小于y的值時(shí),則 將x與y的值互換;否則,將x與y的值各加上 100 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 【例4.6】從鍵盤上輸入三個(gè)整數(shù),輸出其中最 大的數(shù) 輸入三個(gè)數(shù) 比較前兩個(gè)數(shù),得到最大數(shù) 用第三個(gè)數(shù)與最大數(shù)比較 第三個(gè)數(shù)大,則輸出該數(shù) “最大數(shù)”大,則輸出“最大數(shù)” 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 條件語(yǔ)句的嵌套 條件語(yǔ)句中的某個(gè)分支(if語(yǔ)句塊或else語(yǔ)句塊) 中仍包含條件語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 if與else的匹配原則 else總是與其前面最近的if匹配 建議: if和else的語(yǔ)句塊最好
8、用“”和“”界定 當(dāng)if或else的語(yǔ)句只有一句時(shí),可以不加花括號(hào) 建議只用一條語(yǔ)句也加上花括號(hào) 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 兩種語(yǔ)句的區(qū)別 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 兩種條件語(yǔ)句舉例 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句條件語(yǔ)句 兩種條件語(yǔ)句舉例 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句的嵌套條件語(yǔ)句的嵌套 【例4.7】用條件語(yǔ)句嵌套實(shí)現(xiàn)例4.6 在if子句中嵌套 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句的嵌套條件語(yǔ)句的嵌套 【例4.7】用條件語(yǔ)句嵌套實(shí)現(xiàn)例4.6 在else子句中嵌套 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句的嵌套條件語(yǔ)句的嵌套 【例4.8】編程序,輸入一個(gè)溫度值,若輸入的 是
9、攝氏值則將其轉(zhuǎn)換為華氏值,若輸入的是華 氏值則將其轉(zhuǎn)換為攝氏值,并將轉(zhuǎn)換結(jié)果顯示 出來(lái) 轉(zhuǎn)換公式如下(其中tc表示攝氏度,tf表示華氏度) tf = tc * 1.8 + 32; tc = (tf-32) / 1.8。 分支語(yǔ)句分支語(yǔ)句 #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,方程無(wú)實(shí)根。 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v條件語(yǔ)句處理多分支的情況條件語(yǔ)句處理多分支的情
11、況 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 由關(guān)鍵字switch、case和default構(gòu)成 與break語(yǔ)句結(jié)合使用 多分支語(yǔ)句 if語(yǔ)句是兩個(gè)分支的語(yǔ)句 實(shí)現(xiàn)多分支很復(fù)雜 if.else.語(yǔ)句的多重嵌套 形式多樣 帶break語(yǔ)句與不帶break語(yǔ)句 帶default與不帶default case空語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 使用方法 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 給出進(jìn)行分支的條件,其值必須 是一個(gè)整型、字符型或枚舉型的表達(dá)式 關(guān)鍵字case用于引出一個(gè)分支。case后的各“” 均為switch后“” 的一個(gè)可能值(兩者的類型應(yīng)該相同)。實(shí)際 上,每個(gè)“case
12、:”都只起一個(gè)語(yǔ) 句標(biāo)號(hào)的作用 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 若switch后“”的取值恰與某個(gè) “”的值相同, 則直接跳轉(zhuǎn)到 “case :”后的那一分支的起始點(diǎn) 處去執(zhí)行(直到遇到break語(yǔ)句或者遇到了 switch語(yǔ)句體的右花括號(hào)后結(jié)束本switch句)。 若“”的值與任一個(gè)“”的值都不相同, 那么: 若有default分支, 則 跳轉(zhuǎn)到“default:”后的那一分支的起始點(diǎn)處去 執(zhí)行, 否則什么都不執(zhí)行(而結(jié)束本switch句) 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 不帶break的 開關(guān)語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 與break語(yǔ)句 一起使用的開 關(guān)語(yǔ)句 分
13、支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 不含 default 語(yǔ)句的 情況 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 【例4.11】若int型變量i=2, 執(zhí)行下述switch語(yǔ) 句后, 將輸出 “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; 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 多個(gè)case并列的情況 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 【例4.12】輸入成績(jī),輸出成績(jī)的等級(jí)。例如
14、成 績(jī)score=86, 運(yùn)行程序后, 將輸出“grade=B”; 若score處于90到100之間,將輸出“grade=A”; . ;若score/10不處于6到10之間(如, score為 59, 0, 123, -12等), 將輸出“grade=E” 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 【例4.13】利用開關(guān)語(yǔ)句設(shè)計(jì)計(jì)算器程序,實(shí) 現(xiàn)運(yùn)算:+、-、*、/和% 由不同的運(yùn)算產(chǎn)生分支 多個(gè)分支 分支語(yǔ)句分支語(yǔ)句 分支語(yǔ)句分支語(yǔ)句 v開關(guān)語(yǔ)句開關(guān)語(yǔ)句 【例4.14】運(yùn)輸公司對(duì)所運(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、相同或相似的語(yǔ)句或程序段分別編寫若干個(gè)相同或相似的語(yǔ)句或程序段 v 工作量大、程序冗長(zhǎng)、重復(fù)、難以閱讀和維護(hù)工作量大、程序冗長(zhǎng)、重復(fù)、難以閱讀和維護(hù) v 可實(shí)現(xiàn)要求,但不可?。∽畋康霓k法!可實(shí)現(xiàn)要求,但不可??!最笨的辦法! 循環(huán) 用循環(huán)來(lái)用循環(huán)來(lái)實(shí)現(xiàn)實(shí)現(xiàn) 62 v 用一個(gè)循環(huán)語(yǔ)句用一個(gè)循環(huán)語(yǔ)句(for語(yǔ)語(yǔ)句句)解決了重復(fù)解決了重復(fù)100次相似語(yǔ)句問(wèn)題次相似語(yǔ)句問(wèn)題 用循環(huán)來(lái)實(shí)現(xiàn)用循環(huán)來(lái)實(shí)現(xiàn) 63 問(wèn)題問(wèn)題2:輸入全班:輸入全班90個(gè)學(xué)生個(gè)學(xué)生5門課程的成績(jī),門課程的成績(jī), 分別計(jì)算每名學(xué)生的平均成績(jī)并輸出分別計(jì)算每名學(xué)生的平均成績(jī)并輸出。 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)語(yǔ)句用一個(gè)循環(huán)語(yǔ)句(while語(yǔ)句語(yǔ)句)解決了重復(fù)解決了重復(fù)90次相同程序段問(wèn)題次相同程序段問(wèn)題 循環(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)語(yǔ)句三種循環(huán)語(yǔ)句 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)語(yǔ)句實(shí)現(xiàn)循環(huán)用三種循環(huán)語(yǔ)句實(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語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(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)體中的語(yǔ)句,否則循環(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語(yǔ)句語(yǔ)句 v 最常用、功能最強(qiáng)的循環(huán)語(yǔ)句最常用、功能最強(qiáng)的循環(huán)語(yǔ)句 v 一般形式一般形式 for (表達(dá)
20、式表達(dá)式E1;表達(dá)式表達(dá)式E2;表達(dá)式表達(dá)式E3) 語(yǔ)句語(yǔ)句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)行 語(yǔ)句S:循環(huán)體,即反復(fù)執(zhí)行的語(yǔ)句或語(yǔ)句塊(復(fù)合語(yǔ)句) 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)語(yǔ)句循環(huán)語(yǔ)句 v 執(zhí)行過(guò)程執(zhí)行過(guò)程 (1)求解表達(dá)式E1 (2)求解表達(dá)式E2,若值為真(非0),執(zhí)行循環(huán)體語(yǔ)句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語(yǔ)句下面的一個(gè)語(yǔ)句 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 語(yǔ)句S 表達(dá)式E3 真 假 forfor循環(huán)循環(huán)語(yǔ)句語(yǔ)句舉例舉例 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語(yǔ)句幾點(diǎn)說(shuō)明語(yǔ)句幾點(diǎn)說(shuō)明 v “表達(dá)式表達(dá)式E1”可以省略,即不設(shè)置初值,可以省略,
23、即不設(shè)置初值,但其后但其后的分號(hào)不能省略的分號(hào)不能省略 int sum=0,i=1;/在在for語(yǔ)句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語(yǔ)句前給循環(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)無(wú)終止,即表達(dá)式循環(huán)無(wú)終止,即表達(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語(yǔ)句幾點(diǎn)說(shuō)明語(yǔ)句幾點(diǎn)說(shuō)明 v 省略省略“表達(dá)式表達(dá)式E1”和和”表達(dá)式表達(dá)式E3” int sum=0,i=1;/在在for語(yǔ)句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語(yǔ)句前給循環(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)無(wú)終止循環(huán)無(wú)終止,循環(huán)變量,循環(huán)變量i值無(wú)變化值無(wú)變化 v 語(yǔ)句語(yǔ)句S也可以省略,通常用于某種延時(shí)也可以省略,通常用于某種延時(shí) for(int i=1;i=10000;i+) ; 73 for語(yǔ)句幾點(diǎn)說(shuō)明語(yǔ)句幾點(diǎn)說(shuō)明 v “表達(dá)式表達(dá)式E1”可以是設(shè)置循環(huán)可以是設(shè)置循環(huán)變量變量初值的賦值表達(dá)式,初值的賦值表達(dá)式, 也可是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式也可是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式 int i=1,sum; for(sum=0;i=100;i+) sum=sum+i; “表達(dá)式表達(dá)式E3”也可是與循環(huán)變量無(wú)關(guān)的任意表達(dá)式,無(wú)論
26、怎樣也可是與循環(huán)變量無(wú)關(guān)的任意表達(dá)式,無(wú)論怎樣 寫,都必須使循環(huán)能正常執(zhí)行寫,都必須使循環(huán)能正常執(zhí)行 v “表達(dá)式表達(dá)式E1”和和“表達(dá)式表達(dá)式E3”可以是簡(jiǎn)單的表達(dá)式,也可是逗號(hào)可以是簡(jiǎn)單的表達(dá)式,也可是逗號(hào) 表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(dá)式,中間用逗號(hào)分隔表達(dá)式,即包含一個(gè)以上的簡(jiǎn)單表達(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語(yǔ)句
27、幾點(diǎn)說(shuō)明語(yǔ)句幾點(diǎn)說(shuō)明 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é)生成績(jī) i=i+1 Y N
28、計(jì)算平均成績(jī) 輸出平均成績(jī) v 注:注:循環(huán)體包含一個(gè)以上的語(yǔ)句,應(yīng)該用循環(huán)體包含一個(gè)以上的語(yǔ)句,應(yīng)該用花括號(hào)花括號(hào)括起括起 來(lái),作為復(fù)合語(yǔ)句出現(xiàn),如果不加花括號(hào),則循環(huán)語(yǔ)來(lái),作為復(fù)合語(yǔ)句出現(xiàn),如果不加花括號(hào),則循環(huán)語(yǔ) 句范圍只到第句范圍只到第1個(gè)分號(hào)處個(gè)分號(hào)處 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 vfor語(yǔ)句語(yǔ)句 【例4.16】讀下述程序,注意其中的三個(gè)for循 環(huán)語(yǔ)句以及所累加出的三個(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)語(yǔ)句循環(huán)語(yǔ)句 sum=0; for(i=1; ix; sum+=x; coutsum=sumendl; return 0; 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 vfor語(yǔ)句語(yǔ)句 【例4.16】 第一個(gè)for語(yǔ)句,循環(huán)10次,每次往sum上累加2 (注意,循環(huán)體中并沒有使用循環(huán)變量i之值,i只起 控制次數(shù)的作用)。 第二個(gè)for語(yǔ)句,循環(huán)10次,每次往sum上累加i(循 環(huán)體中使用了循環(huán)變量i之值)。 第三個(gè)for語(yǔ)句,循環(huán)10次,每次往sum上累加一個(gè) 從鍵盤輸入的x(注意,循環(huán)體中并沒有使用循環(huán)變 量i之值
30、) 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 vfor語(yǔ)句語(yǔ)句 【例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)語(yǔ)句循環(huán)語(yǔ)句 while語(yǔ)句語(yǔ)句 v 形式簡(jiǎn)單的循環(huán)語(yǔ)句形式簡(jiǎn)單的循環(huán)語(yǔ)句 v 一般形式一般形式 while (表達(dá)式表達(dá)式E) 語(yǔ)句語(yǔ)句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) 語(yǔ)句S:循環(huán)體,即反復(fù)執(zhí)行的簡(jiǎn)單語(yǔ)句或語(yǔ)句塊 (復(fù)合語(yǔ)句) v 先判斷表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句先判斷表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句 v 當(dāng)當(dāng)循環(huán)條件表達(dá)式為循環(huán)條件表達(dá)式為真真,就,就執(zhí)行執(zhí)行循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句 v for語(yǔ)句中省略表達(dá)式語(yǔ)句中省略表達(dá)式E1和和E3的特殊情形的特殊情形 82 表達(dá)式E 語(yǔ)句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)語(yǔ)句循環(huán)語(yǔ)句 v執(zhí)行過(guò)程執(zhí)行過(guò)程 (1)求解表達(dá)式E,若值為真(非0),轉(zhuǎn)至第(2)步; 若值為假(0),則結(jié)束循環(huán),跳轉(zhuǎn)至第(3)步 (2)執(zhí)行循環(huán)體語(yǔ)句S,轉(zhuǎn)回第(1)步繼續(xù)執(zhí)行 (3)執(zhí)行while語(yǔ)句下面的一個(gè)語(yǔ)句 84 表達(dá)式E 語(yǔ)句S 真 假 whilewhile循環(huán)語(yǔ)句循環(huán)語(yǔ)句 v若第一次判斷若第一次判斷”表達(dá)式表達(dá)式E”的值就為假時(shí),的值就為假時(shí), 會(huì)立刻結(jié)束該會(huì)立刻結(jié)束該while語(yǔ)句語(yǔ)句 作為循環(huán)體的一次也沒被執(zhí)行則結(jié)束了 該while語(yǔ)句 v循環(huán)的控制循環(huán)
33、的控制 通過(guò)表達(dá)式E控制循環(huán) 在循環(huán)體中應(yīng)給出使循環(huán)趨向于結(jié)束的語(yǔ)句, 否則容易形成死循環(huán),循環(huán)永不結(jié)束 如果表達(dá)式E的值恒為真值 死循環(huán) 遇到轉(zhuǎn)向語(yǔ)句結(jié)束循環(huán) 85 用用while語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán) 86 問(wèn)題問(wèn)題2:輸入全班:輸入全班90個(gè)學(xué)生個(gè)學(xué)生5門課程的成績(jī),門課程的成績(jī), 分別計(jì)算每名學(xué)生的平均成績(jī)并輸出。分別計(jì)算每名學(xué)生的平均成績(jī)并輸出。 解題思路:重復(fù)完成解題思路:重復(fù)完成90名學(xué)生成績(jī)統(tǒng)計(jì),顯然可用循環(huán)結(jié)名學(xué)生成績(jī)統(tǒng)計(jì),顯然可用循環(huán)結(jié) 構(gòu)來(lái)實(shí)現(xiàn)。重復(fù)執(zhí)行構(gòu)來(lái)實(shí)現(xiàn)。重復(fù)執(zhí)行90次循環(huán)體;循環(huán)體完成:輸入次循環(huán)體;循環(huán)體完成:輸入5門門 成績(jī)成績(jī)-計(jì)算平均成績(jī)計(jì)算平均成績(jī)-
34、輸出平均成績(jī)。輸出平均成績(jī)。 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é)生成績(jī) i=i+1 Y N 計(jì)算平均成績(jī) 輸出平均成績(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) 語(yǔ)句語(yǔ)句S 可以改寫成可以改寫成 表達(dá)式表達(dá)式E1; while (表達(dá)式表達(dá)式E2) 語(yǔ)句語(yǔ)句S; 表達(dá)式表達(dá)式E3; 二者無(wú)條件等價(jià)二者無(wú)條件等價(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歲,問(wèn)多少年后,歲,問(wèn)多少年后, 父親的年齡是小明的父親的年齡是小明的2倍?倍? 89 int MingAge = 10,Father
36、Age = 39,count = 0; while(2 * MingAge != FatherAge ) MingAge+; FatherAge+; count+; cout count; 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 vwhile語(yǔ)句語(yǔ)句 【例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)語(yǔ)句循環(huán)語(yǔ)句 dowhile語(yǔ)句語(yǔ)句 v 形式簡(jiǎn)單的循環(huán)語(yǔ)句形式簡(jiǎn)單的循環(huán)語(yǔ)句 v 一般形式一般形式 do 語(yǔ)句語(yǔ)句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) 語(yǔ)句S:循環(huán)體,即反復(fù)執(zhí)行的簡(jiǎn)單語(yǔ)句或語(yǔ)句塊(復(fù)合語(yǔ)句) v 先無(wú)條件地執(zhí)行循環(huán)體語(yǔ)句先無(wú)條件地執(zhí)行循環(huán)體語(yǔ)句,然后判斷循環(huán)條件是否成立然后判斷循環(huán)條件是否成立 v 執(zhí)行執(zhí)行(do)循環(huán)體語(yǔ)句循環(huán)體語(yǔ)句,當(dāng)當(dāng)(while)循環(huán)條件表達(dá)式為循環(huán)條件表達(dá)式為真真,則反,則反 復(fù)執(zhí)行循環(huán)體復(fù)執(zhí)行循環(huán)體 92 表達(dá)式E 真 假 語(yǔ)句S 用用dowhile語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán) v 執(zhí)行過(guò)程執(zhí)行過(guò)程 (1)執(zhí)行循環(huán)體語(yǔ)句S (2)求解表達(dá)式E
38、,若值為真(非0),轉(zhuǎn)至第(1)步; 若值為假(0), 則結(jié)束循環(huán) (3)執(zhí)行dowhile語(yǔ)句下面的一個(gè)語(yǔ)句 v 注:循環(huán)體至少要被執(zhí)行一遍!注:循環(huán)體至少要被執(zhí)行一遍! 93 表達(dá)式E 真 假 語(yǔ)句S 用用dowhile語(yǔ)句實(shí)現(xiàn)循環(huán)語(yǔ)句實(shí)現(xiàn)循環(huán) 問(wèn)題問(wè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)語(yǔ)句循環(huán)語(yǔ)句 vdo.
39、while語(yǔ)句語(yǔ)句 【例4.20】用dowhile語(yǔ)句改寫例4.19的計(jì)算 器程序 while語(yǔ)句首先判斷字符cont的值,因此必須先對(duì) cont進(jìn)行賦值,如 cont = “Y”; dowhile的循環(huán)體至少執(zhí)行一次,無(wú)論cont的初始 值是什么,循環(huán)體都要執(zhí)行,也就是計(jì)算器的第一 次計(jì)算一定能夠執(zhí)行。因此,沒有必要對(duì)cont進(jìn)行 初始化 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 vdo.while語(yǔ)句語(yǔ)句 【例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)語(yǔ)句循環(huán)語(yǔ)句 vdo.while語(yǔ)句語(yǔ)句 【例4.21】編程分析 循環(huán)語(yǔ)句選擇 第一項(xiàng)為0!,值為1 不是計(jì)算得到的,是約定的 與其它項(xiàng)存在“非共性”,選擇dowhile語(yǔ)句 循環(huán)體 從1!開始計(jì)算 計(jì)算e值:e = 1/0! 計(jì)算1!并取倒數(shù) 循環(huán)控制條件 1/n!0.1e-10即退出循環(huán) 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 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語(yǔ)句和用語(yǔ)句和用do-while語(yǔ)句處語(yǔ)句處理理 同一問(wèn)題時(shí),若二同一問(wèn)題時(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)語(yǔ)句循環(huán)語(yǔ)句 v三類循環(huán)語(yǔ)句之間的等價(jià)變換三類循環(huán)語(yǔ)句之間的等價(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)語(yǔ)句實(shí)現(xiàn)循環(huán)用
44、三種循環(huán)語(yǔ)句實(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)語(yǔ)句循環(huán)語(yǔ)句 v循環(huán)嵌套循環(huán)嵌套 循環(huán)語(yǔ)句的循環(huán)體中仍然包含循環(huán)語(yǔ)句 先執(zhí)行內(nèi)層循環(huán),后執(zhí)行外層循環(huán) 嵌套層次一般不超過(guò)3層,以保證可讀性 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 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)語(yǔ)句循環(huán)語(yǔ)句 #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語(yǔ)句提前結(jié)束本次循環(huán)語(yǔ)句提前結(jié)束本次循環(huán) v continue語(yǔ)句語(yǔ)句 用于結(jié)束本次循環(huán) 即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行 循環(huán)的判定 v 一般一般形式形式 continue; v 執(zhí)行流程示例執(zhí)行流程示例 116 continue語(yǔ)句示例語(yǔ)句示例 117 問(wèn)題:輸出問(wèn)題:輸出1100之內(nèi)之內(nèi)3的倍數(shù)的倍數(shù) 解題思路:用解題思路:用1100內(nèi)的每個(gè)數(shù)
48、與內(nèi)的每個(gè)數(shù)與3相除相除 -能夠被能夠被3整除,則輸出該數(shù)整除,則輸出該數(shù) -不能被不能被3整除,則跳過(guò)輸整除,則跳過(guò)輸 出,進(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語(yǔ)句和語(yǔ)句和break語(yǔ)句的區(qū)別語(yǔ)句的區(qū)別 v continue語(yǔ)句只結(jié)束本次循環(huán),不是終止整個(gè)循環(huán)語(yǔ)句只結(jié)束本次循環(huán),不是終止整個(gè)循環(huán) v break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(zhí)行循環(huán)條
49、語(yǔ)句則是結(jié)束整個(gè)循環(huán)過(guò)程,不再判斷執(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語(yǔ)句提前終止循環(huán)語(yǔ)句提前終止循環(huán) v多重循環(huán)中多重循環(huán)中,break語(yǔ)句只能終止其語(yǔ)句只能終止其 所在的循環(huán)語(yǔ)句所在的循環(huán)語(yǔ)句 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語(yǔ)句提前終止循環(huán)語(yǔ)句提前終止循環(huán) v多重循環(huán)中,多重循環(huán)中,continue語(yǔ)句只能結(jié)束語(yǔ)句只能結(jié)束 其所在循環(huán)的本次循環(huán)語(yǔ)句,繼續(xù)執(zhí)其所在循環(huán)的本次循環(huán)語(yǔ)句,繼續(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)語(yǔ)句實(shí)現(xiàn)循環(huán)用三種循環(huán)語(yǔ)句實(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ù)整 除過(guò),則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ù)了, 請(qǐng)自行思考 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+語(yǔ)句概述語(yǔ)句概述 1 分支語(yǔ)句分支語(yǔ)句 2 循環(huán)語(yǔ)句循環(huán)語(yǔ)句 3 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 4 導(dǎo)出數(shù)據(jù)類型和數(shù)組導(dǎo)出數(shù)據(jù)類型和數(shù)組 5 結(jié)構(gòu)類型與聯(lián)合類型結(jié)構(gòu)類型與聯(lián)合類型 6 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 vC+提供了四種用于實(shí)現(xiàn)跳轉(zhuǎn)的語(yǔ)句提供了四種用于實(shí)現(xiàn)跳轉(zhuǎn)的語(yǔ)句 用于從循環(huán)體或switch句體跳出的break語(yǔ)句 用于立即結(jié)束本次循環(huán)而去繼續(xù)下一次循環(huán)的 continue語(yǔ)句 用于跳轉(zhuǎn)到本函數(shù)內(nèi)某一語(yǔ)句標(biāo)號(hào)處(去
56、繼續(xù) 執(zhí)行)的goto語(yǔ)句 用于立即從某個(gè)函數(shù)中返回到調(diào)用該函數(shù)位置 的return語(yǔ)句 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 vgoto語(yǔ)句語(yǔ)句 是一種用于無(wú)條件跳轉(zhuǎn)到本函數(shù)內(nèi)某一語(yǔ)句標(biāo) 號(hào)處(去繼續(xù)執(zhí)行)的語(yǔ)句 格式 goto ; 為一個(gè)標(biāo)識(shí)符,標(biāo)識(shí)符的名字由用戶任起,它 放于某一個(gè)語(yǔ)句之前(與語(yǔ)句以冒號(hào)相分割),用于指出 goto語(yǔ)句所要轉(zhuǎn)向的具體位置(該位置可以在本goto語(yǔ)句 之前或者之后) 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 vgoto語(yǔ)句語(yǔ)句 【例】用goto語(yǔ)句計(jì)算1+2+3+100的和 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 vreturn語(yǔ)句語(yǔ)句 用于立即從被調(diào)函數(shù)中返回到主調(diào)函數(shù)處, 實(shí) 現(xiàn)從被
57、調(diào)函數(shù)到主調(diào)函數(shù)的跳轉(zhuǎn)功能。具體參 見函數(shù)章節(jié)內(nèi)容 主函數(shù)中的return語(yǔ)句將結(jié)束整個(gè)程序 格式: return ; 表達(dá)式E的值與函數(shù)返回值的數(shù)據(jù)類型相同 函數(shù)返回值為空(void)時(shí),return語(yǔ)句不包含表達(dá)式。 無(wú)條件轉(zhuǎn)向語(yǔ)句無(wú)條件轉(zhuǎn)向語(yǔ)句 vreturn語(yǔ)句語(yǔ)句 控制語(yǔ)句舉例控制語(yǔ)句舉例 v【例例】任意輸入任意輸入n個(gè)數(shù)個(gè)數(shù),找出其中的最大數(shù)以及最找出其中的最大數(shù)以及最 小數(shù)并顯示出來(lái)小數(shù)并顯示出來(lái) 輸入n 循環(huán)n次,每次輸入一個(gè)數(shù)并進(jìn)行如下處理 比max大,則將該數(shù)賦值給變量max 比min大,則將該數(shù)賦值給變量min 變量max表示最大數(shù),min表示最小數(shù) 控制語(yǔ)句舉例控制語(yǔ)句
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; 控制語(yǔ)句舉例控制語(yǔ)句舉例 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; 控制語(yǔ)句舉例控制語(yǔ)句舉例 v【例例】求求1000以內(nèi)的素?cái)?shù),以每以內(nèi)的素?cái)?shù),以每10個(gè)數(shù)為一行個(gè)數(shù)為一行 輸出到屏幕輸出到屏幕 素?cái)?shù)的判別方法參見【例4.24】 對(duì)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 控制語(yǔ)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度校園直飲水供應(yīng)與維護(hù)服務(wù)合同
- 二零二五年度跨境電商結(jié)算票據(jù)質(zhì)押貸款合同4篇
- 2025年度汽車制造專用油漆原料供應(yīng)合同集
- 生態(tài)農(nóng)業(yè)的現(xiàn)代轉(zhuǎn)型與可持續(xù)發(fā)展路徑
- 2025年度校園綠化工程安全文明施工合同范本
- 2025年度房地產(chǎn)租賃經(jīng)紀(jì)服務(wù)合同范本
- 2025年度互聯(lián)網(wǎng)廣告精準(zhǔn)投放服務(wù)合同范本
- 撤訴申請(qǐng)書 幾份
- 公告送達(dá)申請(qǐng)書
- 電影院裝修中的節(jié)能環(huán)保材料應(yīng)用案例分析
- 計(jì)算機(jī)文化基礎(chǔ)單元設(shè)計(jì)-windows
- 創(chuàng)建動(dòng)物保護(hù)家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(cè)(操作手冊(cè))
- DNA 親子鑒定手冊(cè) 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 廣東中小學(xué)教師職稱評(píng)審申報(bào)表初稿樣表
- 部編一年級(jí)語(yǔ)文下冊(cè)教材分析
- 火炬及火炬氣回收系統(tǒng)操作手冊(cè)
- 北師大七年級(jí)數(shù)學(xué)下冊(cè)教學(xué)工作計(jì)劃及教學(xué)進(jìn)表
- 菜肴成本核算(課堂PPT)
評(píng)論
0/150
提交評(píng)論