对于菱形:
我们不难观察到,若对角线的中点为n,则对角线长度则为2*n-1,我们通过设置两个变量i,j;分别来控制横行与竖行,并引一个变量a来局限*的范围,使'*'恰好填满n-a到n+a的区间
代码如下
int main()
{
int i;
int j;
int m;
int a = 0;//来界定#范围
scanf("%d", &m);//中点
for (i = 1; i <= 2 * m - 1; i++)
{
for (j = 1; j <= 2 * m - 1; j++)
{
if (j >= m - a && j <= m + a)
{
printf("%c",'*');
}
else
{
printf("%c", ' ');
}
}
printf("\n");
if (i < m)
{
a++;
}
else
{
a--;
}
}
return 0;
}
对于A:
我们可发现,三角形打印时,行数为列数的一半,因此我们设置行数的一半为变量n,列数的一半为m,故有m=2*n,同时我们通过另一变量a,打印A的两个边,经观察,字母'A'的横杠,处于行数的中点,因此我们在行数为n时,我们将两个边之间填充满
图形如下:
代码如下
int main()
{
int i;
int j;
int n;
scanf("%d", &n);//n为中列中点
int m = 2 * n;//m为横列中点
int a = 0;//局限两边的范围
for (i = 1; i <= m; i++)
{
for (j = 1; j <= 2 * m - 1; j++)
{
if (i <= m&&i!=n)
{
if (j == m - a || j == m + a)
{
printf("%c",'*');
}
else
{
printf("%c", ' ');
}
}
else if(i==n)
{
if (j >= m - a && j <= m + a)
{
printf("%c", '*');
}
else
{
printf("%c", ' ');
}
}
}
printf("\n");
a++;
}
return 0;
}