在翻转硬币和掷骰子时使用rand()

我现在完全糊涂了。 因此,我正在阅读本课程中的练习,因为我自己学习C语,所以我很难知道这些内容。 这是练习:

描述:

编写一个程序,使用C标准库中的rand()函数模拟以下随机事件。 我们感兴趣的是确定rand()真的产生了一组随机值。 为此,我们将重复该事件一定次数,并查看我们获得每个可能结果的频率。 如果rand()是真正随机的,并且我们对可能结果的映射是一致的,那么我们的结果应该同样可能,因此在所有可能的结果中均匀分布。

这两个活动将是:

  1. 翻转一枚硬币
  2. 滚动六面模具

重复每个事件:

  1. 10
  2. 100
  3. 1000
  4. 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; }