C 气体里程平均

C++ Gas Mileage Averaging

本文关键字:程平      更新时间:2023-10-16

我应该制作一个简单的控制台程序,该程序可以允许用户输入其在多次旅行中使用的英里驱动和加仑。它使用了一个段循环结构,并计算了两个燃料经济体,一个用于旅行和整体燃油经济性。我的问题是让我的输出匹配我从中学到的书中的内容。它接近,但没有发现。

这是本书的输出:

Enter miles driven (-1 to quit): 287
Enter gallons used: 13
MPG this trip: 22.076923
Total MPG: 22.076923
Enter miles driven (-1 to quit): 200
Enter gallons used: 10
MPG this trip: 20
Total MPG: 21.173913
Enter miles driven (-1 to quit): 120
Enter gallons used: 5
MPG this trip: 24
Total MPG: 21.678571

这是我到目前为止所做的:

#include <iostream>
int main ( )
{
    // Set our variables and initialize them
    double miles = 0;
    double gallons = 0;
    double economyTrip = 0;
    double economyTotal = 0;
    while (miles >= 0)
    {
        std::cout << "Enter miles driven (-1 to quit):  ";
        std::cin >> miles ;
        // Check input
        if (miles == -1)
            break;
        else
            std::cout << "Enter gallons used:  ";
        std::cin >> gallons;
        // Calculate trip fuel economy
        economyTrip = (miles/gallons) ;
        // Calculate total fuel economy
        if (economyTotal == 0)
            economyTotal = economyTrip;
        else
            economyTotal += (economyTrip - economyTotal)/2;
        // Display the results
        std::cout << "MPG this trip: " << economyTrip << std::endl;
        std::cout << "Total MPG:" << economyTotal << std::endl << "n";
    }
}

我的平均方式错了吗?我知道,在计算器上,如果您将三个旅行行驶里程的平均值大约为22.02563。。。因此,至少可以说这本书比我稍接近。我想知道如何做这件事,以便我可以得到更近的答案。还是我什至应该担心的是

您的计算总经济的公式是错误的。您应该将行驶里程的总和除以所用燃料的总和。

您无法继续计算MPG并将其添加到运行总计中。您需要存储总英里总加仑,然后在末尾计算MPG。

有两种获得平均值的方法:

  1. 最简单的:对两个数量进行计数,在结尾处进行划分
  2. 更复杂:平均每次迭代(需要一些数学)

使用第二种和更复杂的方法通常几乎没有好处,所以我建议您跟上第一个。


只是为了娱乐,让我们第二种方法...但是让我们首先了解我们在做什么。

avg1 = a
avg2 = (a + b) / 2
avg3 = (a + b + c) / 3 = (a + b) / 3 + c / 3
                       = (a + b) * 2 / (2 * 3) + c / 3
                       = (a + b) / 2 * (2 / 3) + c / 3
                       = avg2 * (2 / 3) + c / 3
avg4 = (a + b + c + d) / 4 = avg3 * (3 / 4) + d / 4

等等:avg[N] = avg[N-1] * (N - 1) / N + val[N] / N开始感觉像一个barycenter :) 注意:avg[N-1] * (N-1)实际上是总计N-1

因此,我们可以保留平均英里/加仑和加仑的总数(在Python中,只是为了显示原则):

avgMiles = 0.0
totGallons = 0.0
while True:
    miles = float(raw_input("Enter miles driven: "))
    gallons = float(raw_input("Enter gallons used: "))
    print "MPG this trip:", miles / gallons
    newTotGallons = totGallons + gallons
    avgMiles = avgMiles * totGallons / newTotGallons + miles / newTotGallons
    totGallons = newTotGallons
    print "Total MPG:", avgMiles

,输出为(或者是互动的):

Enter miles driven: 200
Enter gallons used: 10
MPG this trip: 20.0
Total MPG: 20.0
Enter miles driven: 100
Enter gallons used: 10
MPG this trip: 10.0
Total MPG: 15.0
Enter miles driven: 50
Enter gallons used: 5
MPG this trip: 10.0
Total MPG: 14.0
Enter miles driven: 

顺便说一句,而不是-1,习惯使用CTRL+D来发出用户输入的结尾(至少在Linux上)。

刚刚遇到的时间比发布的时间晚。除C(不是C )外,我还有相同的作业分配,因此差异很小。我已经解决了它,我将在这里为将来可能会遇到此帖子的任何人提供解决方案。

#include <stdio.h>
int main()
{
 float gallons, miles, mpg, averagempg, gallonstotal, milestotal;
 gallons = 0;
 miles = 0;
 mpg = 0;
 averagempg = 0;
 gallonstotal = 0;
 milestotal = 0;
 printf("nEnter gallons used (-1 to end): ");
 scanf("%f", &gallons);
 while (gallons != -1) {
     gallonstotal = gallonstotal + gallons;
     printf("Enter the miles driven: ");
     scanf("%f", &miles);
     milestotal = milestotal + miles;
     mpg = miles / gallons;
     printf("The miles / gallon for this tank was %f n", mpg);
     printf("nEnter gallons used (-1 to end): ");
     scanf("%f", &gallons);
 }
 if (gallonstotal != 0){
     averagempg = milestotal / gallonstotal;
     printf("nThe overall average miles/gallon was %f n", averagempg);
 }
 else {
     puts("Error: no gallons were entered n");
 }
}
#include <iostream>
using namespace std;
int main()
{
unsigned int tripCounter = 0;
double tripMPG = 0;
double totalTripMPG = 0;
cout << "Enter miles driven (-1 to quit): ";
double miles = 0;
cin >> miles;
while ( miles != -1 )
{       
    cout << "Enter gallons used: ";
    double gallons = 0;
    cin >> gallons;
    tripMPG = miles / gallons;
    cout << "MPG this trip: " << tripMPG << endl;
    tripCounter = tripCounter + 1;
    totalTripMPG = totalTripMPG + tripMPG;
    double avgMPG = static_cast< double >( totalTripMPG ) / tripCounter;
    cout << "Total MPG: " << avgMPG << endl;
    cout << endl;
    cout << "Enter miles driven (-1 to quit): ";
    cin >> miles;
}
 system("pause");
}