用 C 语言计算二项式概率

CBeginner
立即练习

简介

在本实验中,我们将学习如何用 C 编程语言计算二项式概率。本实验涵盖以下步骤:

  1. 读取二项式概率计算的输入值,包括试验次数(n)、成功概率(p)和成功次数(k)。
  2. 实现用于计算阶乘和组合数(n 选 k)的函数,这些在二项式概率公式中会用到。
  3. 使用公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) 计算二项式概率,其中 C(n,k) 表示组合数。
  4. 打印计算出的概率。

完成本实验后,你将对如何在 C 语言中处理二项式概率有扎实的理解,并能够将这些概念应用于各种实际问题。

读取 n、p、k

在这一步中,我们将学习如何读取用于二项式概率计算的输入值:n(试验次数)、p(成功概率)和 k(成功次数)。

首先,让我们创建一个 C 程序来读取这些输入值:

#include <stdio.h>

int main() {
    int n, k;
    double p;

    printf("Enter number of trials (n): ");
    scanf("%d", &n);

    printf("Enter probability of success (p): ");
    scanf("%lf", &p);

    printf("Enter number of successes (k): ");
    scanf("%d", &k);

    printf("Input values:\n");
    printf("n = %d\n", n);
    printf("p = %.2f\n", p);
    printf("k = %d\n", k);

    return 0;
}

让我们保存此文件并进行编译:

nano ~/project/binomial_prob.c
gcc ~/project/binomial_prob.c -o ~/project/binomial_prob

运行程序时的示例输出:

Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6
Input values:
n = 10
p = 0.50
k = 6

此程序演示了如何:

  1. 声明用于 n、p 和 k 的变量
  2. 使用scanf()读取整数和浮点数输入
  3. 打印输入值以进行验证

输入值表示:

  • n:独立试验的总数
  • p:每次试验的成功概率
  • k:我们要计算概率的成功试验次数

计算 P(X=k)=C(n,k) _ p^k _ (1-p)^(n-k)

在这一步中,我们将扩展之前的程序,使用公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) 来计算二项式概率。

我们将添加用于计算组合数和二项式概率的函数:

#include <stdio.h>
#include <math.h>

// 计算阶乘的函数
unsigned long long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

// 计算组合数(n 选 k)的函数
unsigned long long combinations(int n, int k) {
    return factorial(n) / (factorial(k) * factorial(n - k));
}

// 计算二项式概率的函数
double binomial_probability(int n, int k, double p) {
    unsigned long long combinations_value = combinations(n, k);
    double probability = combinations_value *
                         pow(p, k) *
                         pow(1 - p, n - k);
    return probability;
}

int main() {
    int n, k;
    double p;

    printf("Enter number of trials (n): ");
    scanf("%d", &n);

    printf("Enter probability of success (p): ");
    scanf("%lf", &p);

    printf("Enter number of successes (k): ");
    scanf("%d", &k);

    double prob = binomial_probability(n, k, p);

    printf("Binomial Probability P(X=%d) = %f\n", k, prob);

    return 0;
}

编译并运行程序:

gcc ~/project/binomial_prob.c -o ~/project/binomial_prob -lm
~/project/binomial_prob

示例输出:

Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6
Binomial Probability P(X=6) = 0.205078

二项式概率计算的关键部分:

  1. factorial():计算 n!
  2. combinations():计算 C(n,k),即从 n 个物品中选择 k 个物品的方法数
  3. binomial_probability():使用完整公式计算 P(X=k)
  4. 来自 math.h 的pow()函数用于求幂运算

打印概率

在这一步中,我们将改进二项式概率程序,以提供更详细且格式化的概率计算输出。

我们将修改之前的程序,以包含更多概率表示形式:

#include <stdio.h>
#include <math.h>

// 之前的函数(阶乘、组合数、二项式概率)保持不变

int main() {
    int n, k;
    double p;

    printf("Enter number of trials (n): ");
    scanf("%d", &n);

    printf("Enter probability of success (p): ");
    scanf("%lf", &p);

    printf("Enter number of successes (k): ");
    scanf("%d", &k);

    double prob = binomial_probability(n, k, p);

    // 详细的概率输出
    printf("\n概率计算结果:\n");
    printf("-----------------------------\n");
    printf("试验次数 (n):       %d\n", n);
    printf("成功概率 (p): %.4f\n", p);
    printf("成功次数 (k):    %d\n", k);

    // 不同的概率表示形式
    printf("\n概率表示形式:\n");
    printf("十进制:     %f\n", prob);
    printf("百分比:  %.2f%%\n", prob * 100);
    printf("分数:1 in %.0f\n", 1.0 / prob);

    return 0;
}

编译并运行程序:

gcc ~/project/binomial_prob.c -o ~/project/binomial_prob -lm
~/project/binomial_prob

示例输出:

Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6

概率计算结果:
-----------------------------
试验次数 (n):       10
成功概率 (p): 0.5000
成功次数 (k):    6

概率表示形式:
十进制:     0.205078
百分比:  20.51%
分数:    1 in 5

此步骤中的关键改进:

  1. 添加了详细的结果格式化
  2. 显示了多种概率表示形式
  3. 提高了输出的可读性

总结

在本实验中,我们学习了如何读取用于二项式概率计算的输入值,包括试验次数(n)、成功概率(p)和成功次数(k)。我们还实现了用于计算阶乘、组合数以及二项式概率公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) 的函数。这使我们能够在已知每次试验成功概率的情况下,计算在 n 次独立试验中观察到 k 次成功的概率。

本实验涵盖的关键步骤包括读取输入值、使用公式计算二项式概率以及打印计算出的概率。这些知识可应用于各种与二项式概率相关的实际场景,例如统计学、决策制定和风险分析。