#include <stdio.h>
#include <stdlib.h>
void PrintLine(int blank_count, int star_count) {
for (int i = 0; i < blank_count; ++i) {
printf(" ");
}
for (int i = 0; i < star_count; ++i) {
printf("*");
}
printf("\n");
}
void PrintLingxing(int height) {
// 用对角线的一般衡量菱形的大小
// 先打印上半部分
for (int i = 1; i <= height; ++i) {
PrintLine(height+1 - i, 2 * i - 1);
}
// 再打印中间部分
PrintLine(0, 2 * (height+1) - 1);
// 打印下半部分
for (int i = height; i >= 1; --i) {
PrintLine((height+1) - i, 2 * i - 1);
}
}
int main() {
// i行 height+1-i 空格,2*i-1 星号
int height = 0;
scanf_s("%d", &height);
PrintLingxing(height);
system("pause");
return 0;
}
需要注意的是:打印之前先找规律,每一行的空格数和星星(*)数都是如何确定的。菱形的上半部分和下半部分是对称的,中间再加上了一条对角线。所以可以将打印上半部分的代码用函数封装起来,打印上半部分和下班部分的时候直接调用,因为上下是对称的,所以只需把上半部分的循环反过来书写即可。blank_count表示空格数,star_count表示星星数,而此时用height这个指标来衡量菱形的大小(长对角线一般的长度)。
下图是输入数字6得到的菱形的图案: