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; }