这是一个我不完全理解的练习测试中的问题。
代码片段
int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){
j = i; ++k;
}
我被要求在执行代码后找到变量的值。
答案是:
i = 11 j = 10 k = 12
我不明白,有人可以帮忙吗?
答案 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)
以下是步骤:
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
变为12 i
增加到11.循环条件i <= 10
为false,循环终止。所以i
为11. j
为10,当循环终止时,k
为12。
关键点是,在第一次传递后,每次输入循环时,j
比i
少一个,k
比i
大一个。当循环终止时,情况仍然如此。
答案 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