C++程序计算用户输入数值平均值结果始终为0问题排查
问题原因定位
- 循环越界取数导致计算分子恒为0:输入价格的for循环执行结束后,循环变量
i的值已经自增到等于输入的价格个数n(循环满足执行的最后一轮对应i = n-1,执行完循环体后i会自增1变成n)。此时代码执行PrzVar = Prices[i],取到的是数组索引为n位置的元素——由于数组初始化时所有元素都被预置为0,这个值和用户实际输入的价格完全无关,计算时分子恒为0,最终输出自然始终是0。 - 核心逻辑缺失:代码完全没有实现多组数值累加求和的步骤,仅单独取了一个错误位置的数组元素参与运算,不满足平均值计算的基本逻辑。
- 变量类型设计不合理:存储平均值的变量
Avr被定义为int整型,就算累加逻辑修正完成,用整型存储带小数的价格平均值会出现严重的精度截断,小数值场景下甚至会直接被截断为0。
修正实现
修正思路
- 新增浮点型累加变量,在逐个输入价格的循环过程中同步累加所有输入的价格值,替换原有错误的单值取数逻辑
- 将存储平均值的变量调整为float浮点类型,适配价格类数值的小数计算需求
- 按照“总价格 / 价格个数”的逻辑计算平均值,替换原有错误的单值除法逻辑
修正后完整代码
#include<iostream> using namespace std; int main() { float Prices[10] = {0}; int n, i; float totalPrice = 0; float average = 0; // 循环校验输入的价格数量是否在1-10的允许范围内 do { cout << "Inserire la quantit" << (char)133 << " di prezzi di cui fare la media: "; cin >> n; } while (n < 1 || n > 10); // 逐个输入价格并完成累加 for (i = 0; i < n; i++) { cout << "Inserire il " << i + 1 << (char)167 << " prezzo: "; cin >> Prices[i]; totalPrice += Prices[i]; } // 计算并输出平均值 average = totalPrice / n; cout << "La media dei prezzi inseriti corrisponde a: " << average; return 0; }
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

