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

C語言 for 循環變量最終值陷阱:i=1; i<10; i++ 結束後 i=?

     編輯:C 語言問答

經典面試題:循環結束後控制變量的值

題目回顧

for (i = 1; i < 10; i++) 
    a++;
// 循環結束後 i 的值是多少?
// A. 9  B. 10  C. 11  D. 不確定

標準答案:B. 10

詳細執行流程

階段動作i 的值條件 i<10說明
初始化i = 11-僅執行一次
第1次迭代檢查條件 → 執行體 → i++1→2truea++ 執行
第2次迭代檢查條件 → 執行體 → i++2→3truea++ 執行
...............
第9次迭代檢查條件 → 執行體 → i++9→10truea++ 執行(最後一次)
第10次檢查檢查條件10false循環結束,i 保持 10

關鍵理解點

  1. for 循環三部曲:init; condition; increment
  2. 增量表達式在循環體之後執行:即使是最後一次迭代,i++ 也會執行
  3. 條件失敗時不再執行增量:但此時增量已在上一輪完成
  4. 循環變量作用域:C99 以前 i 泄露到外層,C99 起可在 for(int i=...) 限制作用域

變體練習

// 變體1:前置遞增
for (i = 1; i < 10; ++i) a++;  // 同樣結果 i=10

// 變體2:條件包含增量
for (i = 1; i++ < 10; ) a++;   // i 最終為 11!陷阱!

// 變體3:無增量表達式
for (i = 1; i < 10; ) { a++; i++; }  // i=10,手動控制

// 變體4:while 等價形式
i = 1;
while (i < 10) { a++; i++; }  // i=10

記憶口訣

「初始一次,條件每輪,循環體後增,假時停不增」

循環結束時,控制變量已經完成了最後一次遞增,但條件判斷失敗阻止了進入循環體。

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