for loop - 为什么打印12而不是3?

时间:2014-12-17 10:58:45

标签: c loops for-loop iteration

我有以下代码:

#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。)

4 个答案:

答案 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,您应该只使用第一个循环以及result130 <= 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。