關係運算實際上是「比較運算」,將兩個值進行比較,判斷其比較的結果是否符合給定的條件。
c 語言提供6種關係運算子:
① <(小於)
② <=(小於或等於)
③ >(大於)
④ >=(大於或等於)
⑤ ==(等於)
⑥ !=(不等於)
優先次序:
⑴前4種關係運算子優先級別相同,後兩種也相同。前4種高於後2種。
⑵關係運算子的優先順序低於算術運算子。
⑶關係運算子的優先順序高於賦值運算子。
用關係運算子將兩個表示式連線起來的式子,稱關係表示式。
關係表示式的值是乙個邏輯值,即「真」或「假」。例如,關係表示式「5 == 3」的值為「假」,「5 >= 0」的值為「真」。c 語言沒有邏輯型資料,以「1」代表「真」,以「0」代表「假」。
例如,a = 3,b = 2,c = 1,則:
關係表示式「a > b」的值為「真」,表示式的值為1;
關係表示式「(a > b)== c」的值為「真」(因為 a > b 的值為1,等於 c 的值),表示式的值為1;
關係表示式「b + c < a」的值為「假」,表示式的值為0。
c 語言提供三種邏輯運算子:
⑴ && 邏輯與
⑵ || 邏輯或
⑶ ! 邏輯非
「&&」和「||」是「雙目(元)運算子」,它要求有兩個運算量(運算元),「!」是「一目(元)運算子」。
邏輯運算舉例如下:
a && b 若 a, b 為真,則 a && b 為真;
a || b 若 a, b 之一為真,則 a || b 為真;
!a 若 a 為真,則 !a 為假。
邏輯運算子優先順序:
即「!」為三者中最高的;
⑵ 邏輯運算子中的「&&」和「||」低於關係運算子,「!」高於算術運算子。
用邏輯運算子將關係表示式或邏輯量連線起來的式子就是邏輯表示式。
邏輯表示式的值應該是乙個邏輯量「真」或「假」。c 語言編譯系統在給出邏輯運算結果時,以數值「1」代表「真」,以「0」代表「假」,但在判斷乙個量是否為「真」時,以「0」代表「假」,以「非0」代表「真」。即將乙個「非0」的數值認為「真」。
例如:⑴若 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。
邏輯運算子兩側的運算物件不但可以是「0」和「1」,或者是「0」和「非0」的整數,也可以是任何型別的資料。可以是字元型、實型或指標型等。系統最終以「0」和「非0」來判定它們屬於「真」或「假」。
在邏輯表示式的求解中,並不是所有的邏輯運算子都被執行,只是在必須執行下乙個邏輯運算子才能求出表示式的解時,才執行該運算子。例如:
⑴ a && b && c 只有 a 為真(非0)時,才需要判別 b 的值,只有 a 和 b 都為真的情況下才需要判別 c 的值。只要 a 為假,就不必判別 b 和 c(此時整個表示式已確定為假)。如果 a 為真,b 為假,不判別 c。
見圖 4.3。
⑵ a || b || c 只要 a 為真(非0),就不必判斷 b 和 c,只有 a 為假,才判別 b;a 和 b 都為假才判別 c。見圖 4.4。
對「&&」運算子來說,只有 a ≠ 0,才繼續進行右面的運算。對「||」運算子來說,只有 a = 0,才繼續進行其右面的運算。因此,如果有下面的邏輯表示式:
(m = a > b) && (n = c > d)
當 a = 1, b = 2, c = 3, d = 4, m 和 n 的原值為1時,由於「a > b」的值為0,因此 m = 0,而「n = c > d」不被執行,因此 n 的值不是0而仍保持原值1。
if 語句是用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行給出的兩種操作之一。
c 語言提供了三種形式的 if 語句:
1.if (表示式)
語句執行過程見圖 4.5(a)。
例如:if (x > y)
printf("%d", x);
2.if (表示式)
語句1else
語句2執行過程見圖 4.5(b)。
例如:if (x > y)
printf("%d", x);
else
printf("%d", y);
圖4.5 if 語句的三種形式(1、2)
3.if (表示式1)
語句1;
else
if (表示式2)
語句2;
else
if (表示式3)
語句3;
else
if (表示式m)
語句m;
else
語句n;
執行過程見圖 4.6。
例如:if (number > 500)
cost = 0.15;
else
if (number > 300)
cost = 0.10;
else
if (number > 100)
cost = 0.075;
else
if (number > 50)
cost = 0.05;
else
cost = 0;
圖4.6 if 語句的三種形式(3)
說明:⑴三種形式的 if 語句中在 if 後面都有「表示式」,一般為邏輯表示式或關係表示式。在執行 if 語句時先對表示式求解,若表示式的值為「0」,按「假」處理,若表示式的值為「非0」,按「真」處理,執行指定的語句。如:
if (3)
printf("");
是合法的,執行結果輸出「因為表示式的值為3,按「真」處理。
表示式的型別不限於邏輯表示式,可以是任意的數值型別(包括整型、實型、字元型、指標型資料)。如:
if ('a')
printf("%d", 'a');
執行結果輸出 'a' 的 ascii 碼97。
⑵第二、第三種形式的 if 語句中,在每個 else 前面有一分號,整個語句結束處有一分號。這是由於分號是 c 語句中不可缺少的部分,這個分號是 if 語句中的內嵌語句所要求的。如果無此分號,則出現語法錯誤。
但應注意,不要誤認為上面是兩個語句(if 語句和 else 語句)。它們都屬於同乙個 if 語句。else 子句不能作為語句單獨使用,必須是 if 語句的一部分,與 if 配對使用。
⑶在 if 和 else 後面可以只含乙個內嵌的操作語句,也可以有多個操作語句,此時用花括號「{}」將幾個語句括起來成為乙個復合語句。如:
if (a + b > c && b + c > a && c + a > b)
else
printf("it is not a trilateral");
例 4.1 輸入兩個實數,按代數值由小到大的次序輸出這兩個數。
#include ""
void main()
printf("%5.2f,%5.2f\n", a, b);
} 例 4.2 輸入3個數 a, b, c,要求按由小到大的順序輸出。用偽**寫出演算法:
if a > b 將 a 和 b 對換 (a是 a, b 中的小者)
if a > c 將 a 和 c 對換 (a是 a, c 中的小者,因此 a 是三者中最小者)
if b > c 將 b 和 c 對換 (b是 b, c 中的小者,也是三者中次小者)
然後順序輸出a,b,c 即可。
按此演算法編寫程式:
#include ""
void main()
if (a > c) /* 實現 a 和 c 的互換 */
if (b > c) /* 實現 b 和 c 的互換 */
printf("%5.2f,%5.2f,%5.2f\n", a, b, c);
} 在 if 語句中又包含乙個或多個 if 語句稱為 if 語句的巢狀。一般形式如下:
if ()
else
else 總是與它上面的最近的if配對(最近匹配原則)。
例 4.3 有一函式:
編一程式,輸入乙個 x 值,輸出 y 值。
演算法:輸入 x
若 x < 0 y = -1
若 x = 0 y = 0
若 x > 0 y = 1
輸出y或:
輸入 x
若 x < 0 y = -1
否則:若 x = 0 y = 0
若 x > 0 y = 1
輸出y。
程式1(流程圖見圖 4.7):
#include ""
void main()
{ int x, y;
scanf("%d", &x);
if (x < 0)
第04章選擇結構程式設計
4.3 if語句 用if語句可以構成分支結構,它根據給定的條件進行判斷,以決定執行某個分支程式段,c語言中if語句有三種基本形式。選擇 一 if語句的三種形式 1.第一種形式為基本形式 if 單重選擇 if 表示式 語句 其語義是 如果表示式為真,則執行其後的語句,否則不執行該語句,其過程可表示為下...
選擇結構程式設計
四川師範大學物理與電子工程學院2014級2班張文鵬 1 實驗目的 1 了解c語句表示邏輯量的方法 以0代表 假 以1代表 真 2 學會正確使用邏輯運算子和邏輯表示式 3 熟練掌握if語句和switch語句。2 實驗原理 在邏輯運算中先判斷該邏輯運算值得真假,如果為真應該執行什麼程式,為假應該執行什麼...
選擇結構程式設計,迴圈結構程式設計習題
習題4選擇結構程式設計 一 單選題 1 有如下巢狀的 語句 if a if a else k c if b else k c 以下選項中與上述 語句等價的語句是 k a k a k a k a2.以下選項中與if a 1 a b else a 語句功能不同的switch語句是 switch case...