我有以下代码:
#include <stdio.h>
int main()
{
int result = 0, x, y;
for (x = 0; x < 4; x++) {
for (y = 0; y < 3; y++) {
result++;
}
}
printf("%d", result);
return 0;
}
这会打印12
。为什么要打印12
?
如果我逐步完成它,那么当1
位于y
时,似乎应停止向结果添加3
,因此循环重复3次。 (或者,如果我错误地计算了某些东西,它应该打印2。)
答案 0 :(得分:3)
整个循环中变量的值如下:
x y result
----------
0 0 1
0 1 2
0 2 3
1 0 4
1 1 5
1 2 6
2 0 7
2 1 8
2 2 9
3 0 10
3 1 11
3 2 12
这就是为什么result
最终成为12
。
要获得3
,您应该只使用第一个循环以及result
到1
(3
或0 <= x < 3
)来增加1 <= x <= 3
:
#include <stdio.h>
int main()
{
int result = 0, x, y;
for (x = 0; x < 3; x++) {
result++;
}
printf("%d", result);
return 0;
}
答案 1 :(得分:2)
请注意包含循环的代码块。有两个 for
循环,也称为嵌套 for
循环。
for (x = 0; x < 4; x++) {
for (y = 0; y < 3; y++) {
外部for
循环将执行到x<4
,即4次,重新开始。每次,内部for
循环将执行到y < 3
,即3
次(y
被初始化为0
)。
所以,(4 times outer loop)
* (3 times inner loop)
= 12倍增量。
接下来请注意,printf()
语句位于外部for
循环之后。因此,result
的值将是两个循环完成执行后的最终输出。
12
时间+1
增加到0
== 12
的值。 : - )
BTW,要获得值3
[或更好地说,看result
值增加3
],您可以在printf()
之后使用for
内部 {{1}}循环。
答案 2 :(得分:0)
表..表..表:
x | y | res
---+---+----
0 | 0 | 1 x < 4 ? y < 3 ? yes
| 1 | 2 x < 4 ? y < 3 ? yes
| 2 | 3 x < 4 ? y < 3 ? yes
| 3 | X x < 4 ? y < 3 ? NO
1 | 0 | 4 ...
| 1 | 5
| 2 | 6
2 | 0 | 7
| 1 | 8
| 2 | 9
3 | 0 | 10
| 1 | 11
| 2 | 12
答案 3 :(得分:0)
首先循环运行四次,第二次循环运行三次。
第二个用于循环增量的变量,最多变化3次。
所以第一次迭代在result=3
时给出i=0,
,第二次在第result=6
时递增3,在i=1
时为result=9
,在i=2
时为第三次迭代result=12
{1}},最后一次迭代
当i=3
然后循环结束时{{1}}。所以输出是12。