邏輯運算及判斷選取控制.ppt
《邏輯運算及判斷選取控制.ppt》由會員分享,可在線閱讀,更多相關(guān)《邏輯運算及判斷選取控制.ppt(65頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第四章邏輯運算和判斷選取控制 4 1關(guān)系運算符和關(guān)系表達式關(guān)系運算是邏輯運算中比較簡單的一種 所謂 關(guān)系運算 實際上是 比較運算 將兩個值進行比較 判斷比較的結(jié)果是否符合給定的條件 例如 a 3是一個關(guān)系表達式 大于號 是一個關(guān)系運算符 4 1 1關(guān)系運算符及其優(yōu)先次序C語言提供6種關(guān)系運算符 1 大于 4 大于或等于 5 等于 6 不等于 關(guān)于優(yōu)先次序 1 前4種關(guān)系運算符 的優(yōu)先級別相同 后兩種也相同 前4種高于后2種 2 關(guān)系運算符的優(yōu)先級低于算術(shù)運算符 3 關(guān)系運算符的優(yōu)先級高于賦值運算符 高 低算術(shù)運算符關(guā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)系表達式用關(guān)系運算符將兩個表達式 可以是算術(shù)表達式或關(guān)系表達式 邏輯表達式 賦值表達式 字符表達式 連接起來的式子 稱關(guān)系表達式 例如 下面都是合法的關(guān)系表達式 a b a b b c a 3 b 5 a b a b b c 關(guān)系表達式的值是一個邏輯值 即 真 或 假 例如 關(guān)系表達式 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邏輯運算符和邏輯表達式用邏輯運算符將關(guān)系表達式或邏輯量連接起來就是邏輯表達式 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)先次序 高 低 算術(shù)運算符 關(guā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邏輯表達式如前所述 邏輯表達式的值應該是一個邏輯量 真 或 假 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后面都有 表達式 一般為邏輯表達式或關(guān)系表達式 例如 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的配對關(guān)系 從最內(nèi)層開始 else總是與它上面最近的 未曾配對的 if配對 if if 語句1elseif 語句2else語句3因此最好使內(nèi)嵌if語句也包含else部分 這樣if的數(shù)目和else的數(shù)目相同 從內(nèi)層到外層一一對應 不致出錯 如果if與else的數(shù)目不一樣 為實現(xiàn)程序設(shè)計者的企圖 可以加花括弧來確定配對關(guā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)先級別比關(guān)系運算符和算術(shù)運算符都低 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 在關(guān)鍵字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- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 邏輯運算 判斷 選取 控制
鏈接地址:http://www.hcyjhs8.com/p-5411246.html