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

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

杨辉三角是一个非常有趣且重要的数学概念,它在数学和计算机科学中都有广泛的应用。这个三角形以中国数学家杨辉的名字命名,但在西方也被称为帕斯卡三角形,以纪念法国数学家布莱兹·帕斯卡。


杨辉三角是一个对称的数字金字塔,其中每个数是它上面两个数之和。杨辉三角的基本结构如下:

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

在这个三角形中,我们可以观察到一些有趣的性质:每一行都是对称的;每行的第一个和最后一个数字都是 1;每个数字等于它上面两个数字的和。
 

杨辉三角的应用非常广泛:

现在,让我们来看看如何使用C语言来生成杨辉三角。我们将创建一个程序,允许用户输入想要生成的行数,然后打印出相应的杨辉三角。这个程序将展示如何使用二维数组、循环和条件语句来实现这个数学概念。

#include <stdio.h>

#define MAX_ROWS 20

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

    printf("请输入杨辉三角的行数(最大 %d): ", MAX_ROWS);
    scanf("%d", &n);

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

    // 初始化第一行
    triangle[0][0] = 1;

    // 生成杨辉三角
    for (i = 1; i < n; i++) {
        triangle[i][0] = 1;  // 每行的第一个元素
        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 (j = 0; j < n - i - 1; j++) {
            printf("  ");
        }
        for (j = 0; j <= i; j++) {
            printf("%4d", triangle[i][j]);
        }
        printf("\n");
    }

    return 0;
}

让我们详细解析这段代码:
 

首先,我们定义了一个名为 MAX_ROWS 的常量,用来限制杨辉三角的最大行数。这是为了防止数组越界,同时也考虑到了屏幕显示的限制。
 

在 main 函数中,我们声明了一个二维整型数组 triangle,用于存储杨辉三角的数值。初始化所有元素为 0 可以简化后续的计算过程。
 

程序会提示用户输入想要生成的杨辉三角的行数,并进行输入验证,确保输入的数字在有效范围内。这种输入验证是良好编程实践的一部分,可以提高程序的健壮性。
 

接下来,我们初始化杨辉三角的第一行。第一行只有一个元素,值为 1。然后,我们使用嵌套循环来生成剩余的行。外层循环遍历每一行,内层循环计算该行的每个元素。每个元素的值是上一行相邻两个元素的和,这正是杨辉三角的核心特性。
 

最后,我们再次使用嵌套循环来打印杨辉三角。为了使输出更美观,我们在每行前添加了适当的空格,使得整个三角形居中显示。每个数字占用 4 个字符宽度,这样可以处理较大的数字而不会破坏格式。


让我们看一下这个程序的输出结果:

请输入杨辉三角的行数(最大 20): 7
            1
          1   1
        1   2   1
      1   3   3   1
    1   4   6   4   1
  1   5  10  10   5   1
1   6  15  20  15   6   1

这个程序不仅展示了如何实现杨辉三角,还演示了几个重要的编程概念:数组的使用、嵌套循环、条件语句、用户输入处理以及格式化输出。通过这个例子,我们可以看到如何将数学概念转化为实际的计算机程序。

相关文章