2013-02-16 54 views
-1

嗨我想用*打印這樣的形狀。 此形狀的高度爲6,如果輸入另一個偶數作爲高度,它將生成具有該高度的形狀。C編程 - 星號形狀

enter image description here

到目前爲止,我這樣做,但這種失敗..... 有人會告訴我哪裏做錯了嗎?謝謝!

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

int main() 
{ 
    int height; 
    int i, j; 

    printf("Please input height with an even integer "); 
    scanf("%d", &height); 

    for (i=height/2; i>=1; i--) 
    { 

     for (j=1; j<=height; j++) 
     { 
      if (i==height/2) 
       printf("*"); 
      else if (j=i || j==(height-(i-1))) 
       printf("*"); 
      else 
       printf(" "); 
     } 

     printf("\n"); 
    } 

    system("PAUSE"); 
    return 0; 
} 

謝謝大家!

其實我早先嚐試了另一種方法,結果就出來了。

我首先打印出最上面一行和最下面一行,並將星號和空格放在應該出現的位置。

這是我的解決方案。

void printStar(int x); 

int main(int argc, char *argv[]) 
{ 
     int height, value = 2 , value2; 

     printf("Please input height with an even integer "); 
     scanf("%d", &height); 

     value2 = height-1; 

     for (int i=1; i<=height; i++) 
     { 

     if(i==1){ 

       printStar(height); 

     }else if(i == height){ 

       printStar(height); 

     }else{ 

       for(int y = 1 ; y<=height ; y++){ 

        if(value == y || value2 == y){ 

         printf("*");   

        }else{ 

         printf(" "); 

        } 

       } 
       value++; 
       value2--;  

     } 
     printf("\n"); 
     } 


    system("PAUSE"); 
    return 0; 
} 

void printStar(int x){ 
    for(int i = 0 ; i<x ;i++){ 
      printf("*"); 
    } 

} 
+0

嘗試http://codereview.stackexchange.com/。或者使用調試器逐行執行代碼。 – 2013-02-16 13:26:31

+3

'else if(j = i || j ==(height-(i-1)))''你的意思是'j == i'? – Maroun 2013-02-16 13:32:34

回答

0

該方案是deviced,讓你從邏輯上思考問題。將問題分爲不同部分,上下部分(分而治之技術),然後即可解決問題。要求別人解決你的問題並不具有建設性。以下是目前解決您的問題的方法,但請記住爲什麼您的作業首先要解決此問題。

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

int main(int argc, char *argv[]) 
{ 
    int height = 1; 
    int i, j; 
    while((height % 2 != 0) && height > 0){ 
    printf("Enter Height: "); 
    scanf("%d",&height); 
    } 
    /*first half*/ 
    for(i = 0; i < height; i++) putchar('*');printf("\n"); 
    for(i = 1; i < height/2; i++){ 
    for(j = 0; j < height; j++) { 
     if(j == i || j == (height-i-1))putchar('*'); else putchar(' '); 
    } printf("\n"); 
    } 
    /*second half*/ 
    for(i = height/2 -1; i > 0; i--){ 
    for(j = 0; j < height; j++){ 
     if(j == i || j == (height - i - 1))putchar('*'); else putchar(' '); 
    } printf("\n"); 
    } 
    for(i = 0; i < height; i++) putchar('*'); 
    return 0; 
} 
+0

非常感謝。 雖然我終於完成了這個程序,但我沒有通過這個想法工作:( – Connie 2013-02-16 17:00:14

0

我認爲在if (j=i || j==(height-(i-1)))j=i是錯誤的。

+0

確實,這是錯誤的。但是這並不能解決他的問題。該程序將輸出錯誤的形狀。 – Maroun 2013-02-16 13:39:17

0

事情你需要改變:

  • for (i=height/2; i>=1; i--)應該for (i=height; i>=1; i--)
  • if (i==height/2)應該if (i==height || i==1)
  • else if (j=i || j==(height-(i-1)))應該else if (j==i || j==(height-(i-1)))

這些變化之後,​​3210你的程序將輸出:

****** 
* * 
    ** 
    ** 
* * 
****** 
0
for (i=height; i>=1; i--) 
{ 
    for (j=1; j<=height; j++) 
    { 
     if (i==height || i==1) 
      printf("*"); 
     else if (j==i || j==(height-(i-1))) 
      printf("*"); 
     else 
      printf(" "); 
    } 

    printf("\n"); 
}