打印一个菱形图案。程序分为两部分:上半部分和下半部分。上半部分打印一个逐渐增大的星号图案,下半部分打印一个逐渐缩小的星号图案。
cpp
#include<stdio.h>
int main() {
int row = 5;//定义行数
int t = 2;
for (int i = row; 0 < i; i--)
{
for (int k = i - 1; k > 0; k--)
{putchar(' ');}
for (int g = t - 1; g > 0; g--)
{putchar('*');}
t = t + 2;
printf("\n");
}
t = t - 4;
for (int i2 = 1; i2 <row; i2++)
{
for (int k2 = i2; k2 > 0; k2--)
{putchar(' ');}
for (int g2 = t - 1; g2 > 0; g2--)
{putchar('*');}
t = t - 2;
printf("\n");
}
}
简化版:
-
单层循环:使用一个外层循环遍历所有行,一个内层循环遍历所有列。
-
数学逻辑 :通过
abs(i) + abs(j) < row
判断是否打印星号,直接确定菱形边界。 -
减少变量:不再需要单独处理上下半部分,统一用数学逻辑处理。
cpp
#include <stdio.h>
#include<stdlib.h>
int main() {
int row = 5; // 定义行数
int i, j;
// 打印整个菱形
for (i = -row + 1; i < row; i++) {
for (j = -row + 1; j < row; j++) {
if (abs(i) + abs(j) < row) putchar('*'); // 打印星号
else putchar(' '); // 打印空格
}
printf("\n");
}
return 0;
}