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