2015-10-17 64 views
-5
**** 
*** 
** 
* 
/*code for this pattern*/ 

#include<stdio.h> 
int main() 
{ 
    int i, j; 
    for (i = 4 ; i >= 1 ; --i) { 
    for (j = 1 ; j <= i; ++j) { /*why does j<=i?*/ 
     printf("*"); 
    } 
    printf("\n"); 
    } 
} 

那麼,爲什麼j <= i?第一個for循環負責行。而第二個for循環負責每行中的星號。再次,i不明白條件的邏輯-j <= i。 編輯:C是我曾嘗試真正學習的第一語言。我想這個問題很明顯。我不明白for循環的條件組件。就這樣。有些人明白我在問什麼。謝謝邏輯的循環使用C

編輯2:好像我不清楚我的問題。我想知道爲什麼j必須小於或等於i。爲什麼我可以比j更小或者等於?我無法看到i,行數和j,每行中星號的數量之間的關係。

謝謝

+0

你的問題不清楚。你想做什麼 ?學習C?或者解決一個真正的問題? – kebs

+0

使用調試器或鉛筆和紙張,看看發生了什麼。 – vsoftco

+0

你是什麼意思,「爲什麼j <= i」? – melpomene

回答

0

正如你所說,外循環是針對行數。內循環將n次打印*,其中n是字符在該行中必須打印的次數。即在第一次迭代中:i = 4,所以,j = 1; j < = 4執行4次,所以你打印4 *

在第二次迭代中:i = 3,所以J = 1;Ĵ< = 3執行三次,所以在打印3 *

0

I開始高和遞減而i是> = 1 j中開始低1,並增加,而j是< = i。

這意味着,雖然我是一個更大的值,j將增加更多次,這意味着我們想從一開始就打印更多數量的'',並且在每個換行符後,緩慢地縮小那條''。

內部循環基本上就是在那裏執行printf()調用。所以你最終得到4'*'的第一次迭代,3爲下一個,2,然後1.每個在一個新的行。

0

每行的恆星數和剩餘打印行數(包括當前行)均等於i。因此,i正在用於倒計時剩餘打印行數,以及每行打印星號的數量。在第一排i == 4,所以要打印四星級,所以你有一個循環:

for(j = 1; j<=4; ++j) { 
    printf("*") 
} 

下一次i將是3,那麼內循環將是:

for(j = 1; j<=3; ++j) { 
    printf("*") 
} 

等上。

0

你問:

for(j = 1; j<=i; ++j){ /*why does j<=i?*/ 

i等於4,要印刷四*秒。
i等於3時,您要打印三個* s。

檢查j <= i確保這一點。

0

對於每個循環,您應該考慮迭代次數。 至於你說,在第一for循環中,

for(i = 4; i >=1; --i){ ... 

這對於循環迭代而i >= 1,意思i變爲4 -> 3 -> 2 -> 1(即4倍=行數)。

對於每一行,您想要打印i號碼*'s,這意味着您要爲每行重複打印過程i次。在嵌套循環,

for(j = 1; j <= i; ++j){ ... 

j迭代而j <= i,意味着1 -> 2 -> ... -> i(對於每一行,即i倍)。它實際上與

for(j = 0; j < i; ++j) {... 

相同,它也重複i次。