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

C語言迴圈控制語句完全指南:do-while、for 進階用法與巢狀結構

     編輯:關於C語言

do-while 迴圈:先執行後判斷

語法:

do
    敘述;
while (運算式);

執行語意:無條件先執行一次迴圈主體,再判斷條件運算式。若為真(非 0)繼續迴圈,否則結束。
與 while 差異:while 先判斷後執行(可能零次),do-while 保證至少執行一次。

關鍵注意事項

  1. 條件後必須加分號:while (--n); — 此為 do-while 獨有語法
  2. 主體為複合敘述時需加大括號:do { ... } while(...);
  3. 相互轉換需調整條件:因執行順序不同,轉換時須修改控制變數初值/更新邏輯
  4. 可與 while、for 互相巢狀,形成多重迴圈

範例:輸出 n 個連續偶數

void main() {
    int a = 0, n;
    printf("\n input n: ");
    scanf("%d", &n);
    do
        printf("%d ", a++ * 2);
    while (--n);  // 先輸出再遞減,避免多執行一次
}

若條件寫 while (n--) 會多印一個值,因 do-while 先執行後判斷。

for 迴圈:功能最強、使用最廣

語法:

for (運算式1; 運算式2; 運算式3)
    敘述;
運算式慣用用途特性
運算式1迴圈變數初始化僅執行一次,可省略(外部預設初值)
運算式2迴圈條件判斷每輪迴圈前評估,為真執行主體,可省略(恆真)
運算式3迴圈變數更新每輪主體結束後執行,可為逗號運算式

三運算式皆為選擇性,分號不可省略。

執行流程

  1. 計算運算式1(初始化)
  2. 計算運算式2,為真→執行主體;為假→跳出迴圈
  3. 計算運算式3(更新),回步驟2

經典範例:計算 1+2+...+100

void main() {
    int n, s = 0;
    for (n = 1; n <= 100; n++)
        s = s + n;
    printf("s=%d\n", s);
}

進階變體展示

省略運算式1:外部初始化

void main() {
    int a = 0, n;
    printf("\n input n: ");
    scanf("%d", &n);
    for (; n > 0; a++, n--)  // 逗號運算式:a++ 更新輸出值,n-- 控制次數
        printf("%d ", a * 2);
}

省略運算式1、3:主體內控制

void main() {
    int a = 0, n;
    printf("\n input n: ");
    scanf("%d", &n);
    for (; n > 0; ) {
        a++; n--;
        printf("%d ", a * 2);
    }
}

全省略:等價 while(1),主體內 break

void main() {
    int a = 0, n;
    printf("\n input n: ");
    scanf("%d", &n);
    for (;;) {
        a++; n--;
        printf("%d ", a * 2);
        if (n == 0) break;  // 必須在主體內提供跳出機制
    }
}
警示:無跳出機制的 for(;;) 將形成死迴圈。

空主體應用:統計輸入字元數

#include <stdio.h>

void main() {
    int n = 0;
    printf("input a string:\n");
    for (; getchar() != '\n'; n++);  // 主體為空敘述(分號)
    printf("%d", n);
}

關鍵:運算式3 用於計數,主體為空。空敘述分號不可省略,否則後續 printf 會被誤視為主體。

多重迴圈巢狀合法形式

四種控制語句可任意互相巢狀:

(1) for { ... while() { ... } ... }
(2) do { ... for() { ... } ... } while();
(3) while { ... for() { ... } ... }
(4) for { ... for() { ... } ... }

巢狀 for 列印圖形範例

void main() {
    int i, j, k;
    for (i = 1; i <= 3; i++) {
        for (j = 1; j <= 3 - i + 5; j++)
            printf(" ");  // 列印空格對齊
        for (k = 1; k <= 2 * i - 1 + 5; k++) {
            if (k <= 5) printf(" ");
            else printf("*");
        }
        printf("\n");
    }
}

輸出對稱三角形圖案,展示雙重迴圈控制列與行。

for 迴圈常見錯誤與對策

  • 分號誤置:for(...); { ... } 導致主體為空,大括號區塊僅執行一次
  • 條件判斷錯誤:邊界條件(<= vs <)導致多/少一次迴圈
  • 更新邏輯錯誤:迴圈變數更新方式不當造成無限迴圈或提前結束
  • 變數作用域:C99 允許 for(int i=0; ...) 限制變數作用域於迴圈內
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved