1、使用简单循环
使用两个嵌套循环,外层控制行数,内层控制每行的空格和星号的打印。
#include <stdio.h>
int main() {
int rows, i, j, space;
printf("输入行数: ");
scanf("%d", &rows);
for(i = 1; i <= rows; i++) {
for(space = 1; space <= (rows-i); space++) {
printf(" ");
}
for(j = 1; j <= (2*i-1); j++) {
printf("*");
}
printf("\n");
}
return 0;
}
2、函数分离
创建一个函数来打印单行的金字塔部分,然后在主函数中调用这个函数多次。
#include <stdio.h>
void printRow(int space, int stars) {
for(int i = 0; i < space; i++) {
printf(" ");
}
for(int i = 0; i < stars; i++) {
printf("*");
}
printf("\n");
}
int main() {
int rows;
printf("输入行数: ");
scanf("%d", &rows);
for(int i = 1; i <= rows; i++) {
printRow(rows - i, 2 * i - 1);
}
return 0;
}
3、使用字符串
先构建整行的字符串,包括空格和星号,然后一次性打印。
#include <stdio.h>
#include <string.h>
int main() {
int rows;
printf("输入行数: ");
scanf("%d", &rows);
char line[2*rows];
for(int i = 1; i <= rows; i++) {
memset(line, ' ', 2*rows-1);
for(int j = 0; j < 2*i-1; j++) {
line[rows-i+j] = '*';
}
line[2*rows-1] = '\0';
printf("%s\n", line);
}
return 0;
}
4、倒序循环
从金字塔的底部开始打印,逐渐减少星号的数量,直到顶部。
#include <stdio.h>
int main() {
int rows, i, j, space;
printf("输入行数: ");
scanf("%d", &rows);
for(i = rows; i >= 1; i--) {
for(space = 0; space < rows-i; space++) {
printf(" ");
}
for(j = 0; j < 2*i-1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
5、递归方法
使用递归函数来打印每一层,每次递归减少星号的数量和前置空格。
#include <stdio.h>
void printPyramid(int rows, int current) {
if (current > rows) return;
for(int i = 0; i < rows - current; i++) {
printf(" ");
}
for(int i = 0; i < 2 * current - 1; i++) {
printf("*");
}
printf("\n");
printPyramid(rows, current + 1);
}
int main() {
int rows;
printf("输入行数: ");
scanf("%d", &rows);
printPyramid(rows, 1);
return 0;
}