用 C 语言生成杨辉三角的一行

CBeginner
立即练习

简介

在本实验中,你将学习如何使用 C 语言编程生成杨辉三角的某一行。本实验涵盖三个主要步骤:从用户处读取行数,计算该行的二项式系数,以及打印该行。你将首先创建一个程序,提示用户输入所需的行数,然后实现一个函数来计算二项式系数,最后显示杨辉三角的该行。完成本实验后,你将对数论和离散数学概念有扎实的理解,并具备使用 C 语言编程应用这些概念的实践经验。

读取行数

在这一步中,你将学习如何使用 C 语言编程读取用于生成杨辉三角某一行的行数。我们将创建一个程序,提示用户输入所需的行数。

首先,让我们在项目目录中创建一个新的 C 文件:

cd ~/project
nano pascal_triangle.c

现在,添加以下代码来读取行数:

#include <stdio.h>

int main() {
    int rowNumber;

    printf("Enter the row number for Pascal's Triangle: ");
    scanf("%d", &rowNumber);

    printf("You entered row number: %d\n", rowNumber);

    return 0;
}

让我们编译并运行该程序:

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

示例输出:

Enter the row number for Pascal's Triangle: 5
You entered row number: 5

代码解释:

  • #include <stdio.h> 包含标准输入/输出库
  • scanf() 从用户读取整数输入
  • printf() 显示输入的行数
  • 该程序验证用户输入的行数的基本有效性

要点:

  • 我们使用 scanf() 读取整数输入
  • 行数将用于生成杨辉三角的特定行
  • 后续步骤中将添加输入验证

计算二项式系数

在这一步中,你将学习如何计算用于生成杨辉三角特定行的二项式系数。我们将修改之前的程序,使用一个函数来计算这些系数。

打开现有文件:

cd ~/project
nano pascal_triangle.c

用以下实现替换之前的代码:

#include <stdio.h>

// 计算二项式系数的函数
int binomialCoeff(int n, int k) {
    // 基础情况
    if (k == 0 || k == n)
        return 1;

    // 使用杨辉三角性质进行递归计算
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

int main() {
    int rowNumber;

    printf("Enter the row number for Pascal's Triangle: ");
    scanf("%d", &rowNumber);

    printf("杨辉三角第 %d 行的二项式系数:\n", rowNumber);

    // 生成并打印系数
    for (int k = 0; k < rowNumber; k++) {
        printf("%d ", binomialCoeff(rowNumber - 1, k));
    }
    printf("\n");

    return 0;
}

编译并运行程序:

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

示例输出:

Enter the row number for Pascal's Triangle: 5
杨辉三角第 5 行的二项式系数:
1 4 6 4 1

代码解释:

  • binomialCoeff() 函数递归地计算二项式系数
  • 基础情况处理每行的第一个和最后一个元素
  • 该函数使用杨辉三角的递归性质
  • 嵌套循环为指定行生成系数

要点:

  • 二项式系数表示杨辉三角每行中的数字
  • 递归计算展示了数学关系
  • 由于递归方法,时间复杂度是指数级的

打印行

在这一步中,你将改进杨辉三角程序,以适当的间距和对齐方式格式化并打印该行,使输出在视觉上更具吸引力。

打开现有文件:

cd ~/project
nano pascal_triangle.c

用以下实现替换之前的代码:

#include <stdio.h>

// 计算二项式系数的函数
int binomialCoeff(int n, int k) {
    if (k == 0 || k == n)
        return 1;
    return binomialCoeff(n-1, k-1) + binomialCoeff(n-1, k);
}

// 打印杨辉三角某一行的函数
void printPascalRow(int rowNumber) {
    // 打印前导空格以实现对齐
    for (int space = 0; space < rowNumber; space++) {
        printf("   ");
    }

    // 生成并打印系数
    for (int k = 0; k < rowNumber; k++) {
        int coefficient = binomialCoeff(rowNumber - 1, k);
        printf("%4d ", coefficient);
    }
    printf("\n");
}

int main() {
    int rowNumber;

    printf("Enter the row number for Pascal's Triangle (1-10): ");
    scanf("%d", &rowNumber);

    if (rowNumber < 1 || rowNumber > 10) {
        printf("请输入 1 到 10 之间的行数。\n");
        return 1;
    }

    printf("杨辉三角第 %d 行:\n", rowNumber);

    // 打印指定的行
    printPascalRow(rowNumber);

    return 0;
}

编译并运行程序:

gcc pascal_triangle.c -o pascal_triangle
./pascal_triangle

示例输出:

Enter the row number for Pascal's Triangle (1-10): 5
杨辉三角第 5 行:
            1    4    6    4    1

代码解释:

  • printPascalRow() 函数处理行格式化
  • 添加前导空格以实现视觉对齐
  • 使用 %4d 格式说明符确保列宽一致
  • 添加输入验证以限制行数
  • 以适当的间距打印整行

要点:

  • 格式化提高了杨辉三角的可读性
  • 输入验证可防止意外行为
  • 展示了 C 语言中的基本格式化技术

总结

在本实验中,你将学习如何使用 C 语言编程读取用于生成杨辉三角某一行的行数,以及如何计算二项式系数来打印该行。首先,你将创建一个程序,提示用户输入所需的行数。然后,你将使用杨辉三角的递归性质实现一个函数来计算二项式系数。最后,你将根据计算出的系数打印杨辉三角的该行。本实验涵盖的要点包括使用 scanf() 读取用户输入、实现一个递归函数来计算二项式系数,以及打印生成的行。