抛一枚硬币出现正面在上或者是反面在上的概率均为1/2,这是通过推理得出的,因为硬币只有两面。估计现在也很少有人亲自去做实验验证出现某一面的概率为1/2。在学习完程序的基础知识后,就可以自己写代码去验证这个问题。下面就来聊聊如何使用编程语言来验证抛硬币出现某一面的概率。
示例代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
int num;
for (int i = 0; i < 10; i++) {
num = rand() % 2;
printf("num=%d \n", num);
}
return 0;
}
先写一个for循环执行10次,其次使用随机数对2取余,结果只有0和1两种情况,测试结果如下,

我们可以使用0和1来分别代表硬币的正反面。
然后进行下一步的测试,示例代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
int num, zheng = 0, fan = 0;
for (int i = 0; i < 1000; i++) {
num = rand() % 2;
if (num == 1) {
zheng++;
} else {
fan++;
}
}
printf("zheng=%d, fan=%d \n", zheng, fan);
return 0;
}
定义两个变量来统计正反面出现的次数,当随机数的结果为1时表示正面,否则就表示反面。测试1000次的结果如下,

测试1000000次结果如下,

从测试结果可以看出,测试次数越多,正面和反面出现的次数越接近1:1。上面就是抛硬币的代码实验,有兴趣的小伙伴可以自己写写看,然后查看测试结果。
验证色子实验与上面非常类似,示例代码如下,
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main() {
srand(time(NULL));
int num, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0;
for (int i = 0; i < 6666; i++) {
num = rand() % (6 - 1 + 1) + 1;
if (num == 1) {
t1++;
} else if(num == 2){
t2++;
} else if (num == 3) {
t3++;
} else if (num == 4) {
t4++;
} else if (num == 5) {
t5++;
} else {
t6++;
}
}
printf("t1=%d, t2=%d, t3=%d, t4=%d, t5=%d, t6=%d \n", t1, t2, t3, t4, t5, t6);
return 0;
}
生成的随机数范围为1到6,分表表示色子的六个面,然后重复生成随机数,统计每个数出现的次数。测试6666次结果如下,

测试66666666次结果如下,

测试次数越多,1到6每一个数出现的概率越接近1/6。上面就是抛硬币实验和投色子实验的模拟,有兴趣的小伙伴可以亲自动手试试。