首页 > 编程笔记 > C语言笔记

C语言输出杨辉三角(附带源码和解析)

杨辉三角,也称为帕斯卡三角形,是一种数学上的数字排列。杨辉三角以中国数学家杨辉的名字命名,但实际上这个数学概念在杨辉之前就已经被多个文明所发现和研究。杨辉三角具有许多有趣的数学性质,在组合数学、概率论等领域有广泛应用。
 

杨辉三角的基本结构如下:每一行开始和结束于数字 1,中间的每个数字是它上方两个数字的和。这种简单的规则产生了一个对称的三角形数字阵列,其中蕴含了丰富的数学规律。例如,每一行的数字之和是 2 的幂,而且三角形中的数字实际上代表了组合数。
 

下面是杨辉三角的前几行示例:

    1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

现在,让我们来看看如何使用C语言编程输出杨辉三角。我们将实现一个程序,让用户输入想要显示的行数,然后程序会打印出相应行数的杨辉三角。这个程序将涉及到二维数组、循环和一些基本的数学计算。


以下是完整的C语言代码实现:

#include <stdio.h>

#define MAX_ROWS 20

void printPascalTriangle(int n) {
    int triangle[MAX_ROWS][MAX_ROWS] = {0};
    int i, j, space;

    // 初始化第一列为 1
    for (i = 0; i < n; i++) {
        triangle[i][0] = 1;
    }

    // 计算杨辉三角的值
    for (i = 1; i < n; i++) {
        for (j = 1; j <= i; j++) {
            triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
    }

    // 打印杨辉三角
    for (i = 0; i < n; i++) {
        // 打印每行前的空格
        for (space = 1; space <= n - i; space++) {
            printf("  ");
        }

        // 打印该行的数字
        for (j = 0; j <= i; j++) {
            printf("%4d", triangle[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int rows;

    printf("请输入想要显示的杨辉三角的行数(最多 20 行):");
    scanf("%d", &rows);

    if (rows <= 0 || rows > MAX_ROWS) {
        printf("输入无效,请输入 1 到 20 之间的数字。\n");
        return 1;
    }

    printf("\n%d 行的杨辉三角如下:\n\n", rows);
    printPascalTriangle(rows);

    return 0;
}

这段代码的核心是 printPascalTriangle 函数,它负责计算并打印杨辉三角。让我们详细解析这个函数的工作原理:
 

首先,我们定义了一个二维数组 triangle 来存储杨辉三角的数值。数组的第一列被初始化为 1,这是因为杨辉三角的每一行都以 1 开始。
 

接下来,我们使用嵌套循环来计算杨辉三角的其余部分。外层循环 i 代表行数,内层循环 j 代表每行中的位置。每个位置的值都是通过将正上方和左上方的数字相加得到的,这正是杨辉三角的核心特性。
 

计算完成后,我们再次使用嵌套循环来打印杨辉三角。为了使输出更美观,我们在每行前打印了一定数量的空格,使得整个三角形居中显示。每个数字占据 4 个字符的宽度(%4d),这样可以确保即使是较大的数字也能对齐显示。
 

在 main 函数中,我们提示用户输入想要显示的行数,并进行简单的输入验证,确保输入的行数在有效范围内(1 到 20 行)。然后,调用 printPascalTriangle 函数来显示杨辉三角。
 

运行这段代码,假设用户输入 5,输出结果将如下所示:

请输入想要显示的杨辉三角的行数(最多 20 行):5

5 行的杨辉三角如下:

           1
         1   1
       1   2   1
     1   3   3   1
   1   4   6   4   1

这个程序不仅展示了如何在C语言中实现杨辉三角的计算和打印,还涵盖了多个重要的编程概念,如二维数组的使用、嵌套循环、格式化输出等。通过学习和理解这个程序,初学者可以加深对这些概念的理解,并学会如何将数学概念转化为实际的程序代码。
 

值得注意的是,这个实现方式使用了固定大小的数组,这限制了可以计算的最大行数。在实际应用中,可能需要考虑使用动态内存分配或其他数据结构来处理更大规模的杨辉三角。此外,对于非常大的行数,可能还需要考虑数值溢出的问题,因为杨辉三角中的数字会随着行数的增加而迅速增大。

相关文章