1、多重if
前面討論了簡單的條件結構。條件結構用于實現需要判斷的情況,它以一個邏輯條件成立與否為條件,決定一個操作的執行或不執行,或執行兩個不同的操作。前面介紹的if和if-else結構,它是C語言中實現判斷的兩種方法,可以實現一個邏輯條件的判斷。在某些情況下,需要檢查多重條件,解決這種情況可用多重if、嵌套if或switch結構來解決,本節將具體介紹多重if結構。
C語言的多重if語句是一種條件控制結構,它允許在代碼中檢查多個條件,并根據條件的結果執行相應的操作。多重if結構的語法如下:
if(< 條件1 >)
< 語句塊 >
else if(< 條件2 >)
< 語句塊 >
else if(< 條件3 >)
< 語句塊 >
……
else
< 語句塊 >
這種結構是從上到下逐個對條件進行判斷,一旦發現條件滿足就執行與該條件相關的語句,并跳過其他的條件判斷;若沒有一個條件滿足,則執行最后一個else后的語句塊;如果沒有最后的else語句,則不執行任何操作,執行該結構后面的語句。同樣,語句塊中包含多條語句時,必須使用“{”和“}”把多條語句括起來。
下面是一段示例代碼:
#include
int main() {
int x = 10;
if (x > 0) {
if (x > 5) {
printf("x is greater than 0 and 5n");
}
}
return 0;
}
在這個例子中,我們首先定義了一個整數變量x并將其初始化為10。接下來,我們使用兩個嵌套的if語句來檢查x的值。首先,外部if語句檢查x是否大于0。如果這個條件為真,那么它就會執行內部if語句,檢查x是否大于5。如果這個條件也為真,那么就會打印一條消息表示x同時大于0和5。
需要注意的是,在C語言中,if語句后面的條件必須用括號括起來,并且每個條件后面都必須是花括號用于包含條件為真時要執行的代碼塊。如果條件為假,則跳過該代碼塊并繼續執行下一條if語句,可以根據需要嵌套多個if語句來檢查多個條件。但是要注意避免嵌套層次過多,否則會使代碼難以閱讀和維護。
2、嵌套if結構
嵌套IF是一個條件語句的結構,它用于在編程或邏輯過程中進行多層級的條件判斷。它根據一系列的條件表達式進行決策,根據不同的情況執行不同的操作。
嵌套IF語句由兩個或更多的IF語句組成,每個IF語句中都有一個或多個條件表達式作為判斷條件。當且僅當每個IF語句中的條件都為真時,該嵌套IF語句才執行其內部的語句塊。
舉個例子,假設我們要寫一個程序,該程序根據用戶輸入的成績,判斷學生是否及格和優秀。我們可以使用嵌套IF語句來實現這個功能,偽代碼如下:
IF score >= 60 THEN
IF score >= 80 THEN
PRINT "The student is excellent."
ELSE
PRINT "The student is pass."
END IF
ELSE
PRINT "The student is failed."
END IF
在上面的例子中,外層IF語句判斷學生是否及格,內層IF語句判斷學生是否優秀。如果學生及格,就會進入內層IF語句中進行優秀與否的判斷;如果學生不及格,就不會進入內層IF語句,直接輸出失敗信息。通過這樣的嵌套結構,我們可以實現更為復雜的邏輯判斷和操作。
C語言嵌套if結構的語法如下:
在編寫嵌套if結構時,有時會引發一些疑問,下面是一個例子:
if( x > 0 )
if( y > 1 )
z=1;
else /*這個else部分屬于哪個if?*/
z=2;
按條件語句的語法形式,上面的例子似乎有兩種可能的解釋,第一種理解:外層的if是一個沒有else部分的條件語句,最后的else部分屬于內層的if語句;第二種理解:內層if是一個不帶else部分的條件語句,最后的else屬于外層的if條件語句。
為了避免這種二義性,C語言規定,每個else部分總是屬于前面最近的那個缺少對應的else部分if語句。根據這一規定,上面的例子第一種解釋是正確的,第二種解釋是不正確的。
因此,在編寫代碼時,盡量把嵌入的if語句塊用“{”和“}”括起來,避免發生理解上的二義性。如果我們真的需要寫出具有第二種意義的嵌套條件語句,那么,就應該采用下面的寫法:
if( x > 0 )
{
if( y > 1 )
z=1;
}
else /*這個else部分屬于哪個if?*/
z=2;
C語言中的嵌套IF結構是一種在條件語句中嵌套另一個條件語句的語法結構。它允許在更復雜的情況下進行條件控制,通過嵌套的條件語句可以更好地處理多個條件之間的關系。
例如:我們可以使用if語句來檢查一個條件是否滿足,如果滿足,則執行一些操作。
if (condition1) {
// 執行操作1
}
再如:我們可以嵌套另一個if語句來檢查另一個條件是否滿足,如果滿足,則執行另一些操作。
if (condition1) {
// 執行操作1
if (condition2) {
// 執行操作2
}
}
在這個例子中,如果condition1為真,則執行操作1,如果condition2也為真,則執行操作2。如果任何條件不滿足,則不會執行相應的操作。
還可以使用嵌套if結構來檢查多個條件,并在每個級別上執行不同的操作。例如,以下示例展示了如何使用嵌套if結構來檢查三個條件:
if (condition1) {
// 執行操作1
if (condition2) {
// 執行操作2
if (condition3) {
// 執行操作3
}
}
}
在這個例子中,如果condition1為真,則執行操作1。然后,如果condition2也為真,則執行操作2。最后,如果condition3也為真,則執行操作3。如果任何條件不滿足,則不會執行相應的操作。
采用嵌套結構實質上是為了進行多分支選擇,判斷兩個數值的大小實際上有三種選擇,即num1=num2、num1num2,這種問題用if-else-if結構也可以完成,而且程序更加清晰。因此,在一般情況下,較少使用if的嵌套結構,以使程序更便于閱讀和理解。
在編寫代碼時,如果要使用嵌套if結構,盡量把嵌入的if語句塊用“{”和“}”括起來,一方面可以提高代碼的可理解性和易讀性;另一方面也可以預防因if和else匹配錯誤,使程序發生不可預知的結果,增加程序調試難度。
3、switch結構
在判斷過程中,有時需要判斷多個條件,需要使用多個else語句,而這樣會導致程序冗長乏味,而且還會影響可讀性。C語言提供了另一種用于多分支選擇的switch結構。如果程序必須進行很多的判斷,而且所有判斷都取決于同一變量的值,則建議使用switch結構代替一系列的if-else-if結構。
switch結構的語法如下:
switch (表達式){
case 常量表達式 1:
語句塊1;
break;
case 常量表達式 2:
語句塊2;
break;
case 常量表達式 3:
語句塊3;
break;
………
default:
語句塊n;
break;
}
其中,switch關鍵字后的表達式必須是一個整型表達式,即計算后其值為int類型,或可以轉換為int的類型,如char等。Case關鍵字后面的常量表達式要求是整型常量組成的表達式,通常是字符、數字等。
switch選擇結構的執行過程如下:
先計算并獲得switch后面小括號里的表達式的值,然后將計算結果順序與每個case后的常量表達式的值進行比較,當找到可匹配的case項后,執行這個case塊中的代碼,直到遇到break語句,break語句可在執行要求的操作之后,跳出switch語句。
如果任何情況都不滿足,則執行switch末尾部分的default語句。該default語句不是必選項,但如果不指定該語句,在任何情況都不滿足的情況下,整個switch結構不做任何操作。
在使用switch結構時,應注意以下幾點:
在case后的常量表達式的值不能相同,否則會出現錯誤;
- 在case后,允許有多個語句,可以不用{}括起來;
- 每個case子句的先后順序可以變動,而不會影響程序執行結果;
- default語句可以省略。
4、條件運算符
前面內容介紹了條件結構,并通過示例探討了該結構的各種不同方法。C語言還提供了一種稱為“條件運算符”的特殊運算符,它可以用于條件表達式中,以提供與if-else等同的結構。此運算符是?和:符號的組合,它是一個三目運算符,即具有三個參與運算的操作數,其語法規則如下:
表達式1 ? 表達式2:表達式3
其中,表達式1返回1(真)或0(假),其值可以為真,也可以為假。如果表達式1的值為真,則以表達式2的值作為整個條件表達式的值。否則,以表達式3的值作為整個條件表達式的值。條件運算符通常用于賦值語句中。其工作原理可以用圖片形式進行描述,如下圖所示。
圖 4-1條件運算符的工作原理
例如,要找出兩個數字中的最大值,可以編寫:
max = num1 > num2 ? num1:num2;
可以看出,條件運算符需要三個操作數,一個是需要被賦值的操作數,另外兩個是參與比較運算的操作數。該語句首先檢查表達式num1>num2,判斷其值是真還是假。如果此表達式的值為真,即num1>num2,則將num1賦值給max,否則,將num2的值賦值給max。
此運算符等同于如下的if-else結構
if(exprt1)
{
exprt2;
}
else
{
exprt3;
}
上述求較大值的示例等同于:
if(num1 >num2)
max = num1;
else
max=num2;
如果在條件語句中,只執行單個的賦值語句時,則可使用條件表達式來實現。不但使程序簡潔,也提高了運行效率。
條件運算符練習
編程要求: 編寫一個程序,要求用戶輸入基本工資,計算稅后工資。
個人所得稅收取規定:工資大于3500元的部分將扣除個人所得稅。小于3500元的部分不扣除個人所得稅。
程序清單 sample.c
#include
int main()
{
double sal;
double rate;
printf("請輸入基本工資:");
//接收用戶輸入的基本工資
scanf("%lf",&sal);
rate = ( sal < 3500 ) ? 0 : 0.05;
//計算稅后工資
sal = sal - ( sal-3500 ) * rate;
printf("n 稅后工資為:%7.2f n",sal);
}
評論