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。
有两种获得平均值的方法:
- 最简单的:对两个数量进行计数,在结尾处进行划分
- 更复杂:平均每次迭代(需要一些数学)
使用第二种和更复杂的方法通常几乎没有好处,所以我建议您跟上第一个。
只是为了娱乐,让我们第二种方法...但是让我们首先了解我们在做什么。
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");
}
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++类声明时,相同的例程,不同的成员变量类型
- c++中的线程池
- 线程之间的布尔停止信号
- 如何在类中同时运行某些内容(在单线程平台中)?