2013-02-16 53 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"); 
}