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

C++程序求最值与平均值异常:仅取首个输入值且无平均值结果

问题分析与代码修正

核心问题梳理

  • 数组越界访问:你定义的average是大小为8的数组,合法索引范围是0~7,但代码中多次访问average[8],这属于非法内存访问(未定义行为)。输入的数值被写入非法区域,导致max、min的初始化值异常。
  • 最大值循环失效:找最大值的for循环末尾多了分号;,使得循环体为空,后续的判断代码仅执行一次,且始终比较越界的average[8],从未遍历数组有效元素。
  • 最小值循环未执行:找最小值的循环条件是i > 8,初始i=0时条件不成立,循环直接跳过,min保持初始的越界值。
  • 平均值逻辑完全错误:计算平均值的循环未做累加操作,battingAverage = average[8]+number只是用越界值加循环变量,且每次覆盖结果;输出时直接打印数组名average,实际输出的是数组内存地址而非计算出的平均值。
  • 冗余/非法代码:double number[0];是非法定义(C++不允许大小为0的数组);loopIndex、total、double i;等变量未使用;enter code here属于无效代码。

修正后的代码

#include <iostream>
using namespace std;

int main()
{
    const int ARRAY_SIZE = 8;
    double average[ARRAY_SIZE] = {.299, .157, .242, .203, .198, .333, .270, .190};
    
    // 输入值替换数组最后一个元素(合法索引范围)
    cout << "Please enter a batting average: " << endl;
    cin >> average[ARRAY_SIZE - 1];

    // 查找最大值
    double max = average[0];
    for (int i = 1; i < ARRAY_SIZE; i++)
    {
        if (max < average[i])
            max = average[i];
    }

    // 查找最小值
    double min = average[0];
    for (int i = 1; i < ARRAY_SIZE; i++)
    {
        if (min > average[i])
            min = average[i];
    }

    // 计算平均值
    double total = 0.0;
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        total += average[i];
    }
    double battingAverage = total / ARRAY_SIZE;

    // 输出结果
    cout << "Maximum batting average is " << max << endl;
    cout << "Minimum batting average is " << min << endl;
    cout << "The average is " << battingAverage << endl;

    return 0;
}

修正说明

  1. 用常量ARRAY_SIZE统一数组大小,避免硬编码数字,提升可维护性;
  2. 修正数组索引,使用ARRAY_SIZE - 1访问最后一个元素,彻底解决越界问题;
  3. 重构max/min的循环逻辑:从第二个元素开始遍历,逐个比较数组内的有效元素;
  4. 重新实现平均值计算:先累加所有元素到total,再除以元素个数得到正确平均值;
  5. 删除所有冗余、非法代码,优化输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:15:41