2011-11-02 57 views
0

我寫了這個程序的三角形,輸出,看起來像在C

include <stdio.h> 

int main(){ 
int size = 5; 

int row; 
int col; 

    for (col=0; col<size; col++){ 
    for (row=0; row<col;row++){ 
     printf(" "); 
    } 

    for (row=0; row <(size-col) ; row++){ 
     printf("*"); 
    if(col<=size){ 
     printf("*"); 
     } 
    } 
    printf("\n"); 
    } 
    return 0; 
} 

應該組成一個三角形一樣

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

但取而代之的是一個額外的*在每一行。問題是什麼?

非常感謝!

+1

您使用'col'和'row'變量都是反向的。我只是指出了這一點,因爲你似乎在學習'C'。 – bitmask

+0

該死的真的嗎?我完全同意,將它們稱爲特定於行或列的東西似乎很愚蠢,但實際上它們只是可以幫助您更改空格和星號的變量。如果你能詳細說明,我會很感激。該死的我雖然提交了,但真的很受歡迎,我想知道我是否會爲它取得樣式點。謝謝 –

+4

@colle:我會更害怕從沉睡中激起不一致的壓痕古代神。 – hugomg

回答

2

神祕的解決方案,你打印兩個星號迭代的方式。在你的例子中使用標識符rowcol也會使事情比ij更容易混淆,特別是因爲外層循環實際上是你當前的行。

你惹的替代方法是(我希望這不是功課,因爲它沒有標記爲這樣):

int main(void) 
{ 
    int size = 5; 
    int i, j; 

    for (i = size; i > 0; i--) { 

     for (j = i; j < size; j++) 
     putchar(' '); 

     for (j = 0; j < i*2 - 1; j++) 
     putchar('*'); 

     putchar('\n'); 
    } 

    return 0; 
} 

你也可以把i*2 - 1的變量,因此,它不是在每個計算迭代循環(除非編譯器看到你沒有修改i)。

+0

+1將程序重構成更清晰的格式! – septical

1

更改

if(col<=size){ 

if((row % size) > 0){ 

將有同樣的效果了。

0

如何打印*的這樣

for (row=0; row<(9-2*col); row++) 
    printf("*"); 
printf("\n"); 

這將打印的第一行九,七對第二等

0

因子您的問題納入相關的變量,並給他們有意義名。這將改善代碼的可讀性,並使錯誤更容易修復,例如:

#include <stdio.h> 

void triangle(int height) 
{ 
    int row, col; 
    int width = (2 * height) - 1; 

    for (row = 0 ; row < height ; row++) 
    { 
     for (col = 0 ; col < width ; col++) 
     { 
      if (row > col) 
      { 
       putchar(' '); 
      } 
      else if (col < width - row) 
      { 
       putchar('*'); 
      } 
     } 
     puts("\r"); 
    } 
} 

int main(void) 
{ 
    triangle(5); 
    return 0; 
} 
0

沒有人提出遞歸?這不是很純粹,因爲你必須跟蹤深度。我稱它爲金字塔(pyr_)而不是三角形:

#include <stdio.h> 
#include <stdlib.h> 

static void pyr_line(int depth, int nrows) { 
    int i; 

    if (nrows == 0) return; 

    for (i=0; i<depth; i++) 
      printf(" "); 

    for(i=0; i<(2*(nrows-1)+1); i++) 
      printf("*"); 

    printf("\n"); 
    pyr_line(depth+1, nrows-1); 
} 

int main(int argc, char ** argv) 
{ 
    pyr_line(0, atoi(argv[1])); 
    return 0; 
} 
相關問題