C语言学习笔记20260612-菱形图案打印(两种写法)
一、知识点简介
需求:输入任意行数(奇数/偶数均可),打印对称菱形。
菱形规律:上半部分收敛变宽,下半部分发散变窄
标准示范(7行):
Plain
*
***
*****
*******
*****
***
*
二、核心公式
设总行数 n,中间行下标 mid = n / 2
上半部分(固定不变)
-
空格数:
mid - i(逐行减少) -
星号数:
2 * i + 1(逐行增加)
下半部分两种写法
-
写法1:倒序循环
-
写法2:正序循环
三、方法一:倒序循环法
1. 思路
-
上半部分:
0 ~ mid正序递增 -
下半部分:
mid-1 ~ 0倒序递减
2. 完整代码
c
#include <stdio.h>
int main()
{
int n;
printf("请输入菱形行数:");
scanf("%d", &n);
int mid = n / 2;
// 上半部分:包含中间最大行
for (int i = 0; i <= mid; i++)
{
// 打印前置空格
for (int j = 0; j < mid - i; j++)
{
printf(" ");
}
// 打印星号
for (int k = 0; k < 2 * i + 1; k++)
{
printf("*");
}
printf("\n");
}
// 下半部分:倒序循环(mid-1 递减到 0)
for (int i = mid - 1; i >= 0; i--)
{
for (int j = 0; j < mid - i; j++)
{
printf(" ");
}
for (int k = 0; k < 2 * i + 1; k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
四、方法二:正序循环法
1. 思路优势
不用倒序变量!全程 i 正序递增,新手最好理解
-
下半部分循环:
0 ~ mid-1正序 -
空格:
i + 1越来越多 -
星号:
2*(mid - i) - 1越来越少
2. 完整代码(你的专属版本)
c
#include <stdio.h>
int main()
{
int n;
printf("请输入菱形行数:");
scanf("%d", &n);
int mid = n / 2;
// 上半部分(和标准写法一致)
for (int i = 0; i <= mid; i++)
{
for (int j = 0; j < mid - i; j++)
{
printf(" ");
}
for (int k = 0; k < 2 * i + 1; k++)
{
printf("*");
}
printf("\n");
}
// 下半部分:正序写法
for (int i = 0; i < mid; i++)
{
// 空格逐行变多
for (int j = 0; j < i + 1; j++)
{
printf(" ");
}
// 星号逐行变少
for (int k = 0; k < 2 * (mid - i) - 1; k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
五、运行效果(完全一致)
输入奇数:7
Plain
*
***
*****
*******
*****
***
*
输入偶数:4
Plain
*
***
***
*