位置:首页 > C > C语言如何计算离散分布的期望值公式与实现

C语言如何计算离散分布的期望值公式与实现

时间:2026-08-15  |  作者:星河游者  |  阅读:0

用 C 语言计算离散分布的期望值

在这个实验里,你要掌握的是:如何用 C 语言计算离散分布的期望值

整个过程并不复杂,核心就是先读取一组取值及其对应的概率,再把“每个值 × 对应概率”的结果逐项累加,最后输出期望值。

这个实验主要包含几个环节:读取数值和概率、完成期望值计算,以及打印最终结果。

程序会让用户输入结果的数量、各个取值以及它们各自的概率,同时还会把输入内容回显出来,方便核对是否录入正确。

从应用角度看,这个实验不只是一次基础编程练习,它也能帮助理解概率与组合数学在实际中的用法。

无论是数据分析、机器学习,还是决策建模,这类能力都很有价值。

本实验你将完成的内容

  • 读取用于计算期望值的多个取值
  • 读取每个取值对应的概率
  • 计算所有“值 × 概率”的总和
  • 输出最终期望值

读取数值和概率

在这一步中,重点是学会读取用于计算离散分布期望值的数值和概率。

接下来会编写一个程序,让用户输入多个取值,以及每个取值对应的概率。

首先,在 ~/project 目录下新建一个 C 文件:

```bash cd ~/project nano expected_value.c ```

接着,就可以开始编写用于读取数值和概率的初始代码:

```c #include #define MAX_OUTCOMES 10 int main() { double values[MAX_OUTCOMES]; double probabilities[MAX_OUTCOMES]; int num_outcomes; printf("请输入结果数量(最大为 %d):", MAX_OUTCOMES); scanf("%d", &num_outcomes); // 录入各结果对应的数值 printf("请输入各项数值:n"); for (int i = 0; i < num_outcomes; i++) { printf("值 %d:", i + 1); scanf("%lf", &values[i]); } // 输入概率 printf("输入概率:n"); for (int i = 0; i < num_outcomes; i++) { printf("概率 %d:", i + 1); scanf("%lf", &probabilities[i]); } // 打印输入以供验证 printf("n输入值:n"); for (int i = 0; i < num_outcomes; i++) { printf("值 %d:%.2f,概率 %d:%.2fn", i + 1, values[i], i + 1, probabilities[i]); } return 0; } ```

编译并运行程序

```bash gcc expected_value.c -o expected_value ./expected_value ```

示例输出

```text 输入结果数量(最大 10):3 输入值: 值 1:10 值 2:20 值 3:30 输入概率: 概率 1:0.2 概率 2:0.5 概率 3:0.3 输入值: 值 1:10.00,概率 1:0.20 值 2:20.00,概率 2:0.50 值 3:30.00,概率 3:0.30 ```

需要理解的关键点

  • 我们使用数组来存储值和概率
  • MAX_OUTCOMES 定义了可能结果的最大数量
  • scanf() 用于读取用户输入的值和概率
  • 我们打印输入以验证数据输入是否正确

计算所有结果的(值 * 概率)之和

在这一步中,你将扩展上一个程序,通过计算每个值与其概率的乘积之和来计算期望值。

打开现有文件并修改代码:

```bash cd ~/project nano expected_value.c ```

更新代码以计算期望值:

```c #include #define MAX_OUTCOMES 10 int main() { double values[MAX_OUTCOMES]; double probabilities[MAX_OUTCOMES]; int num_outcomes; double expected_value = 0.0; printf("输入结果数量(最大 %d):", MAX_OUTCOMES); scanf("%d", &num_outcomes); // 输入值 printf("输入值:n"); for (int i = 0; i < num_outcomes; i++) { printf("值 %d:", i + 1); scanf("%lf", &values[i]); } // 输入概率 printf("输入概率:n"); for (int i = 0; i < num_outcomes; i++) { printf("概率 %d:", i + 1); scanf("%lf", &probabilities[i]); } // 计算期望值 for (int i = 0; i < num_outcomes; i++) { expected_value += values[i] * probabilities[i]; } // 打印结果 printf("n计算详情:n"); for (int i = 0; i < num_outcomes; i++) { printf("值 %d:%.2f * 概率 %d:%.2f = %.2fn", i + 1, values[i], i + 1, probabilities[i], values[i] * probabilities[i]); } printf("n期望值:%.2fn", expected_value); return 0; } ```

