首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言控制語句完全指南:if、switch、循環與跳轉

     編輯:關於C

前言

控制語句是程序邏輯的骨架。本文系統梳理 C 語言中的選擇結構(if/switch)、循環結構(while/for/do-while)及跳轉語句(break/continue),並通過規範代碼示例說明語法細節與常見陷阱。

一、選擇結構

1. if 語句

// 單分支
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;

提示:單語句可省略大括號,但建議始終加上 `{}` 提高可讀性與防錯。

2. switch 語句

switch (ch) {
    case 'Y':
    case 'y':        // 利用 fall-through 合併情況
        // 處理 Y/y
        break;
    case 'N':
    case 'n':
        // 處理 N/n
        break;
    default:         // 可選,建議保留作為防禦性編程
        // 錯誤處理
        break;
}

關鍵點:

  • case 標籤必須是整型常量表達式。
  • 缺少 break 會導致「貫穿」執行下一 case,有時可利用此特性合併邏輯。
  • default 可放在任意位置,習慣置於最後。

二、循環結構

1. while 循環

while (/* condition */) {
    /* loop body */
}

先判斷條件,為假則零次執行。

2. for 循環

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。

3. do-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
}

四、常見陷阱與最佳實踐

  1. 懸空 else:嵌套 if-else 時,else 匹配最近的未配對 if,用 `{}` 明確歸屬。
  2. switch 穿透:故意省略 break 時添加註釋 /* fall through */。
  3. 循環變量作用域:C99 允許 `for (int i=0; ...)` 限制作用域,推薦使用。
  4. 死循環:`while(1)` 或 `for(;;)` 需在內部有明確 break 條件。
  5. 浮點數做循環條件:避免精度問題導致次數異常,改用整數計數。

五、總結

掌握控制語句的語法細節、執行流程及邊界情況,是寫出清晰、健壯 C 代碼的基礎。實際開發中應結合編碼規範(如 MISRA C、CERT C),善用靜態分析工具檢查潛在邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved