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

整数成绩加权平均分计算程序正确性咨询

课程成绩计算程序的正确性分析

我在CS课程中遇到一道编程题,虽看似简单但不确定理解是否正确。题目要求如下:
课程成绩计算规则:

  • 第一次作业占总成绩的10%。
  • 第二次作业占总成绩的20%。
  • 第三次考试占总成绩的70%。
    编写程序读取用户输入的三个成绩项,输出课程最终成绩。

我编写的代码:

#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{

    int num1, num2, num3;
    cin >> num1 >> num2 >> num3;

    int val1 = (num1 * 10) / 100;
    int val2 = (num2 * 20) / 100;
    int val3 = (num3 * 70) / 100;

    cout << "your total is: " << val1 + val2 + val3 << endl;

    return 0;
}

请问这段代码是否正确?有没有遗漏的地方?希望得到相关建议,谢谢。


代码存在的问题

  • 整数除法丢失精度:所有变量用int存储,计算时的整数除法会直接舍去小数部分。比如第一次作业85分,85*10/100的实际值是8.5,但整数运算结果是8,直接丢了0.5分,最终总成绩会有误差。
  • 无输入合法性校验:程序没检查输入的成绩是否在0-100的合理范围内,用户输入负数或超过100的数值时,计算结果完全不符合实际成绩逻辑。
  • 输出精度不足:最终成绩用整数输出,实际加权计算后可能存在小数(比如89.5),用整数输出会变成89,无法准确反映真实成绩。

优化建议

  • 改用浮点类型存储计算:把成绩变量和计算变量换成double或float,保留小数精度,计算时直接用百分比系数(0.1、0.2、0.7)更直观:
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{
    double num1, num2, num3;
    cin >> num1 >> num2 >> num3;

    double total = num1 * 0.1 + num2 * 0.2 + num3 * 0.7;

    cout << "your total is: " << total << endl;

    return 0;
}
  • 添加输入校验逻辑:读取输入后检查每个成绩是否在0-100之间,不符合则提示用户输入合法值:
#include <iostream>

using std::cin;
using std::cout;
using std::endl;

int main()
{
    double num1, num2, num3;
    cin >> num1 >> num2 >> num3;

    if (num1 < 0 || num1 > 100 || num2 < 0 || num2 > 100 || num3 < 0 || num3 > 100) {
        cout << "请输入0-100之间的有效成绩" << endl;
        return 1;
    }

    double total = num1 * 0.1 + num2 * 0.2 + num3 * 0.7;

    cout << "your total is: " << total << endl;

    return 0;
}
  • 格式化输出精度:如果需要固定小数位数(比如保留1位或2位),可以引入<iomanip>头文件,用std::fixed和std::setprecision控制输出:
#include <iostream>
#include <iomanip>

using std::cin;
using std::cout;
using std::endl;
using std::fixed;
using std::setprecision;

int main()
{
    double num1, num2, num3;
    cin >> num1 >> num2 >> num3;

    if (num1 < 0 || num1 > 100 || num2 < 0 || num2 > 100 || num3 < 0 || num3 > 100) {
        cout << "请输入0-100之间的有效成绩" << endl;
        return 1;
    }

    double total = num1 * 0.1 + num2 * 0.2 + num3 * 0.7;

    cout << "your total is: " << fixed << setprecision(1) << total << endl;

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:55:16