简介
在本实验中,我们将学习如何用 C 编程语言计算二项式概率。本实验涵盖以下步骤:
- 读取二项式概率计算的输入值,包括试验次数(n)、成功概率(p)和成功次数(k)。
- 实现用于计算阶乘和组合数(n 选 k)的函数,这些在二项式概率公式中会用到。
- 使用公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) 计算二项式概率,其中 C(n,k) 表示组合数。
- 打印计算出的概率。
完成本实验后,你将对如何在 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
此程序演示了如何:
- 声明用于 n、p 和 k 的变量
- 使用
scanf()读取整数和浮点数输入 - 打印输入值以进行验证
输入值表示:
- 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
二项式概率计算的关键部分:
factorial():计算 n!combinations():计算 C(n,k),即从 n 个物品中选择 k 个物品的方法数binomial_probability():使用完整公式计算 P(X=k)- 来自 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
此步骤中的关键改进:
- 添加了详细的结果格式化
- 显示了多种概率表示形式
- 提高了输出的可读性
总结
在本实验中,我们学习了如何读取用于二项式概率计算的输入值,包括试验次数(n)、成功概率(p)和成功次数(k)。我们还实现了用于计算阶乘、组合数以及二项式概率公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) 的函数。这使我们能够在已知每次试验成功概率的情况下,计算在 n 次独立试验中观察到 k 次成功的概率。
本实验涵盖的关键步骤包括读取输入值、使用公式计算二项式概率以及打印计算出的概率。这些知识可应用于各种与二项式概率相关的实际场景,例如统计学、决策制定和风险分析。



