#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <Windows.h>
int main(void)
{
//首先分析:用户输入的是奇数还是偶数
//其次分析:选择偶数的话选择在上部分还是下部分少打一行
//上部分
int n;
int count = 0;
printf("请输入正整数(偶数无法构成菱形哦!):\n");
scanf_s("%d,\n",&n);
for (int i = 0; i < n / 2 + 1; i++) //打印菱形 无论几行 都要保持对称 我们选择将 对称行给上面还是下面都可以
{
for (int j = 1; j <= n / 2 - i ; j++) // 每次空格都需要减一
{
printf(" ");
}
for (int k = 1; k <= 2 * i + 1; k++)
{
printf("*");
}
printf("\n");
count++;
}
//下部分
for (int i = 0; i < n / 2; i++)
{
for (int j = 0; j < i + 1; j++) //外层增长一次我也增长一次
{
printf(" ");
}
//这里防止用户输入了偶数(我们进行判断) 最终还是违背行数 实现效果
if (n % 2 == 0)
{
for (int k = 1; k < n - 2 * i; k++) //k = 1 他的条件就是 总的个数 减掉 每次增长(需要少掉的两个) 然后乘以每次增长的次数
{
printf("*");
}
}
else
{
for (int k = 1; k < (n - 1) - 2 * i; k++)
{
printf("*");
}
}
printf("\n");
count++;
}
printf("一共打印了:%d\n",count);
return 0;
运行结果:
正常情况下我们只需要考虑奇数(将菱形打印出来就可以了)
因为偶数不可能打印出菱形
这里代码里面输入偶数会自动判断多加一行对称行 生成菱形 但又打破了输入值得不等