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

C++变量运算失效求助:无法计算分数乘积与平均值

问题分析与修正方案

嘿,我来帮你排查代码里的问题!你的运算失效和逻辑错误主要来自两个地方:

1. 全局变量的初始化时机问题

你把final_score以及三个分数变量都定义成了全局变量,并且在定义final_score时直接用score_one * score_two * score_third赋值。但全局变量是程序启动时就完成初始化的,这时候score_one、score_two、score_third的默认值都是0,所以final_score从一开始就被固定成0了。之后你通过cin输入的数值只会更新三个分数变量,但final_score不会自动重新计算——那个乘法语句只执行一次,不会随变量变化而刷新。

2. 平均值的计算逻辑错误

你想要计算平均值,但代码里写的是三个数相乘,这完全不符合平均值的计算规则。正确的平均值应该是三个分数的总和除以3。另外,如果直接用整数除法(比如(a+b+c)/3),结果会舍去小数部分,要是需要保留小数精度,得用浮点类型来处理。


修正后的代码

#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;

int main() {
    // 将变量改为main函数内的局部变量,避免全局初始化问题,代码更规范
    int score_one;
    int score_two;
    int score_third;
    
    cout << "What was your first score?" << endl;
    cin >> score_one;
    cout << "What was your second score?" << endl;
    cin >> score_two;
    cout << "What was your third score?" << endl;
    cin >> score_third;
    
    // 用double存储平均值,确保小数精度;用3.0触发浮点除法
    double average_score = (score_one + score_two + score_third) / 3.0;
    cout << "Your average score is: " << average_score << endl;
    
    return 0;
}

关键修改说明

  • 把所有变量移到main函数内作为局部变量,这样就不会出现全局变量提前初始化导致的计算错误。
  • 修正计算逻辑:从“三个数相乘”改为“三个数求和后除以3”,用3.0而非3,强制触发浮点除法,避免整数除法的精度丢失。
  • 使用double类型存储平均值,确保结果能保留小数部分,符合平均值的实际需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:22