控制語句是程序邏輯的骨架。本文系統梳理 C 語言中的選擇結構(if/switch)、循環結構(while/for/do-while)及跳轉語句(break/continue),並通過規範代碼示例說明語法細節與常見陷阱。
// 單分支
if (x % 2)
y += x / 2;
// 雙分支
if (x % 2 == 0)
y += x / 2;
else
y += (x + 1) / 2;
// 多分支
if (x % 2 == 0)
y += x / 2;
else if (x % 4 == 1)
y += 2 * ((x + 3) / 4);
else
y += (x + 1) / 2;
提示:單語句可省略大括號,但建議始終加上 `{}` 提高可讀性與防錯。
switch (ch) {
case 'Y':
case 'y': // 利用 fall-through 合併情況
// 處理 Y/y
break;
case 'N':
case 'n':
// 處理 N/n
break;
default: // 可選,建議保留作為防禦性編程
// 錯誤處理
break;
}
關鍵點:
break 會導致「貫穿」執行下一 case,有時可利用此特性合併邏輯。default 可放在任意位置,習慣置於最後。while (/* condition */) {
/* loop body */
}
先判斷條件,為假則零次執行。
int factorial(int n) {
int i, j = 1;
for (i = 1; i <= n; i++) // 初始化; 條件; 調整
j *= i;
return j;
}
三部分均可省略,但分號不可省:
for (i = 1, j = 1; i <= n; j *= i, i++) // 復合表達式用逗號分隔
; // 空語句體
for 與 while 可相互轉換,選擇原則:已知次數或有明確初始化/增量用 for;條件複雜或無固定步長用 while。
do {
/* loop body */
} while (/* condition */);
至少執行一次,適合菜單交互、輸入驗證等場景。
| 語句 | 作用範圍 | 典型用途 |
|---|---|---|
break | 最內層 switch、for、while、do-while | 提前終止循環、退出 switch case |
continue | 最內層循環 | 跳過本次迭代剩餘代碼,直接進入下一次條件判斷 |
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue; // 跳過偶數
if (i > 5) break; // 遇到 >5 終止循環
printf("%d ", i); // 輸出 1 3 5
}
/* fall through */。掌握控制語句的語法細節、執行流程及邊界情況,是寫出清晰、健壯 C 代碼的基礎。實際開發中應結合編碼規範(如 MISRA C、CERT C),善用靜態分析工具檢查潛在邏輯錯誤。