先按照数学几何形式去理解,坐标系原点为菱形图案的中心位置,行为纵轴,列为横轴。
每个字符可以认定为这个坐标系上的一个点,那么一个点的横纵坐标的绝对值之和若是小于边长的,则对应于上图中需要打印字符的地方。否则,对应于打印空格的地方。
如此理解,代码就好写多了
#include
#define ABS(x) ((x)<0?0-(x):(x))
void main()
{
char ch = '\0';
int len = 0;
int i = 0, j = 0;
scanf("%c%*[ \t\r\n]%d%*[ \t\r]", &ch, &len);
while(ch != 'q')
{
for(i = 1 - len; i <= len - 1; ++i)
{
for(j = 1 - len; j <= len - 1; ++j)
{
if(ABS(i) + ABS(j) < len)
printf("%c", ch);
else
printf(" ");
}
printf("\n");
}
scanf("%*[ \t\r\n]%c%*[ \t\n\r]%d%*[ \t\r]", &ch, &len);
}
}