對於有些選擇分支結構,可使用簡單的條件運算符來代替. 如:spa
if(a<b)
min=a;
else
min=b;對象
能夠用下面的條件運算符來處理get
min=(a<b)?a:b;io
其中"(a<b)?a:b"是一個"條件表達式",它是這樣執行的: 若是a<b爲真,則表達式取a值,不然取b值.變量
條件運算符由兩個符號組成"?"和":", 要求有3個操做對象,因此也叫它三目運算符,它是C語言中惟一的三目運算符.程序
它的通常形式爲:margin
表達式1?表達式2:表達式3;英文
如下是關於條件運算符的幾點說明:語言
(1) 一般狀況下,表達式1是關係表達式或邏輯表達式,用於描述條件表達式中的條件,表達式2和表達式3能夠是常量,變量或表達式.例如:鍵盤
(x==y)?'Y':'N'
(d=b*b-4*a*c)>=0?sqrt(d):sqrt(-d)
ch=(ch>='A'&&ch<='Z')?(ch+32):ch
以上均爲合法的條件表達式.
(2) 條件表達式的執行順序爲:先求解表達式1,若值爲非0,表示條件爲真,則求解表達式2,此時表達式2的值就做爲整個條件表達式的值;
若表達式1的值爲0,表示條件爲假,則求解表達式3,表達式3的值就是整個條件表達式的值.例如:
(a>=0)?a:-a 執行結果是a的絕對值.
(3) 在程序中,經過把條件表達式的值直接賦予某個變量.例如:
min=(a<b)?a:b 執行結果就是將條件表達式的值賦予變量min,即將a和b兩者中較小的數賦給min.
(4) 條件表達式的優先級別僅高於賦值運算符,而低於前面遇到過的全部運算符.
所以,min=(a<b)?a:b括號能夠不要,可直接寫成,min=a<b?a:b若是有x<y?x+1:y-1等效於x<y(x+1):(y-1)而不等效於(x<y?x+1:y)-1
(5) 條件運算符的結合方向爲"自右至左".
(6) 條件表達式容許嵌套,即容許條件表達式中的表達式2和表達式3又是一個條件表達式.例如:
x>0?1:x<0?-1:0
上述條件表達式中,表達式3部分又是一個條件表達式.根據條件表達式的結合性,上述條件表達式等價於:
x>0?1:(x<0?-1:0)
其做用是判斷x的符號狀況.當x爲正數時,該條件表達式的值爲1;當x爲負數時,該條件表達式的值爲-1;當x爲0時,該條件表達式的值爲0.
(7) 條件表達式不能取代通常的if語句,僅當if語句中內嵌的語句爲賦值語句(且兩個分支都給同一變量賦值)時才能代替if語句.例如:
if(a%2==0)
printf("even/n");
else
printf("odd/n");
不能寫成:
(a%2==0)?printf("even/n"):printf("odd/n");
但能夠用下面語句代替:
printf("%s/n",(a%2==0?"even":"odd");
該語句的做用是:若 a 爲偶數,輸出 even;若 a 爲奇數,輸出odd.
(8) 表達式1,表達式2,表達式3的類型能夠不一樣.此時條件表達式的值的類型爲它們中較高的類型.例如:
main() {
char c1, ch;
ch = getchar();
c1 = ch <= 'Z' && ch >= 'A' ? ' @ ' : ch ;
putchar(c1);
}
該程序的做用是從鍵盤輸入任意一個字符,判別它們是否大寫字母,若是是,輸出一個@;不然按原樣輸出 dot
上例中,程序第6行是關鍵語句,該語句實現輸入字符的判斷,選擇與更換工做.
其執行過程爲:先由此語句中的賦值號右側的條件運算符對輸入的字符進行判斷和選擇,若ch>='A'&&ch<='Z'成立,說明ch是大寫英文字母,此時選@;不然仍選原字符ch,而後把選擇的結果賦值給原變量ch 。