C語言:分支結構程式
一.關係運算符和表示式
在程式中經常需要比較兩個量的大小關係,以決定程式下一步的工作。比較兩個量的運算子稱為關係運算符。
(1)關係運算符及優先次序
在C語言中有以下關係運算符:
1.< 小於
2. <= 小於或等於
3. > 大於
4. >= 大於或等於
5. == 等於
6. != 不等於
在六個關係運算符中,<,<=,>,>=的優先順序相同,高於== 和!=,==和!=的優先順序相同。
(2)關係表示式
關係表示式的一般形式:表示式 關係運算符 表示式
例如:
a+b>c-d
x>3/2
‘a’+1<c
-i-5*j==k+1
都是合法的關係表示式。由於表示式也可以又是關係表示式, 因此也允許出現巢狀的情況。
例如:
a>(b>c)
a!=(c==d)
關係表示式的值是真”和“假”,用“1”和“0”表示。
例如:
5>0 的值為“真”,即為 1。
(a=3)>(b=5)由於 3>5 不成立,故其值為假,即為 0。
二.邏輯運算子和表示式
(1)邏輯運算子及優先次序
C語言中提供了三種邏輯運算子:
- && 與運算
- || 或運算
- ! 非運算
與運算子"&& “和或運算子”||“均為雙目運算子。具有左結合性。非運算子”!"為單目運算子,具有右結合性。
“&&”和“||”低於關係運算符,“!”高於算術運算子。
按照運算子的優先順序可以得出:
a>b && c>d 等價於 (a>b)&&(c>d)
!b==c||d<a 等價於 ((!b)==c)||(d<a)
a+b>c&&x+y<b 等價於 ((a+b)>c)&&((x+y)<b)
(2)邏輯運算的值
邏輯運算的值也為“真”和“假”兩種,用“1”和“0 ”來表示。
- 與運算 &&:參與運算的兩個量都為真時,結果才為真,否則為假。
- 或運算||:參與運算的兩個量只要有一個為真,結果就為真。 兩個量都為假時,結果為假。
3.非運算!:參與運算量為真時,結果為假;參與運算量為假時,結果為真。
(3)邏輯表示式
邏輯表示式的一般形式:表示式 邏輯運算子 表示式
其中的表示式可以又是邏輯表示式,從而組成了巢狀的情形。
例如:
(a&&b)&&c
邏輯表示式的值是式中各種邏輯運算的最後值,以“1”和“0”分別代表“真”和“假”
三.if 語句
(1)if 語句的三種形式
1.if (表示式) 語句
其語義是:如果表示式的值為真,則執行其後的語句, 否則不執行該語句。
2.if-else
if(表示式)
語句1;
else
語句2;
其語義是:如果表示式的值為真,則執行語句 1,否則執行語句 2 。
3.if-else-if
if(表示式 1)
語句 1;
else if(表示式 2)
語句 2;
else if(表示式 3)
語句 3;
…
else if(表示式 m)
語句 m;
else
語句 n;
其語義是:依次判斷表示式的值,當出現某個值為真時,則執行其對應的語句。然後跳到整個 if 語句之外繼續執行程式。 如果所有的表示式均為假,則執行語句 n。然後繼續執行後續程式。
(2)條件運算子和條件表示式
條件運算子為?和:,它是一個三目運算子,即有三個參與運算的量。
由條件運算子組成條件表示式的一般形式為:
表示式1 ? 表示式2: 表示式3
其求值規則為:如果表示式 1 的值為真,則以表示式 2 的值作為條件表示式的值,否則以表示式 2 的值作為整個條件表示式的值。
注意:
1.條件運算子的運算優先順序低於關係運算符和算術運算子,但高於賦值符。
例如:
max=(a>b)?a:b
可以去掉括號而寫為
max=a>b?a:b
- 條件運算子?和:是一對運算子,不能分開單獨使用。
- 條件運算子的結合方向是自右至左。
例如:
a>b?a:c>d?c:d
應理解為
a>b?a:(c>d?c:d)
這也就是條件表示式巢狀的情形,即其中的表示式 3 又是一個條件表示式。
四.switch 語句
C語言還提供了另一種多分支選擇的switch語句,其一般表示式為:
switch(表示式)
{
case 常量表達式 1: 語句 1;
case 常量表達式 2: 語句 2;
…
case 常量表達式 n: 語句 n;
default : 語句 n+1;
}
其語義是:計算表示式的值。 並逐個與其後的常量表達式值相比較,當表示式的值與某個常量表達式的值相等時, 即執行其後的語句,然後不再進行判斷,繼續執行後面所有case 後的語句。如表示式的值與所有 case 後的常量表達式均不相同時,則執行 default 後的語句。