




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、張瑩張瑩 計算機與控制工程學院計算機與控制工程學院 第第4 4章章 基本控制結構與導出數(shù)據(jù)類型基本控制結構與導出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導出數(shù)據(jù)類型和數(shù)組導出數(shù)據(jù)類型和數(shù)組 5 結構類型與聯(lián)合類型結構類型與聯(lián)合類型 6 第第4 4章章 基本控制結構與導出數(shù)據(jù)類型基本控制結構與導出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導出數(shù)據(jù)類型和數(shù)組導出數(shù)據(jù)類型和數(shù)組 5 結構類型與聯(lián)合類型結構類型與聯(lián)合類型 6 C+C+語句概述語句概述 vC+
2、語句的分類語句的分類 說明語句(Declaration statement) 表達式語句(Expression statement) 空語句(Null statement) 控制語句 分支語句(Selection statement) 循環(huán)語句(iteration statement) 無條件轉(zhuǎn)向語句(Jump statement) 復合語句(Compound statement) 標簽語句(Labeled statement) C+C+語句概述語句概述 v表達式語句表達式語句 任意有效表達式都可以作為表達式語句 在表達式后面加上“;” 當表達式語句中不包含表達式時,該語句是空 語句 什么也不
3、做 只由分割符“;”構成 常見的表達式語句 賦值表達式語句 函數(shù)調(diào)用語句 C+C+語句概述語句概述 v控制語句控制語句 用來控制程序中各語句執(zhí)行的次序 分類 條件控制語句 分支語句 循環(huán)語句 無條件控制語句 C+C+語句概述語句概述 v控制語句的引入控制語句的引入 【例4.1】設計一個計算器程序,實現(xiàn)整數(shù)的加 法 此程序功能很差 C+C+語句概述語句概述 v控制語句的引入控制語句的引入 為程序增加更多的功能 簡化解決問題的過程 例如,在計算器程序中 通過使用開關語句增加運算的種類 教材P84,program4-2 通過使用循環(huán)語句控制程序的執(zhí)行 教材P85,program4-3 C+C+語句概
4、述語句概述 v復合語句復合語句 也稱為塊語句、語句塊(block) 若干語句的組合 由分割符“”和“”界定 構成復合語句的語句 說明語句 表達式語句 控制語句 復合語句 空語句 C+C+語句概述語句概述 v復合語句復合語句 主要出現(xiàn)位置 函數(shù)體 循環(huán)體 分支語句的分支 C+C+語句概述語句概述 v標簽語句標簽語句 標簽是為語句起的“名字” 語句的標簽為標識符 標簽加在語句所在程序代碼行,用分割符“:” 與標號指示的語句分開 L: int a = 5; L是語句的標號 第第4 4章章 基本控制結構與導出數(shù)據(jù)類型基本控制結構與導出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循
5、環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導出數(shù)據(jù)類型和數(shù)組導出數(shù)據(jù)類型和數(shù)組 5 結構類型與聯(lián)合類型結構類型與聯(lián)合類型 6 分支語句分支語句 開關語句開關語句 switchswitch casecase defaultdefault 條件語句條件語句 ifif語句語句 ifelseifelse語句語句 上述兩種語句都上述兩種語句都 可以再嵌套條件語可以再嵌套條件語 句句 分支語句分支語句 分支語句分支語句 v條件語句條件語句 由關鍵字if和else組成 if() if() else 表達式E 其值能夠等價為邏輯值的任何表達式 語句S、S1和S2 任何類型的語句 分支語句分支語句 v條件語
6、句條件語句 執(zhí)行流程 表達式E 語句S 語句T 真 假 分支語句分支語句 v條件語句條件語句 【例4.2】如果輸入字符為字母,則輸出“YES” 分支語句分支語句 v條件語句條件語句 執(zhí)行流程 表達式E 語句S1語句S2 真 假 語句T 分支語句分支語句 v條件語句條件語句 【例4.3】輸出數(shù)值型變量a與b中的較大者 分支語句分支語句 v條件語句條件語句 【例4.4】輸入一個年份,判斷是否為閏年 輸入年份 可以限定范圍,如0至9999年 判斷是否為閏年的條件 條件1 能夠被4整除 不能夠被100整除 條件2 能夠被400整除 上述兩個條件滿足其一即可 分支語句分支語句 分支語句分支語句 v條件語
7、句條件語句 【例4.5】若int型變量x的值小于y的值時,則 將x與y的值互換;否則,將x與y的值各加上 100 分支語句分支語句 v條件語句條件語句 【例4.6】從鍵盤上輸入三個整數(shù),輸出其中最 大的數(shù) 輸入三個數(shù) 比較前兩個數(shù),得到最大數(shù) 用第三個數(shù)與最大數(shù)比較 第三個數(shù)大,則輸出該數(shù) “最大數(shù)”大,則輸出“最大數(shù)” 分支語句分支語句 分支語句分支語句 v條件語句條件語句 條件語句的嵌套 條件語句中的某個分支(if語句塊或else語句塊) 中仍包含條件語句 分支語句分支語句 v條件語句條件語句 if與else的匹配原則 else總是與其前面最近的if匹配 建議: if和else的語句塊最好
8、用“”和“”界定 當if或else的語句只有一句時,可以不加花括號 建議只用一條語句也加上花括號 分支語句分支語句 v條件語句條件語句 兩種語句的區(qū)別 分支語句分支語句 v條件語句條件語句 兩種條件語句舉例 分支語句分支語句 v條件語句條件語句 兩種條件語句舉例 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.7】用條件語句嵌套實現(xiàn)例4.6 在if子句中嵌套 分支語句分支語句 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.7】用條件語句嵌套實現(xiàn)例4.6 在else子句中嵌套 分支語句分支語句 v條件語句的嵌套條件語句的嵌套 【例4.8】編程序,輸入一個溫度值,若輸入的 是
9、攝氏值則將其轉(zhuǎn)換為華氏值,若輸入的是華 氏值則將其轉(zhuǎn)換為攝氏值,并將轉(zhuǎn)換結果顯示 出來 轉(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ù)轉(zhuǎn)換時所需常數(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 /字母輸入有錯字母輸入有錯! tc=tf=0; /將將tc及及tf均置為均置為0 coutThe temperature is:; couttcC=tf0,方程有兩個不同實根; 若delta0,方程無實根。 分支語句分支語句 分支語句分支語句 分支語句分支語句 v條件語句處理多分支的情況條件語句處理多分支的情
11、況 分支語句分支語句 v開關語句開關語句 由關鍵字switch、case和default構成 與break語句結合使用 多分支語句 if語句是兩個分支的語句 實現(xiàn)多分支很復雜 if.else.語句的多重嵌套 形式多樣 帶break語句與不帶break語句 帶default與不帶default case空語句 分支語句分支語句 v開關語句開關語句 使用方法 分支語句分支語句 v開關語句開關語句 給出進行分支的條件,其值必須 是一個整型、字符型或枚舉型的表達式 關鍵字case用于引出一個分支。case后的各“” 均為switch后“” 的一個可能值(兩者的類型應該相同)。實際 上,每個“case
12、:”都只起一個語 句標號的作用 分支語句分支語句 v開關語句開關語句 若switch后“”的取值恰與某個 “”的值相同, 則直接跳轉(zhuǎn)到 “case :”后的那一分支的起始點 處去執(zhí)行(直到遇到break語句或者遇到了 switch語句體的右花括號后結束本switch句)。 若“”的值與任一個“”的值都不相同, 那么: 若有default分支, 則 跳轉(zhuǎn)到“default:”后的那一分支的起始點處去 執(zhí)行, 否則什么都不執(zhí)行(而結束本switch句) 分支語句分支語句 v開關語句開關語句 不帶break的 開關語句 分支語句分支語句 v開關語句開關語句 與break語句 一起使用的開 關語句 分
13、支語句分支語句 v開關語句開關語句 不含 default 語句的 情況 分支語句分支語句 v開關語句開關語句 【例4.11】若int型變量i=2, 執(zhí)行下述switch語 句后, 將輸出 “i=2”以及“i=2”兩行;若i=5, 則什么也不輸出(而結束該switch句);若i=1 時,要輸出3行“i=1” switch (i) case 1: couti=iendl; case 2: couti=iendl; case 3: couti=iendl; 分支語句分支語句 v開關語句開關語句 多個case并列的情況 分支語句分支語句 v開關語句開關語句 【例4.12】輸入成績,輸出成績的等級。例如
14、成 績score=86, 運行程序后, 將輸出“grade=B”; 若score處于90到100之間,將輸出“grade=A”; . ;若score/10不處于6到10之間(如, score為 59, 0, 123, -12等), 將輸出“grade=E” 分支語句分支語句 分支語句分支語句 v開關語句開關語句 【例4.13】利用開關語句設計計算器程序,實 現(xiàn)運算:+、-、*、/和% 由不同的運算產(chǎn)生分支 多個分支 分支語句分支語句 分支語句分支語句 v開關語句開關語句 【例4.14】運輸公司對所運貨物實行分段計費。 設運輸里程為s,則運費打折情況如下: 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; /重復寫重復寫89個個相同相同的的程序段程序段 61 v 分別編寫若干個
16、相同或相似的語句或程序段分別編寫若干個相同或相似的語句或程序段 v 工作量大、程序冗長、重復、難以閱讀和維護工作量大、程序冗長、重復、難以閱讀和維護 v 可實現(xiàn)要求,但不可取!最笨的辦法!可實現(xiàn)要求,但不可??!最笨的辦法! 循環(huán) 用循環(huán)來用循環(huán)來實現(xiàn)實現(xiàn) 62 v 用一個循環(huán)語句用一個循環(huán)語句(for語語句句)解決了重復解決了重復100次相似語句問題次相似語句問題 用循環(huán)來實現(xiàn)用循環(huán)來實現(xiàn) 63 問題問題2:輸入全班:輸入全班90個學生個學生5門課程的成績,門課程的成績, 分別計算每名學生的平均成績并輸出分別計算每名學生的平均成績并輸出。 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 用一個循環(huán)語句用一個循環(huán)語句(while語句語句)解決了重復解決了重復90次相同程序段問題次相同程序段問題 循環(huán)循環(huán) (Loop) v根據(jù)一定的根據(jù)一定的條件條件控制一段程序控制一段程序重復執(zhí)行重復執(zhí)行若干若干次次 v循環(huán)結構,又稱重復結構循環(huán)結構,又稱重復結構 v構成
18、構成有效循環(huán)的條件:循環(huán)體和有效循環(huán)的條件:循環(huán)體和循環(huán)結束條件循環(huán)結束條件 v三種循環(huán)語句三種循環(huán)語句 for循環(huán) while循環(huán) do.while循環(huán) 64 循環(huán)結構程序設計循環(huán)結構程序設計 循環(huán)的概念循環(huán)的概念 用三種循環(huán)語句實現(xiàn)循環(huán)用三種循環(huán)語句實現(xiàn)循環(huán) 循環(huán)的嵌套循環(huán)的嵌套 改變循環(huán)執(zhí)改變循環(huán)執(zhí)行的狀態(tài)行的狀態(tài) 循環(huán)程序示例循環(huán)程序示例 65 用用for語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán) 66 i=1 i100 sum=sum+i i=i+1 Y N sum=0 輸出sum for 循 環(huán) 結 構 v 開始時聲明變量開始時聲明變量sum,并賦初始值,并賦初始值0 v 進入進入for循環(huán)結構循環(huán)
19、結構 “int i=1”聲明變量i并設置初值為1 “i=100”是指定循環(huán)條件:當循環(huán)變量i的值小于或等于 100時,循環(huán)執(zhí)行循環(huán)體中的語句,否則循環(huán)結束 “sum=sum+i”是循環(huán)體,執(zhí)行累加 “i+”的作用是循環(huán)變量i值不斷變化,以便最終滿足終止循環(huán)條件 v 循環(huán)結束后繼續(xù)執(zhí)行輸出累加的結果循環(huán)結束后繼續(xù)執(zhí)行輸出累加的結果 int sum = 0; for ( int i = 1; i = 100; i+) sum = sum + i; cout sum = sum endl; for語句語句 v 最常用、功能最強的循環(huán)語句最常用、功能最強的循環(huán)語句 v 一般形式一般形式 for (表達
20、式表達式E1;表達式表達式E2;表達式表達式E3) 語句語句S 表達式E1:聲明并初始化循環(huán)變量;只在循環(huán)開始執(zhí)行1次 表達式E2:循環(huán)條件,一般是具有邏輯值的表達式,判定是否繼續(xù)循環(huán); 在每次執(zhí)行循環(huán)體前執(zhí)行,如為真繼續(xù)執(zhí)行循環(huán)體 表達式E3:循環(huán)變量調(diào)整,使得最終結束循環(huán); 執(zhí)行完循環(huán)體后進行 語句S:循環(huán)體,即反復執(zhí)行的語句或語句塊(復合語句) 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)求解表達式E1 (2)求解表達式E2,若值為真(非0),執(zhí)行循環(huán)體語句S, 然后執(zhí)行第(3)步;若為假(0),則結束循環(huán),轉(zhuǎn)至第(5)步 (3)求解表達式E3 (4)轉(zhuǎn)回步驟(2)繼續(xù)執(zhí)行 (5)循環(huán)結束,執(zhí)行for語句下面的一個語句 69 表達式表達式E1表達式表達式E2 表
22、達式表達式E3表達式表達式E2 表達式表達式E3表達式表達式E2 表達式表達式E3表達式表達式E2 表達式E1 表達式E2 語句S 表達式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運行結果運行結果 71 6 4 2 v注意注意”0”沒有被輸出沒有被輸出 for語句幾點說明語句幾點說明 v “表達式表達式E1”可以省略,即不設置初值,可以省略,
23、即不設置初值,但其后但其后的分號不能省略的分號不能省略 int sum=0,i=1;/在在for語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行 for(;i=100; i+) sum=sum+i; /省略省略了了”表達式表達式E1” v “表達式表達式E2”也可以也可以省略省略,即不設置和檢查循環(huán)條件,即不設置和檢查循環(huán)條件 for(int i=1;i+) sum=sum+i;/循環(huán)無終止,即表達式循環(huán)無終止,即表達式E2始終為真始終為真 v “表達式表達式E3”也可以省略也可以省略,但通常另外設法保證循環(huán)能正常結束,但通常另外設法保證循環(huán)能正常結束 for(
24、int i=1;i=100;) /省略了省略了”表達式表達式E3” sum=sum+i; i+; /在循環(huán)體中控制循環(huán)變量增值,效果一樣在循環(huán)體中控制循環(huán)變量增值,效果一樣 72 for語句幾點說明語句幾點說明 v 省略省略“表達式表達式E1”和和”表達式表達式E3” int sum=0,i=1;/在在for語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行語句前給循環(huán)變量賦初值,保證循環(huán)正常執(zhí)行 for(;i=100;) /省略省略了了”表達式表達式E1”和和”表達式表達式E3” sum=sum+i; i+; /在循環(huán)體中控制循環(huán)變量增值,效果一樣在循環(huán)體中控制循環(huán)變量增值,效果一樣 v 甚至可以省略
25、甚至可以省略3個表達式個表達式 for(;) sum=sum+i;/循環(huán)無終止循環(huán)無終止,循環(huán)變量,循環(huán)變量i值無變化值無變化 v 語句語句S也可以省略,通常用于某種延時也可以省略,通常用于某種延時 for(int i=1;i=10000;i+) ; 73 for語句幾點說明語句幾點說明 v “表達式表達式E1”可以是設置循環(huán)可以是設置循環(huán)變量變量初值的賦值表達式,初值的賦值表達式, 也可是與循環(huán)變量無關的其他表達式也可是與循環(huán)變量無關的其他表達式 int i=1,sum; for(sum=0;i=100;i+) sum=sum+i; “表達式表達式E3”也可是與循環(huán)變量無關的任意表達式,無論
26、怎樣也可是與循環(huán)變量無關的任意表達式,無論怎樣 寫,都必須使循環(huán)能正常執(zhí)行寫,都必須使循環(huán)能正常執(zhí)行 v “表達式表達式E1”和和“表達式表達式E3”可以是簡單的表達式,也可是逗號可以是簡單的表達式,也可是逗號 表達式,即包含一個以上的簡單表達式,中間用逗號分隔表達式,即包含一個以上的簡單表達式,中間用逗號分隔 for(sum=0,i=1;i=100;i+) sum=sum+i; for(i=0,j=100;i=j;i+,j-) k=i+j; 注:注:逗號表達式內(nèi)左至右順序求解,整個逗號表達的值為最右逗號表達式內(nèi)左至右順序求解,整個逗號表達的值為最右 邊表達式的值邊表達式的值 74 for語句
27、幾點說明語句幾點說明 v “表達式表達式E2”一般是關系表達式一般是關系表達式(如如i=100)或邏輯表達式或邏輯表達式(如如 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)體結束循環(huán)體結束 i=1 i90 輸入第i個學生成績 i=i+1 Y N
28、計算平均成績 輸出平均成績 v 注:注:循環(huán)體包含一個以上的語句,應該用循環(huán)體包含一個以上的語句,應該用花括號花括號括起括起 來,作為復合語句出現(xiàn),如果不加花括號,則循環(huán)語來,作為復合語句出現(xiàn),如果不加花括號,則循環(huán)語 句范圍只到第句范圍只到第1個分號處個分號處 循環(huán)語句循環(huán)語句 vfor語句語句 【例4.16】讀下述程序,注意其中的三個for循 環(huán)語句以及所累加出的三個不同的sum結果 #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】 第一個for語句,循環(huán)10次,每次往sum上累加2 (注意,循環(huán)體中并沒有使用循環(huán)變量i之值,i只起 控制次數(shù)的作用)。 第二個for語句,循環(huán)10次,每次往sum上累加i(循 環(huán)體中使用了循環(huán)變量i之值)。 第三個for語句,循環(huán)10次,每次往sum上累加一個 從鍵盤輸入的x(注意,循環(huán)體中并沒有使用循環(huán)變 量i之值
30、) 循環(huán)語句循環(huán)語句 vfor語句語句 【例4.17】設計程序輸出Fibonacci數(shù)列的前20 項,要求每行輸出5個數(shù)據(jù) Fibonacci數(shù)列: 除了第0項和第1項外,每一項都是由類似方法產(chǎn)生, 即前兩項之和;所以求當前項時,只需要記住前兩 項;程序不需要為每一項設置專用變量。 1n 1)-fib(n2)-fib(n 1n 1 0n 0 fib(n) 循環(huán)語句循環(huán)語句 while語句語句 v 形式簡單的循環(huán)語句形式簡單的循環(huán)語句 v 一般形式一般形式 while (表達式表達式E) 語句語句S 表達式E:循環(huán)條件,一般是具有邏輯值的表達式, 判定是否繼續(xù)循環(huán);在每次執(zhí)行循環(huán)體前執(zhí)行 表達式
31、E為真(非0),繼續(xù)執(zhí)行循環(huán)體 表達式E為假(0),則結束循環(huán) 語句S:循環(huán)體,即反復執(zhí)行的簡單語句或語句塊 (復合語句) v 先判斷表達式,后執(zhí)行循環(huán)體語句先判斷表達式,后執(zhí)行循環(huán)體語句 v 當當循環(huán)條件表達式為循環(huán)條件表達式為真真,就,就執(zhí)行執(zhí)行循環(huán)體語句循環(huán)體語句 v for語句中省略表達式語句中省略表達式E1和和E3的特殊情形的特殊情形 82 表達式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)求解表達式E,若值為真(非0),轉(zhuǎn)至第(2)步; 若值為假(0),則結束循環(huán),跳轉(zhuǎn)至第(3)步 (2)執(zhí)行循環(huán)體語句S,轉(zhuǎn)回第(1)步繼續(xù)執(zhí)行 (3)執(zhí)行while語句下面的一個語句 84 表達式E 語句S 真 假 whilewhile循環(huán)語句循環(huán)語句 v若第一次判斷若第一次判斷”表達式表達式E”的值就為假時,的值就為假時, 會立刻結束該會立刻結束該while語句語句 作為循環(huán)體的一次也沒被執(zhí)行則結束了 該while語句 v循環(huán)的控制循環(huán)
33、的控制 通過表達式E控制循環(huán) 在循環(huán)體中應給出使循環(huán)趨向于結束的語句, 否則容易形成死循環(huán),循環(huán)永不結束 如果表達式E的值恒為真值 死循環(huán) 遇到轉(zhuǎn)向語句結束循環(huán) 85 用用while語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán) 86 問題問題2:輸入全班:輸入全班90個學生個學生5門課程的成績,門課程的成績, 分別計算每名學生的平均成績并輸出。分別計算每名學生的平均成績并輸出。 解題思路:重復完成解題思路:重復完成90名學生成績統(tǒng)計,顯然可用循環(huán)結名學生成績統(tǒng)計,顯然可用循環(huán)結 構來實現(xiàn)。重復執(zhí)行構來實現(xiàn)。重復執(zhí)行90次循環(huán)體;循環(huán)體完成:輸入次循環(huán)體;循環(huán)體完成:輸入5門門 成績成績-計算平均成績計算平均成績-
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)體結束循環(huán)體結束 i=1 i90 輸入第i個學生成績 i=i+1 Y N 計算平均成績 輸出平均成績 while循環(huán)結構 for循環(huán)和循環(huán)和while循環(huán)的關系循環(huán)的關系 for (表達式表達式E1;表達式表達式E
35、2;表達式表達式E3) 語句語句S 可以改寫成可以改寫成 表達式表達式E1; while (表達式表達式E2) 語句語句S; 表達式表達式E3; 二者無條件等價二者無條件等價 87 for ( int i = 1; i = 100; i+) sum = sum + i; int i = 1; while (i 1) x /= 2; countxendl; v運行結果運行結果 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計算器程序,增加控制 計算器運行的功能 運行程序進行一次計算后,系統(tǒng)提示: Do you want to continue?(y or n): 輸入字符y則繼續(xù)計算 輸入其它字符則結束計算 循環(huán)語句循環(huán)語句 dowhile語句語句 v 形式簡單的循環(huán)語句形式簡單的循環(huán)語句 v 一般形式一般形式 do 語句語句S while(表達式表達式E)
37、 表達式E:循環(huán)條件,一般是具有邏輯值的表達式, 判定是否繼續(xù)循環(huán);在每次執(zhí)行循環(huán)體前執(zhí)行 表達式E為真(非0),繼續(xù)執(zhí)行循環(huán)體 表達式E為假(0),則結束循環(huán) 語句S:循環(huán)體,即反復執(zhí)行的簡單語句或語句塊(復合語句) v 先無條件地執(zhí)行循環(huán)體語句先無條件地執(zhí)行循環(huán)體語句,然后判斷循環(huán)條件是否成立然后判斷循環(huán)條件是否成立 v 執(zhí)行執(zhí)行(do)循環(huán)體語句循環(huán)體語句,當當(while)循環(huán)條件表達式為循環(huán)條件表達式為真真,則反,則反 復執(zhí)行循環(huán)體復執(zhí)行循環(huán)體 92 表達式E 真 假 語句S 用用dowhile語句實現(xiàn)循環(huán)語句實現(xiàn)循環(huán) v 執(zhí)行過程執(zhí)行過程 (1)執(zhí)行循環(huán)體語句S (2)求解表達式E
38、,若值為真(非0),轉(zhuǎn)至第(1)步; 若值為假(0), 則結束循環(huán) (3)執(zhí)行dowhile語句下面的一個語句 v 注:循環(huán)體至少要被執(zhí)行一遍!注:循環(huán)體至少要被執(zhí)行一遍! 93 表達式E 真 假 語句S 用用dowhile語句實現(xiàn)循環(huán)語句實現(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的計算 器程序 while語句首先判斷字符cont的值,因此必須先對 cont進行賦值,如 cont = “Y”; dowhile的循環(huán)體至少執(zhí)行一次,無論cont的初始 值是什么,循環(huán)體都要執(zhí)行,也就是計算器的第一 次計算一定能夠執(zhí)行。因此,沒有必要對cont進行 初始化 循環(huán)語句循環(huán)語句 循環(huán)語句循環(huán)語句 vdo.while語句語句 【例4.21】計算常數(shù)e的近似值(精確到累加項 1/(n!) 小于 0.1e-10 時為止) 計算公式 e = 1 + 1/(1!) + 1/(2!) + 1/(3!) + . + 1/(n!
40、) + . 程序步驟 計算整數(shù)n的階乘 取倒數(shù) 累加 循環(huán)語句循環(huán)語句 vdo.while語句語句 【例4.21】編程分析 循環(huán)語句選擇 第一項為0!,值為1 不是計算得到的,是約定的 與其它項存在“非共性”,選擇dowhile語句 循環(huán)體 從1!開始計算 計算e值:e = 1/0! 計算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)結構可以轉(zhuǎn)換成循環(huán)結構可以轉(zhuǎn)換成while循環(huán)結構循環(huán)結構 v在一般情
41、況下,用在一般情況下,用while語句和用語句和用do-while語句處語句處理理 同一問題時,若二同一問題時,若二者的循環(huán)體部分是一樣者的循環(huán)體部分是一樣的,它們的,它們 的結果也一樣的結果也一樣 v但是如果但是如果while后后面的表達式一開始就為假面的表達式一開始就為假(0值值)時,時, 兩種循環(huán)兩種循環(huán)的結果是不同的的結果是不同的 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)語句之間的等價變換三類循環(huán)語句之間的等價變換 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; / /* *習慣上:表達式習慣上:表達式1 1:循環(huán)初始條件;表達式:循環(huán)初始條件;表達式2 2:循環(huán):循環(huán) 終止條件;表達式終止條件;表達式3 3:修改循環(huán)條件:修改循環(huán)條件* */ / 循環(huán)結構程序設計循環(huán)結構程序設計 循環(huán)的概念循環(huán)的概念 用三種循環(huán)語句實現(xiàn)循環(huán)用
44、三種循環(huán)語句實現(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一個循環(huán)體內(nèi)又包含另一個完一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結構稱為整的循環(huán)結構稱為 循環(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個數(shù)(個數(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) ;/輸出行號輸出行號( (被乘數(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語句提前結束本次循環(huán)語句提前結束本次循環(huán) v continue語句語句 用于結束本次循環(huán) 即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行 循環(huán)的判定 v 一般一般形式形式 continue; v 執(zhí)行流程示例執(zhí)行流程示例 116 continue語句示例語句示例 117 問題:輸出問題:輸出1100之內(nèi)之內(nèi)3的倍數(shù)的倍數(shù) 解題思路:用解題思路:用1100內(nèi)的每個數(shù)
48、與內(nèi)的每個數(shù)與3相除相除 -能夠被能夠被3整除,則輸出該數(shù)整除,則輸出該數(shù) -不能被不能被3整除,則跳過輸整除,則跳過輸 出,進入下一次循環(huá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語句只結束本次循環(huán),不是終止整個循環(huán)語句只結束本次循環(huán),不是終止整個循環(huán) v break語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)條
49、語句則是結束整個循環(huán)過程,不再判斷執(zhí)行循環(huán)條 件是否成立件是否成立 118 while(表達式表達式E1) if(表達式表達式E2) break; while(表達式表達式E1) if(表達式表達式E2) continue; 表達式 E1 真 假 表達式 E2 真 假 break 表達式 E1 真 假 表達式 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語句只能結束語句只能結束 其所在循環(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)結構程序設計循環(huán)結構程序設計 循環(huán)的
51、概念循環(huán)的概念 用三種循環(huán)語句實現(xiàn)循環(huán)用三種循環(huán)語句實現(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是否是素數(shù)是否是素數(shù) 素數(shù),又稱質(zhì)數(shù),是一個大于1的自然數(shù),除了1和它本 身外,不能被其他自然數(shù)整除;即該數(shù)除了1和它本身以 外不再有其他的因數(shù) 讓m被2m-1間的每個自然數(shù)除,如果都不能被整除, 則m是一個素數(shù),如果被任何一個整除,則不是素數(shù) 循環(huán)變量i從2到m-1,每次加1,循環(huán)體中判斷m是否能 被i值整除,如果能則提前結束循環(huán),此時i必然小于m; 如果m不能被2m-1之間的任一整數(shù)
52、整除,則在完成最 后一次循環(huán)后,i還要加1,因此i=m,然后才終止循環(huán) 在循環(huán)之后判別i的值是否小于m,若是則表明提前結束 循環(huán),則m不是素數(shù);若未曾被2m-1之間任一整數(shù)整 除過,則m是素數(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不是素數(shù)不是素數(shù)endl; else coutm是素數(shù)是素數(shù)endl; ret
53、urn 0; v 程序改進程序改進 考慮是否能夠改進算法呢? 進一步提前算法的效率 不必被2m-1各整數(shù)去除 運算m-2次,最笨的方法 循環(huán)程序舉例循環(huán)程序舉例 v 一個數(shù)去除比它一半還 大的數(shù),一定除不盡的 v 因此,只需被2m/2 的整數(shù)除即可 v 還能不能繼續(xù)改進呢? 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不是素數(shù)不
54、是素數(shù)endl; else coutm是素數(shù)是素數(shù)=sqrt(m), 一個=sqrt(m) v 只需被2sqrt(m)的整數(shù) 除即可 v 還能不能繼續(xù)改進呢? for(i=2;i*i=m;i+) v 省去了調(diào)用sqrt函數(shù) v 再改進就要考慮偶數(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不是素數(shù)不是素數(shù)endl; else coutm是素數(shù)是素數(shù)endl; return 0; 第第4 4章章 基本控制結構與導出數(shù)據(jù)類型基本控制結構與導出數(shù)據(jù)類型 C+語句概述語句概述 1 分支語句分支語句 2 循環(huán)語句循環(huán)語句 3 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 4 導出數(shù)據(jù)類型和數(shù)組導出數(shù)據(jù)類型和數(shù)組 5 結構類型與聯(lián)合類型結構類型與聯(lián)合類型 6 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vC+提供了四種用于實現(xiàn)跳轉(zhuǎn)的語句提供了四種用于實現(xiàn)跳轉(zhuǎn)的語句 用于從循環(huán)體或switch句體跳出的break語句 用于立即結束本次循環(huán)而去繼續(xù)下一次循環(huán)的 continue語句 用于跳轉(zhuǎn)到本函數(shù)內(nèi)某一語句標號處(去
56、繼續(xù) 執(zhí)行)的goto語句 用于立即從某個函數(shù)中返回到調(diào)用該函數(shù)位置 的return語句 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vgoto語句語句 是一種用于無條件跳轉(zhuǎn)到本函數(shù)內(nèi)某一語句標 號處(去繼續(xù)執(zhí)行)的語句 格式 goto ; 為一個標識符,標識符的名字由用戶任起,它 放于某一個語句之前(與語句以冒號相分割),用于指出 goto語句所要轉(zhuǎn)向的具體位置(該位置可以在本goto語句 之前或者之后) 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vgoto語句語句 【例】用goto語句計算1+2+3+100的和 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vreturn語句語句 用于立即從被調(diào)函數(shù)中返回到主調(diào)函數(shù)處, 實 現(xiàn)從被
57、調(diào)函數(shù)到主調(diào)函數(shù)的跳轉(zhuǎn)功能。具體參 見函數(shù)章節(jié)內(nèi)容 主函數(shù)中的return語句將結束整個程序 格式: return ; 表達式E的值與函數(shù)返回值的數(shù)據(jù)類型相同 函數(shù)返回值為空(void)時,return語句不包含表達式。 無條件轉(zhuǎn)向語句無條件轉(zhuǎn)向語句 vreturn語句語句 控制語句舉例控制語句舉例 v【例例】任意輸入任意輸入n個數(shù)個數(shù),找出其中的最大數(shù)以及最找出其中的最大數(shù)以及最 小數(shù)并顯示出來小數(shù)并顯示出來 輸入n 循環(huán)n次,每次輸入一個數(shù)并進行如下處理 比max大,則將該數(shù)賦值給變量max 比min大,則將該數(shù)賦值給變量min 變量max表示最大數(shù),min表示最小數(shù) 控制語句舉例控制語句
58、舉例 #include using namespace std; int main() int n; /共輸入共輸入n個數(shù)個數(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; /新輸入一個數(shù),放入變量新輸入一個數(shù),放入變量x if(i=1) /第一個數(shù)既是目前的最大數(shù),又是最小數(shù)第一個數(shù)既是目前的最大數(shù),又是最小數(shù) max=min=x; 控制語句舉例控制語句舉例 else /非第一數(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)的素數(shù),以每以內(nèi)的素數(shù),以每10個數(shù)為一行個數(shù)為一行 輸出到屏幕輸出到屏幕 素數(shù)的判別方法參見【例4.24】 對21000中的每個數(shù)進行素數(shù)判定,是素數(shù) 則輸出,輸出到第10個、第20個、后換行 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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培養(yǎng)跨行業(yè)技能的重要性計劃
- 七年級下冊《幾何圖形與圖文信息問題》課件與練習
- 2025年氣體摻混設備項目建議書
- 2025年中文信息處理平臺項目發(fā)展計劃
- 2025年衛(wèi)星數(shù)據(jù)采集系統(tǒng)項目發(fā)展計劃
- 2025年EMI屏蔽材料項目發(fā)展計劃
- 冷鏈物流溫度監(jiān)控實施細節(jié)
- 電影制作與發(fā)行合作框架
- 2025年活性白土項目建議書
- 案場物業(yè)經(jīng)理年終工作總結
- 連續(xù)性腎替代治療抗菌藥物劑量調(diào)整專家共識(2024年版)解讀
- 腦梗死臨床表現(xiàn)護理
- 新高考英語|語法專項之括號法突破長難句 講解課件-2025屆高三英語上學期一輪復習專項
- 《光通信技術簡介》課件
- 2024年廣西區(qū)公務員錄用考試《行測》真題及答案解析
- 健康體檢基礎知識培訓
- 【課件】Unit+6+section+B+1a~2b+課件人教版七年級英語上冊
- Unit 3 We should obey the rules.Lesson 13(教學設計)-2023-2024學年人教精通版英語五年級下冊
- 2024年平面設計師技能及理論知識考試題庫(附含答案)
- 2024年農(nóng)業(yè)農(nóng)村基礎知識考試題庫(附答案)
- 2023新一代變電站二次系統(tǒng)技術規(guī)范第3部分:綜合應用主機
評論
0/150
提交評論