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

时间:2021-06-03 00:35:11

标签: c loops nested-loops

所以我对循环的理解已经很好了,尽管我主要关心的是嵌套循环。我在这里提供了一个书中的例子:

#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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

因此,对于 i1 的第一次外部迭代,j 将从 0 运行到 0({{1} 的所有范围} 在这个答案中,两端都包含在内)。第二个外部迭代的 j 等于 i,因此 2 将从 j 运行到 0

依此类推,直到最后的外部迭代,其中 1i。在这种情况下,3 将从 j 运行到 0。您是否在外循环中添加了更多次迭代,例如:

2

然后你会看到类似的东西:

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
  • 不断,不断地,取决于外循环。