对于C中的循环混淆

时间:2013-08-21 22:56:55

标签: c loops for-loop integer

这是一个我不完全理解的练习测试中的问题。

代码片段

int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){ 
    j = i; ++k; 
}

我被要求在执行代码后找到变量的值。

答案是:

 i = 11 j = 10 k = 12

我不明白,有人可以帮忙吗?

5 个答案:

答案 0 :(得分:5)

在循环之后理解i的值非常简单,比这里的其他答案简单得多。循环条件为i<=10 ...为了使循环终止,该条件必须为 false 。显然,i的值为11。

循环结束时j的值是i的前一个值,即10,而k的值是循环执行的次数,这是1(对于-1)+ 1(对于0)+ 10(对于1到10)= 12。

答案 1 :(得分:3)

我必须&lt; = 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

答案 2 :(得分:3)

以下是步骤:

  1. 当循环开始时,所有三个变量都为零。
  2. 循环初始值设定项将i设置为-1。
  3. 循环测试:i <= 10为真,因此输入循环。
  4. 在循环内,j设置为i,因此j也减1。
  5. k会增加,因此k会变为1。
  6. 迭代结束;由于i++i会递增,因此i变为0。
  7. 循环测试:由于i为零,i <= 10为真,因此再次输入循环。
  8. 通过这种方式,循环继续,按顺序更改jki。因此,当i变为10时,j将为9,k为11.此时:

    1. 最后一次输入循环。
    2. j也变为10; k变为12
    3. 然后i增加到11.循环条件i <= 10为false,循环终止。
    4. 所以i为11. j为10,当循环终止时,k为12。

      关键点是,在第一次传递后,每次输入循环时,ji少一个,ki大一个。当循环终止时,情况仍然如此。

答案 3 :(得分:2)

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,但条件显示为false!循环结束。

答案 4 :(得分:2)

将三个变量分开。 您可以看到变量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比a值小1,即j = 10