流程如下
其实就是把一个行数为奇数的菱形,拆分为上部分(奇数行)和下部分(偶数行)
先来说上部分
创建j代表列数
j范围是1-?
?其实不需要太在意,只要比n小就可以,所以直接写n也无所谓的
但是在选择要打印空格还是*就要仔细分辨
需要自己举例来看
比如n=13,此时n/2=6,j最大是第七行,第七行有13列
而每一行中心的*一定有,观察发现,每往下走一行*的分布就从中间左右各延伸i-1个
(第一行不延伸,第二行延伸一个...)
按照这个规律来打印*和空格
打印下半部分
只需要改变i的行数,是上半部分的逆序即可
而j的打印和上面一样
所以代码就是
int main()
{
int n = 0;
printf("您想要的高度是:\n");
scanf("%d", &n);
for (int i=1;i <= n / 2 + 1;i++)
{
for (int j = 1; j <=n; j++)
{
if( (j > n / 2+1 - i)&& (j<n/2+1+i))
{
printf("*");
}
else
printf(" ");
}
printf("\n");
}
for (int i = n / 2; i >= 1; i--)
{
for (int j = 1; j <= n; j++)
{
if ((j > n / 2 + 1 - i) && (j < n / 2 + 1 + i))
{
printf("*");
}
else
printf(" ");
}
printf("\n");
}
}
如果觉得学会了赶紧看看下面这篇升级版文章吧
https://blog.csdn.net/weixin_71138261/article/details/126087103?spm=1001.2014.3001.5501