掷骰子两次:C

Rolling a die twice: C

我正在尝试编写一个程序,它使用 C 中的 rand() 函数掷骰子两次。我的目标是掷骰子 36000 次并找到获得的两个结果的总和(来自每次两个骰子)并将总和(位于 [2,12] 范围内的两个结果)存储在一个数组中,并使用 for 循环和 printf() 函数显示结果。

根据概率的概念,我期望得到以下结果:

<table>
<tr>
<th>Sum</th>
<th>No.</th>
</tr>
<tr>
<td>2</td>
<td>1000</td>
</tr>
<tr>
<td>3</td>
<td>2000</td>
</tr>
<tr>
<td>4</td>
<td>3000</td>
</tr>
<tr>
<td>5</td>
<td>4000</td>
</tr>
<tr>
<td>6</td>
<td>5000</td>
</tr>
<tr>
<td>7</td>
<td>6000</td>
</tr>
<tr>
<td>8</td>
<td>5000</td>
</tr>
<tr>
<td>9</td>
<td>4000</td>
</tr>
<tr>
<td>10</td>
<td>3000</td>
</tr>
<tr>
<td>11</td>
<td>2000</td>
</tr>
<tr>
<td>12</td>
<td>1000</td>
</tr>
</table>
现在,这是我输入的代码

int main(void)
{   srand(3);
    int die1, die2, count, measure[13];
    for(count=0; count<36000; count++){
        die1=1+rand()%6;
        die2=1+rand()%6;
        measure[die1+die2]++;
    }
    printf("Results!\n");
    printf("Sum%20s\n", "Frequency");
    for(count=2; count<=12; count++){
        printf("%3d%20d\n", count, measure[count]);
    }

    return 0;

}

这是我得到的结果-The result I obtained
从图像中,除了 6 和 12 之外,从 2 到 12 的所有值都接近预期值。对于 6 和 12,它显示 4204735 和 11147179,因为这两个值都远远超过 36000。我是无法理解这个荒谬结果背后的原因。

你还没有初始化你的数组:

int measure[13];

所以现在,measure 未初始化,因此它可以有一些随机垃圾值

您必须用零初始化数组,如下所示:

int measure[13] = {0};

或者,您可以使用 memset,但我不推荐它:

int measure[13];
memset(measure, 0, sizeof measure);