在C中使用嵌套循环

时间:2014-09-25 04:26:27

标签: c nested-loops

我正在使用C Primer Plus第6版进行练习。它说使用嵌套循环来产生这个输出
$
$$
$$$
$$$$
$$$$$

我的代码生成了正确的输出,但我真的不明白为什么会这样做 有人可以解释它正在做什么

#include <stdio.h>

int main(void)
{
    const int ROWS = 5;
    const int CHAR = 5;
    int row;
    int qty;
    char ch;

    ch = '$';

    for(row = ROWS; row > 0; row--)
    {       
        for(qty = row ; qty <= CHAR; qty++ )
        {
            printf("%c", ch);
        }

        printf("\n");

    }

    getchar();
    return 0;
}

2 个答案:

答案 0 :(得分:4)

for(row = ROWS; row > 0; row--)

上面的这个外部循环创建一个循环,其中row的值从5到1迭代。它每行一次运行循环体,共五行。

for(qty = row ; qty <= CHAR; qty++ )

这个内部循环类似,但它从qtyrow迭代5。它的行为每次都略有不同,因为row的值不同。每行每个字符运行一次。

  • 在第一行,row5,因此qty从5到5(一次)迭代,产生一个$

  • 在第二行,row4,因此qty从4到5(两次)迭代,生成$$

    < / LI>
  • 我会跳过第三和第四行,因为你应该能够弄清楚发生了什么。

  • 在第五行,row1,因此qty从1到5(五次)迭代,生成$$$$$

这就是真的。


我喜欢教我的学生的一件事是如何在他们的头脑中运行代码。从包含每个变量空格的工作表(以及本例中的输出)开始,逐行运行代码,随时更改变量。

这是一个填充到外循环准备好运行的点:

ROWS | CHAR | ch | row | qty | output
-----+------+----+-----+-----+-------
   5 |    5 |  $ |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |
     |      |    |     |     |

您的代码有点不寻常,因为每个循环的计数不一定是直观的。一个更“逻辑”的方法可能是从15为行运行计数器,并输出每行上的许多字符,如:

for (row = 1; row <= ROWS; row++) {
    for (qty = 1 ; qty <= row; qty++ ) {
        putchar (ch);
    }
    putchar ('\n');
}

您还会注意到我已使用printf()替换了您的putchar()来电,选择正确的输出函数是我的特定问题: - )

答案 1 :(得分:1)

看看这段代码(我稍微改了一下):

for(row = 5; row > 0; row--)
    {       
        for(qty = row ; qty <= 5; qty++ )
        {
            printf("$");
        }

        printf("\n");

    }

首先,row设置为5.然后,检查条件row>0。如果为true,则执行外循环。

其次,qty设置为row并检查qty>=5。如果为true,则执行内循环。

第三,在内循环的每次迭代之后,qty递增,并且在外循环的每次迭代之后,row递减。

<小时/> 在第一次迭代中,row将为5,qty将为5,并将循环1次,打印1 $
在第二次迭代中,row将为4,qty将为4,将循环2次,打印2 $
在第三次迭代中,row将为3,qty将为3,将循环3次,打印3 $
在第四次迭代中,row将为2,qty将为2,将循环4次,打印4 $
在最后一次迭代中,row将为1,qty将为1,将循环5次,打印5 $