C 语言中,打印金字塔形图案可以通过不同的逻辑和方法来实现。打印一个简单的金字塔图案,行数由用户输入确定。每种方法都有其特点,可以根据需要选择。

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

推荐文档

相关文档

大家感兴趣的内容

随机列表