前面已經介紹了順序結構的程序設計,在大多數情況下,由於數據處理的需要,程序不會是單一的順序結構,而是順序、選擇、循環三種結構的複雜組合。這章更多的還是會通過寫一些程序來呈現出來選擇結構的內容。
例如:
(一)工程師崗位面試(關係運算符和邏輯運算符)
題目要求:上海一家IT企業招聘c/c++開發工程師,滿足以下任職要求者可以獲得面試機會。
(1)學歷:計算機相關專業畢業,碩士及以上學歷;
(2)工作年限:兩年以上c/c++開發工程師崗位從業經驗;
(3)業務要求:熟練或精通c/c++和數據壓縮算法。
滿足以上三個條件,即相應表達式的值為真,那麼求職者就可以收到面試通知,從以上面試條件中,我們可以觀察到,每個條件都涉及到多個判斷(子條件),而這些判斷之間存在著一定的邏輯關係,後面介紹的關係運算和邏輯運算就是描述他們的邏輯關係。
運行結果:
面試成功
(二)關係運算符和關係表達式
關係表達式是由關係運算符、括號、常量、變量和函數等運算對象構成的式子。在c語言中關係運算符共有六種。
上面例題中出現的的working_life>2就是關係表達式,由於關係運算符的優先級低於算術運算符,高於賦值運算符,所以下面的關係表達式有其相應的等價式子。
a>b+c 等價於 a>(b+c)
a>b==c 等價於 (a>b==c)
a=b>c 等價於 a=(b>c)
關係運算實際上是比較運算。關係表達式的值是一個邏輯值,即「真」或「假」。
(三)邏輯運算符和邏輯表達式
邏輯表達式是由邏輯運算符、括號和其他運算對象構成的式子,它的值反映了邏輯運算的結果。
通過邏輯運算符可以寫出邏輯表達式,邏輯表達式的形式一般如下:
表達式 邏輯運算符 表達式 或邏輯運算符 表達式
例如:a||b、age>25&&sex==『f』
運算符「&&」和「||」的優先級低於算術運算符和關係運算符。而運算符「!」的優先級高於算術運算符和關係運算符,在上面例題中3個邏輯表達式來選擇符合條件的求職者,3種邏輯運算符的運算規則如下。
(1)a&&b,當a和b都為真時結果為真,否則結果為假。
(2)a||b,當a和b至少一個為真時結果為真,當a和b都為假時結果為假。(3)!a,當a為真時結果為假,當a為假時結果為真。
邏輯運算的真值表:
a例:設a=4,b=5,c=5,寫出下面各邏輯表達式的值。
a+b<c&&b==c 值為0
a||b+c&&b-c 值為1
!(a>b)&&!c||1 值為1
!(x=a)&&(y=b)&&0 值為0
說明:
(1)邏輯表達式中任何非零的數值都被稱為「真」。
(2)在邏輯表達式的求解中,並不是所有的邏輯運算符都會被執行。
<1>a&&b&&c:只有a為真時才需要判斷b的值,只有a和b都為真時才需要判斷c的值。
<2>a||b||c:只要a為真,就不必判斷b和c的值,只有a為假時才需要判斷b,a和b都為假時才判斷c。
當左值可以決定整個表達式的值時不再要求右邊表達式的值,因此對於與(&&)運算來說,左值為0,就不再需要繼續後面的運算;對於或(||)運算來說,左值為1,就不再繼續後面的運算,這樣可以提高運算速度,有的書上把這一特點叫做「邏輯運算的短路特徵」,例如;(m=a>b)&&(n=c>d)
當a=1,b=2,c=3,d=4,m和n的原值為1
時,由於「a>b」的值為0,因此m=0,即可判斷出表達式(m=>b)&&(n=c>d)的值為0,而不必再求「n=c>d」的值,因此n的值不是0仍保持原值1。
(四)條件運算符和條件表達式
條件表達式是用條件運算符(?!:)把三個表達式連接起來的式子,其形式如下:
表達式1?表達式2:表達式3
條件運算符(?:)要求三個操作數,所以也叫三目運算符。條件表達式的求解過程是先判斷表達式1的值是否為真(非0),若為真,則計算表達式2,表達式2的值就是整個條件表達式的值,若為假(0),則計算表達式3,表達式3的值整個條件表達式的值。
請注意條件運算符的結合性為右結合。例如:「int a=1」,b=4,c=3,d=2;
條件表達式a<b?a:c<d的值是什麼?由於條件運算符的右結合性,a<b?a:c<d?c:d相當於a<b?a:(c<d?c:d),因為a<b為真,所以整個條件表達式的值就為a的值1.如果a<b為假,那麼再去計算後面的(c<d?c:d),這裡a<b為真,因此就不必計算後面的條件表達式(c<d?c:d)。