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

C語言循環程式設計完全指南:while、do-while 與 for 迴圈詳解

     編輯:關於C語言

前言

迴圈是程式設計中實現重複執行邏輯的核心結構。在 C 語言中,主要提供三種迴圈語句:while、do-while 和 for。掌握它們的語法、執行流程與適用場景,能讓你靈活處理各種重複性任務。本文將系統整理這三種迴圈的用法,並輔以實戰範例與常見陷阱分析。

一、while 迴圈:先判斷後執行

1.1 基本語法

while (表達式) {
    // 迴圈主體語句
}

1.2 執行流程

先計算表達式的值:

  • 非零(真)→ 執行迴圈主體 → 重新判斷表達式
  • 零(假)→ 跳出迴圈,執行後續程式碼

1.3 經典範例:計算 1 到 100 的累加和

#include <stdio.h>

int main() {
    int i = 1, sum = 0;
    while (i <= 100) {          // 累加條件:i 小於等於 100
        sum += i;
        i++;                    // 關鍵:修改循環變量,避免無限迴圈
    }
    printf("sum=%d\n", sum);    // 輸出 5050
    return 0;
}

注意:使用 sum 和 i 前務必賦初始值;迴圈主體若為多條語句,必須用大括號包裹成複合語句;條件表達式中必須包含使迴圈趨向結束的語句。

1.4 進階範例:計算 a + aa + aaa + ...

#include <stdio.h>

int main() {
    int a, x;
    long sum = 0, n = 1, tn;
    scanf("%d%d", &a, &x);    // 輸入數字 a 與項數 x
    tn = a;
    while (n <= x) {           // 控制項數
        sum += tn;
        tn = tn * 10 + a;      // 構造下一項:a → aa → aaa ...
        n++;
    }
    printf("result is %ld", sum);
    return 0;
}

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

2.1 基本語法

do {
    // 迴圈主體語句
} while (表達式);

2.2 執行流程

無條件先執行一次迴圈主體,隨後判斷表達式:非零則繼續,為零則退出。保證至少執行一次。

2.3 範例:計算 100 以內偶數和

#include <stdio.h>

int main() {
    int i = 2, sum = 0;
    do {
        sum += i;
        i += 2;
    } while (i <= 100);
    printf("sum=%d\n", sum);   // 輸出 2550
    return 0;
}

2.4 while vs do-while 核心差異

特性whiledo-while
首次執行前判斷是否(無條件執行一次)
適用場景可能零次執行至少需執行一次(如選單輸入驗證)

三、for 迴圈:集中控制的計數迴圈

3.1 基本語法

for (表達式1; 表達式2; 表達式3)
    迴圈主體;
  • 表達式1:初始化,僅執行一次
  • 表達式2:條件判斷,非零繼續,零退出
  • 表達式3:迭代更新,每次主體執行後執行

3.2 範例:1 到 100 求和

#include <stdio.h>

int main() {
    int i, sum = 0;
    for (i = 1; i <= 100; i++)
        sum += i;
    printf("sum=%d", sum);
    return 0;
}

3.3 for 迴圈進階特性

  • 三個表達式均可省略,但分號 ; 不能省略
  • 表達式可為任意合法表達式(甚至為空)
  • 可在括號內使用多個控制變數,如 for (i=0,j=10; i<j; i++,j--)

3.4 實戰範例:判斷素數

#include <stdio.h>
#include <math.h>

int main() {
    int n, m, flag = 1;
    printf("\n enter n:");
    scanf("%d", &n);
    for (m = 2; m < n && flag; m++) {
        if (n % m == 0)
            flag = 0;           // 發現因數,非素數
    }
    if (flag == 1)
        printf("\n%d is a prime number.", n);
    else
        printf("\n%d is not a prime number.", n);
    return 0;
}

四、迴圈控制語句:break、continue、goto

4.1 break:提前跳出迴圈

在 switch 與迴圈中均可使用,提供多重出口。

for (i = 0; i < 10; i++) {
    printf("%d", i);
    if (i == 5) break;         // i 達到 5 即跳出
}

4.2 continue:跳過本次迭代

僅用於迴圈結構,跳過剩餘主體,直接進入下一次判斷/迭代。

for (i = 0; i < 10; i++) {
    if (i == 5) continue;      // 跳過 5 的輸出
    printf("%d", i);
}

4.3 goto:無條件跳轉(慎用)

#include <stdio.h>

int main() {
    int i = 1, s = 0;
loop:
    if (i <= 100) {
        s += i;
        i++;
        goto loop;             // 模擬迴圈
    }
    printf("1+2+...+100=%d\n", s);
    return 0;
}

建議:結構化程式設計不提倡 goto,但在多層巢狀迴圈需一次跳出最外層時,可作為替代方案。

五、思考練習

  1. 用 while/for 實現階乘計算
  2. 輸出斐波那契數列前 20 項
  3. 找出所有三位數的水仙花數
  4. 用巢狀迴圈列印倒三角星號圖案

總結

三大迴圈各有優勢:while 適合未知次數的條件控制;do-while 適合至少一次的交互輸入;for 適合已知次數的計數遍歷。善用 break/continue 能簡化邏輯,少用 goto 保持程式結構清晰。熟練掌握迴圈,是演算法實現的基石。

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