#include
#include
#include
//这个小函数用来输出repeatTimes个字符c
voidprintChar(charc,intrepeatTimes)
{
inti;
for(i=0;i
}
char_buffer_[2]={0};
char*getShape(intheight,intshapeVariantStep,charbaseShape[],introw,intcol)
{
intfirst=baseShape[0],last=first+(height-1)/2*shapeVariantStep;
if(shapeVariantStep==0||strlen(baseShape)!=1)
returnbaseShape;
else
{
if( first>='0'&&first<='9'&&last<='9'||
first>='a'&&first<='z'&&last<='z'||
first>='A'&&first<='Z'&&last<='Z'
)
{
_buffer_[0]=first+((height-2*abs(row)-1)/2-abs(col))*shapeVariantStep;
_buffer_[1]='\0';
return_buffer_;
}
else
{
returnbaseShape;
}
}
}
intmain(intargc,char*argv[])
{
//菱形的图案
charshape[]="*";
//菱形图案间的空白图案
charspace='';
//每个图案之间的最小间隔(以一个字符为单位,不足用空白图案填充)
intinterval=5;
//菱形的高(要求是奇数)
intheight=7;
//菱形是否空心(只有边上的图案)。是:1,否0
intisHollow=0;
intshapeVariantStep=0;
inti,j,k,n;
interval=interval
{
//用来输出每行前的空白
printChar(space,abs(i)*interval);
//这个for(j)语句用来输出每行的菱形图案
for(j=-(height-2*abs(i)-1)/2;j<=(height-2*abs(i)-1)/2;j++)
{
//如果是非空心,输出所有图案;否则只输出两端的图案。
if(!isHollow||(isHollow&&(j==0||j==height-2*abs(i)-1)))
{
n=printf("%s",getShape(height,shapeVariantStep,shape,i,j));
//补齐为到宽度为interval
printChar(space,interval-n);
}
//对于空心的菱形,在本应该输出图案的地方,输出空白。
else
{
printChar(space,interval);
}
}
//这个for(j)语句用来输出每行后的空白
printChar(space,abs(i)*interval);
printf("\n");
}
return0;
}