掷骰子两次: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);
我正在尝试编写一个程序,它使用 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);