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