编译并运行更新后的程序

```bash gcc expected_value.c -o expected_value ./expected_value ```

示例输出

```text 输入结果数量(最大 10):3 输入值: 值 1:10 值 2:20 值 3:30 输入概率: 概率 1:0.2 概率 2:0.5 概率 3:0.3 计算详情: 值 1:10.00 * 概率 1:0.20 = 2.00 值 2:20.00 * 概率 2:0.50 = 10.00 值 3:30.00 * 概率 3:0.30 = 9.00 期望值:21.00 ```

需要理解的关键点

  • 我们引入 expected_value 来存储值 * 概率的总和
  • for 循环计算每个项并累加总和
  • 我们打印详细的计算步骤以展示期望值是如何计算的
  • 每个结果的贡献表示为(值 * 概率)

打印期望值

在这最后一步中,你将改进程序,以提供更详细的输出,并在显示期望值时提升用户体验。

打开现有文件并进行最终修改:

```bash cd ~/project nano expected_value.c ```

使用改进的格式和错误检查更新代码:

```c #include #define MAX_OUTCOMES 10 int main() { double values[MAX_OUTCOMES]; double probabilities[MAX_OUTCOMES]; int num_outcomes; double expected_value = 0.0; double total_probability = 0.0; printf("期望值计算器n"); printf("========================n"); // 输入结果数量 do { printf("输入结果数量(1 - %d):", MAX_OUTCOMES); scanf("%d", &num_outcomes); if (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES) { printf("结果数量无效。请重试。n"); } } while (num_outcomes < 1 || num_outcomes > MAX_OUTCOMES); // 输入值 printf("n输入值:n"); for (int i = 0; i < num_outcomes; i++) { printf("值 %d:", i + 1); scanf("%lf", &values[i]); } // 输入概率并进行验证 printf("n输入概率:n"); for (int i = 0; i < num_outcomes; i++) { printf("概率 %d:", i + 1); scanf("%lf", &probabilities[i]); total_probability += probabilities[i]; } // 验证总概率 if (total_probability < 0.99 || total_probability > 1.01) { printf("n警告:概率之和不为 1.0(当前总和:%.2f)n", total_probability); } // 计算期望值 for (int i = 0; i < num_outcomes; i++) { expected_value += values[i] * probabilities[i]; } // 打印详细结果 printf("n--- 计算详情 ---n"); for (int i = 0; i < num_outcomes; i++) { printf("结果 %d:值 = %.2f,概率 = %.2fn", i + 1, values[i], probabilities[i]); printf(" 贡献:%.2f * %.2f = %.2fn", values[i], probabilities[i], values[i] * probabilities[i]); } // 最终期望值输出 printf("n=== 期望值 ===n"); printf("E(X) = %.2fn", expected_value); return 0; } ```

编译并运行最终程序

```bash gcc expected_value.c -o expected_value ./expected_value ```

示例输出

```text 期望值计算器 ======================== 输入结果数量(1 - 10):3 输入值: 值 1:10 值 2:20 值 3:30 输入概率: 概率 1:0.2 概率 2:0.5 概率 3:0.3 --- 计算详情 --- 结果 1:值 = 10.00,概率 = 0.20 贡献:10.00 * 0.20 = 2.00 结果 2:值 = 20.00,概率 = 0.50 贡献:20.00 * 0.50 = 10.00 结果 3:值 = 30.00,概率 = 0.30 贡献:30.00 * 0.30 = 9.00 === 期望值 === E(X) = 21.00 ```

主要改进点

  • 增加了对结果数量的输入验证
  • 检查了总概率之和
  • 增强了输出格式
  • 展示了各个结果的贡献
  • 清晰地显示了最终的期望值

总结

在本实验中,你将学习如何读取值和概率,然后用 C 语言计算离散分布的期望值。

首先,你将创建一个程序,允许用户输入多个值及其相应的概率。

然后,你将学习如何将每个值与其概率的乘积相加来计算期望值。

最后,你将打印计算出的期望值。

本实验涵盖的关键点包括:

  • 使用数组来存储值和概率
  • 定义可能结果的最大数量
  • 利用 scanf() 函数读取用户输入
  • 在进入下一步之前,程序会确保打印输入的值和概率以供验证

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多