北京科技大學(xué)《C語言》第4章.ppt
《北京科技大學(xué)《C語言》第4章.ppt》由會員分享,可在線閱讀,更多相關(guān)《北京科技大學(xué)《C語言》第4章.ppt(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第4章選擇結(jié)構(gòu)程序設(shè)計 北京科技大學(xué)計算機系 C語言程序設(shè)計 2020 1 27 2 提出問題 自然語言 如果 那么 否則 C語言 分支語句 問題1 如何根據(jù)收入 確定他的納稅比例及納稅額 問題2如何根據(jù)學(xué)生的分數(shù)判斷是否及格 2020 1 27 3 本章主要內(nèi)容 4 0關(guān)系 邏輯與條件運算符4 1if語句4 1 1if語句的一般形式4 1 2if語句的嵌套4 2switch語句4 2 1switch語句的一般形式4 2 2break語句4 3選擇結(jié)構(gòu)程序設(shè)計舉例 4 關(guān)系運算 關(guān)系運算符 左結(jié)合 c等價于a b c 與 a b c不等價 5 關(guān)系運算說明 關(guān)系運算的結(jié)果應(yīng)該是邏輯值 C語言用數(shù)值用1表示邏輯真 0表示邏輯假例如 7 5的值是1 5 7的值是0 a b 的值是0 a b 的值是1即關(guān)系表達式的值 0或1實型數(shù)可進行大于或小于比較 但通常不進行 或 的關(guān)系運算 關(guān)系運算 關(guān)系運算符優(yōu)先于賦值 低于算術(shù)inta 3 b 2 c 1 a cf a b c兩邊操作數(shù)的數(shù)據(jù)類型不同時 系統(tǒng)自動將它們轉(zhuǎn)換成相同的數(shù)據(jù)類型左結(jié)合性 注意與數(shù)學(xué)式的區(qū)別00 x 6 6 7 邏輯運算符 邏輯運算符 邏輯運算符的運算規(guī)則 8 邏輯表達式 邏輯表達式用邏輯運算符將運算對象連接成的式子形式 例如 0 b a b c da b 5 c 4 x y z 9 邏輯表達式 邏輯運算符的優(yōu)先級和結(jié)合性 是單目運算符 右結(jié)合 高于算術(shù) 和 是雙目運算符 左結(jié)合 高于賦值運算符 低于關(guān)系運算符 的優(yōu)先級高于 例如 a b c d a b c 10 邏輯運算規(guī)則 邏輯表達式的運算規(guī)則 從左到右依次進行邏輯計算運算對象為非0表示邏輯真運算對象為0表示邏輯假邏輯運算的結(jié)果為0或1例如設(shè) a 15 b 0 c 2a b c結(jié)果為0a b c結(jié)果為1 a c b c結(jié)果為1 11 邏輯運算規(guī)則 續(xù) 運算按照從左至右的順序進行 一旦能夠確定邏輯表達式的值 就立即結(jié)束運算 邏輯運算的短路性質(zhì)例如設(shè) a 1 b 0 c 2a b c a b c 為0 運算終止 表達式值為0 為非0 運算終止 表達式值為1且a為2 b為0 c為 2 b c保持原值 邏輯表達式 例 x 1 y 1 z 0 x x y 12 k x y z 1 0 5 5 13 關(guān)系與邏輯運算符的應(yīng)用 表示數(shù)學(xué)公式a b c判斷a b c三條線段能否組成一個三角形a b不同時為負 作業(yè) 14 條件表達式運算 條件運算符 條件表達式的一般形式表達式1 表達式2 表達式3例如 m 10 b 20 a bx 3 a 5 100 200 C語言中唯一的三目運算符 要正確區(qū)分用 和 分隔的表達式涉及條件運算符的優(yōu)先級與結(jié)合性 條件表達式運算 條件表達式的值 表達式1 表達式2 表達式3表達式1的值非0 則計算表達式2的值作為整個表達式的值 表達式1的值為0 則計算表達式3的值作為整個表達式的值 表達式2和3的類型不一致時 結(jié)果為精度較高的類型 如 m n 2 2 5 15 16 條件運算符優(yōu)先級 條件運算符優(yōu)先級高于賦值 逗號運算符 低于其他運算符例如 m 10 b 20 a b x 3 a 5 100 200 等價于 m n x a 3 等價于 a 10 b 20 a b 等價于 x 3 a 5 100 200 17 條件運算符的結(jié)合性 條件運算符具有右結(jié)合性當(dāng)一個表達式中出現(xiàn)多個條件運算符時 應(yīng)該將位于最右邊的問號與離它最近的冒號配對 并按這一原則正確區(qū)分各條件運算符的運算對象 例如 w x x w x y x y與w x x w x y x y 等價與 w x x w x y x y不等價 2020 1 27 18 本章主要內(nèi)容 4 0關(guān)系 邏輯與條件運算符4 1if語句4 1 1if語句的一般形式4 1 2if語句的嵌套4 2switch語句4 2 1switch語句的一般形式4 2 2break語句4 3選擇結(jié)構(gòu)程序設(shè)計舉例 2020 1 27 19 簡單分支語句 語句一般格式if 表達式 語句 功能 計算表達式的值 如果是一個非0值 即邏輯真 就執(zhí)行內(nèi)嵌語句 否則 即邏輯假 跳過內(nèi)嵌語句 順序執(zhí)行后續(xù)語句 2020 1 27 20 簡單分支語句的算法 例如 if x 0 m if a b c a a b b c 2020 1 27 21 雙重分支語句 語句一般格式if 表達式 語句1else語句2功能 計算表達式的值 如果它的值是一個非0值 邏輯真 就執(zhí)行內(nèi)嵌語句1 之后跳過內(nèi)嵌語句2 執(zhí)行后續(xù)語句 否則跳過內(nèi)嵌語句1 執(zhí)行內(nèi)嵌語句2 之后執(zhí)行后續(xù)語句 2020 1 27 22 雙重分支語句的算法 例如 if x 0 m elsem if ch a 2020 1 27 23 多重分支語句 語句一般格式if 表達式1 語句1elseif 表達式2 語句2 elseif 表達式m 語句melse語句n功能 依次計算并判斷表達式i 為非0時執(zhí)行后面的語句 都為0時 執(zhí)行語句n無論執(zhí)行完那個語句分支 都轉(zhuǎn)到后續(xù)語句 2020 1 27 24 多重分支語句的算法 流程圖 表達式m 2020 1 27 25 多重分支語句的算法 N S結(jié)構(gòu)圖 例如 if a 0 x 1 elseif a 0 x 0 elsex 1 2020 1 27 26 if語句的簡單應(yīng)用 例4 1 輸入一個字符 如果是大寫字母 則將其轉(zhuǎn)換為小寫字母輸出 否則直接輸出 輸入 用getchar或scnaf函數(shù)ch是否為大寫字母 ch A ch 65 ch 90 大寫字母轉(zhuǎn)換為小寫字母 ch ch 32輸出 用putchar或printf函數(shù) 思路 2020 1 27 27 程序 include stdio h main charch ch getchar if ch A 程序運行情況如下 G g 運行jc4 1 可使用條件表達式代替 putchar ch A putchar n 2020 1 27 28 4 1 2if語句的嵌套 如果if的內(nèi)嵌語句中又使用了一個if語句 則構(gòu)成if語句的嵌套 例4 a 比較兩個整數(shù)的關(guān)系 includemain intx y printf EnterintegerXandY scanf d d 應(yīng)該正確判斷 if的內(nèi)嵌語句if和else的配對 運行jc4 a if x y if x y printf X Y n elseprintf X Y n elseprintf X Y n 提倡縮格書寫有利于閱讀程序 2020 1 27 29 雙重 或多重 分支if語句的嵌套形式if 表達式 if語句elseif語句 if語句嵌套的形式 簡單if語句的嵌套形式if 表達式 if語句 可以是各種形式的if語句 可以是各種形式的if語句 如果是簡單if語句 必須用 括起 2020 1 27 30 if c 50 printf 50150 n if c 50 printf 50 c 100 n elseprintf c 50 n 例如 if c 50 printf 50 c 100 n 與哪個if配對 2020 1 27 31 再例如 if a b 1 if a c 2 if a d flag 1 3 elseflag 2 4 elseflag 3 5 問題 第4行和第5行的else和哪一個if相匹配 分析 匹配方案可以有很多種 2 4 1 5 3 4 2 5 1 4 匹配規(guī)則 在嵌套的if else語句中 else總是與上面的 離它最近的 在同一復(fù)合語句中還沒有配對的if配對 2020 1 27 32 等價于 if a b if a c if a d flag 1 elseflag 2 elseflag 3 if a b if a c if a d flag 1 elseflag 2 elseflag 3 flag 3的條件 flag 3的條件 當(dāng)c a b時 當(dāng)a b時 2020 1 27 33 舉例 例4 4 輸入一個數(shù) 判斷它是奇數(shù)還是偶數(shù) 如果是奇數(shù)則進一步判斷它是否為5的倍數(shù) x 2等于0 x 5等于0 2020 1 27 34 程序 main intx scanf d 等價于if x 2 等價于if x 5 2020 1 27 35 學(xué)習(xí)if語句的難點 正確用表達式描述條件例如 當(dāng)x大于5小于10時令x自增if 5 x 10 x if else語句的配對正確判斷內(nèi)嵌語句例如 if x y x x 3 y y 2 elsex x 3 y y 2 if x 5 2020 1 27 36 熟悉常用的if表達式形式 例如有定義 inta b 0 a等于什么值時 執(zhí)行b 2 語句 if a 0 b 2 if a 1 b 2 if a 0 b 2 if a 1 b 2 if a 0 b 2 if a b 2 if a b 2 等價于if a 0 b 2 等價于if a 0 b 2 2020 1 27 37 2020 1 27 38 4 2switch語句 switch語句的一般形式switch 表達式 case常量表達式1 語句序列1case常量表達式2 語句序列2 case常量表達式n 語句序列ndefault 語句序列n 1 功能 計算表達式的值 與常量表達式的值比較 等于第i個值時 順序執(zhí)行語句序列i i 1 n 1若與所有常量表達式值都不相等 執(zhí)行語句序列n 1 2020 1 27 39 switch語句的算法描述 N S結(jié)構(gòu)圖 例如 switch a case5 printf 當(dāng)a等于5 輸出 當(dāng)a等于2 輸出 當(dāng)a是其他值 輸出 2020 1 27 40 說明 case常量表達式i 等價于語句標(biāo)號 計算出的表達式值等于哪個語句標(biāo)號 就從哪個位置開始順序向下執(zhí)行語句序列 語句位置影響運行結(jié)果 例如 switch a case2 printf default printf case5 printf 當(dāng)a等于2 輸出 當(dāng)a是其他值 輸出 當(dāng)a等于5 輸出 switch與break語句結(jié)合才能實現(xiàn)程序的分支 break break break break語句 形式 break 功能 終止switch語句 循環(huán)語句的執(zhí)行 繼續(xù)執(zhí)行switch語句 循環(huán)語句后面的語句break語句可以改變case的語句標(biāo)號作用 終止后續(xù)case語句序列的執(zhí)行 switch語句和break語句結(jié)合 可以實現(xiàn)程序的選擇控制 break語句還可以在循環(huán)語句中使用 2020 1 27 41 2020 1 27 42 switch語句的簡單應(yīng)用 例4 3 已知x 100 y 15 要求輸入一個算術(shù)運算符 或 并對x和y進行指定的算術(shù)運算 思路 設(shè)x和y為float型變量并賦初值 輸入的運算符op為char型變量 根據(jù)op的值 為 進行x和y的相加 相減 相乘 相除運算 選擇分支 還要考慮到輸入字符不是 或 時的情況 2020 1 27 43 程序 include stdio h main floatx 100 y 15 z charop op getchar switch op case z x y break case z x y break case z x y break case z x y break default z 0 if int z 0 printf f c f f n x op y z elseprintf cisnotanoperator n op 運行jc4 3 實型數(shù)通常不使用z 0或z 0的比較可用if int z 代替 2020 1 27 44 注意 switch語句的書寫格式 語句體本身必須用花括號括起 case和default后面如果有多條語句 則可以不必使用花括號 case和常量表達式之間必須有空格 default可以寫在語句體的任何位置 也可以省略不寫允許switch嵌套使用 但同一個switch語句中 任意兩個case的常量表達式值不能相同 2020 1 27 45 4 3選擇結(jié)構(gòu)程序設(shè)計舉例 例4 6 求一元二次方程ax2 bx c 0的根 思路 一元二次方程的根取決于系數(shù)a b c求根公式 判別式d b2 4ac當(dāng)d 0時 方程有兩個相等的實根 x1 x2 b 2 a 當(dāng)d 0時 方程有兩個不相等的實根 x1 b sqrt d 2 a x2 b sqrt d 2 a 當(dāng)d 0時 方程有兩個虛根 x1 jp ipix2 jp ipi 實部jp b 2 a 虛部ip sqrt d 2 a 2020 1 27 46 算法 ax2 bx c 0 2020 1 27 47 程序 include math h main floata b c d x1 x2 lp ip scanf f f f 2020 1 27 48 程序 續(xù) elseif d 1e 6 不相等的實根 x1 b sqrt d 2 a x2 b sqrt d 2 a printf hastworealroots n printf x1 8 4f x2 8 4f n x1 x2 else 虛根 lp b 2 a ip sqrt d 2 a printf hastwocomplexroots n printf x1 8 4f 8 4fi n lp ip printf x2 8 4f 8 4fi n lp ip 運行jc4 6 2020 1 27 49 舉例 續(xù) 例4 b 輸入年份 判別該年是否為閏年 思路 年份year為閏年的條件為 能夠被4整除 但不能被100整除的年份 能夠被400整除的年份 只要滿足任意一個就可以確定它是閏年 例如 1996年 2000年是閏年1998年 1900年不是閏年 設(shè)定標(biāo)志變量leap 只要符合其中一個條件的就是閏年 令leap 1 否則令leap 0 2020 1 27 50 算法 year 4 0 year 100 0 2020 1 27 51 程序 main intyear leap scanf d 運行jc4 b 總結(jié) 運算符if語句if語句的形式 簡單 雙重分支 多重分支 if語句的嵌套switch語句switch語句的形式break語句 2020 1 27 52- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C語言 北京科技大學(xué) 語言
鏈接地址:http://www.3dchina-expo.com/p-5367383.html