C++中computeAverage函数无法正确计算分数平均值问题求助
故障原因排查与修复方案
核心错误:数组首地址传参错误
你调用computeAverage时传入的第一个参数&theScores[arraySize]是非法地址:
- C++数组下标从0开始,合法下标范围为
0 ~ arraySize-1,theScores[arraySize]本身属于数组越界访问,对应的地址是数组末尾之后的未知内存区域 - 函数内部读取的都是该非法地址后续的随机内存值,累加结果必然错误
正确调用方式可选以下任意一种: - 直接传入数组名作为首地址:
computeAverage(theScores, arraySize) - 显式传入第一个元素的地址:
computeAverage(&theScores[0], arraySize)
次要问题:整数除法精度丢失
你当前实现用int类型存储运算结果,C++的整数除法会直接丢弃小数部分,例如总和为7、数组大小为2时,得到的结果是3而非3.5。如果业务场景需要保留小数精度,可以调整函数实现如下(依然符合仅声明1个变量的要求):
double computeAverage(const int anArray[], const int arraySize) { double average = 0; for (int i = 0; i < arraySize; i++) { average += anArray[i]; } average = average / arraySize; return average; }
内容的提问来源于stack exchange,提问作者Code With Faraz
相关产品推荐
相关产品推荐

