如何在C语言while循环每次执行后累加计算累计平均MPG?
问题修正说明
原代码存在的问题
- 变量未初始化:
miles初始为随机脏值,第一次进入while循环的判断结果不可控 - 缺少累计统计变量:没有定义变量存储历次MPG的总和,也没有统计循环执行次数,当前
avg直接赋值为单次MPG,无法得到累计平均值 - 退出逻辑错误:输入
-1作为里程数后,依然会要求输入加油量,不符合预期 - 精度丢失问题:用int类型存储MPG和平均值,整数除法会直接截断小数部分,结果误差较大
修正后可运行代码
#include <stdio.h> int main() { int miles = 0; int gallons; // 改用浮点类型存储避免精度丢失 float single_mpg; float total_mpg = 0; float avg_mpg; int trip_count = 0; while (1) { printf("Enter number of miles driven(-1 to quit): "); scanf("%d", &miles); // 输入-1直接退出,不再执行后续输入逻辑 if (miles == -1) { break; } printf("Enter gallons used: "); scanf("%d", &gallons); // 避免除0错误 if (gallons == 0) { printf("加油量不能为0,请重新输入\n"); continue; } single_mpg = (float)miles / gallons; total_mpg += single_mpg; trip_count++; avg_mpg = total_mpg / trip_count; printf("本次行程MPG: %.2f\n", single_mpg); printf("当前累计平均MPG: %.2f\n", avg_mpg); } return 0; }
修正点说明
- 新增
total_mpg变量累计历次行程的MPG总和,新增trip_count变量统计有效行程次数,每次循环结束后用总和除以次数得到累计平均值 - 调整循环逻辑,输入里程为-1时直接跳出循环,不会再请求输入加油量
- 所有MPG相关变量改用浮点类型,计算时做强制类型转换,保留两位小数输出,结果更准确
- 增加除0错误判断,避免输入加油量为0时程序崩溃
内容的提问来源于stack exchange,提问作者Schelts
相关产品推荐
相关产品推荐

