2016-10-15 86 views
-3

我不得不做出這樣的打印僅使用while循環這個C程序爲什麼不顯示星號金字塔?

* 
    *** 
***** 
******* 

我現在有這個星號的金字塔的程序:

/* JJJ */ 
#include<stdio.h> 
main() 
{ 
    int k; 
    clrscr(); 

    printf("Enter the number of rows of the pyramid: "); 
    scanf("%d", &k); 
    int i=1; 
    while (i<=k) 
     { 
     int h=1; 
     printf(""); 
     while (k>i) 
      { 
       printf(" "); 
       k--; 
      } 
     while (h<=2*i-1) 
      { 
       printf("*"); 
       h++; 
      } 
     i++; 
     printf("\n"); 
    } 
    getch(); 
} 

它只打印一個星號。

+0

你的代碼是不合法的C++。它看起來更像'C'。 – PaulMcKenzie

+3

而....什麼是'printf(「」);'應該實現? –

+0

只要你問一個具體的問題,並顯示你的嘗試,問家庭作業幫助是好的。 –

回答

0
while (k>i) 
    { 
     printf(" "); 
     k--; 
    } 

該循環減少了k,這是唯一一個跟蹤要繪製多少行的變量。它會導致外循環在一次迭代後完成。

請勿修改k。您可以製作副本並修改副本。

+1

我沒有投票,但一般回答質量差的問題結果在倒票..即使我有他們中的幾個:) – Cherubim

-1

循環就像這樣簡單,你爲什麼這麼難?

int line = 1; 
for (int i = 0; i < k; ++i) 
{ 

    for (int j = 0; j < k-line; ++j) 
    { 
     printf(" "); 
    } 
    for (int j = 0; j < 2*i+1; ++j) 
    { 
     printf("*"); 
    } 
    printf("\n"); 
    line++; 
} 
+0

我其實需要使用只有while循環 –

+0

以及如果你真的不知道如何將for循環轉換爲while循環,您需要在開始編程之前研究算法基礎知識。 – Eisa

1

您錯誤地修改k值在循環while (k>i)您打印的空間中。之所以你的代碼只顯示一個星號,在這個循環的迭代,K的值減小到1,所以,在最外層循環的第一次迭代之後,到達末端。 查看此解決方案:

♦在行號碼上打印的星號(x)的數量。 k = 2 * k - 1
♦空格號X星號之前打印= k - (x/2)

int k, i=1, x,y; 
printf("Enter no. of lines of the pyramid\n");  
scanf("%d", k); 

while(i <= k){ 
    x = 2*i - 1, y=1; 
    while(y <= k - (x/2)){ 
     printf(" "); 
     y++; 
    } 
    y=1; 
    while(y <= x){ 
     printf("*"); 
     y++; 
    }   
    printf("\n"); 
    i++; 
}