[英]For loop confusion in C
這是一個我不完全理解的練習測試中的問題。
對於代碼片段
int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){
j = i; ++k;
}
我被要求在執行代碼后找到變量的值。
答案是:
i = 11 j = 10 k = 12
我不明白怎么樣,有人可以幫忙嗎?
在循環之后理解i
的值非常簡單,比這里的其他答案簡單得多。 循環條件是i<=10
...為了使循環終止,該條件必須為假 。 顯然,使該錯誤的i
值為11。
循環結束時j
的值是i
的前一個值, i
10, k
的值是循環執行的次數,即1(對於-1)+ 1(對於0)+ 10(1至10)= 12。
我必須<= 10,所以退出循環是11並且在循環的最后一次迭代中,i = 10 = j。 第一次迭代后k為1,而i為-1。 通過循環,你會看到:
k = 1, i = -1
k = 2, i = 0
k = 3, i = 1
k = 4, i = 2
k = 5, i = 3
k = 6, i = 4
k = 7, i = 5
k = 8, i = 6
k = 9, i = 7
k = 10, i = 8
k = 11, i = 9
k = 12, i = 10
因此k = 12
以下是步驟:
i
設置為-1。 i <= 10
為真,因此輸入循環。 j
設置為i
,因此j
也是-1。 k
遞增,因此k
變為1。 i
因為++i
i
而遞增,所以i
變為0。 i
為零, i <= 10
為真,因此再次輸入循環。 以這種方式,循環繼續,以該順序改變j
, k
和i
。 所以當i
變成10時, j
將是9和k
11.在那一點上:
j
變為10; k
變為12 i
增加到11.循環條件i <= 10
為假,循環終止。 所以i
是11. j
是10,當循環終止時k
是12。
關鍵點是,在第一次傳遞之后,每次進入循環時, j
比i
小1, k
比i
。 當循環終止時,情況仍然如此。
for (i=-1; i<=10; ++i){
j = i; ++k;
}
這是循環:
i = i +1; <-------+
| |
check condition!------|--+
| | |
j = i; | |
| | |
k++;----------------+ |
| |
+<--------------------+
|
other code
在最后一個循環
i = 10
condition == true
j = 10;
k = 12;
然后
i= i+1
表示i = 11
但條件顯示為假! 循環結束。
將三個變量分開。 您可以看到變量k將遞增,循環執行的次數。 沒有。 時間坐標將從-1到10執行,它將完成12次迭代
k = 1, i = -1, j=-1
k = 2, i = 0, j=0
k = 3, i = 1, j=1
k = 4, i = 2, j=2
k = 5, i = 3, j=3
k = 6, i = 4, j=4
k = 7, i = 5, j=5
k = 8, i = 6, j=6
k = 9, i = 7, j=7
k = 10, i = 8, j=8
k = 11, i = 9, j=9
k = 12, i = 10, j=10
在此之后我已達到其極限,但它將首先遞增然后檢查,因此i = 11,k = 12並且j比一個小於i的值,即j = 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.