在翻转硬币和掷骰子时使用rand()
我现在完全糊涂了。 因此,我正在阅读本课程中的练习,因为我自己学习C语,所以我很难知道这些内容。 这是练习:
描述:
编写一个程序,使用C标准库中的
rand()
函数模拟以下随机事件。 我们感兴趣的是确定rand()
真的产生了一组随机值。 为此,我们将重复该事件一定次数,并查看我们获得每个可能结果的频率。 如果rand()
是真正随机的,并且我们对可能结果的映射是一致的,那么我们的结果应该同样可能,因此在所有可能的结果中均匀分布。这两个活动将是:
- 翻转一枚硬币
- 滚动六面模具
重复每个事件:
- 10
- 100
- 1000
- 万
- 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 #include 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; }
*对不起,我并没有真正专注于模具输出,只是试图让硬币首先工作
我接受了您的代码并应用了我建议的更改,并展示了如何计算百分比。
#include #include 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; }