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

C++除法答题程序错误排查:输入正确结果却判定错误

问题分析与修复方案

核心问题点

  • 整数除法导致结果失真:divR1和divR2都是int类型,divR1 / divR2执行的是整数除法(比如59/89会得到0,而非实际的0.6629...),赋值给double类型的solution也无法修正这个错误结果,这是程序误判的根本原因。
  • 浮点数直接用==比较存在精度问题:用户输入的近似值(如0.66)和精确计算的浮点值存在微小误差,直接用相等判断会误判为错误。
  • 计数变量未正确累加:divC + 1和divI + 1仅做了加法运算,没有把结果赋值回变量,导致正确/错误次数统计完全无效。
  • 随机数范围不符合需求:rand()%100生成0-99的数,可能出现除数为0的情况,且不满足题目1-100的要求。
  • 缺少循环逻辑:当前程序仅运行一次就退出,无法重复进行练习。

修复后的代码

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath> // 用于计算浮点数绝对值
using namespace std;

int main()
{
    int divC = 0, divI = 0;
    srand(static_cast<unsigned int>(time(0)));
    char exitChoice = 'n';

    do {
        // 生成1-100的随机数,避免除数为0
        int divR1 = rand() % 100 + 1;
        int divR2 = rand() % 100 + 1;
        double reDiv = 0;
        // 强制转换为浮点数后执行除法,得到精确的浮点结果
        double solution = static_cast<double>(divR1) / divR2;

        cout << "---------DIVISION---------" << endl;
        cout << "Operation " << divR1 << " / " << divR2 << endl;
        cout << "Answer: ";
        cin >> reDiv;

        // 用误差范围判断浮点数是否近似相等,允许0.01的误差
        if (fabs(reDiv - solution) < 0.01) {
            cout << "Correct." << endl;
            divC++; // 正确次数累加
        } else {
            cout << "Incorrect. The correct answer is " << solution << endl;
            divI++; // 错误次数累加
        }

        cout << "EXIT? [Y/N]: ";
        cin >> exitChoice;
    } while (exitChoice != 'Y' && exitChoice != 'y'); // 循环直到用户选择退出

    // 退出时输出统计结果
    cout << "Total correct: " << divC << ", Total incorrect: " << divI << endl;
    return 0;
}

修复说明

  • 将其中一个整数强制转换为double后再做除法,确保得到正确的浮点运算结果。
  • 使用fabs(reDiv - solution) < 0.01判断两个浮点数是否近似相等,适配用户输入的近似值,避免精度问题导致的误判。
  • 把divC +1改为divC++,实现正确的计数累加。
  • 随机数调整为rand()%100 +1,生成1-100的整数,避免除数为0的异常。
  • 添加do-while循环,支持用户重复进行除法练习,直到输入Y/y退出。
  • 退出时输出正确和错误的总次数,增强交互体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:48:15