2014-09-25 95 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 $