(C程序結(jié)構(gòu)及控制語(yǔ)句-9課時(shí)).ppt
《(C程序結(jié)構(gòu)及控制語(yǔ)句-9課時(shí)).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《(C程序結(jié)構(gòu)及控制語(yǔ)句-9課時(shí)).ppt(101頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1 第5章C程序結(jié)構(gòu)及控制語(yǔ)句 2 學(xué)習(xí)目標(biāo) 理解并熟練運(yùn)用C語(yǔ)言的順序 選擇 循環(huán)控制語(yǔ)句進(jìn)行編程 培養(yǎng)良好的編程風(fēng)格 3 學(xué)習(xí)內(nèi)容 4 順序結(jié)構(gòu) 概念 程序中的語(yǔ)句是按照編寫時(shí)的順序自上而下 一條接一條地執(zhí)行的 這一過程稱為順序執(zhí)行 順序結(jié)構(gòu)程序三步曲是輸入 計(jì)算 輸出 5 順序結(jié)構(gòu) 例5 1 要求 輸入三角形的三邊長(zhǎng) 求三角形面積 海倫公式 s a b c 2 include includevoidmain floata b c s area scanf f f f 6 順序結(jié)構(gòu) 例5 3 交換數(shù)據(jù) 對(duì)輸入的兩個(gè)變量a b 交換它們的值并輸出 請(qǐng)思考一個(gè)問題 現(xiàn)有兩個(gè)500ML的瓶子 一個(gè)里面裝著醋 一個(gè)里面裝著醬油 請(qǐng)問如何交換兩個(gè)瓶子的液體 7 順序結(jié)構(gòu) 例5 3 醋 醬油 1 醋 醬油 醋 醬油 2 醋 醬油 A B C D 8 順序結(jié)構(gòu) 例5 3 醋 醬油 3 醋 醬油 醋 醬油 醋 醬油 E F G H 9 順序結(jié)構(gòu) 例5 3 引入第三個(gè)瓶子 兩個(gè)變量的交換亦是如此 10 順序結(jié)構(gòu) 例5 3 交換數(shù)據(jù) 對(duì)輸入的兩個(gè)變量a b 交換它們的值并輸出 includevoidmain inta b c printf Pleaseinputtwointegers scanf d d 11 選擇結(jié)構(gòu) 選擇結(jié)構(gòu)又稱分支結(jié)構(gòu)或者選取結(jié)構(gòu) if語(yǔ)句switch語(yǔ)句 12 選擇結(jié)構(gòu) if語(yǔ)句格式一 格式1 if 表達(dá)式 語(yǔ)句功能 如果表達(dá)式為真 則執(zhí)行其后的語(yǔ)句 否則不執(zhí)行語(yǔ)句 例如 if a b max a 13 選擇結(jié)構(gòu) if語(yǔ)句格式二 格式2 if 表達(dá)式 語(yǔ)句1else語(yǔ)句2功能 如果表達(dá)式為真 則執(zhí)行語(yǔ)句1 否則執(zhí)行語(yǔ)句2 例如 if a b max a elsemax b 14 選擇結(jié)構(gòu) if語(yǔ)句格式三 格式3 if 表達(dá)式1 語(yǔ)句1elseif 表達(dá)式2 語(yǔ)句2elseif 表達(dá)式3 語(yǔ)句3 elseif 表達(dá)式n 語(yǔ)句nelse語(yǔ)句n 1 功能 依次判斷表達(dá)式的值 當(dāng)出現(xiàn)某個(gè)值為真時(shí) 則執(zhí)行對(duì)應(yīng)語(yǔ)句 然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序 如果所有的表達(dá)式均為假 則執(zhí)行語(yǔ)句n 1 然后繼續(xù)執(zhí)行后續(xù)程序 15 選擇結(jié)構(gòu) if語(yǔ)句格式三 根據(jù)用戶購(gòu)物的總價(jià)Cost 選擇不同的折扣率Rate Cost 1000七折800 Cost 1000八折500 Cost 800九折Cost 500無(wú)折扣 16 選擇結(jié)構(gòu) if語(yǔ)句格式三 if Cost 1000 Rate 0 7 elseif Cost 800 Rate 0 8 elseif Cost 500 Rate 0 9 elseRate 1 0 if Cost 1000 Rate 0 7 if Cost800 Rate 0 8 if Cost500 Rate 0 9 if Cost 500 Rate 1 0 17 選擇結(jié)構(gòu) if語(yǔ)句說(shuō)明 if關(guān)鍵字之后均為表達(dá)式 該表達(dá)式可以是邏輯表達(dá)式 關(guān)系表達(dá)式以及其它表達(dá)式 在if語(yǔ)句中的條件判斷表達(dá)式必須用圓括號(hào)括起來(lái) 每個(gè)語(yǔ)句之后必須加分號(hào) else子句不能作為語(yǔ)句單獨(dú)使用 須與if配對(duì)使用 18 選擇結(jié)構(gòu) if語(yǔ)句說(shuō)明 如果在滿足條件時(shí)執(zhí)行一組 多個(gè) 語(yǔ)句 則必須把這一組語(yǔ)句用 括起來(lái)組成一個(gè)復(fù)合語(yǔ)句 之后不加分號(hào) if a b a b else a 0 b 1 19 選擇結(jié)構(gòu) if語(yǔ)句說(shuō)明 在if語(yǔ)句的表達(dá)式中 一定要避免判斷實(shí)數(shù)與零值的等值比較 因?yàn)闊o(wú)論是float還是double變量 都有精度限制 應(yīng)使用 來(lái)替代 floatx if x 0 改為 defineEPS1E 7floatx if fabs x EPS 表達(dá)式的含義為x的值為0 20 選擇結(jié)構(gòu) if語(yǔ)句舉例 例 輸入兩個(gè)實(shí)數(shù) 輸出兩個(gè)數(shù)的最大值 includevoidmain floata b scanf f f 運(yùn)行情況如下 3 6 3 2 3 60 21 選擇結(jié)構(gòu) if語(yǔ)句的嵌套 如果if語(yǔ)句中的執(zhí)行語(yǔ)句又是一個(gè)if語(yǔ)句 就構(gòu)成了if語(yǔ)句嵌套的情形 格式 if 表達(dá)式 if語(yǔ)句或者 if 表達(dá)式 if語(yǔ)句elseif語(yǔ)句 if a b if b 0 printf a b 0 n elseprintf a b b0 printf b a 0 n elseif a 0 printf b a 0 n elseprintf b a a 0 n 在多重嵌套時(shí) else總是與在它之前出現(xiàn)的 尚未匹配的且離它最近的if匹配 22 選擇結(jié)構(gòu) if語(yǔ)句的嵌套 注意 在多重嵌套時(shí) else總是與在它之前出現(xiàn)的 尚未匹配的且離它最近的if匹配 可能會(huì)更改配對(duì)的原則 一般情況下 較少使用if語(yǔ)句的嵌套結(jié)構(gòu) 以使程序更便于閱讀理解 23 選擇結(jié)構(gòu) if語(yǔ)句的嵌套例 例 有一函數(shù) 1 x0 編一程序 輸入一個(gè)x值 輸出y值 24 選擇結(jié)構(gòu) if語(yǔ)句的嵌套例 有以下幾個(gè)程序 請(qǐng)判斷哪個(gè)是正確的 哪個(gè)是錯(cuò)誤的 程序1 voidmain intx y scanf d x if x 0 y 1 elseif x 0 y 0 elsey 1 printf x d y d n x y 正確 25 選擇結(jié)構(gòu) if語(yǔ)句的嵌套例 程序2 voidmain intx y y 1 scanf d x if x 0 if x 0 y 1 elsey 0 else與第二個(gè)if配對(duì)printf x d y d n x y 錯(cuò)誤請(qǐng)思考 錯(cuò)誤的原因是什么 26 選擇結(jié)構(gòu) if語(yǔ)句的嵌套例 程序2修改如下 voidmain intx y y 1 scanf d x if x 0 if x 0 y 1 elsey 0 else與第一個(gè)if配對(duì)printf x d y d n x y 說(shuō)明 更改了配對(duì)的原則 27 選擇結(jié)構(gòu) switch語(yǔ)句 格式 switch 表達(dá)式 case常量表達(dá)式1 語(yǔ)句1case常量表達(dá)式2 語(yǔ)句2 case常量表達(dá)式n 語(yǔ)句ndefault 語(yǔ)句n 1 28 選擇結(jié)構(gòu) switch語(yǔ)句 N S圖 功能 將表達(dá)式的值逐個(gè)與其后的常量表達(dá)式進(jìn)行比較 當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí) 即執(zhí)行其后的語(yǔ)句 然后不再進(jìn)行判斷 繼續(xù)執(zhí)行后面所有case后的語(yǔ)句 如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí) 則執(zhí)行default后的語(yǔ)句 29 選擇結(jié)構(gòu) switch語(yǔ)句 includevoidmain inta scanf d 運(yùn)行情況如下 5FridaySaturdaySundayerror 30 選擇結(jié)構(gòu) switch語(yǔ)句 includevoidmain inta scanf d 加break 運(yùn)行情況如下 5Friday 31 選擇結(jié)構(gòu) switch語(yǔ)句 includevoidmain inta scanf d 運(yùn)行情況如下 7Sunday 運(yùn)行情況如下 8Sunday 多個(gè)case可以共用一組執(zhí)行語(yǔ)句 32 選擇結(jié)構(gòu) switch語(yǔ)句 includevoidmain inta scanf d 運(yùn)行情況如下 5Friday case分支順序改變 33 選擇結(jié)構(gòu) switch語(yǔ)句 includevoidmain inta scanf d 運(yùn)行情況如下 1Monday case分支語(yǔ)句用 括起來(lái) 34 選擇結(jié)構(gòu) switch語(yǔ)句 說(shuō)明 多個(gè)case可以共用一組執(zhí)行語(yǔ)句 case常量表達(dá)式 只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào) 表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行 但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch語(yǔ)句 為了避免上述情況 C提供了break語(yǔ)句 在case后的各個(gè)常量表達(dá)式的值不能相同 否則會(huì)出現(xiàn)錯(cuò)誤 在case后 允許有多個(gè)語(yǔ)句 可以不用 括起來(lái) 各個(gè)case和default子句的先后順序可以變動(dòng) 不影響程序的執(zhí)行結(jié)果 default子句可以省略不用 此時(shí)當(dāng)表達(dá)式的值與所有case后的常量表達(dá)式的值不同時(shí) 退出switch語(yǔ)句 繼續(xù)執(zhí)行后續(xù)程序 switch后面括號(hào)中的表達(dá)式只能是整型 字符型 枚舉類型 case后的常量表達(dá)式的類型必須與之匹配 各個(gè)case之后是常量表達(dá)式 一定不要試圖使用條件表達(dá)式或者邏輯表達(dá)式 includevoidmain intscore scanf d 35 錯(cuò)誤 該如何實(shí)現(xiàn)該程序 if score 60 printf 及格 n elseprintf 不及格 n 36 switch score 10 case0 case1 case2 case3 case4 case5 printf 不及格 n break 37 case6 case7 case8 case9 case10 printf 不及格 n break 38 選擇結(jié)構(gòu) switch語(yǔ)句例5 6 計(jì)算器程序 從鍵盤接收兩個(gè)運(yùn)算數(shù)和四則運(yùn)算符 計(jì)算并輸出結(jié)果 includevoidmain floata b charc printf inputexpression a b n scanf f c f P93 例5 8請(qǐng)大家課后閱讀 一題多解方法 39 40 循環(huán)結(jié)構(gòu) 在給定條件成立時(shí) 反復(fù)執(zhí)行某程序段 直到條件不成立為止 這就是循環(huán)結(jié)構(gòu) 給定的條件稱為循環(huán)條件反復(fù)執(zhí)行的程序段稱為循環(huán)體在循環(huán)變量中用于控制循環(huán)執(zhí)行次數(shù)的變量稱為循環(huán)變量 C語(yǔ)言提供了三種循環(huán)控制語(yǔ)句 while語(yǔ)句do while語(yǔ)句for語(yǔ)句 41 循環(huán)結(jié)構(gòu) while語(yǔ)句 格式 while 表達(dá)式 語(yǔ)句功能 計(jì)算表達(dá)式的值 當(dāng)值為真時(shí) 執(zhí)行循環(huán)體 說(shuō)明 1 while語(yǔ)句中的表達(dá)式一般是關(guān)系表達(dá)式或者邏輯表達(dá)式 只要值為真就可以繼續(xù)執(zhí)行循環(huán)體 2 如果循環(huán)體包含一個(gè)以上的語(yǔ)句 必須用 括起來(lái)構(gòu)成復(fù)合語(yǔ)句 例 求1 100之間所有偶數(shù)的和 42 循環(huán)結(jié)構(gòu) while語(yǔ)句例5 9 求1 100之間所有偶數(shù)的和 includevoidmain intsum 0 n n 0 循環(huán)變量初始化while n 100 循環(huán)執(zhí)行條件 sum n 循環(huán)體n 2 改變循環(huán)變量的值 printf d n sum 分析 intn 0 n為每一項(xiàng)intsum 0 sum為求得的和while 循環(huán)執(zhí)行條件 循環(huán)體 輸出sum的值所以程序的關(guān)鍵是要確定 1 循環(huán)執(zhí)行條件2 循環(huán)體 43 循環(huán)結(jié)構(gòu) do while語(yǔ)句 格式 do 語(yǔ)句 while 表達(dá)式 功能 先執(zhí)行一次循環(huán)體 再判別表達(dá)式的值 如果為真則繼續(xù)執(zhí)行循環(huán) 否則終止循環(huán) 說(shuō)明 1 do while語(yǔ)句的表達(dá)式后必須加分號(hào) 2 如果循環(huán)體由多個(gè)語(yǔ)句組成 也必須由 括起來(lái) 組成一個(gè)復(fù)合語(yǔ)句 44 循環(huán)結(jié)構(gòu) do while語(yǔ)句例5 10 求1 100之間所有偶數(shù)的和 includevoidmain intsum 0 n 0 do sum n n 2 while n 100 printf d n sum 45 while和do while循環(huán)的比較 1 voidmain intsum 0 i scanf d 2 voidmain intsum 0 i scanf d 輸入1 結(jié)果如何 輸入3 結(jié)果又如何 46 while和do while循環(huán)的比較 運(yùn)行情況如下 運(yùn)行情況如下 1 1 sum 3sum 3再運(yùn)行一次 再運(yùn)行一次 3 3 sum 0sum 3 計(jì)算n 1 2 3 n 問題分析 這是一個(gè)循環(huán)次數(shù)已知的累乘問題 n n 1 n 47 算法 step1 輸入n值 step2 累乘求積變量賦初值 p 1 step3 累乘次數(shù)計(jì)數(shù)器i置初值 i 1 step4 若循環(huán)次數(shù)i未超過n 則反復(fù)執(zhí)行step5和step6 否則轉(zhuǎn)去執(zhí)行step7 step5 進(jìn)行累乘運(yùn)算 p p i step6 累乘次數(shù)計(jì)數(shù)器i加1 i i 1 且轉(zhuǎn)step4 step7 打印累乘結(jié)果 即n的階乘值p 48 49 while 計(jì)算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 分析 inti 1 n longp 1 p為求得的乘積printf Pleaseentern scanf d while 循環(huán)執(zhí)行條件 循環(huán)體 輸出p的值 50 do while 計(jì)算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 51 循環(huán)結(jié)構(gòu) for語(yǔ)句 格式 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 語(yǔ)句功能 1 首先計(jì)算表達(dá)式1的值 2 再計(jì)算表達(dá)式2的值 若值為真 則執(zhí)行一次循環(huán)體 否則跳出循環(huán) 3 計(jì)算表達(dá)式3的值 轉(zhuǎn)回第 2 步重復(fù)執(zhí)行 改寫為while語(yǔ)句 表達(dá)式1 while 表達(dá)式2 語(yǔ)句 表達(dá)式3 52 循環(huán)結(jié)構(gòu) for語(yǔ)句例5 11 例如 求1 100之間所有偶數(shù)的和 includevoidmain intsum 0 i for i 0 i 100 i 2 sum i printf d n sum 53 for 計(jì)算n 1 2 3 n includevoidmain inti 1 n longp 1 printf Pleaseentern scanf d 思考 若要打印出1 n之間的所有數(shù)的階乘值 程序如何修改呢 54 循環(huán)結(jié)構(gòu) for語(yǔ)句 for語(yǔ)句最易理解的如下形式 for 循環(huán)變量賦初值 循環(huán)條件 循環(huán)變量增值 語(yǔ)句例如 for i 1 i 100 i 2 sum sum i 可以看到它相當(dāng)于以下語(yǔ)句 i 1 while i 100 sum sum i i 2 55 循環(huán)結(jié)構(gòu) for語(yǔ)句 for語(yǔ)句改寫為while循環(huán) 說(shuō)明 1 for語(yǔ)句的一般形式中的 表達(dá)式1 可以省略 注意省略表達(dá)式1時(shí) 其后的分號(hào)不能省略 如 i 1 for i 100 i sum sum i for 表達(dá)式1 表達(dá)式2 表達(dá)式3 語(yǔ)句 表達(dá)式1 while 表達(dá)式2 語(yǔ)句表達(dá)式3 56 循環(huán)結(jié)構(gòu) for語(yǔ)句 2 如果省略表達(dá)式2 即不判斷循環(huán)條件 循環(huán)無(wú)終止地進(jìn)行下去 如 for i 1 i sum sum i 相當(dāng)于 i 1 while 1 sum sum 1 i 57 循環(huán)結(jié)構(gòu) for語(yǔ)句 3 表達(dá)式3也可以省略 但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束 如 for i 1 i 100 sum sum 1 i 58 循環(huán)結(jié)構(gòu) for語(yǔ)句 4 可以省略表達(dá)式1和表達(dá)式3 只有表達(dá)式2 即只給循環(huán)條件如 for i 100 while i 100 sum sum i 相當(dāng)于sum sum i i i 5 三個(gè)表達(dá)式都可省略如 for 相當(dāng)于while 1 59 循環(huán)結(jié)構(gòu) for語(yǔ)句 6 表達(dá)式1也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式 如 for sum 0 i 100 i sum sum i 表達(dá)式3也可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式 表達(dá)式1和表達(dá)式3也可以是逗號(hào)表達(dá)式 如 for sum 0 i 1 i 100 i sum sum i 或for i 1 i 100 i i sum sum i 相當(dāng)于for i 1 i 100 i i 2 sum sum i 60 循環(huán)結(jié)構(gòu) for語(yǔ)句 可以把循環(huán)體和一些與循環(huán)控制無(wú)關(guān)的操作也作為表達(dá)式1或表達(dá)式3出現(xiàn) 這樣程序可以短小簡(jiǎn)潔 但過分地利用這一特點(diǎn)會(huì)使for語(yǔ)句顯得雜亂 可讀性降低 建議不要把與循環(huán)控制無(wú)關(guān)的內(nèi)容放到for語(yǔ)句中 61 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 goto語(yǔ)句稱為無(wú)條件轉(zhuǎn)向語(yǔ)句 格式 goto語(yǔ)句標(biāo)號(hào) 功能 無(wú)條件轉(zhuǎn)移到語(yǔ)句標(biāo)號(hào)指定的代碼行執(zhí)行 例如 gotolabel 說(shuō)明 1 語(yǔ)句標(biāo)號(hào)用標(biāo)識(shí)符表示 命名規(guī)則與變量名的命名規(guī)則相同 2 由于goto語(yǔ)句可以靈活跳轉(zhuǎn) 如不加限制 會(huì)破壞結(jié)構(gòu)化程序設(shè)計(jì)風(fēng)格 經(jīng)常帶來(lái)錯(cuò)誤或隱患 所以要限制使用goto語(yǔ)句 3 一般而言 goto語(yǔ)句有兩種用途 與if語(yǔ)句一起構(gòu)成循環(huán) 這是goto語(yǔ)句最常用的用途 從多層循環(huán)中跳出 62 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 break語(yǔ)句格式 break 功能 用于跳出switch結(jié)構(gòu) 和從循環(huán)體內(nèi)中途跳出循環(huán)體 即提前結(jié)束循環(huán) 執(zhí)行循環(huán)下面的語(yǔ)句 說(shuō)明 1 在循環(huán)語(yǔ)句中 break語(yǔ)句一般與if語(yǔ)句一起使用 2 break語(yǔ)句不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的其它任何語(yǔ)句之中 舉例 63 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 例5 12計(jì)算半徑r 1到r 10的圓面積 直到圓面積大于20為止 definePI3 1415926 includevoidmain floatarea intr for r 1 r20 break printf f n area 運(yùn)行結(jié)果 3 14159312 566370 64 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 continue語(yǔ)句格式 continue 功能 跳過循環(huán)體中剩余的語(yǔ)句而強(qiáng)制執(zhí)行下一次循環(huán) 即結(jié)束本次循環(huán) 跳過循環(huán)體中下面尚未執(zhí)行的語(yǔ)句 接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定 說(shuō)明 continue語(yǔ)句只能用在循環(huán)語(yǔ)句中 且一般都是與if語(yǔ)句一起使用 舉例 65 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 例5 13把10 15之間的不能被3整除的數(shù)輸出 includevoidmain intn for n 10 n 15 n if n 3 0 continue printf d n printf n 運(yùn)行結(jié)果 10111314 66 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 includevoidmain intn for n 10 n 15 n if n 3 0 break printf d n printf n 運(yùn)行結(jié)果 1011 67 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 例5 12計(jì)算半徑r 1到r 10的圓面積 直到圓面積大于20為止 definePI3 1415926 includevoidmain floatarea intr for r 1 r20 continue printf f n area 運(yùn)行結(jié)果 3 14159312 566370 68 循環(huán)結(jié)構(gòu) 跳轉(zhuǎn)語(yǔ)句 continue語(yǔ)句和break語(yǔ)句的區(qū)別是 continue語(yǔ)句只結(jié)束本次循環(huán) 而不是終止整個(gè)循環(huán)的執(zhí)行 break語(yǔ)句則是結(jié)束整個(gè)循環(huán)過程 不再判斷執(zhí)行循環(huán)的條件是否成立 69 循環(huán)結(jié)構(gòu) 循環(huán)嵌套 當(dāng)一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)體時(shí) 稱為循環(huán)嵌套 while do while和for這三種循環(huán)均可以相互嵌套 嵌套的循環(huán)常用于解決矩陣運(yùn)算 報(bào)表打印這類問題 70 循環(huán)結(jié)構(gòu) 循環(huán)嵌套例5 14 輸出如下圖形 分析 要輸出5行 第i行由i個(gè) 組成 i 1 2 3 4 5 使用外層循環(huán)來(lái)控制輸出的行數(shù) 使用內(nèi)層循環(huán)控制每行輸出的星號(hào)個(gè)數(shù) 內(nèi)層循環(huán)的循環(huán)次數(shù)等于外層循環(huán)的循環(huán)變量的值 第1行 1個(gè) 第2行 2個(gè) 第3行 3個(gè) 第4行 4個(gè) 第5行 5個(gè) 第i行 i個(gè) 71 循環(huán)結(jié)構(gòu) 循環(huán)嵌套例5 14 includevoidmain inti j for i 1 i 5 i 外層循環(huán)控制行 for j 1 j i j 內(nèi)層循環(huán)控制列printf printf n 控制換行 72 與該題解法相關(guān)的課堂練習(xí) P109 5 7 2 下面程序的功能是輸出以下形式的金字塔圖案 請(qǐng)補(bǔ)充完整 第1行 3個(gè)空格 1個(gè) 第2行 2個(gè)空格 3個(gè) 第3行 1個(gè)空格 5個(gè) 第4行 0個(gè)空格 7個(gè) 第i行 4 i個(gè)空格 2 i 1個(gè) includevoidmain inti j for i 1 i 4 i 外層循環(huán)控制行 for j 1 j j 內(nèi)層循環(huán)控制每行打印空格的個(gè)數(shù)printf for j 1 j j 內(nèi)層循環(huán)控制每行打印 的個(gè)數(shù)printf printf n 2 i 1 4 i 74 例 輸出下列圖形 112123123412345123456123456712345678123456789 循環(huán)嵌套結(jié)構(gòu)舉例 第1行 1第2行 1 2第3行 1 3第4行 1 4第5行 1 5 第9行 1 9第i行 1 i 75 includevoidmain inti j for i 1 i 9 i 外層循環(huán)控制行 for j 1 j i j 內(nèi)層循環(huán)控制列printf 4d j printf n 控制換行 循環(huán)嵌套結(jié)構(gòu)舉例 76 與該題解法相關(guān)的課后練習(xí) P110 5 11P110 5 14請(qǐng)各位同學(xué)課后練習(xí) 循環(huán)嵌套 提示 在嵌套的各層循環(huán)體中 應(yīng)使用復(fù)合語(yǔ)句保證邏輯上得正確性 嵌套循環(huán)的內(nèi)層和外層的循環(huán)控制變量不應(yīng)同名 以免造成混亂 嵌套循環(huán)最好采用右縮進(jìn)格式書寫 以保證層次的清晰性 循環(huán)嵌套不能交叉 一個(gè)循環(huán)體內(nèi)必須完整地包含另一個(gè)循環(huán) 78 循環(huán)結(jié)構(gòu) 百錢買百雞問題 百錢買百雞 是我國(guó)古代的著名數(shù)學(xué)題 問題是這樣描述的 3文錢可以買1只公雞 2文錢可以買一只母雞 1文錢可以買3只小雞 用100文錢買100只雞 那么各有公雞 母雞 小雞多少只 79 循環(huán)結(jié)構(gòu) 百錢買百雞問題 解法1 假設(shè)i j k分別代表公雞 母雞和小雞的數(shù)目 注意到一百文錢最多可以買33只公雞 50只母雞和300只小雞 所以0 i 33 0 j 50 0 k 300 includevoidmain inti j k for i 0 i 33 i for j 0 j 50 j for k 0 k 300 k if 3 i 2 j k 3 100 80 循環(huán)結(jié)構(gòu) 百錢買百雞問題 解法2 在第一種實(shí)現(xiàn)方法里面 i j k構(gòu)成了三重循環(huán) if語(yǔ)句總共需要被判斷34 51 301 521934次 上個(gè)程序完全可以變?yōu)槎匮h(huán) 因?yàn)閕 j k都是整數(shù) 當(dāng)i j的值被確定后 k 100 i j includevoidmain inti j k for i 0 i 33 i for j 0 j 50 j k 100 i j if 3 i 2 j k 3 100 81 C程序語(yǔ)句編程風(fēng)格 編寫規(guī)范的程序代碼 使自己的程序結(jié)構(gòu)清晰 規(guī)范易讀是一個(gè)程序員必備的基本素質(zhì) 一般而言 一個(gè)優(yōu)秀的程序代碼應(yīng)該滿足 正確性 指程序代碼要實(shí)現(xiàn)軟件設(shè)計(jì)所要求的功能 可靠性 指程序代碼最后編譯的程序要能夠穩(wěn)定 可靠 安全的運(yùn)行 規(guī)范化 指程序代碼書寫的風(fēng)格 命名規(guī)則等符合規(guī)范 可讀性 指程序代碼要便于查看和理解 靈活性 指程序代碼的設(shè)計(jì)和編寫應(yīng)該易于維護(hù)和改動(dòng) 82 C程序語(yǔ)句編程風(fēng)格 1 代碼行一行代碼只包含一條語(yǔ)句 if for while do等語(yǔ)句獨(dú)自占一行 執(zhí)行語(yǔ)句不要緊跟其后 代碼行不易過長(zhǎng) 一般在70 80個(gè)字符以內(nèi) 如果代碼行過長(zhǎng) 使用如下規(guī)則分開 逗號(hào)后面分開 低優(yōu)先級(jí)操作符后面分開 拆分后的新行應(yīng)適當(dāng)縮進(jìn) 83 C程序語(yǔ)句編程風(fēng)格 2 注釋邊寫代碼邊加注釋 注釋應(yīng)當(dāng)用于說(shuō)明代碼做什么 而不是怎么做 注釋應(yīng)與被描述的代碼相鄰 可以在代碼的上方 右方 84 C程序語(yǔ)句編程風(fēng)格 3 對(duì)齊 之內(nèi)的代碼塊在 右邊數(shù)格處左對(duì)齊 即采用縮進(jìn)格式 85 C程序語(yǔ)句編程風(fēng)格 4 命名系統(tǒng)標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀 可以望文知意 盡量避免在名字中出現(xiàn)數(shù)字編號(hào) 86 應(yīng)用舉例 猴子吃桃問題 一只猴子原有若干個(gè)桃子 第一天吃掉總數(shù)的一半多一個(gè) 第二天又將剩下的桃子吃掉一半多一個(gè) 以后每天吃掉前一天剩下的一半多一個(gè) 到第十天準(zhǔn)備吃的時(shí)候發(fā)現(xiàn)只剩下一個(gè)桃子 求這只猴子原有多少個(gè)桃子 87 應(yīng)用舉例 猴子吃桃問題 假設(shè)第n天吃之前剩下的桃子個(gè)數(shù)為Xn n 10 9 8 1 則 X10 1X9 2 X10 1 X1 2 X2 1 從而可得到遞推公式 Xn 2 Xn 1 1 88 應(yīng)用舉例 includevoidmain intday x1 x2 day 9 x2 1 while day 0 第1天的桃子數(shù)是第2天桃子數(shù)加1后的2倍 x1 x2 1 2 x2 x1 day printf total d n x1 89 應(yīng)用舉例 利用公式 求的近似值 直到最后一項(xiàng)的絕對(duì)值小于10 5為止 解這類問題的關(guān)鍵是找出項(xiàng)與項(xiàng)之間的變化規(guī)律 并化簡(jiǎn)成便于計(jì)算機(jī)處理的形式 程序中用一個(gè)循環(huán)語(yǔ)句求各項(xiàng)的累加和即可 在該公式中 還需要考慮每項(xiàng)的符號(hào)變換 可以設(shè)置一個(gè)變量交替賦值為1和 1 90 應(yīng)用舉例 longdoubleElement Element表示每一項(xiàng)longdoublePI PI為求和的變量intSign Sign為符號(hào)的取值intTemp Temp為每一項(xiàng)分母的值 Element PI Sign Temp 91 應(yīng)用舉例 include includevoidmain longdoubleElement PI intSign Temp Sign 1 Temp 1 Element 1 0 PI 0 初始化各個(gè)變量while fabs Element 1E 5 循環(huán)求解PI PI Element Sign Sign 改變符號(hào)Temp 2 更改分母Element 1 0 Temp Sign 求每項(xiàng)的值 printf PI lf n PI 4 92 應(yīng)用舉例 對(duì)于分段函數(shù) 設(shè)計(jì)一個(gè)程序?qū)τ谳斎氲膞值求f x 要求程序中要使用switch語(yǔ)句實(shí)現(xiàn) include includevoidmain intk doublex y printf inputx scanf lf 93 應(yīng)用舉例 例 從鍵盤任意輸入一個(gè)正整數(shù) 編程判斷它是否是素?cái)?shù) 若是素?cái)?shù) 輸出 Yes 否則輸出 No 問題分析 素?cái)?shù)是指除了能被1和它本身整除外 不能被其他任何整數(shù)整除的數(shù) 1不是素?cái)?shù) 算法 step1 從鍵盤輸入一個(gè)正整數(shù)m step2 計(jì)算k step3 i從2變化到k 依次檢查m i是否為0 step4 若m i為0 則判定m不是素?cái)?shù) 并終止對(duì)其余i值的檢驗(yàn) 否則 令i i 1并繼續(xù)對(duì)其余i值進(jìn)行檢驗(yàn) 直到全部檢驗(yàn)完畢為止 這時(shí)判定m是素?cái)?shù) m 94 include includevoidmain intm i k printf Pleaseenteranumber scanf d 95 應(yīng)用舉例 例 譯密碼 為使電文保密 往往按一定規(guī)律將其轉(zhuǎn)換成密碼 收?qǐng)?bào)人再按約定的規(guī)律將其譯回原文 例如 可以按以下規(guī)律將電文變成密碼 將字母A變成字母E a變成e 即變成其后的第4個(gè)字母 W變成A X變成B Y變成C Z變成D 見圖 字母按上述規(guī)律轉(zhuǎn)換 非字母字符不變 如 China 轉(zhuǎn)換為 Glmre 輸入一行字符 要求輸出其相應(yīng)的密碼 96 97 應(yīng)用舉例 includevoidmain charc while c getchar n if c a 98 應(yīng)用舉例 注意 內(nèi)嵌的if語(yǔ)句不能寫成if c Z c z c c 26 請(qǐng)考慮 為什么對(duì)小寫字母不按此處理 即寫成c z c z 即可 99 應(yīng)用舉例 例 求Fibonacci數(shù)列 1 1 2 3 5 8 的前40個(gè)數(shù) 即F1 1 n 1 F2 1 n 2 Fn Fn 1 Fn 2 n 3 includevoidmain longintf1 1 f2 1 inti for i 1 i 20 i printf 12ld 12ld f1 f2 if i 2 0 printf n f1 f1 f2 f2 f2 f1 總結(jié) 理解 選擇結(jié)構(gòu)的概念 循環(huán)結(jié)構(gòu)的概念 掌握 if語(yǔ)句 switch語(yǔ)句 while語(yǔ)句 do while語(yǔ)句 for語(yǔ)句的格式和執(zhí)行機(jī)制以及靈活運(yùn)用 掌握 各種循環(huán)語(yǔ)句之間的嵌套使用和循環(huán)的退出方法以及靈活運(yùn)用循環(huán)結(jié)構(gòu)來(lái)解決實(shí)際問題 培養(yǎng)良好的編程風(fēng)格 100 101 作業(yè) 5 6 5 7 5 10 5 11 5 12 5 14 5 15 5 18- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 程序結(jié)構(gòu) 控制 語(yǔ)句 課時(shí)
鏈接地址:http://www.3dchina-expo.com/p-10958482.html