文章目錄
- 1. if 語句
- 2. if...else 語句
- 3. if...else if...else 語句
- 4. switch 語句
- 5. 三元運算符 ( ? : )
- 總結與對比
- 如何選擇
C語言中的判斷語句用于根據給定的條件來決定執行哪一段代碼。其核心是條件為真(必須)則執行一段代碼,條件為假(非必須)則執行另一段代碼。
C 語言把任何非零和非空的值假定為 true,把零或 null 假定為 false。
C語言提供了以下幾種主要的判斷/分支結構:
1、if 語句
2、if…else 語句
3、if…else if…else 語句
4、switch 語句
5、三元運算符(條件運算符)
1. if 語句
這是最基本的形式。如果條件為真,則執行后面的代碼塊。
語法:
if (condition) {// 如果 condition 為真(非0),則執行這里的代碼
}
示例:
#include <stdio.h>int main() {int number = 10;if (number > 5) {printf("數字大于5。\n"); // 這行會被執行}return 0;
}
2. if…else 語句
在 if 的基礎上增加了一個 else 分支。如果條件為真,執行 if 的代碼塊;如果為假,則執行 else 的代碼塊。
語法:
if (condition) {// 條件為真時執行
} else {// 條件為假時執行
}
示例:
#include <stdio.h>int main() {int age = 16;if (age >= 18) {printf("你已成年。\n");} else {printf("你是未成年人。\n"); // 這行會被執行}return 0;
}
3. if…else if…else 語句
用于檢查多個條件。程序會按順序檢查每個 if 或 else if 的條件,一旦某個條件為真,就執行其對應的代碼塊,然后跳過整個判斷結構的其余部分。
語法:
if (condition1) {// condition1 為真時執行
} else if (condition2) {// condition1 為假但 condition2 為真時執行
} else if (condition3) {// condition1 和 condition2 都為假但 condition3 為真時執行
} else {// 所有上述條件都為假時執行
}
// 可以有很多個 else if
示例:
#include <stdio.h>int main() {int score = 85;if (score >= 90) {printf("成績優秀!\n");} else if (score >= 80) { // 85 >= 80 為真,執行這里printf("成績良好。\n"); // 這行會被執行} else if (score >= 70) {printf("成績中等。\n");} else if (score >= 60) {printf("成績及格。\n");} else {printf("成績不及格。\n");}return 0;
}
4. switch 語句
switch 語句用于基于一個整型或字符型表達式的值來執行不同的代碼塊。它是一種多路分支選擇結構,比多個 if…else if 更清晰。
語法:
switch (expression) {case constant1:// 如果 expression 的值等于 constant1,執行這里的代碼break; // break 用于跳出 switchcase constant2:// 如果 expression 的值等于 constant2,執行這里的代碼break;case constant3:// ...break;default:// 如果 expression 的值不匹配任何 case,執行這里的代碼// default 是可選的
}
重要規則:
1、expression 的結果必須是整型或字符型。
2、case 后面的值必須是整型或字符型常量。
3、break 語句至關重要。如果省略 break,程序會繼續執行下一個 case 中的代碼,直到遇到 break 或 switch 結束。這被稱為“穿透”(fallthrough),有時會故意這樣用。
示例:
#include <stdio.h>int main() {char grade = 'B';switch (grade) {case 'A':printf("完美!\n");break;case 'B':printf("做得很好!\n"); // 這行會被執行break;case 'C':printf("做得不錯。\n");break;case 'D':printf("剛好及格。\n");break;case 'F':printf("不及格,需要再努力。\n");break;default:printf("無效的成績。\n");}return 0;
}
故意使用“穿透”的示例:
#include <stdio.h>int main() {int number = 2;switch (number) {case 1:case 2:case 3:printf("數字是1, 2或3。\n"); // number=1,2,3 都會執行這里break;case 4:printf("數字是4。\n");break;default:printf("數字不是1,2,3,4。\n");}return 0;
}
5. 三元運算符 ( ? : )
這是一個非常簡潔的條件表達式,可以看作是 if…else 的簡寫形式。它返回一個值。
語法:
condition ? expression_if_true : expression_if_false;
如果 condition 為真,整個表達式的值為 expression_if_true 的結果,否則為 expression_if_false 的結果。
示例:
#include <stdio.h>int main() {int a = 10, b = 20;int max;// 等價于: if (a > b) { max = a; } else { max = b; }max = (a > b) ? a : b;printf("較大的數字是:%d\n", max); // 輸出 20// 也可以直接用在函數參數等地方printf("a是%s\n", (a % 2 == 0) ? "偶數" : "奇數"); // 輸出 "a是偶數"return 0;
}
圖片來自菜鳥教程:https://www.runoob.com/cprogramming/c-decision.html
總結與對比
語句類型 | 用途 | 優點 |
---|---|---|
if | 簡單的單條件判斷 | 結構簡單,適用于所有條件、 |
if…else | 二選一的分支 | 邏輯清晰,處理真假兩種情況\ |
if…else if…else | 多條件分支判斷 | 可以處理復雜的多個并列或遞進條件 |
switch | 基于單個表達式的多個固定值進行分支 | 結構清晰,效率高(通常使用跳轉表) |
三元運算符 ? : | 簡單的二選一條件賦值或返回 | 代碼簡潔,一行完成 |
如何選擇
1、如果判斷的條件是一個變量是否等于某些特定的常量值,優先考慮 switch,會使代碼更清晰。
2、如果條件是一個范圍(如 score > 60)或者涉及多個變量的復雜邏輯(如 a > b && c < d),則必須使用 if 系列語句。
3、如果只是簡單的二選一賦值,三元運算符非常方便。