下面是使用C语言编写的代码:
#include <stdio.h> // 玩法一 double game1(double p) { return p; // 一次出手机会,命中得分 } // 玩法二 double game2(double p) { return 3 * p * p * (1 - p)+2* p * p * p ; // 三次出手机会,必须投中两次 } int main() { double p, score1, score2; printf("请输入投篮命中的概率p:"); scanf("%lf", &p); score1 = game1(p); score2 = game2(p); if (score1 > score2) { printf("选择玩法一\n"); } else { printf("选择玩法二\n"); } return 0; }
该程序中,我们定义了两个函数game1和game2来分别计算在两种玩法下的期望得分。具体实现中,根据题目要求,我们使用了概率公式来计算期望得分。最后,我们通过比较期望得分的大小来判断选择哪种玩法。
首先,程序使用`#include <stdio.h>`导入了标准输入输出库,以便后面能够使用输入函数`scanf()`和打印函数`printf()`。
然后,我们定义了两个函数`game1()`和`game2()`,用于计算在两种玩法下的期望得分。函数中的参数`p`表示投篮命中的概率。函数实现中,我们根据题目要求使用了概率公式计算期望得分,具体分析如下:
- 玩法一:一次出手机会,投篮命中得分。因此期望得分就是该次投篮得分的概率,即`p`。
- 玩法二:三次出手机会,必须投中两次。在三次出手的情况下,满足投中两次的概率分别为`p*p*(1-p)+p*(1-p)*p+(1-p)*p*p`,即其中两次投中,一次没投中的概率加上三次中恰好两次投中的概率。在这两种情况中,分别获得2分和3分,因此期望得分为3*p*p*(1-p)+2 * p * p * p。
接下来,在`main()`函数中,我们使用`scanf()`函数从控制台输入`p`的值,然后调用`game1()`和`game2()`函数分别计算在两种玩法下的期望得分,存入变量`score1`和`score2`中。最后,我们通过比较期望得分大小的方式来判断选择哪种玩法,并通过`printf()`函数输出结果。
需要注意的是,在实际编程中,概率计算涉及到很多的小数运算,因此需要使用浮点数类型(如double)进行计算,并且在比较两个浮点数是否相等时,不能直接使用等号==,而是应该使用一个误差范围来判断它们是否相近。