所以我对循环的理解已经很好了,尽管我主要关心的是嵌套循环。我在这里提供了一个书中的例子:
#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
?
我希望能够理解这个概念,以便在需要时可以充分利用它,但我在网上找不到答案。
谢谢。
答案 0 :(得分:1)
对于外循环的每一次单次迭代,整个内循环运行一次。该内部循环包括 j
到 0
的初始化,以及它的打印和递增直到但不包括当前 i
(从外循环)。
因此,对于 i
为 1
的第一次外部迭代,j
将从 0
运行到 0
({{1} 的所有范围} 在这个答案中,两端都包含在内)。第二个外部迭代的 j
等于 i
,因此 2
将从 j
运行到 0
。
依此类推,直到最后的外部迭代,其中 1
为 i
。在这种情况下,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
。