第4章 選擇結(jié)構(gòu)程序設(shè)計.ppt_第1頁
第4章 選擇結(jié)構(gòu)程序設(shè)計.ppt_第2頁
第4章 選擇結(jié)構(gòu)程序設(shè)計.ppt_第3頁
第4章 選擇結(jié)構(gòu)程序設(shè)計.ppt_第4頁
第4章 選擇結(jié)構(gòu)程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第4章選擇結(jié)構(gòu)程序設(shè)計 北京科技大學(xué)計算機系 C語言程序設(shè)計 202020 1 27 2 提出問題 自然語言 如果 則 否則 C語言 分支語句 問題1 如何根據(jù)收入 確定他的納稅比例及納稅額 問題2如何根據(jù)學(xué)生的分數(shù)判斷是否及格 202020 1 27 3 本章主要內(nèi)容 4 1if語句4 1 1if語句的一般形式4 1 2if語句的嵌套4 2switch語句4 2 1switch語句的一般形式4 2 2break語句4 3選擇結(jié)構(gòu)程序設(shè)計舉例 202020 1 27 4 簡單分支語句 語句一般格式if 表達式 語句 功能 計算表達式的值 如果是一個非0值 即邏輯真 就執(zhí)行內(nèi)嵌語句 否則 即邏輯假 跳過內(nèi)嵌語句 順序執(zhí)行后續(xù)語句 202020 1 27 5 簡單分支語句的算法 例如 if x 0 m if a b c a a b b c 202020 1 27 6 雙重分支語句 語句一般格式if 表達式 語句1else語句2功能 計算表達式的值 如果它的值是一個非0值 邏輯真 就執(zhí)行內(nèi)嵌語句1 之后跳過內(nèi)嵌語句2 執(zhí)行后續(xù)語句 否則跳過內(nèi)嵌語句1 執(zhí)行內(nèi)嵌語句2 之后執(zhí)行后續(xù)語句 202020 1 27 7 雙重分支語句的算法 例如 if x 0 m elsem if ch a 202020 1 27 8 多重分支語句 語句一般格式if 表達式1 語句1elseif 表達式2 語句2 elseif 表達式m 語句melse語句n功能 依次計算并判斷表達式i 為非0時執(zhí)行后面的語句 都為0時 執(zhí)行語句n無論執(zhí)行完哪個語句分支 都轉(zhuǎn)到后續(xù)語句 202020 1 27 9 多重分支語句的算法 流程圖 表達式m 202020 1 27 10 多重分支語句的算法 N S結(jié)構(gòu)圖 例如 if a 0 x 1 elseif a 0 x 0 elsex 1 202020 1 27 11 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ù) 思路 202020 1 27 12 程序 include stdio h main charch ch getchar if ch A 程序運行情況如下 G g 運行jc4 1 可使用條件表達式代替 putchar ch A putchar n 202020 1 27 13 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 提倡縮格書寫有利于閱讀程序 202020 1 27 14 雙重 或多重 分支if語句的嵌套形式if 表達式 if語句elseif語句 if語句嵌套的形式 簡單if語句的嵌套形式if 表達式 if語句 可以是各種形式的if語句 可以是各種形式的if語句 如果是簡單if語句 必須用 括起 202020 1 27 15 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配對 匹配規(guī)則 在嵌套的if else語句中 else總是與上面的 離它最近的 在同一復(fù)合語句中還沒有配對的if配對 elseprintf c 50 n 202020 1 27 16 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的條件 當c a b時 當a b時 例如 202020 1 27 17 舉例 例4 4 輸入一個數(shù) 判斷它是奇數(shù)還是偶數(shù) 如果是奇數(shù)則進一步判斷它是否為5的倍數(shù) x 2 0 x 5等于0 202020 1 27 18 程序 main intx scanf d 等價于if x 2 等價于if x 5 運行jc4 4 202020 1 27 19 學(xué)習(xí)if語句的難點 正確用表達式描述條件例如 當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 202020 1 27 20 熟悉常用的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 202020 1 27 21 4 2switch語句 switch語句的一般形式switch 表達式 case常量表達式1 語句序列1case常量表達式2 語句序列2 case常量表達式n 語句序列ndefault 語句序列n 1 功能 計算表達式的值 與常量表達式的值比較 等于第i個值時 順序執(zhí)行語句序列i i 1 n 1若與所有常量表達式值都不相等 執(zhí)行語句序列n 1 202020 1 27 22 switch語句的算法描述 例如 switch a case5 printf 當a等于5 輸出 當a等于2 輸出 當a是其他值 輸出 202020 1 27 23 說明 case常量表達式i 等價于語句標號 計算出的表達式值等于哪個語句標號 就從哪個位置開始順序向下執(zhí)行語句序列 語句位置影響運行結(jié)果 例如 switch a case2 printf default printf case5 printf 當a等于2 輸出 當a是其他值 輸出 當a等于5 輸出 switch與break語句結(jié)合才能實現(xiàn)程序的分支 break break 當a等于2 輸出 當a等于5 輸出 當a是其他值 輸出 202020 1 27 24 switch語句的簡單應(yīng)用 例4 3 已知x 100 y 15 要求輸入一個算術(shù)運算符 或 并對x和y進行指定的算術(shù)運算 思路 設(shè)x和y為float型變量并賦初值 輸入的運算符op為char型變量 根據(jù)op的值 為 進行x和y的相加 相減 相乘 相除運算 選擇分支 還要考慮到輸入字符不是 或 時的情況 202020 1 27 25 程序 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 代替 202020 1 27 26 注意 switch語句的書寫格式 語句體本身必須用花括號括起 case和default后面如果有多條語句 則不必加花括號 case和常量表達式之間必須有空格 default可以寫在語句體的任何位置 也可以省略 break語句可以改變case的語句標號作用 終止后續(xù)case語句序列的執(zhí)行 switch語句和break語句結(jié)合 可以實現(xiàn)程序的選擇控制 允許switch嵌套使用 但同一個switch語句中 任意兩個case的常量表達式值不能相同 202020 1 27 27 4 3選擇結(jié)構(gòu)程序設(shè)計舉例 例4 6 求一元二次方程ax2 bx c 0的根 思路 一元二次方程的根取決于系數(shù)a b c求根公式 判別式d b2 4ac當d 0時 方程有兩個相等的實根 x1 x2 b 2 a 當d 0時 方程有兩個不相等的實根 x1 b sqrt d 2 a x2 b sqrt d 2 a 當d 0時 方程有兩個虛根 x1 jp ipix2 jp ipi 實部jp b 2 a 虛部ip sqrt d 2 a 202020 1 27 28 算法 202020 1 27 29 程序 include math h main floata b c d x1 x2 lp ip scanf f f f 202020 1 27 30 程序 續(xù) elseif d 1e 6 不相等的實根 x1 b sqrt d 2 a x2 b sqrt d 2 a printf hastworealroots n printf x1 8 4f 2 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 202020 1 27 31 舉例 續(xù) 例4 b 輸入年份 判別該年是否為閏年 思路 年份year為閏年的條件為 能夠被4整除 但不能被100整除的年份 能夠被400整除的年份 只要滿足任意一個就可以確定它是閏年 例如 1996年 2000年是閏年1998年 1900年不是閏年 設(shè)定標志變量leap 只要符合其中一個條件的就是閏年 令leap 1 否則令leap 0 202020 1 27 32 算法 year 4 0 year 100 0 202020 1 27 33 程序 main intyear leap scanf d 運行jc4 b 202020 1 27 34 舉例 續(xù) 例4 C 已知銀行整存整取存款月息利率分別為 0 225 期限一年0 292 期限三年0 315 期限五年0 408 期限八年0 192其他 視為活期 輸入存款金額和期限 求到期時利息與本金合計 可以用if語句或switch語句實現(xiàn) 銀行到期利息計算公式 利息 本金 月息利率 12 存款年限程序中應(yīng)當根據(jù)存款的年限 多種 確定利率 202020 1 27 35 程序 main floatmoney rate total year printf Inputmoneyandyear scanf f f 運行jc4 c 問題 是否允許year為float型 當存款期限為2年 4年 等如何處理 20202

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論