前言
本文介绍了两种用C语言画菱形的方法。当然两种方法有优有劣,究竟喜欢哪一种,全凭诸君自己。当然,我更偏向于方法二。
一、方法一
基于双重for循环的一般方法。
关键在于几个三角形的刻画。
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i <= n / 2; ++i)
{
for (int j = n / 2 - i; j > 0; --j)
{
printf(" ");
}
for (int k = 0; k < 2 * i + 1; ++k)
{
printf("*");
}
printf("\n");
}
for (int i = 1; i <= n - n / 2 ; ++i)
{
for (int j = 1; j <= i; ++j)
{
printf(" ");
}
for (int k = n - 2 * i; k > 0; --k)
{
printf("*");
}
printf("\n");
}
return 0;
}
二、方法二
基于简单的数学方法–最简单的线性规划。
我们只需要选择合适的坐标原点(很重要,可以简化计算),然后计算出对应菱形各个边的表达式。
x + y <= n / 2
-x + y <= n / 2
-x - y <= n / 2
x - y <= n / 2
组合在一起就是
|x| + |y| <= n/2
#include <stdio.h>
#include <math.h>
int main()
{
int n = 0;
scanf("%d", &n);
for (int i = -n / 2; i <= n / 2;++i)
{
for (int j = n / 2; j >= -n / 2; --j)
{
if (fabs((double)i) + fabs((double)j) <= n / 2)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
注意
对于方法二,如果你想要画空心菱形的话,只需要将判定条件改为fabs((double)i) + fabs((double)j) == n / 2
,是不是很方便啊。但对于方法一的话,就要再次发挥你们的脑瓜子想了。至于具体如何写,这里我就不过多写了。
总结
以上就是全部内容。当然,这两种方法各有千秋。无论你喜欢哪一种方法,都不要吝啬您的赞哦!