我现在完全糊涂了。因此,我正在阅读本课程中的练习,因为我自己学习C语,所以我很难知道这些内容。这是练习:
说明
编写一个程序,模拟以下随机 使用C标准中的
rand()
函数的事件 库。我们有兴趣确定是否rand()
实际上似乎产生了一组随机值。去做这个 我们会重复这个事件一定次数并看看 我们多久得到一次可能的结果。如果rand()
是真正随机的,我们对可能结果的映射是 统一,我们的结果应该同样可能,因此 均匀分布在所有可能的结果中。这两个事件将是:
- 掷硬币
- 滚动六面模具
醇>重复每个事件:
- 10
- 100
- 1000
- 10,000
- 100,000次
醇>在每组重复中,计算每个结果的频率 发生。然后计算总事件的百分比 由每个结果代表。
例如:
Coin:
----
Flips: 10 Heads: 40%
Tails: 60%
Die:
----
Rolls: 10 1: 10%
2: 0%
3: 20%
4: 30%
5: 30%
6: 10%
...
Coin:
----
Flips: 100000 Heads: 49%
Tails: 51%
Die:
----
Rolls: 100000 1: 17%
2: 18%
3: 17%
4: 17%
5: 17%
6: 16%
目前我有:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, value, n;
int flips[2] = {0};
int rolls[6] = {0};
for(n = 10; n <= 100000; n *= 10){
for(i=0; i < n; i++){
value = rand( )%2;
flips[value]++;
value = rand( )%6;
rolls[value]++;
}
printf("Coin:\n____\n Flips: %d\n",n);
printf(" Heads: %d%%\n", ((flips[0] * 100) / n));
printf(" Tails: %d%%\n\n", ((flips[1] * 100) / n));
printf("Die:\n____\n Rolls: %d\n",n);
printf(" 1: %d%%\n", rolls[0]);
printf(" 2: %d%%\n", rolls[1]);
printf(" 3: %d%%\n", rolls[2]);
printf(" 4: %d%%\n", rolls[3]);
printf(" 5: %d%%\n", rolls[4]);
printf(" 6: %d%%\n", rolls[5]);
}
return 0;
}
*对不起,我并没有真正专注于模具输出,只是试图让硬币首先工作
答案 0 :(得分:1)
我接受了您的代码并应用了我建议的更改,并展示了如何计算百分比。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j, value, n;
static const char *sides[] = {"Heads", "Tails"};
int flips[2] = {0};
int rolls[6] = {0};
i = 0;
for(n = 10; n <= 100000; n *= 10){
for(; i < n; i++){
value = rand( )%2;
flips[value]++;
value = rand( )%6;
rolls[value]++;
}
printf("Coin:\n____\n Flips: %d\n",i);
for(j = 0; j < 2; j++) {
printf(" %s: %d%%\n", sides[j], 100*flips[j]/i);
}
printf("Die:\n____\n Rolls: %d\n",i);
for(j = 0; j < 6; j++) {
printf(" %d: %d%%\n", j, 100*rolls[j]/i);
}
}
return 0;
}