首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C語言while循環打印偶數:i++位置對邏輯的影響分析

     編輯:程式設計綜合問答

代碼

int i = 1;
while (i <= 100) {
    if (i % 2 == 0)
        printf("%d", i);
    i++; // 為什麼不在printf前面?
}

執行流程圖解

迭代1: i=1 → 1%2≠0 → 不打印 → i=2
迭代2: i=2 → 2%2==0 → 打印2 → i=3
迭代3: i=3 → 不打印 → i=4
迭代4: i=4 → 打印4 → i=5
...
迭代100: i=100 → 打印100 → i=101 → 循環結束

為什麼i++在後面也正確?

  1. 判斷條件用的是當前i值:if (i%2==0)檢查的是遞增前的i。
  2. 遞增不影響本輪判斷:i++在if塊之後,只影響下一次循環的i值。
  3. 若放在printf前:
    while (i <= 100) {
                i++; // 先遞增
                if (i % 2 == 0) printf("%d", i);
            }
            // i初始1 → 首輪變2 → 打印2 → 正確
            // 但語義變為「檢查下一個數」,邏輯不直觀
            

核心結論

循環變量更新位置不影響結果,但影響代碼可讀性。標準模式:

初始化;
while (條件) {
    循環體(使用當前變量);
    更新變量; // 統一放在循環體末尾
}

這樣「檢查當前值 → 處理 → 移至下一值」語義最清晰,避免off-by-one錯誤。

等價for循環

for (int i = 1; i <= 100; i++) {
    if (i % 2 == 0) printf("%d ", i);
}

for循環將初始化、條件、更新集中在一行,更適合已知次數迭代。

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