以下是一个简单的C语言程序,该程序模拟了掷两个骰子共6000次,并统计每个可能点数(2到12)出现的次数:
```c
#include
#include
#include
#define DICE_SIDES 6
#define ROLLS 6000
#define MAX_POINTS 13 // 包含从2到12的点数
int main() {
int dice1, dice2, sum, i, counts[MAX_POINTS] = {0}; // 初始化计数数组为0
// 初始化随机数生成器
srand(time(NULL));
// 模拟掷骰子
for (i = 0; i < ROLLS; i++) {
dice1 = rand() % DICE_SIDES + 1; // 掷第一个骰子
dice2 = rand() % DICE_SIDES + 1; // 掷第二个骰子
sum = dice1 + dice2; // 计算点数之和
// 统计点数
if (sum >= 2 && sum <= 12) { // 确保点数在有效范围内
counts[sum]++;
}
}
// 打印统计结果
printf("Points\tFrequency\n");
for (i = 2; i < MAX_POINTS; i++) {
printf("%d\t\t%d\n", i, counts[i]);
}
return 0;
}
```
该程序首先定义了几个常量:`DICE_SIDES`(骰子的面数)、`ROLLS`(掷骰子的次数)和`MAX_POINTS`(最大可能的点数之和加1,因为我们用数组索引表示点数)。
然后程序定义了一个整数数组`counts`,用于统计每个点数出现的次数。数组初始化为0。
接着,程序使用`srand(time(NULL))`初始化随机数生成器,确保每次运行程序时生成的随机数序列都不同。
在模拟掷骰子的循环中,程序为每个骰子随机生成一个1到6的整数,计算两个骰子的点数之和,然后更新`counts`数组中对应索引的值。注意,数组索引从0开始,但点数从2开始,所以我们检查`sum`是否在有效范围内(2到12),然后才更新计数数组。
最后,程序打印出每个点数及其对应的频率。