这是我不完全理解的练习测试中的一个问题。
对于代码片段
int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){
j = i; ++k;
}
我被要求在执行代码后找到变量的值。
答案是:
i = 11 j = 10 k = 12
我不明白怎么做,有人可以帮忙吗?
理解i
after 循环的值非常简单,比这里的其他答案要简单得多。循环条件是i<=10
... 为了使循环终止,该条件必须为false。显然,i
使 false 的值为 11。
j
循环结束时 的值为 的前一个值,i
即 10, 的值为k
循环执行的次数,即 1(对于 -1)+1(对于 0)+10(对于1 到 10) = 12。
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
以下是步骤:
i
为负 1。i <= 10
为真,因此进入循环。j
设置为i
,因此j
也是负 1。k
递增,因此k
变为 1。i
由于 增加++i
,所以i
变为 0。i
为零,i <= 10
为真,所以再次进入循环。这样,循环继续,按顺序改变j
、k
和i
。因此,当i
变为 10 时,j
将是 9 和k
11。此时:
j
也变成 10;k
变成 12i
递增到 11。循环条件i <= 10
为假,循环终止。i
11也是如此。j
是 10,k
循环终止时是 12。
关键是,在第一次通过之后,每次进入循环,j
都比 小一个i
,并且k
比 大一个i
。当循环终止时,情况仍然如此。
将三个变量分开。你可以看到变量 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
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
但条件显示为假!循环结束。