
真的不知道怎么搞的,请帮忙看看呗
//由于字符等宽度与高度不是相等的,长宽字符一样多是画不出正方形的。下面仅供参考。谢谢!
//提供思路,细节自己修改
#include <stdio.h>
void draw(int n)
{
if(n<=16 || n>512)return;
int m=n;
int arr[m][n];
int i,j;
//初始化
for(i=0;i<m;i++)
{
for(j = 0;j <n;j++)
{
arr[i][j]=0;
}
}
//标记位置
for(i=0;i<m;i++)
{
for(j = 0;j <n;j++)
{
if(i==0 || j==0 || i==m-1 || j==n-1)
{
arr[i][j]=1;
printf("*");
}
else if(i<=m/2 && j<=n/2 && i+j==n/2 || (j>=n/4&&j<=n/2 && i==m/4) ||(i>=m/4&&i<=m/2&&j==n/4))
{
//作出1/4然后根据对称关系翻转即可画出剩余3/4图形
arr[i][j]=1;
arr[m-i-1][j]=1;
arr[i][n-j-1]=1;
arr[m-i-1][n-j-1]=1;
printf("*");
}
else if(i+j==n*3/4&&i>m/4 && i<m/2 &&j>n/4 && j<n/2)
{
arr[i][j]=1;
arr[m-i-1][j]=1;
arr[i][n-j-1]=1;
arr[m-i-1][n-j-1]=1;
printf("*");
}
else
printf(" ");
}
printf("\n");
}
//输出
for(i=0;i<m;i++)
{
for(j = 0;j <n;j++)
{
if(arr[i][j]==1)printf("*");
else
printf(" ");
}
puts("");
}
puts("");
}
int main(int argc, char** argv){
draw(28);
return 0;
}
仔细观察规律,合理运用循环