使用 C 语言计算排列和组合

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

排列(Permutation)和组合(Combination)是两个不同的数学概念。排列是指将对象按照特定顺序进行排列,而组合则是从集合中选择对象,不考虑所选对象的顺序。在本实验中,我们将学习如何使用 C 语言计算排列和组合。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/FunctionsGroup(["`Functions`"]) c(("`C`")) -.-> c/FileHandlingGroup(["`File Handling`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/ControlFlowGroup -.-> c/if_else("`If...Else`") c/FunctionsGroup -.-> c/function_declaration("`Function Declaration`") c/FunctionsGroup -.-> c/function_parameters("`Function Parameters`") c/FunctionsGroup -.-> c/recursion("`Recursion`") c/FileHandlingGroup -.-> c/create_files("`Create Files`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/if_else -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/function_declaration -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/function_parameters -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/recursion -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/create_files -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/user_input -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} c/output -.-> lab-123209{{"`使用 C 语言计算排列和组合`"}} end

编写主函数

首先,在 ~/project/ 目录下创建一个名为 main.c 的新文件,并编写包含头文件和主函数的初始代码。

#include <stdio.h>

int main() {
    printf("Permutation and Combination in C Language\n\n");
    // 排列和组合计算的代码将添加在这里
    return 0;
}

编写阶乘函数

为了计算排列和组合,我们需要计算一个数的阶乘。阶乘可以通过递归方式计算。在主函数外部添加以下代码。

long factorial(int num) {
    if (num == 0) {
        return 1;
    }
    else {
        return num * factorial(num - 1);
    }
}

该函数接受一个整数作为参数,并返回其阶乘值。

编写计算 nCr 的函数

在主函数外部添加以下函数以计算 nCr。

long nCr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / (factorial(r) * factorial(n - r));
    }
}

该函数接受两个整数 n 和 r 作为参数,并返回 nCr 值。nCr 值通过将 n 的阶乘除以 r 的阶乘与 n-r 的阶乘的乘积来计算。

编写计算 nPr 的函数

在主函数外部添加以下函数以计算 nPr。

long nPr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / factorial(n - r);
    }
}

该函数接受两个整数 n 和 r 作为参数,并返回 nPr 值。nPr 值通过将 n 的阶乘除以 n-r 的阶乘来计算。

编写程序的驱动代码

在主函数内部添加以下代码以获取输入并显示结果。

int main()
{
    int n, r;

    printf("Enter the value of n:");
    scanf("%d", &n);
    printf("Enter the value of r:");
    scanf("%d", &r);

    printf("nCr is %ld\n", nCr(n, r));
    printf("nPr is %ld\n", nPr(n, r));

    return 0;
}

这段代码从用户处获取 n 和 r 的输入值,并调用 nCr()nPr() 函数来计算相应的值,然后显示结果。

完整代码

最终的代码如下所示。

#include <stdio.h>

long factorial(int num) {
    if (num == 0) {
        return 1;
    }
    else {
        return num * factorial(num - 1);
    }
}

long nCr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / (factorial(r) * factorial(n - r));
    }
}

long nPr(int n, int r) {
    if (n < r) {
        return -1;
    }
    else {
        return factorial(n) / factorial(n - r);
    }
}

int main()
{
    int n, r;

    printf("Enter the value of n:");
    scanf("%d", &n);
    printf("\nEnter the value of r:");
    scanf("%d", &r);

    printf("nCr is %ld\n", nCr(n, r));
    printf("nPr is %ld\n", nPr(n, r));

    return 0;
}

总结

在本实验中,我们学习了如何使用 C 语言计算排列和组合。我们编写了计算阶乘、nCr 和 nPr 的函数,并为程序编写了驱动代码。通过以上步骤,我们可以根据用户输入计算排列和组合。

您可能感兴趣的其他 C 教程