有人可以帮助我完全理解这个嵌套循环吗?

Can someone help me fully understand this nested loop?

因此,虽然我主要关心的是嵌套循环,但我总体上对循环理解得很好。我在这里提供了书中的示例:

#include <stdio.h>

int
main(void)
{
    int i, j;                           /* loop control variables */

    printf("           i    j\n");      /* prints column labels */

    for (i = 1;  i < 4;  ++i) {         /* heading of outer for loop */
        printf("Outer %6d\n", i);
        for (j = 0;  j < i;  ++j) {     /* heading of inner loop */
            printf("  Inner %9d\n", j);
        }   /* end of inner loop */
    }   /* end of outer loop */

    return (0);
}

预期输出为:

           i    j
Outer      1
  Inner         0
Outer      2
  Inner         0
  Inner         1
Outer      3
  Inner         0
  Inner         1
  Inner         2

我的书并没有很好地解释这些循环是如何工作的,而只是向我们展示了代码和输出。

为什么一开始只打印 i,然后打印 j,然后打印递增的 i,然后又重新开始 j

我希望能够理解这个概念,以便在需要时充分利用它,而我在网上找不到答案。

谢谢。

整个内循环 运行 外循环的每 单次 迭代一次。该内部循环 包括 j0 的初始化,以及它的打印和递增,但不包括当前 i (来自外循环)。

因此,对于 i1 的第一个外部迭代,j 将从 00 运行(所有此答案中 j 的范围包括两端)。第二次外部迭代 i 等于 2,因此 j 将 运行 从 01

依此类推,直到 i3 的最终外部迭代。在这种情况下,j 将从 02 运行。你是否在外层循环中添加了 more 次迭代,例如:

for (i = 1; i < somethingBiggerThanFour; i++)

然后你会看到这样的东西:

Outer         4
  Inner           0
  Inner           1
  Inner           2
  Inner           3
Outer         5
  Inner           0
  Inner           1
  Inner           2
  Inner           3
  Inner           4
... and so on ...

总之,您得到:

  • i == 1, j == 0.
  • i == 2, j == 0, 1.
  • i == 3, j == 0, 1, 2.
  • i == 4, j == 0, 1, 2, 3.
  • i == 5, j == 0, 1, 2, 3, 4.
  • i == 6, j == 0, 1, 2, 3, 4, 5.
  • i == 7, j == 0, 1, 2, 3, 4, 5, 6.
  • i == 8, j == 0, 1, 2, 3, 4, 5, 6, 7.
  • 不断,不断,取决于外循环。