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

如何用'*'创建垂直结果图?附10000次骰子模拟C语言实现

单骰子10000次随机投掷模拟实现

需求说明

  • 模拟六面骰子投掷10000次
  • 统计每个面(1-6)的出现次数并输出
  • 使用*符号绘制各面出现次数的水平柱状图,结果需接近均匀分布
  • 仅允许使用stdio.h、stdlib.h、time.h三个头文件

实现代码

/* 骰子投掷模拟程序 */

/* 程序用到的头文件 */
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

/* 主函数:模拟六面骰子投掷10000次 */
int main()
{
    /* 统计每个骰子面(1-6)的出现次数 */
    int count1 = 0;     
    int count2 = 0; 
    int count3 = 0;
    int count4 = 0;
    int count5 = 0;
    int count6 = 0;

    int roll;   /* 投掷次数计数器,从1到10000 */
    int face;   /* 单次投掷的骰子面数值,范围1-6 */

    srand(time(NULL));    /* 设置随机数种子,保证每次运行结果不同 */

    // 循环执行10000次投掷
    for (roll = 1; roll <= 10000; roll++) {        
        face = 1 + rand() % 6;                      /* 生成1-6的随机数,模拟骰子面 */

        // 根据骰子面数值更新对应计数器
        switch (face) {      
        case 1:
            ++count1;
            break;
        case 2:
            ++count2;
            break;
        case 3:
            ++count3;
            break;
        case 4:
            ++count4;
            break;
        case 5:
            ++count5;
            break;
        case 6:
            ++count6;
            break;
        }
    }

    // 输出统计结果表头
    printf("%s%10s\n", "骰子面", "出现次数");   

    // 输出每个骰子面的出现次数
    printf("   1%10d\n", count1);
    printf("   2%10d\n", count2);
    printf("   3%10d\n", count3);
    printf("   4%10d\n", count4);
    printf("   5%10d\n", count5);
    printf("   6%10d\n\n", count6);

    /* 临时变量存储各面出现次数(用于绘制柱状图) */
    int val1 = count1;
    int val2 = count2;
    int val3 = count3;
    int val4 = count4;
    int val5 = count5;
    int val6 = count6;

    /* 柱状图绘制计数器 */
    int line1 = 0;
    int line2 = 0;
    int line3 = 0;
    int line4 = 0;
    int line5 = 0;
    int line6 = 0; 

    // 绘制骰子面1的柱状图
    printf("1 ");   
    while (line1 < val1) {
        printf("* ");
        line1 += 150;       /* 调整每个*代表的次数,避免柱状图过长 */
    }
    printf("\n");

    // 绘制骰子面2的柱状图
    printf("2 ");
    while (line2 < val2) {
        printf("* ");
        line2 += 150;
    }
    printf("\n");

    // 绘制骰子面3的柱状图
    printf("3 ");
    while (line3 < val3) {
        printf("* ");
        line3 += 150;
    }
    printf("\n");

    // 绘制骰子面4的柱状图
    printf("4 ");
    while (line4 < val4) {
        printf("* ");
        line4 += 150;
    }
    printf("\n");

    // 绘制骰子面5的柱状图
    printf("5 ");
    while (line5 < val5) {
        printf("* ");
        line5 += 150;
    }
    printf("\n");

    // 绘制骰子面6的柱状图
    printf("6 ");
    while (line6 < val6) {
        printf("* ");
        line6 += 150;
    }

    return 0;   /* 程序正常结束 */
}       /* 主函数结束 */

代码说明

  • 使用srand(time(NULL))初始化随机数生成器,确保每次运行的随机序列不同
  • 通过循环执行10000次投掷,用rand()%6+1生成1-6的随机数模拟骰子面
  • 用switch语句统计每个面的出现次数
  • 柱状图中每个*代表约150次出现,避免输出过长影响可读性

内容的提问来源于stack exchange,提问作者Zafer Kazankaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:22:45