You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言用rand()模拟两次掷骰子36000次统计结果异常问题咨询

你遇到的异常输出是数组未初始化导致的:

  • C语言中定义在函数内部的局部自动变量(你代码里的measure[13]数组属于这类),不会被自动初始化为0,其初始值是对应内存空间残留的随机无效值
  • 你直接对measure[die1+die2]执行自增操作,是在随机初始值的基础上累加,所以最终输出结果会出现远大于36000的离谱数值,其余数值看起来接近预期只是巧合

修正方案

只需要在定义数组时手动将所有元素初始化为0即可,修改数组定义行的代码为:
int die1, die2, count, measure[13] = {0};

注:C语言中数组初始化时如果显式给第一个元素赋值为0,剩下所有未显式赋值的元素都会被自动初始化为0,刚好满足计数需求。另外原代码要正常编译运行,还需要在开头引入头文件<stdio.h>(提供printf的声明)和<stdlib.h>(提供srand、rand的声明)。

修正后的完整代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{   
    srand(3);
    int die1, die2, count, measure[13] = {0};
    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;
}

内容的提问来源于stack exchange,提问作者udhav varma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:36:03