2014-09-25 69 views
-1

我在C Primer Plus第6版中练习。它说,使用嵌套循环产生这种输出
$零一二三五零九五二九九三九二二六八一零三二一零 $$
$$$
$$$$
$$$$$
在C中使用嵌套循环

我的代码产生正确的输出,但我不吨真的明白为什么它 有人能准确解释其做

#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; 
} 
+4

一步一步调试你的代码,它会帮助你理解。 – 2014-09-25 04:30:14

回答

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

此外上面的循环创建一个循环,其中row的值从5重复为1。它每行运行一次循环体,用于五行。

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

此内部上面的循环是相似的,但它遍历qtyrow5以下。它的行为每次都稍有不同,因为row的值不同。它在每行上每个字符运行一次。

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

  • 在第二行,row4,所以qty迭代从4至5(两次),产生$$

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

  • 在第五行,row1,所以从1到5(五次)qty迭代,产生$$$$$

就是这样,真的。


我喜欢教我的学生的一件事是如何在他们的头上运行代码。从包含每个变量的空格(以及这种情况下的输出)开始,并逐行运行代码,随时更改变量。

这里是一个充满了到外环准备运行点:

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

你的代码是一个有点不寻常的计数每次循环的作用是不一定直观。更“合乎逻辑”的方法可能是从运行1一个计数器来5的线和输出每行的字符,是这样的:

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

您还会注意到我已经更换了你printf()putchar()称,正确的输出功能的选择是我的:-)

+0

如果你教CS,你可能对新的[CS Teacher's Stack Exchange]感兴趣(http://cseducators.stackexchange.com)(虽然它仍然处于私人测试版,但通过这里输入是最容易的)(https: //area51.stackexchange.com/proposals/92460/computer-science-educators)) – 2017-06-02 19:08:30

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 $