相關鏈接:程序中的分支和跳轉
摘要: C提供一種簡寫方式來表示if else語句的一種形式。這被稱為條件表達式,並使用條件運算符(? :)。
這是個有三個操作數的分兩部分的運算符。有三個操作數的運算符就稱為三元運算符。下面是一個得到一個數的絕對值的例子:
x = (y<0) ? -y : y ;
在等號和分號之間就是條件表達式。以if else的語法可以這樣寫:
if (y<0)
x = -y;
else
x = y;
下面是條件表達式的一般形式:
expression1 ? expression2 : expression3
如果1為真,整個條件表達式的值和2的值相同。如果1為假,整個條件表達式的值等於3的值。
當希望將兩個可能的值中的一個賦給變量時,可以使用條件表達式。典型的例子是將兩個值中的最大值賦給變量:
max = (a>b) ? a : b;
如果a>b,那麼max的值等於a,否則等於b。
一個噴漆程序的例子:
這個程序計算向給定的平方英尺的面積塗漆,全部塗完需要多少罐油漆。基本的數學法則很簡單:用平方英尺數除以每罐能塗抹的平方英尺數。但是假設結果是1.7罐會怎麼樣?商店整罐賣漆,而不拆開賣,所以必須買兩罐。所以程序在得到非整數罐的結果時應該進1。條件運算符常用於處理這種情況,而且在適當的時候也用來打印can或cans。
上例表明,條件運算符也可以使用字符串作為它的第二個和第三個操作數。
摘要: C有三個邏輯運算符:與&&、或||、非!
假設需要編寫一個程序,用來計算在一個輸入的句子中,除單引號和雙引號以外的字符出現了多少次。可以用邏輯運算符來實現該目的,可以用英文的句號來標識一個句子的結束。
程序 chcount.c
邏輯運算符的優先級低於關係運算符,所以不必使用圓括號組合表達式。
C的邏輯運算符
運算符 | 含義 |
&& | 與 |
|| | 或 |
! | 非 |
假設A和B是兩個簡單的關係表達式,那麼可以聲明如下:
*僅當A和B都為真時,A&&B才為真。
*如果A為真或B為真或二者都為真,A||B為真。
*如果A為真,!A為假;如果A為假,!A為真。
改變拼寫法:iso646.h
C99標準為邏輯運算符增加了可供選擇的拼寫法。它們在iso646.h頭文件中定義。
表7.4 邏輯運算符的可選表示法
傳統的 | iso646.h |
&& | and |
|| | or |
! | not |
優先級
!運算符擁有最高的優先級,它高於乘法運算,和增量運算符的優先級相同,僅次於圓括號。&&運算符的優先級高於||,這二者的優先級都低於關係運算符而高於賦值運算符。
求值的順序
C保證邏輯運算符是從左到右求值的。&&和||運算符是序列的分界點,因此在程序從一個操作數前進到下一個操作數之前,所有的副作用都會生效。而且,C保證一旦發現某個元素使表達式總體無效,求值將立刻停止。
範圍
可以把&&運算符用於測試範圍。例如:range>=90 && range<=100,千萬不要像數學上這樣寫90<=range<=100。
下節預告:程序忽略和程序終止