目次
1. 前言
C語言中的條件分支是控制程式流程的重要要素。其中if
敘述是依條件執行不同處理的基本結構。然而,在實際程式中,常常需要「不僅僅是一個條件,而是結合多個條件」的情況。 例如,考慮以下情況。範例: 「變數在這種情況下,C語言可以使用邏輯運算子(&&, ||)與巢狀(if 的嵌套)來結合條件。本文將詳細說明在 C 語言的 if 敘述中處理多重條件的方法,從基礎到應用。a
大於等於 10,且b
小於 5 時執行處理」
2. C語言的if語句基礎
2.1. if語句的基本結構
在C語言中,if
語句在指定條件為真(true)時,執行特定的處理。if (条件) {
// 条件為真時的處理
}
例:變數 x
大於等於 10 時顯示訊息
#include <stdio.h>
int main() {
int x = 15;
if (x >= 10) {
printf("x是10以上。\n");
}
return 0;
}
2.2. if-else語句的基本結構
在if
語句加入else
,即可描述條件為偽(false)時的處理。if (条件) {
// 条件為真時的處理
} else {
// 条件為偽時的處理
}
例:判斷使用者輸入的數值是否為正數
#include <stdio.h>
int main() {
int num;
printf("請輸入整數: ");
scanf("%d", &num);
if (num > 0) {
printf("輸入的數字是正數。\n");
} else {
printf("輸入的數字不是正數。\n");
}
return 0;
}
2.3. if-else if-else語句的基本結構
若要檢查多個條件,請使用else if
。if (条件1) {
// 条件1為真時的處理
} else if (条件2) {
// 条件2為真時的處理
} else {
// 所有條件皆為偽時的處理
}
例:根據輸入的分數顯示成績
#include <stdio.h>
int main() {
int score;
printf("請輸入分數: ");
scanf("%d", &score);
if (score >= 80) {
printf("成績: A\n");
} else if (score >= 60) {
printf("成績: B\n");
} else {
printf("成績: C\n");
}
return 0;
}
3. 使用 if 語句處理多個條件的方法
3.1. 邏輯運算子(&&, ||)的使用
C語言中,可以使用&&
(AND運算子)或 ||
(OR運算子)來組合多個條件。 ✅ &&
(AND 運算子)- 所有條件皆滿足時執行
#include <stdio.h>
int main() {
int a = 15, b = 3;
if (a > 10 && b < 5) {
printf("a大於10,b小於5。
");
}
return 0;
}
✅ ||
(OR 運算子)- 只要任一條件滿足即執行
#include <stdio.h>
int main() {
int a = 8, b = 3;
if (a > 10 || b < 5) {
printf("a大於10,或b小於5。
");
}
return 0;
}
✅ !
(NOT 運算子)- 將條件取反
#include <stdio.h>
int main() {
int a = 8;
if (!(a > 10)) {
printf("a小於等於10。
");
}
return 0;
}
3.2. if語句的巢狀(嵌套)
if
語句中嵌入if
語句,可實現更細緻的條件分支
範例:檢查年齡與身高兩者
#include <stdio.h>
int main() {
int age = 20, height = 170;
if (age >= 18) {
if (height >= 160) {
printf("已成年,且身高 160cm 以上。
");
} else {
printf("已成年,但身高低於 160cm。
");
}
} else {
printf("未成年。
");
}
return 0;
}
4. 處理多重條件時的最佳實踐
4.1. 提升可讀性
4.1.1. 拆分條件式
int isEligibleForDiscount = (score >= 80);
int isAdult = (age >= 18);
int isMemberValid = (isMember == 1);
if (isEligibleForDiscount && isAdult && isMemberValid) {
printf("您是優惠對象。\n");
}
4.1.2. 將條件式函式化
#include <stdio.h>
int isEligible(int score, int age, int isMember) {
return (score >= 80 && age >= 18 && isMember == 1);
}
int main() {
int score = 85, age = 20, isMember = 1;
if (isEligible(score, age, isMember)) {
printf("您是優惠對象。\n");
} else {
printf("您不是優惠對象。\n");
}
return 0;
}
4.2. 考慮效能
4.2.1. 利用短路評估(Short Circuit)
if (a != 0 && b / a > 1) {
printf("計算結果: %d\n", b / a);
}
4.2.2. 最佳化評估順序
if (a > 0 && isHeavyCalculation()) {
printf("執行處理\n");
}
4.3. 提升可維護性
4.3.1. 注意條件式的易讀性
if (user.age >= 18 && user.score >= 50) {
printf("條件已滿足。\n");
}
4.3.2. 避免使用魔法數字
#define ADULT_AGE 18
if (age >= ADULT_AGE) {
printf("已成年。\n");
}

5. 實作範例:使用 if 敘述的程式
5.1. 顯示依使用者年齡的訊息
#include <stdio.h>
int main() {
int age;
printf("請輸入年齡: ");
scanf("%d", &age);
if (age >= 18 && age < 65) {
printf("您是成年人。
");
} else if (age >= 65) {
printf("您是年長者。
");
} else {
printf("您是未成年人。
");
}
return 0;
}
5.2. 簡易登入驗證程式
#include <stdio.h>
#include <string.h>
int main() {
char username[20];
char password[20];
printf("使用者名稱: ");
scanf("%s", username);
printf("密碼: ");
scanf("%s", password);
if (strcmp(username, "admin") == 0 && strcmp(password, "1234") == 0) {
printf("登入成功!
");
} else {
printf("登入失敗...
");
}
return 0;
}
5.3. 三角形判斷程式
#include <stdio.h>
int main() {
int a, b, c;
printf("請輸入三角形的三邊長度: ");
scanf("%d %d %d", &a, &b, &c);
if (a == b && b == c) {
printf("等邊三角形。
");
} else if (a == b || b == c || a == c) {
printf("等腰三角形。
");
} else {
printf("不等邊三角形。
");
}
return 0;
}
5.4. 數值範圍檢查
#include <stdio.h>
int main() {
int number;
printf("請輸入數值: ");
scanf("%d", &number);
if (number >= 50 && number <= 100) {
printf("數值適當。
");
} else {
printf("超出範圍。
");
}
return 0;
}
6. FAQ(常見問題)
6.1. if語句與switch語句該使用哪個?
適合使用 if 語句的情況
- 需要範圍(大小比較)時
- 使用複雜的邏輯式時
if (score >= 90) {
printf("成績: A
");
} else if (score >= 80) {
printf("成績: B
");
} else {
printf("成績: C
");
}
適合使用 switch 語句的情況
- 判斷特定值(整數或字元)時
switch (grade) {
case 'A':
printf("優秀。
");
break;
case 'B':
printf("良好成績。
");
break;
default:
printf("無效的評價。
");
}
6.2. if的巢狀結構與邏輯運算子該使用哪個?
使用巢狀時
if (age >= 18) {
if (hasID) {
printf("可以入場。
");
} else {
printf("需要身分證。
");
}
}
使用邏輯運算子時
if (age >= 18 && hasID) {
printf("可以入場。
");
}
6.3. 簡化 if 條件的寫法
使用三元運算子
int result = (a > 10) ? 1 : 0;
將條件函式化
int isAdult(int age) {
return age >= 18;
}
if (isAdult(age)) {
printf("已成年。
");
}
6.4. if 條件錯誤導致無法運作的原因
=
(賦值運算子)與 ==
(比較運算子)的混淆
if (x == 5) {
printf("x 為 5。
");
}
明確條件的優先順序
if ((a > 10 && b < 5) || c == 3) {
printf("條件成立
");
}
浮點數比較
#include <math.h>
if (fabs(a - b) < 0.0001) {
printf("a 與 b 幾乎相等。
");
}
7. 總結
7.1. if語句的基本結構
if (条件) {
// 條件為真時的處理
} else {
// 條件為偽時的處理
}
7.2. 在if語句中處理多個條件的方法
論理運算子的活用
if (age >= 18 && hasID) {
printf("可以入場。\n");
}
巢狀的活用
if (age >= 18) {
if (hasID) {
printf("可以入場。\n");
} else {
printf("需要身分證。\n");
}
}
7.3. 考慮可讀性與效能的寫法
將條件函式化
int isEligible(int score, int age) {
return (score >= 80 && age >= 18);
}
if (isEligible(85, 20)) {
printf("符合優惠條件。\n");
}
短路評估的活用
if (a != 0 && b / a > 1) {
printf("計算結果: %d\n", b / a);
}
7.4. 實踐性的活用範例
if (age >= 18 && age < 65) {
printf("已成年。\n");
}
if (strcmp(username, "admin") == 0 && strcmp(password, "1234") == 0) {
printf("登入成功!\n");
}
if (number >= 50 && number <= 100) {
printf("數值適當。\n");
}
7.5. 常見錯誤與對策
if (x == 5) {
printf("x 為 5。\n");
}
if ((a > 10 && b < 5) || c == 3) {
printf("條件成立\n");
}
#include <math.h>
if (fabs(a - b) < 0.0001) {
printf("a 與 b 幾乎相等。\n");
}
7.6. 本文的總括
✅ 掌握 C 語言的if
語句,程式控制會更靈活!
✅ 多條件組合時,適當使用論理運算子與巢狀結構!
✅ 注重可讀性與效能,進行程式碼最佳化!
✅ 透過實踐範例,防止錯誤並正確撰寫!7.7. 未來的學習方向
未來,透過學習更高階的控制結構(switch
語句、while
迴圈等)以及函式的活用,將能製作更具彈性的程式。磨練 C 語言的技能,朝向更好的程式設計邁進!