【问题标题】:Can someone help me fully understand this nested loop?有人可以帮助我完全理解这个嵌套循环吗?
【发布时间】:2021-08-21 03:20:42
【问题描述】:

所以我一般都很好地理解了循环,尽管我主要关心的是嵌套循环。我在这里提供了一个书本示例:

#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

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

谢谢。

【问题讨论】:

  • 这是学习如何使用调试器的理想机会,因此您可以逐行逐行执行代码。我认为这应该很清楚
  • 也是学习如何剪切粘贴文本而不是插入图像的好机会。不要插入程序的图像。
  • Bryan,@Serge 是正确的,因为这里的代码图像通常不受欢迎(尽管如果代码很小,我们中的一些人会留有一点余地,我们不必输入它来调试它)。只是下次要记住的事情。现在,我已经用一些文本代码(和输出)替换了你的图像,以降低它被关闭的可能性 - 我今天显然有很多时间:-)

标签: c loops nested-loops


【解决方案1】:

对于外循环的每次次迭代,整个内循环都会运行一次。该内部循环包括j 初始化为0,并将其打印和递增到但不包括当前i(来自外部循环)。

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

以此类推,直到i3 的最终外部迭代。在这种情况下,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
  • 依此类推,依外循环而定。

【讨论】:

  • 感谢您的回复,我相信我理解了很多。感谢您抽出宝贵时间回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2019-06-07
相关资源
最近更新 更多