有人可以帮助我完全理解这个嵌套循环吗?
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
?
我希望能够理解这个概念,以便在需要时充分利用它,而我在网上找不到答案。
谢谢。
整个内循环 运行 外循环的每 单次 迭代一次。该内部循环 包括 从 j
到 0
的初始化,以及它的打印和递增,但不包括当前 i
(来自外循环)。
因此,对于 i
为 1
的第一个外部迭代,j
将从 0
到 0
运行(所有此答案中 j
的范围包括两端)。第二次外部迭代 i
等于 2
,因此 j
将 运行 从 0
到 1
。
依此类推,直到 i
为 3
的最终外部迭代。在这种情况下,j
将从 0
到 2
运行。你是否在外层循环中添加了 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
.
- 不断,不断,取决于外循环。
因此,虽然我主要关心的是嵌套循环,但我总体上对循环理解得很好。我在这里提供了书中的示例:
#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
?
我希望能够理解这个概念,以便在需要时充分利用它,而我在网上找不到答案。
谢谢。
整个内循环 运行 外循环的每 单次 迭代一次。该内部循环 包括 从 j
到 0
的初始化,以及它的打印和递增,但不包括当前 i
(来自外循环)。
因此,对于 i
为 1
的第一个外部迭代,j
将从 0
到 0
运行(所有此答案中 j
的范围包括两端)。第二次外部迭代 i
等于 2
,因此 j
将 运行 从 0
到 1
。
依此类推,直到 i
为 3
的最终外部迭代。在这种情况下,j
将从 0
到 2
运行。你是否在外层循环中添加了 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
.- 不断,不断,取决于外循环。