2

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

对于代码片段

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

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

答案是:

 i = 11 j = 10 k = 12

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

4

5 回答 5

5

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

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

于 2013-08-21T23:37:38.740 回答
3

i 必须 <= 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

于 2013-08-21T23:05:24.567 回答
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为真,所以再次进入循环。

这样,循环继续,按顺序改变jki。因此,当i变为 10 时,j将是 9 和k11。此时:

  1. 最后一次进入循环。
  2. j也变成 10;k变成 12
  3. 然后i递增到 11。循环条件i <= 10为假,循环终止。

i11也是如此。j是 10,k循环终止时是 12。

关键是,在第一次通过之后,每次进入循环,j都比 小一个i,并且k比 大一个i。当循环终止时,情况仍然如此。

于 2013-08-21T23:10:02.730 回答
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 达到了它的极限,但它会首先增加然后检查,因此 i=11,k=12 和 j 比 i 的值小一,即 j=10

于 2013-08-22T05:56:58.967 回答
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但条件显示为假!循环结束。

于 2013-08-21T23:07:44.423 回答