C语言实现杨辉三角的生成与打印

杨辉三角,又称帕斯卡三角形,是一个简单却非常重要的数学工具。它不仅在组合数学中有广泛应用,也为程序设计提供了一个经典的练习题目。本文将带你了解杨辉三角的概念,并用 C 语言实现它的生成与打印。


什么是杨辉三角?

杨辉三角是一个排列的三角形,三角形中的每个数字是它上一行的两个相邻数字之和,边界上的数字恒为 1。例如:

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

数学公式为:

  • 第一行和每行的第一个数为 1,即 (C(n, 0) = 1)。
  • 第 (n) 行的第 (k) 个数为 (C(n, k) = C(n-1, k-1) + C(n-1, k))。

实现思路

我们将通过以下步骤用 C 语言生成和打印杨辉三角:

  1. 定义数据结构:使用二维数组存储杨辉三角。
  2. 填充数组:根据杨辉三角的规律填充数组。
  3. 打印结果:遍历数组并打印每一行。

C 语言代码实现

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

#include <stdio.h>

#define MAX_ROWS 10 // 定义杨辉三角的最大行数

void generateYangHuiTriangle(int triangle[MAX_ROWS][MAX_ROWS], int rows) {
    for (int i = 0; i < rows; i++) {
        triangle[i][0] = 1; // 每行的第一个数字为 1
        triangle[i][i] = 1; // 每行的最后一个数字为 1
        
        for (int j = 1; j < i; j++) {
            triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
        }
    }
}

void printYangHuiTriangle(int triangle[MAX_ROWS][MAX_ROWS], int rows) {
    for (int i = 0; i < rows; i++) {
        // 打印空格,保持三角形形状
        for (int k = 0; k < rows - i - 1; k++) {
            printf("  ");
        }

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

int main() {
    int triangle[MAX_ROWS][MAX_ROWS] = {0};
    int rows;

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

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

    generateYangHuiTriangle(triangle, rows);
    printf("生成的杨辉三角为:\n");
    printYangHuiTriangle(triangle, rows);

    return 0;
}

代码解析

1. 定义二维数组

int triangle[MAX_ROWS][MAX_ROWS] = {0};

二维数组 triangle 用于存储杨辉三角的每个数字。

2. 填充杨辉三角

函数 generateYangHuiTriangle 通过双重循环生成杨辉三角:

  • 外层循环处理每一行。
  • 内层循环通过公式 (C(n, k) = C(n-1, k-1) + C(n-1, k)) 填充非边界数字。

3. 格式化打印

函数 printYangHuiTriangle 控制输出格式,通过打印空格调整形状,并保证数字对齐。


运行效果

假设输入 5 行,程序的输出结果如下:

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

优化建议

  1. 动态内存分配:当前实现使用了固定大小的二维数组,可以改为动态分配内存,以支持任意大小的杨辉三角。
  2. 减少内存使用:仅存储当前行和上一行,避免存储整个三角形。
  3. 并行计算:对于大规模杨辉三角的生成,可以利用多线程并行化加速计算。

总结

本文从杨辉三角的定义入手,结合数学规律,详细讲解了如何用 C 语言实现杨辉三角的生成和打印。通过这个练习,不仅可以巩固对二维数组的理解,还能体会到递推公式在程序设计中的妙用。

posted @   hyzz123  阅读(189)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示