#include<stdio.h>
void main()
{
int i,j,x,y,k,h,num; // num是行数, h是右移距离
char change;
for(;;)
{
printf("请依次输入菱形的行数、右移距离.注意行数一般为奇数,偶数自动加一行:\n");
scanf("%d%d",&num,&h);
printf("是否为空心y or n:\t");
fflush(stdin);
scanf("%c",&change);
if(num+h>79||num<=1||change!='y'&&change!='n')
printf("输入有误!![行数+右移距离不能大于79,只识别y/n]请重新输入!\n");
else break;
}
x=num/2+1;
y=num/2;
for(i=0;i<=x-1;i++)
{
for(j=1;j<=x-1-i+h;j++)
{
printf(" ");
}
if(change=='y')
{
printf("*");
for(k=3;k<=2*i+1;k++)
{
printf(" ");
}
if(i!=0)
printf("*\n");
else
printf("\n");
}
if(change=='n')
{
for(k=1;k<=2*i+1;k++)
{
printf("*");
}
printf("\n");
}
}
for(i=0;i<=y-1;i++)
{
for(j=0;j<=i+h;j++)
{
printf(" ");
}
if(change=='y')
{
printf("*");
for(k=3;k<=2*(y-1)+1-2*i;k++)
{
printf(" ");
}
if(i!=y-1)
printf("*\n");
else
printf("\n");
}
if(change=='n')
{
for(k=1;k<=2*(y-1)+1-2*i;k++)
{
printf("*");
}
printf("\n");
}
}
}
这个既能够打印实心菱形,还能够打印空心菱形,能够自选行数和右移距离(以中间那行为准)。编译过,正确的。