簡體   English   中英

對於C中的循環混淆

[英]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

以下是步驟:

  1. 當循環開始時,所有三個變量都為零。
  2. 循環初始值設定項將i設置為-1。
  3. 循環測試: i <= 10為真,因此輸入循環。
  4. 在循環內部, j設置為i ,因此j也是-1。
  5. k遞增,因此k變為1。
  6. 迭代結束; i因為++i i而遞增,所以i變為0。
  7. 循環測試:由於i為零, i <= 10為真,因此再次輸入循環。

以這種方式,循環繼續,以該順序改變jki 所以當i變成10時, j將是9和k 11.在那一點上:

  1. 最后一次輸入循環。
  2. j變為10; k變為12
  3. 然后i增加到11.循環條件i <= 10為假,循環終止。

所以i是11. j是10,當循環終止時k是12。

關鍵點是,在第一次傳遞之后,每次進入循環時, ji小1, ki 當循環終止時,情況仍然如此。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM