【问题标题】:Unable to make program calculate correctly无法使程序正确计算
【发布时间】:2011-06-30 11:44:54
【问题描述】:

我正在尝试制作一个进行非常基本计算的程序,但由于某种原因我无法正确编写代码。它应该计算一次旅行的每加仑英里数。然后,您可以多次添加此信息(针对不同的行程),并且每次都应计算每加仑的总里程数(即所有行程的每加仑平均英里数)。这是代码:

#include <iostream>
#include <iomanip>
using namespace std;


int main()
{
int counter = 1;
double milePerRe, milePerTo = 0, x, y;
cout << "Enter the miles used (-1 to quit): ";
cin >> x;
cout << "Enter gallons: ";
cin >> y;
while (x != -1)
{
      milePerRe = x/y;
      milePerTo += milePerRe;
      milePerTo /= counter;
      cout << "MPG this tankful: " << setprecision( 6 ) << fixed << milePerRe;
      cout << "\nTotal MPG: " << setprecision( 6 ) << fixed << milePerTo << endl << endl;
      counter++;
      cout << "Enter the miles used (-1 to quit): ";
      cin >> x;
      if (x != -1)
      {
      cout << "Enter gallons: ";
      cin >> y;
      }
}
system("pause");
return 0;
}

当我运行程序并说我第一次和第二次输入 10 英里和 1 加仑数时,一切正常。然后,如果我再次执行第三次,则计算开始变得不正确。

【问题讨论】:

  • milePerRemilePerTo 声明在哪里?
  • 有多不正确?就像最后一个小数?
  • 为什么milePerTomilePerRe 在每个循环中都累积而不是重置?
  • 你能给出一个示例输入/输出和不正确的输出吗?
  • 按原样,它无法编译...(cf Petar Minchev 评论)

标签: c++


【解决方案1】:

您无法按照自己的方式计算平均值。在您的代码中,您将除以计数器每次迭代,而您应该只在最后除以它。 做你需要的最好的方法是这样的:

...
double totalMiles = 0;
double totalGallons = 0;
...
while (x != -1)
{
     milePerRe = x/y;
     totalMiles += x;
     totalGallons += y;
     milesPerTo = totalMiles / totalGallons;
...

但是,如果您的任务是明确计算行程的平均值(而不是英里/加仑的平均值),则需要引入另一个变量,如下所示:

...
double currentMilesPerTo;
...
while (x != -1)
{
    milePerRe = x/y;
    milePerTo += milePerRe;
    currentMilesPerTo = milePerTo/counter;
    ....
    cout << "\nTotal MPG: " << currentMilesPerTo;
    ...

【讨论】:

    【解决方案2】:

    我猜 x 和 y 的值没有正确更新。每次迭代后尝试使 x 和 y 为零。 希望它可以这样工作

    TNQ

    【讨论】:

      猜你喜欢
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多