5.1 關係運算子和關係表示式
5.1.1 關係運算子及其優先次序
在c語言中有以下關係運算子:
1) < 小於
2) <= 小於或等於
3) > 大於
4) >= 大於或等於
5) == 等於
6) != 不等於
關係運算子都是雙目運算子,其結合性均為左結合。
關係運算子的優先順序低於算術運算子,高於賦值運算子。
在六個關係運算子中,<,<=,>,>=的優先順序相同,高於==和!=,==和!=的優先順序相同。
5.1.2 關係表示式
關係表示式的一般形式為: 表示式 關係運算子 表示式
例如:a + b > c - d;
關係表示式的值是真」和「假」,用「1」和「0」表示。
例5.1
#include/* 關係表示式 */
int main(void)
其語義是:如果表示式的值為真,則執行其後的語句, 否則不執行該語句。
例5.3
#include/* 基本的if語句 */
int main(void)
else }
改用if-else語句判別a,b的大小,若a大,則輸出a,否則輸出b。
3、 第三種形式為if-else-if形式
其一般形式為:
if(表示式1)
語句1;
else if(表示式2)
語句2;
else if(表示式3)
語句3; …
else if(表示式m)
語句m;
else
語句n;
其語義是:依次判斷表示式的值,當出現某個值為真時,則執行其對應的語句。
然後跳到整個if語句之外繼續執行程式。 如果所有的表示式均為假,則執行語句n。
然後繼續執行後續程式。
例5.5
#include/* if else if else if */
int main(void)
else if(c >= '0' && c<='9')
else if(c >='a' && c<='z')
else if(c >='a' && c<='z')
else
}
本例要求判別鍵盤輸入字元的類別。可以根據輸入字元的ascii碼來判別型別。
由ascii碼表可知ascii值小於32的為控制字元。在「0」和「9」之間的為數字,在
「a」和「z」之間為大寫字母,在「a」和「z」之間為小寫字母,其餘則為其它字元。
4、在使用if語句中還應注意以下問題:
1) 在三種形式的if語句中,在if關鍵字之後均為表示式。該表示式通常是邏輯表
達式或關係表示式,但也可以是其它表示式,如賦值表示式等,甚至也可以
是乙個變數。
例如:if(a=5) 語句; if(b) 語句; 都是允許的。只要表示式的值為非0,即為「真」。
2) 在if語句中,條件判斷表示式必須用括號括起來,在語句之後必須加分號。
3) 在if語句的三種形式中,所有的語句應為單個語句,如果要想在滿足條件時
執行一組(多個)語句,
則必須把這一組語句用{}括起來組成乙個復合語句。但要注意的是在}之後不
能再加分號。
例如: if(a>b)
5.3.2 if 語句的巢狀
當if語句中的執行語句又是if語句時,則構成了if 語句巢狀的情形。
注意:在沒有{}的程式中,else 總是與它前面最近的if配對,所以,
在程式中我們盡量使用{}來配對if 與else減少程式歧義!
例5.6
#include/* if語句的巢狀 */
int main(void)
else
} else
}
本例中用了if語句的巢狀結構。採用巢狀結構實質上是為了進行多分支選擇,
實際上有三種選擇即a>b、a
而且程式更加清晰。因此,在一般情況下較少使用if語句的巢狀結構。以使
程式更便於閱讀理解。
例5.7
#include/* if語句巢狀 */
int main(void)
5.4 switch語句
c語言還提供了另一種用於多分支選擇的switch語句, 其一般形式為:
switch(表示式)
其語義是:計算表示式的值。 並逐個與其後的常量表示式值相比較,當表示式的值
與某個常量表示式的值相等時, 即執行其後的語句,然後不再進行判斷,繼續執行
後面所有case
後的語句。如表示式的值與所有case後的常量表示式均不相同時,則
執行default後 的語句。
例5.9
#includeint main(void)
}
本程式是要求輸入乙個數字,輸出乙個英文單詞。但是當輸入3之後,卻執行了case3
以及以後的所有語句,輸出了wednesday 及以後的所有單詞。這當然是不希望的。為
什麼會出現
這種情況呢?這恰恰反應了switch語句的乙個特點。在switch語句中,「case
常量表示式」只
相當於乙個語句標號,表示式的值和某標號相等則轉向該標號執行,但
不能在執行完該標
號的語句後自動跳出整個switch語句,所以出現了繼續執行所有後面
case語句的情況。這
是與前面介紹的if語句完全不同的,應特別注意。為了避免上述情
況,c語言還提供了一種
break語句,專用於跳出switch語句,break 語句只有關鍵字
break,沒有引數。在後面還將
詳細介紹。修改例題的程式,在每一case語句之後增加
break 語句, 使每一次執行之後均
可跳出switch語句,從而避免輸出不應有的結果。
#includeint main(void)
}
在使用switch語句時還應注意以下幾點:
1) 、在case後的各常量表示式的值不能相同,否則會出現錯誤。
2) 、在case後,允許有多個語句,可以不用{}括起來。
3) 、各case和default子句的先後順序可以變動,而不會影響程式執行結果。
4) 、default子句可以省略不用。
5.5程式舉例
例6.0 輸入三個整數,輸出最大數和最小數。
#includeint main(void)
else
if(max < c)
else
} printf("max = %d\nmin = %d\n",max,min);
}
本程式中,首先比較輸入的a,b的大小,並把大數裝入max,小數裝入min中,
然後再與c比較,
若max小於c,則把c賦予max;如果c小於min,則把c賦予
min。因此max內總是最大數,而
min內總是最小數。最後輸出max和min的
值即可。
例6.1 計算器程式。使用者輸入運算數和四則運算符,輸出計算結果。
#includeint main(void)
}
C語言程式設計譚浩強版 一
本章的一些概況這裡就不說了,直接進入細節的學習!3.1 c的資料型別 資料型別分為 基本型別 構造型別 指標型別 空型別 基本型別又分為 整型 字元型 實型 浮點型 又分為單精度型 雙精度型 列舉型別 構造型別又分為 陣列型別 結構體型別 共用體型別 3.2 常量和符號常量 在程式執行過程中,其值不...
C語言程式設計譚浩強版 三
3.5 字元型資料 3.5.1 字元常量 字元常量是用單引號括起來的乙個字元。例如 a b 都是合法字元常量。在 語言中,字元常量有以下特點 1 字元常量只能用單引號括起來,不能用雙引號或其它括號。2 字元常量只能是單個字元,不能是字串。3 字元可以是字符集中任意字元。但數字被定義為字元型之後就不能...
C語言程式設計譚浩強版 四
3.6 變數賦初值 語言程式中可有多種方法為變數提供初值。本小節先介紹在作變數定義的同時給變數賦以 初值的方法。這種方法稱為初始化。變數初始化不是在編譯階段完成的,而是在程式執行 時執行本函式時賦予初值的。在變數定義中賦初值的一般形式為 型別說明符變數1 值1,變數2 值2,例如 int a 3 i...