數學上有比較的運算,像是大於、等於、小於等,C 中也提供了這些運算子,這些運算子稱為關係運算子(Relational operator)或比較運算子(Comparison operator),它們有大於(>
)、不小於(>=
)、小於(<
)、不大於(<=
)、等於 (==
)以及不等於(!=
)。
請看看下面這幾行會顯示哪些數值:
printf("10 > 5\t\t%d\n", 10 > 5);
printf("10 >= 5\t\t%d\n", 10 >= 5);
printf("10 < 5\t\t%d\n", 10 < 5);
printf("10 <= 5\t\t%d\n", 10 <= 5);
printf("10 == 5\t\t%d\n", 10 == 5);
printf("10 != 5\t\t%d\n", 10 != 5);
程式的執行會顯示 0 或 1,分別表示真(成立)或假(不成立),如下所示:
10 > 5 1
10 >= 5 1
10 < 5 0
10 <= 5 0
10 == 5 0
10 != 5 1
在 C 中,所有非零的數值在作為條件式時都被視為真。
關係運算在使用時有個即使是程式設計老手也可能犯的錯誤,且不容易發現,也就是等於運算子(==
),注意它是兩個連續的等號(=
)所組成,而不是一個等號,一個等號是指定運算子,這點必須相當注意,例如若有兩個變數 x
與 y
要比較是否相等,是寫成 x == y
,而不是 x = y
,後者的作用是將 y
的值指定給 x
,而不是比較運算。
既然談到了條件式的問題,我們來介紹 C 中的條件運算子(Conditional operator),它的使用方式如下:
條件式 ? 成立傳回值 : 失敗傳回值
條件運算子的傳回值依條件式的結果而定,如果條件式的結果為真,則傳回冒號前的值,若為假,則傳回冒號後的值,下面這個程式可以作個簡單的示範:
#include <stdio.h>
int main(void) {
int score = 0;
printf("輸入學生分數:");
scanf("%d", &score);
printf("該生是否及格?%c\n", score >= 60 ? 'Y' : 'N');
return 0;
}
執行結果:
輸入學生分數:59
該生是否及格?N
這個程式會依你所輸入的分數來判斷學生成績是否不小於 60 分,以決定其是否及格,如果是則傳回字元 'Y'
,否則傳回字元 'N'
,下面這個程式可以判斷使用者輸入是否為奇數:
#include <stdio.h>
int main(void) {
int input = 0;
printf("輸入整數:");
scanf("%d", &input);
printf("該數為奇數?%c\n", input % 2 ? 'Y' : 'N');
return 0;
}
執行結果:
輸入整數:3
該數為奇數?Y
在 C 中非零數值都可以表示真,而 0 表示假,所以輸入的數為奇數時,就不能被 2 整除,所以餘數一定不是 0,在條件式中表示真, 因而傳回字元 'Y'
,若數值為偶數,則被 2 整除,所以餘數為 0,在條件式中表示假,所以傳回字元 'N'
。