第1个回答 推荐于2016-06-15
你的程序太长了。。我懒的看 直接写了一个 你觉得怎样
#include<stdio.h>
#include<math.h>
main()
{ int i,j;
for(i=-3;i<=3;i++)
{
for(j=0;j<fabs(i);j++)
printf(" ");
printf("*");
for(j=0;j<5-2*fabs(i);j++)
printf(" ");
if(!(i==-3||i==3))
printf("*");
printf("\n");
}
}
怕你不会用n带,我又写了一个n的版本。。
#include<stdio.h>
#include<math.h>
main()
{ int i,j,n=11;
for(i=-n/2;i<=n/2;i++)
{
for(j=0;j<fabs(i);j++)
printf(" ");
printf("*");
for(j=0;j<n-2*fabs(i)-2;j++)
printf(" ");
if(!(i==-n/2||i==n/2))
printf("*");
printf("\n");
}
}
算了 如果n是偶数我也帮你写了吧
#include<stdio.h>
#include<math.h>
main()
{ int i,j,n=11,f=0;
if(n%2==0)
{
f=1;n++;
}
for(i=-n/2;i<=n/2;i++)
{
if(f&&i==0)
continue;
for(j=0;j<fabs(i);j++)
printf(" ");
printf("*");
for(j=0;j<n-2*fabs(i)-2;j++)
printf(" ");
if(!(i==-n/2||i==n/2))
printf("*");
printf("\n");
}
}本回答被提问者采纳
第2个回答 2013-11-02
#include<stdio.h>
int main()
{
int line,k1,k2,n=7;
for(line=1; line<=(n+1)/2; line++)
{
for(k1=1; k1<=(n+1)/2-line; k1++)
{
printf(" ");
}
if(line==1)
printf("*\n");
else
{
printf("*");
for(k2=1; k2<=(line-1)*2-1; k2++)
{
printf(" ");
}
printf("*\n");
}
}
for(line=(n+1)/2+1; line<=n; line++)
{
for(k1=1; k1<=line-(n+1)/2; k1++)
{
printf(" ");
}
if(line==n)
printf("*\n");
else
{
printf("*");
for(k2=1; k2<=(n-line)*2-1; k2++) //你这怎么有一个分号啊坑死了
{
printf(" ");
}
printf("*\n"); //我改了这一行的位置
}
}
}
第3个回答 2013-11-02
你是怎么考虑的?实际上 这个问题不用考虑中间空格的问题 在打印星号的时候 只打印第一个和最后一个就可以了
public class demo3
{
public static void main(String args[])
{
int lay=10;
for(int i=1;i<=(lay/2+1);i++)
{
for(int j=1;j<=(lay/2+1-i);j++)
{
System.out.print(" ");
}
for(int k=1;k<=(i*2-1);k++)
{
if(k==1||k==(i*2-1))
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
for(int i=(lay/2);i>=0;i--)
{
for(int j=1;j<=(lay/2-i+1);j++)
{
System.out.print(" ");
}
for(int k=1;k<=(i*2-1);k++)
{
if(k==1||k==(i*2-1))
{
System.out.print("*");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
}
}
这是我用java写的 主体的思想一样的