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

数组与循环实现动态集合:骰子投掷统计程序调试求助

修正骰子程序的数组逻辑与统计问题

原代码的核心错误

  • 变量与数组名冲突:同时将diceFace定义为统计数组和存储输入面数的变量,diceThrows同理,导致编译器无法正确解析,完全破坏数组使用逻辑。
  • 输入范围判断错误:题目要求面数范围是1-25、投掷次数1-500,但你的判断条件>1 && <25漏掉了边界值1和25,投掷次数的判断也存在同样问题。
  • 循环条件缺失:投掷循环的for语句中i < ;未指定循环上限,无法控制投掷次数。
  • 统计逻辑混乱:因命名冲突,统计次数时错误操作了面数变量,而非统计数组。
  • 冗余数组定义:diceThrows[500]完全不必要,无需存储所有投掷结果,直接统计即可。

修正后的完整代码

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

int main()
{
    int i;
    int numFaces; // 存储用户输入的骰子面数
    int numThrows; // 存储用户输入的投掷次数
    int count[25] = {0}; // 统计每个点数出现次数,下标0对应点数1

    // 初始化随机数种子,确保每次运行结果不同
    srand(time(NULL));

    // 输入并验证骰子面数
    printf("Number of faces: ");
    scanf("%d", &numFaces);
    if (numFaces >= 1 && numFaces <= 25)
        printf("Range is acceptable\n");
    else {
        printf("Range is unacceptable\n");
        return 1; // 范围错误直接退出,避免后续逻辑异常
    }

    // 输入并验证投掷次数
    printf("Number of throws: ");
    scanf("%d", &numThrows);
    if (numThrows >= 1 && numThrows <= 500)
        printf("Range is acceptable\n");
    else {
        printf("Range is unacceptable\n");
        return 1;
    }

    // 模拟投掷并统计次数
    for (i = 0; i < numThrows; i++)
    {
        int roll = rand() % numFaces + 1; // 生成1~numFaces的随机点数
        count[roll - 1]++; // 对应点数的计数+1
        printf("%d ", roll); // 可选:打印每次投掷结果,不需要可注释
    }
    printf("\n\n");

    // 输出统计结果及百分比
    for (i = 0; i < numFaces; i++)
    {
        double percentage = (double)count[i] / numThrows * 100;
        printf("The value [%d] was rolled %d times (%.2f%%)\n", i+1, count[i], percentage);
    }

    return 0;
}

关键修正说明

  1. 命名分离:用numFaces/numThrows存储输入值,count数组专门负责统计,彻底解决命名冲突问题。
  2. 范围校验优化:修正边界判断逻辑,同时在范围错误时直接退出程序,避免无效的后续执行。
  3. 简化统计流程:每次投掷后直接更新统计数组,无需存储所有投掷结果,节省内存且逻辑更清晰。
  4. 添加百分比计算:通过强制类型转换实现浮点数除法,输出符合要求的百分比结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:35:24