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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:45:03