#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
常數
int?空間?=?'.';
int?STAR=?'$';
//?獲取每行的字符數。
int?getRowLength(int?層計數)
{
回歸?5?+?layerCount?*?4;
}
//?初始化
作廢?clearAll(char*?buf,?int?層計數)
{
int?尺寸?=?getRowLength(layer count);
尺寸?=?尺寸?*?尺寸;
為了什麽?(int?I = 0;?我& lt尺寸;?i++)
buf[i]?=?空間;
}
//?顯示模式
作廢?drawAll(char*?buf,?int?層計數)
{
int?羅蘭?=?getRowLength(layer count);
char*?pbuf?=?buf
為了什麽?(int?I = 0;?我& lt羅蘭;?i++)
{
為了什麽?(int?j = 0;?j & lt羅蘭;?j++)
printf("%c ",* pbuf++);
printf(" \ n ");
}
}
//?畫壹條水平線
作廢?drawHLine(char*?buf,?int?層計數,?int?x1,?int?x2,?int?y)
{
int?羅蘭?=?getRowLength(layer count);
為了什麽?(int?我?=?x 1;?我?& lt=?x2;?i++)
buf【我?+?羅蘭?*?y]?=?明星;
}
//?畫壹條垂直線
作廢?drawVLine(char*?buf,?int?層計數,?int?x,?int?y1,?int?y2)
{
int?羅蘭?=?getRowLength(layer count);
為了什麽?(int?我?=?y 1;?我?& lt=?y2;?i++)
buf[x?+?我?*?羅蘭]?=?明星;
}
//?畫壹個中間的十字
作廢?繪圖中心(char*?buf,?int?層計數)
{
int?x,?y,?羅蘭?=?getRowLength(layer count);
x?=?羅蘭?/?2;
y?=?羅蘭?/?2;
drawHLine(buf,層計數,?x-2,?x+2,?y);
drawVLine(buf,層計數,?x,?y-2,?y+2);
}
//?繪制第壹層
作廢?drawLayer(char*?buf,?int?層,?int?層計數)
{
int?cx,?cy?n,?偏移,?羅蘭?=?getRowLength(layer count);
cx?=?羅蘭?/?2;
cy?=?羅蘭?/?2;
n?=?層?*?2;
抵消?=?2?+?層?*?2;
drawVLine(buf,層計數,?cx?-?偏移,?cy?-?n,?cy?+?n);
drawVLine(buf,層計數,?cx?+?偏移,?cy?-?n,?cy?+?n);
drawHLine(buf,層計數,?cx?-?n,?cx?+?n,?cy?-?偏移);
drawHLine(buf,層計數,?cx?-?n,?cx?+?n,?cy?+?偏移);
drawVLine(buf,層計數,?cx?-?n,?cy?-?偏移,?cy?-?抵消?+?2);
drawVLine(buf,層計數,?cx?+?n,?cy?-?偏移,?cy?-?抵消?+?2);
drawVLine(buf,層計數,?cx?-?n,?cy?+?抵消?-?2,?cy?+?偏移);
drawVLine(buf,層計數,?cx?+?n,?cy?+?抵消?-?2,?cy?+?偏移);
drawHLine(buf,層計數,?cx?-?n?-?2,?cx?-?n,?cy?-?n);
drawHLine(buf,層計數,?cx?+?n,?cx?+?n?+?2,?cy?-?n);
drawHLine(buf,層計數,?cx?-?n?-?2,?cx?-?n,?cy?+?n);
drawHLine(buf,層計數,?cx?+?n,?cx?+?n?+?2,?cy?+?n);
}
//?返回n層所需的緩沖區大小。
int?getBufferSize(int?層計數)
{
int?羅蘭?=?getRowLength(layer count);
回歸?羅蘭?*?羅蘭;
}
int?主()
{
int?圖層計數;
while (scanf("%d ",& amp層計數)!= EOF)//?閱讀層數
{
if(layer count & lt;= 0)
打破;
char*?buf?=?(char?*)malloc(getBufferSize(layer count));//?應用緩沖區
clearAll(buf,layer count);//?模式初始化
?drawCenter(buf,layer count);//?畫壹個中間的十字
為了什麽?(int?I = 1;?我& lt=層計數;?i++)//?繪制所有圖層
?drawLayer(buf,我,?layer count);
drawAll(buf,layer count);//?顯示模式
免費(buf);
}
回歸?0;
}