【问题标题】:for loop - why does this print 12 and not 3?for 循环 - 为什么打印 12 而不是 3?
【发布时间】:2015-02-15 21:47:39
【问题描述】:

我有以下代码:

#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

如果我逐步完成它,当y 位于3 时,它似乎应该停止将1 添加到结果中,因此循环迭代了3 次。 (或者如果我计算错误,它应该打印 2。)

【问题讨论】:

  • 因为 3*4 = 12 ?请数一下 x=0 x=1 x=2 x=3 和 y=0 y=1 y=2 ,这是你应该学习循环的第一课
  • 它循环 4 次内循环,内循环循环 3 次,因此总结果增加了 12 倍
  • 了解嵌套循环。

标签: c loops for-loop iteration


【解决方案1】:

整个循环中变量的值如下:

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 增加到30 &lt;= x &lt; 31 &lt;= x &lt;= 3):

#include <stdio.h>

int main()
{
  int result = 0, x, y;
  for (x = 0; x < 3; x++) {
      result++;
  }
  printf("%d", result);
  return 0;
}

【讨论】:

  • 每次都写好迭代号! (非常好)顺便说一句:x=1 所以你有 3
  • 我同意,@Rizier123,它澄清了很多事情!也谢谢,我更新了代码。
【解决方案2】:

非常仔细地注意包含循环的代码块。有两个for循环,也称为嵌套for循环。

for (x = 0; x < 4; x++) {
    for (y = 0; y < 3; y++) {

外部for 循环将执行到x&lt;4,即4 次,从头再来。每次,内部的for循环都会执行到y &lt; 3,即3次(y被初始化为0)。

所以,(4 times outer loop) * (3 times inner loop) = 12 倍增量。

接下来,请注意,printf() 语句放置在外部 for 循环之后。因此,result 的值将是两个循环执行完毕后的最终输出。

12 时间 +1 增加到 0 == 12 的值。 :-)

顺便说一句,要获得 3 的值 [或者更好地说,要看到 result 的值增加了 3],您可以在 inner 之后使用 printf() for 循环。

【讨论】:

    【解决方案3】:

    表..表..表:

      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
    

    【讨论】:

      【解决方案4】:

      第一个 for 循环运行四次,第二个 for 循环运行三次。

      所以第二个 for 循环将该变量增加到 3 倍。

      所以第一次迭代在i=0, 时给出result=3,第二次它将增加3,所以result=6i=1 时,第三次迭代result=9i=2 时,最后一次迭代 result=12i=3 然后循环结束。所以输出是 12。

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 2016-02-11
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 2019-12-23
        • 1970-01-01
        相关资源
        最近更新 更多