邏輯運算及判斷選取控制.ppt
《邏輯運算及判斷選取控制.ppt》由會員分享,可在線閱讀,更多相關《邏輯運算及判斷選取控制.ppt(65頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第四章邏輯運算和判斷選取控制 4 1關系運算符和關系表達式關系運算是邏輯運算中比較簡單的一種 所謂 關系運算 實際上是 比較運算 將兩個值進行比較 判斷比較的結(jié)果是否符合給定的條件 例如 a 3是一個關系表達式 大于號 是一個關系運算符 4 1 1關系運算符及其優(yōu)先次序C語言提供6種關系運算符 1 大于 4 大于或等于 5 等于 6 不等于 關于優(yōu)先次序 1 前4種關系運算符 的優(yōu)先級別相同 后兩種也相同 前4種高于后2種 2 關系運算符的優(yōu)先級低于算術運算符 3 關系運算符的優(yōu)先級高于賦值運算符 高 低算術運算符關系運算符賦值運算符 例如 1 c a b等效于c a b 2 a b c等效于 a b c3 a b c等效于a b c 4 1 2關系表達式用關系運算符將兩個表達式 可以是算術表達式或關系表達式 邏輯表達式 賦值表達式 字符表達式 連接起來的式子 稱關系表達式 例如 下面都是合法的關系表達式 a b a b b c a 3 b 5 a b a b b c 關系表達式的值是一個邏輯值 即 真 或 假 例如 關系表達式 5 3 的值為 假 5 0 的值為 真 C語言沒有邏輯型 以1代表 真 以 0 代表 假 例如 若a 3 b 2 c 1 則 a b的值為 真 表達式的值為1 a b c的值為 真 表達式的值為1 b c a的值為 假 表達式的值為0 如果有以下賦值表達式 d a bd的值為1 f a b cf的值為0 注意 數(shù)學中的22 x 10 4 2邏輯運算符和邏輯表達式用邏輯運算符將關系表達式或邏輯量連接起來就是邏輯表達式 4 2 1邏輯運算符及其優(yōu)先次序C語言提供三種邏輯運算符 1 邏輯與2 邏輯或3 邏輯非 說明 1 和 是 雙目 元 運算符 它要求有兩個運算量 操作數(shù) 如 a b x y a b x y 2 是一目 元 運算符 只要求有一個運算量 如 a b 邏輯運算規(guī)則如下 a b若a b為真 則a b為真 a b若a b之一為真 則a b為真 a若a為真 則 a為假 下表為邏輯運算的 真值表 用它表示當a和b的值為不同組合時 各種邏輯運算所得到的值 ab a ba ba bTTFFTTTFFTFTFTTFFTFFTTFF 含邏輯運算的表達式計算優(yōu)先順序 優(yōu)先次序 高 低 算術運算符 關系運算符 賦值運算符1 a b x y c a b x y c 2 a b x y a b x y 3 a b x y a b x y 4 2 2邏輯表達式如前所述 邏輯表達式的值應該是一個邏輯量 真 或 假 C語言編譯系統(tǒng)在給出邏輯運算結(jié)果時 以數(shù)值1代表 真 以0代表 假 但在判斷一個量是否為 真 時 以0代表 假 以非0代表 真 即將一個非零的數(shù)值認作為 真 若a 4 則 a的值為0 若a 4 b 5 則a b的值為1 a b值同前 a b的值為1 a b值同前 a b的值為1 4 0 2的值為1 通過這幾個例子可以看出 由系統(tǒng)給出的邏輯運算結(jié)果不是0就是1 不可能是其它數(shù)值 而在邏輯表達式中作為參加邏輯運算的運算對象 操作數(shù) 可以是0 假 或任何非0的數(shù)值 按 真 對待 例如5 3 2 8 4 0表達式自左至右掃描求解 實際上 邏輯運算符兩側(cè)的運算對象不但可以是0和1 或者是0和非0的整數(shù) 也可以是任何類型的數(shù)據(jù) 可以是字符型 實型或指針型等 系統(tǒng)最終以0和非0來判定它們屬于 真 或 假 例如 c d 的值為1 因為 c 和 d 的Ascii值都不為0 按 真 處理 在邏輯表達式的求解中 并不是所有的邏輯運算符都被執(zhí)行 只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時 才執(zhí)行該運算符 例如 1 a b c只有a為真 非0 時 才需要判別b的值 只有a和b都為真的情況下才需要判別c的值 只要a為假 就不必判別b和c 此時整個表達式已確定為假 如果a為真 b為假 不判別c 2 a b c只要a為真 非0 就不必判別b和c對 運算符只有a 0 才繼續(xù)進行右面的運算 對 運算符來說 只有a 0才繼續(xù)進行其右面的運算 如果有下面的邏輯表達式 m a b n c d 當a 1 b 2 c 3 d 4 m和n的原值為 由于a b的值為0 m 0 而n c d不被執(zhí)行 因此n的值不是0而仍保持原值1 例如 1 a 0 b 1 c 2 d a 運算結(jié)果 d 1 a 1 b 2 c 2 例如 判別某一年year是否閏年 閏年的條件是符合下面二者之一 能被4整除 但不能被100整除 能被4整除 又能被400整除 可以用一個邏輯表達式來表示閏年 year 4 0 year 100 0 year 400 0可以加一個 用來判別非閏年 year 4 0 year 100 0 year 400 0 4 3if語句if語句是用來判定所給定的條件是否滿足 根據(jù)判定的結(jié)果 真或假 決定執(zhí)行給出的兩種操作之一 4 3 1if語句的三種形式C語言提供了三種形式的if語句 1 if 表達式 語句例如 if x y printf d x 這種if語句的執(zhí)行過程見圖 2 if 表達式 語句1else語句2if x y printf d x elseprintf d y 見圖 3 if 表達式1 語句1elseif 表達式2 語句2elseif 表達式3 語句3elseif 表達式m 語句melse語句n 例如if number 500 cost 0 15 elseif number 300 cost 0 10 elseif number 100 cost 0 075 elseif number 50 cost 0 05 elsecost 0 說明 1 三種形式的if語句中在if后面都有 表達式 一般為邏輯表達式或關系表達式 例如 if a b x y printf a b x y 2 表達式的類型不限于邏輯表達式 可以是任意的數(shù)值類型 包括整型 實型 字符型 指針型數(shù)據(jù) if 3 printf ok if a printf d a 3 第二 第三種形式的if語句中 在每個else前面有一分號 整個語句結(jié)束處有一分號 例如 if x 0 printf f x elseprintf f x 注意 不要誤認為上面是兩個語句 if語句和else語句 它們都屬于同一個if語句 else子句不能作為語句單獨使用 它必須是if語句的一部分 與if配對使用 4 在if和else后面可以只含一個內(nèi)嵌的操作語句 如上例 也可以有多個操作語句 此時用花括號 將幾個語句括起來成為一個復合語句 如 if a b carea sqrt s s a s b s c printf area 6 2f area elseprintf itisnotatrilateral 注意 此時的 后面無需 因為 內(nèi)本身已經(jīng)是一個完整的復合語句 例4 1輸入兩個實數(shù) 按代數(shù)值由小到大次序輸出這兩個數(shù) main floata b t scanf f f 例4 2 輸入三個數(shù) 按大小順序輸出 main floata b c t printf Inputa b c n scanf f f f 4 3 2語句的嵌套在if語句中又包含一個或多個if語句稱為if語句的嵌套 一般形式如下 if if 語句1else語句2elseif 語句3else語句4應當注意if與else的配對關系 從最內(nèi)層開始 else總是與它上面最近的 未曾配對的 if配對 if if 語句1elseif 語句2else語句3因此最好使內(nèi)嵌if語句也包含else部分 這樣if的數(shù)目和else的數(shù)目相同 從內(nèi)層到外層一一對應 不致出錯 如果if與else的數(shù)目不一樣 為實現(xiàn)程序設計者的企圖 可以加花括弧來確定配對關系 例如 if if 語句1 else語句2這時if限定了內(nèi)嵌if語句的范圍 因此else與第一個讓配對 例4 3 有一函數(shù) 1 x0 編一程序 輸入一個x值 輸出y值 有以下幾種寫法 請讀者判斷哪些是正確的 程序1 main 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 程序2 將上面程序的if語句改為 if x 0 if x 0 y 1 elsey 0 elsey 一1 程序3 將上述if語句改為 y 一1 if x 0 if x 0 y 1 elsey 0 程序4 y 0 if x 0 if x 0 y 1 elsey 1 4 3 3條件運算符若if語句中 在表達式為 真 和 假 時 且都只執(zhí)行一個賦值語句給同一個變量賦值時 可以用簡單的條件運算符來處理 例如 若有以下if語句 if a b max a elsemax b 可以用下面的條件運算符 來處理 max a b a b 條件運算符要求有三個操作對象 稱三目 元 運算符 條件表達式的一般形式為表達式1 表達式2 表達式3它的執(zhí)行過程見圖 說明1 條件運算符的執(zhí)行順序 先求解表達式1 若為非0 真 則求解表達式2 此時表達式2的值就作為整個條件表達式的值 若表達式1的值為0 假 則求解表達式3 表達式3的值就是整個條件表達式的值 max a b a b 2 條件運算符優(yōu)先于賦值運算符 因此上面賦值表達式的求解過程是先求解條件表達式 再將它的值賦給max 條件運算符的優(yōu)先級別比關系運算符和算術運算符都低 max a b a b括號可以不要 可寫成max a b a b如果有a b a b 1相當于a b a b 1 而不相當于 a b a b 1 3 條件運算符的結(jié)合方向為 自右至左 如果有以下條件表達式 a b a c d c d相當于a b a c d c d a 1 b 2 c 3 d 4 則條件表達式的值等于4 4 條件表達式不能取代一般的if語句 只有在if語句中內(nèi)嵌的語句為賦值語句 且兩個分支都給同一個變量賦值 時才能代替if語句 if a b printf d a elseprintf d b 但可以用下面語句代替 printf d a b a b 即將條件表達式的值輸出 5 條件表達式中 表達式1的類型可以與表達式2和表達式3的類型不同 如x a b 表達式2和表達式3的類型也可以不同 此時條件表達式的值的類型為二者中較高類型 如x y 1 1 5 例4 3 輸入一個字符 判別它是否大寫字母 如果是 將它轉(zhuǎn)換成小寫字母 如果不是 不轉(zhuǎn)換 然后輸出最后得到的字符 includemain charch scanf c 例 計算分段函數(shù) Y N Y N includemain floatx y printf enterx scanf f 4 4switch語句switch語句是多分支選擇語句 if語句只有兩個分支可供選擇 而實際問題中常常需要用到多分支的選擇 例如 學生成績分類 90分以為 A 等 80 89分為 B 等 70 79分為 c 等 人口統(tǒng)計分類 按年齡分為老 中 青 少 兒童 工資統(tǒng)計分類 銀行存款分類 等 C語言提供switch語句直接處理多分支選擇 它的一般形式如下 switch 表達式 case常量表達式1 語句1 case常量表達式2 語句2 case常量表達式n 語句n default 語句n十1 例如 根據(jù)考試成績的等級打印出百分制分數(shù)段 switch grade case A printf 85 100 n case B printf 70 84 n case C printf 60 69 n case D printf 60 n default printf error n 說明 1 switch后面括弧內(nèi)的 表達式 可以是整型表達式或字符型表達式 2 當表達式的值與某一個case后面的常量表達式的值相等時 就執(zhí)行此case后面的語句 若所有的case中的常量表達式的值都沒有與表達式的值匹配的 就執(zhí)行defau1t后面的語句 3 每一個case的常量表達式的值必須互不相同 否則就會出現(xiàn)互相矛盾的現(xiàn)象 對表達式的同一個值 有兩種或多種執(zhí)行方案 4 各個case的出現(xiàn)次序不影響執(zhí)行結(jié)果 例如 可以先出現(xiàn)case D 然后是case A 5 執(zhí)行完一個case后面的語句后 流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行 case常量表達式只是起語句標號作用 并不是在該處進行條件判斷 在執(zhí)行switch語句時 根據(jù)switch后面表達式的值找到匹配的入口標號 就此標號開始執(zhí)行下去 不再進行判斷 因此 應該在執(zhí)行一個case分支后 使流程跳出switch結(jié)構(gòu) 即終止switch語句的執(zhí)行 可以用了個break語句來達到此目的 將上面的switch結(jié)構(gòu)改寫如下 switch grade case A printf 85 100 n break case B printf 70 84 n break case C printf 160 69 n break case D printf 60 n break default printf error n 在case后面中雖然包含一個以上執(zhí)行語句 但可以不必用花括弧括起來 會自動順序執(zhí)行本case后面所有的執(zhí)行語句 當然加上花括弧也可以 6 多個case可以共用一組執(zhí)行語句 如 case A case B case C printf 60 n break grade的值為 A B 或 C 時都執(zhí)行同一組語句 7 在關鍵字case和常量表達式之間一定要有空格 例如case10不能寫成case10 main intx 1 y 0 a 0 b 0 switch x case1 switch y case0 a break case1 b break case2 a b break case3 a b printf a d b d n a b 例 某百貨公司為了促銷 采用購物打折扣的優(yōu)惠辦法 每位顧客一次購物 1 在1000元以上者 按九五折優(yōu)惠 2 在2000元以上者 按九折優(yōu)惠 3 在3000元以上者 按八五折優(yōu)惠 4 在5000元以上者 按八折優(yōu)惠 編寫程序 輸入購物款數(shù) 計算并輸出優(yōu)惠價 includemain floatx y intm printf 消費總額 scanf f 4 5程序舉例 例4 4 寫程序 判某一年是否閏年 判別某一年year是否閏年 閏年的條件是符合下面二者之一 能被4整除 但不能被100整除 能被4整除 又能被400整除 可以用一個邏輯表達式來表示 year 4 0 year 100 0 year 400 0 當year為某一整數(shù)值時 上述表達式值為真 1 則year為閏年 否則為非閏年 以變量Leap代表是否閏年的信息 若閏年 令leap 1 非閏年 leap 0 最后判斷l(xiāng)eap是否1 真 若是 則輸出 閏年 信息 main intyear leap printf Inputayear n scanf d if leap printf dis year elseprintf disnot year printf aleapyear n if year 4 0 例4 5 求ax2 bx c 0方程的解 有以下幾種可能 a 0 不是二次方程 b2一4ac 0 有兩個相等實根 b2一4ac 0 有兩個不等實根 b2一4ac 0 有兩個共軛復根 程序如下 include math h main floata b c disc x1 x2 realpart imagpart zero 1e 6 printf Inputa b c n scanf f f f if fabs a zero x1 b sqrt disc 2 a x2 b sqrt disc 2 a printf hasdistinctrealroots 8 4fand 8 4f n x1 x2 else realpart b 2 a imagpart sqrt disc 2 a printf hascomplexroots n printf 8 4f 8 4fi n realpart imagpart printf 8 4f 8 4fi n realpart imagpart 例4 6 給一個不多于4位的正整數(shù) 求出它是幾位數(shù) 逆序打印出各位數(shù)字 include stdio h voidmain intx a b c d scanf d- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 邏輯運算 判斷 選取 控制
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.zhongcaozhi.com.cn/p-5411246.html