C語言 第4章 選擇結(jié)構(gòu).ppt
《C語言 第4章 選擇結(jié)構(gòu).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言 第4章 選擇結(jié)構(gòu).ppt(47頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
if語句 關(guān)系表達(dá)式和邏輯表達(dá)式 if語句的變形及嵌套 多重選擇語句 switch語句 本章小結(jié) 本章內(nèi)容 第4章選擇結(jié)構(gòu)程序設(shè)計(jì) 第四章選擇結(jié)構(gòu)程序設(shè)計(jì) 問題與討論 第四章分支結(jié)構(gòu)程序設(shè)計(jì) 解決辦法 1 引入新的程序結(jié)構(gòu) 選擇結(jié)構(gòu) 有時(shí)也稱判斷結(jié)構(gòu)或分支結(jié)構(gòu) 2 為了和分支結(jié)構(gòu)相配合 同時(shí)還要引入邏輯表達(dá)式的概念 3 有三種形式可進(jìn)行分支結(jié)構(gòu)的程序設(shè)計(jì) A if結(jié)構(gòu)B 多重選擇結(jié)構(gòu) switch語句 C 無條件轉(zhuǎn)移結(jié)構(gòu) goto語句 第4章選擇結(jié)構(gòu)程序設(shè)計(jì) 例4 1 輸入兩個(gè)正整數(shù) 并按從小到大的順序輸出 voidmain inta b t scanf d d voidmain inta b scanf d d 圖3 2變換a和b的值 if a b t a a b b t if條件 真 復(fù)合語句1 else 復(fù)合語句2 1 if else為關(guān)鍵字 2 如果語句塊超過一條語句 則要用一對(duì)大括號(hào)將語句塊括起作為復(fù)合語句 3 else可省 語法 說明 if語句 計(jì)算邏輯表達(dá)式的值 真否 復(fù)合語句1 復(fù)合語句2 執(zhí)行復(fù)合語句后的語句 F T if else的執(zhí)行過程 例4 6 編寫程序 求輸入的整數(shù)的絕對(duì)值并將其輸出 voidmain intx x1 scanf d 形式 if 表達(dá)式 語句塊 例4 7 比較用戶輸入的兩個(gè)整數(shù)的大小 若輸入的第1個(gè)數(shù)大于第2個(gè)數(shù) 則顯示 first second includevoidmain intfirst second printf Entertwonumbers scanf d d 形式 if 表達(dá)式 語句塊else語句塊 一 if語句的變形 1 省略else語句語法 if邏輯表達(dá)式 真 語句體 2 增加else語句 語法 if邏輯表達(dá)式1 真 語句體1 elseif邏輯表達(dá)式2 真 語句體2 else 語句體N if語句的變形 形式 if 表達(dá)式 語句塊 形式 if 表達(dá)式 語句塊elseif語句塊else語句塊 if邏輯表達(dá)式 真 語句塊1if邏輯表達(dá)式2 真 語句塊2 else 語句塊3 else 語句塊4 注意 else語句與最近的if語句配套 if語句的嵌套 注意 嵌套必須完全包住 不能相互騎跨 在if的嵌套中 else elseif與最近的if相匹 大括號(hào)要配對(duì) if邏輯表達(dá)式1 語句塊1if邏輯表達(dá)式2 語句塊2 else 語句塊3 else 語句塊4 語句塊5 忌諱 大括號(hào)不配對(duì) 也不對(duì)齊 不知誰跟誰配對(duì) 例4 9 編寫一程序 進(jìn)行十進(jìn)制數(shù) 八進(jìn)制數(shù)和十六進(jìn)制數(shù)之間的轉(zhuǎn)換 04 doc 例 商店售貨 按購買貨物款的多少分別給予不同的優(yōu)惠折扣 編程計(jì)算實(shí)際應(yīng)付貨款 1 購貨不足250元 沒有折扣 2 購貨250元 含250元 下同 不足500元 減5 3 購貨500元 不足1000元 減價(jià)7 5 4 購貨1000元 不足2000元 減價(jià)10 5 購貨2000元及以上 減價(jià)15 1 算法分析 設(shè)購物款為M 折扣為D 則D可表示為 D 0 M 250 D 0 05 250 M 500 D 0 075 500 M 1000 D 0 1 1000 M 2000 D 0 15 2000 M voidmain 程序代碼 if m 250 t m 1 d 計(jì)算應(yīng)付款printf 實(shí)際應(yīng)付款 f t floatm d t printf 請輸入購物金額 scanf f voidmain floatm d t printf 請輸入購物金額 scanf f if m 250 t m 1 d 應(yīng)付款printf 實(shí)際應(yīng)付款 f t 形式 if 表達(dá)式1 語句1elseif 表達(dá)式2 語句2elseif 表達(dá)式3 語句3 elseif 表達(dá)式m 語句melse語句n 這樣改寫的優(yōu)點(diǎn) 的根 2 數(shù)據(jù)結(jié)構(gòu) 由于問題簡單 只需用到一些單精度實(shí)數(shù) 例 求一元二次方程 第4章選擇結(jié)構(gòu)程序設(shè)計(jì) 3 偽代碼 輸入方程系數(shù)a b c計(jì)算判別式d b b 4 a cif判別式大于等于0then 計(jì)算兩個(gè)實(shí)根定位輸出光標(biāo)打印結(jié)果 else 計(jì)算實(shí)部計(jì)算虛部定位輸出光標(biāo)打印結(jié)果 endprogram 第4章選擇結(jié)構(gòu)程序設(shè)計(jì) include includevoidmain floata b c d x1 x2 p q printf 輸入方程系數(shù) scanf f f f d b b 4 a c if d 0 x1 b sqrt d 2 a x2 b sqrt d 2 a printf x1 f x2 f n x1 x2 else p b 2 a q sqrt d 2 a printf x1 f i f x2 f i f n p q p q 一 邏輯量的概念 邏輯值 真 假 或T F表示方式 0表示 假 非0表示 真 系統(tǒng)真值 1 二 關(guān)系運(yùn)算符 關(guān)系運(yùn)算符含義例子結(jié)果優(yōu)先級(jí) 大于4 6 9 大于或等于6 5 小于或等于8 7 等于2 3 6 不等于9 3 12 TTTFFF 相同 高 相同 低 關(guān)系表達(dá)式和邏輯表達(dá)式 用關(guān)系運(yùn)算符將兩個(gè)算術(shù)表達(dá)式或兩個(gè)字符串表達(dá)式聯(lián)起來的式子 其值為邏輯值 例 includemain inta b a 10 5 6 b 10 5 6 printf d d n a b 輸出結(jié)果 0 1 例 includemain inta b a 6 7 7 8 b 7 7 3 printf d d n a b 輸出結(jié)果 1 1 三 關(guān)系表達(dá)式 非 與 或 1 運(yùn)算符 2 運(yùn)算法則 T真 F假 值邏輯非邏輯與邏輯或XY XX YX YTTTFFTFF FTT FFT TFT TFF 四 邏輯運(yùn)算符 用邏輯運(yùn)算符連接關(guān)系表達(dá)式的式子稱邏輯表達(dá)式 例用邏輯表達(dá)式表達(dá)下述數(shù)學(xué)式 1 080 3 10 x 30 50 x 90 相應(yīng)的邏輯表達(dá) 1 0 x x 10 2 x180 或 x 60 x 80 3 x 10 x 50 x 90 x 10 0 60 80 x 10 50 90 x 30 x x 五 邏輯表達(dá)式 2 運(yùn)算符的優(yōu)先級(jí) 1 邏輯運(yùn)算符的優(yōu)先級(jí) 高 低 類型 sizeof 賦值運(yùn)算符 自右至左 邏輯表達(dá)式中的優(yōu)先級(jí) 語法 表達(dá)式1 表達(dá)式2 表達(dá)式3 說明 表達(dá)式1的值非零 則條件表達(dá)式的值為表達(dá)式2的值 否則為表達(dá)式3的值 執(zhí)行過程 表達(dá)式1 表達(dá)式的值為表達(dá)式3的值 表達(dá)式的值為表達(dá)式2的值 T F 條件運(yùn)算符 voidmain inta b scanf d d 在某種情況下 條件運(yùn)算符可以代替if語句 簡化程序書寫 voidmain inta b scanf d d 改寫后 例 從鍵盤輸入兩個(gè)整數(shù) 按大小順序輸出 例 從鍵盤輸入一字符 如果為Y 則打印是 若為N 打印否 其它字符 打印輸入錯(cuò)誤 includevoidmain chara printf 輸入一個(gè)字符 a getchar if a Y a N if a Y printf 是 elseprintf 否 elseprintf 輸入數(shù)據(jù)不合要求 嵌套不能太深 一般以三層為限 嵌套太深 容易出錯(cuò) 例4 12 用戶從鍵盤輸入3個(gè)整數(shù) 找出并輸出其中數(shù)值最大的那一個(gè) 如果其中有一個(gè)以上的最大數(shù) 兩數(shù)相等的情況 也要表示出來 includevoidmain inta b c printf Enter3numbers scanf d d d includevoidmain intx y z printf Iputx y z scanf d d d 嵌套不能太深 一般以三層為限 嵌套太深 容易出錯(cuò) 例 從鍵盤輸入三個(gè)整數(shù) 判斷其正負(fù)情況 includevoidmain intx y z printf Iputx y x scanf d d 利用邏輯表達(dá)式將上例改寫 第4章選擇結(jié)構(gòu)程序設(shè)計(jì) 改寫后的程序結(jié)構(gòu)要清晰得多 例 將輸入的字母轉(zhuǎn)化為小寫字母 1算法分析 在計(jì)算機(jī)中 處理英文字母 其實(shí)是處理它的ASCII碼值 將大寫字母變成小寫字母 就是將大寫字母的ASCII碼值變?yōu)橄鄳?yīng)的小寫字母的ASCII碼值 大寫字母的ASCII值比小寫字母的ASCII值小32 故將相應(yīng)字母的ASCII值加32就變成了小寫字母 程序設(shè)計(jì)時(shí) 要注意如果輸入的不是大寫的字母 則不用轉(zhuǎn)換 voidmain charch scanf c 2源程序代碼之一 voidmain charch scanf c 注意 1 條件運(yùn)算符優(yōu)先于賦值運(yùn)算符 低于關(guān)系運(yùn)算符2 條件運(yùn)算符的結(jié)合方向?yàn)?自右至左 a b a c d c da b a c d c d 此處使用了條件運(yùn)算符 3源程序代碼之二 等價(jià)于 includevoidmain inti printf 輸入數(shù)字1 7 scanf d 例 輸入星期中的某一天 顯示對(duì)應(yīng)的英文 是否有更好的辦法來解決多分支程序結(jié)構(gòu) 語法 switch 表達(dá)式 case常量表達(dá)式1 語句塊1case常量表達(dá)式2 語句塊2 case常量表達(dá)式N 語句塊Ndefault 語句塊N 1 switch多重選擇語句 說明 switch后的表達(dá)式可以是char byte short orint類型 case后的表達(dá)式與switch后的表達(dá)式相等時(shí) case后的語句被執(zhí)行 若一個(gè)相等的也沒有時(shí) 執(zhí)行default后面語句 若沒有default時(shí) 則結(jié)束switch語句 case后的表達(dá)式必須互不相同 否則出錯(cuò) case與default出現(xiàn)的順序不影響執(zhí)行結(jié)果 執(zhí)行完一個(gè)case語句塊后 流程轉(zhuǎn)到下一個(gè)case語句繼續(xù)執(zhí)行 在執(zhí)行過程中碰到break語句 程序退出switch結(jié)構(gòu) voidmain inti printf 輸入數(shù)字1 7 scanf d 例switch 用switch語句重寫打印星期程序 voidmain inti printf 輸入數(shù)字1 7 scanf d 語法 break 功能 1 退出所在switch語句2 退出所在循環(huán) for while do break語句 格式 continue 功能 忽略continue以下的循環(huán)體 重新回到循環(huán)開始 對(duì)continue所在循環(huán)有效 continue語句 例 用switch語句重寫前例的程序 voidmain chara printf 輸入一個(gè)字符 a getchar if a Y a N if a Y printf 是 n elseprintf 否 n elseprintf 字符不合要求 n voidmain chara printf 輸入字符 a getchar switch a case Y printf 是 n break case N printf 否 n break default printf 字符不合要求 n 例4 9B 在屏幕上顯示菜單 分析 程序首先在屏幕上將功能顯示出來 用戶根據(jù)需要選擇相應(yīng)的功能 程序根據(jù)用戶的選擇執(zhí)行相應(yīng)的程序段 對(duì)于這類程序 往往是用戶輸入一個(gè)英文字母 然后程序根據(jù)字母來斷別程序該執(zhí)行什么程序段 故一般用switch語句比較方便 2源程序清單 switch a case i printf 調(diào)用輸入模塊 break case o printf 調(diào)用輸出模塊 break case l printf 調(diào)用查找模塊 break case q printf 調(diào)用退出模塊 break main intchara printf 請選擇 printf 輸入i printf 輸出o printf 找出最長的單詞l printf 退出q a getchar 執(zhí)行選項(xiàng)時(shí) 要調(diào)用相應(yīng)的模塊 程序段 由于現(xiàn)在還沒有相應(yīng)的程序 暫用一條打印語句代替 以后會(huì)用相應(yīng)程序代替 語法 goto語句標(biāo)號(hào) 有效的C標(biāo)識(shí)符 不能是整數(shù) 功能 改變程序執(zhí)行的順序 無條件轉(zhuǎn)移到語句標(biāo)號(hào)所指定的語句行 語句標(biāo)號(hào) 語句某一行的名字 一般情況下可省 定義標(biāo)號(hào)例 loop x x 1 無條件轉(zhuǎn)移語句 goto語句 使用goto例 gotoloop 例4 14 統(tǒng)計(jì)某班級(jí)中計(jì)算機(jī)課程中考試成績高于80分的人數(shù) 假設(shè)學(xué)生人數(shù)為 voidmain inti fs j 0 Loop scanf d 1 分支結(jié)構(gòu) 改變程序的執(zhí)行流程 或有選擇地執(zhí)行程序 2 if else和switch是結(jié)構(gòu)化語句 而goto語句不是 3 塊if語句可以取代所有的分支結(jié)構(gòu) 而多重分支結(jié)構(gòu)不可 4 塊if語句中的條件可以是復(fù)雜邏輯表達(dá)式 而多重分支中的條件只能是簡單表達(dá)式 5 塊if與goto語句結(jié)合 可以構(gòu)造任何復(fù)雜的循環(huán) 但用專門的循環(huán)語句更方便 本章小結(jié) 易出錯(cuò)內(nèi)容 if后的條件不用括號(hào)括起來if條件后加上分號(hào)關(guān)系運(yùn)算符 和賦值運(yùn)算符 區(qū)分習(xí)慣于數(shù)學(xué)的區(qū)間表示 如00 x 5if多層嵌套語句的匹配關(guān)系分不清在switch語句中漏掉break語句 作業(yè) 1 編寫程序 輸入一個(gè)整數(shù) 輸出它是奇數(shù)還是偶數(shù) 2 輸入3個(gè)整數(shù) 要求按照從大到小的順序輸出 3 輸入一個(gè)整數(shù) 求其平方根和立方根 考慮負(fù)數(shù)情況 4 p1115 65 p1115 8- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C語言 第4章 選擇結(jié)構(gòu) 語言 選擇 結(jié)構(gòu)
鏈接地址:http://www.hcyjhs8.com/p-8614609.html