如何使用c ++计算表中每年的更新平均速度?

时间:2018-02-20 03:48:12

标签: c++

  

在您的计划中,您将让用户输入相应的百分比改进   火箭速度(高达但不超过光速!)每年。你的程序会   然后询问用户他们愿意等待的最大年数   他们离开前的地球。在此步骤中使用while循环来实现简单错误   通过反复询问用户进行检查,直到他们给出有效输入。百分比   必须介于0到100之间,等待的年数必须是积极的   整数。

     

接下来,您的程序将使用for循环生成一个表。那张桌子就有了   四列,一行用于立即离开,每行一行   用户愿意等待的一年。第一列将包含出发年份。   第二列包含火箭能够实现的火箭速度   那年。每年新的火箭速度用这个等式计算:   速度=速度+(光速 - 速度)*(改进/ 100)

我能够在我想要制作的表格中正确地打印出来,但是我很难弄清楚如何使用循环来找到每年使用循环的火箭速度。我很确定我应该使用嵌套的for循环,但是使用我现在拥有的代码,它会陷入无限循环。任何正确方向的指导都将受到赞赏!

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main()
{

int percentIncrease = 0;
int maxYears = -1;
float speedLight = 299792;

while((percentIncrease <= 0) || (percentIncrease >= 100))
{
    cout << "What percentage do rocket speeds increase by each year?" << endl;
    cin >> percentIncrease;
}

while(maxYears < 0)
{
    cout << "What is the maximum number of years you are willing to wait on 
earth before you leave?" << endl;
    cin >> maxYears;
}

cout << "Start year|\tAvg Speed|\tEarth ETA|\tYour ETA" << endl;

for(int i = 2018; i  <= (maxYears + 2018); ++i)
{
    cout << i << endl;
    for(int j = 10000; i <= (maxYears + 2018); j = j + (speedLight - j) * 
(percentIncrease/100))
    {
        cout << "\t" << j << endl;
    }

}

return 0;
}

1 个答案:

答案 0 :(得分:3)

我认为考虑它的好方法是你必须逐行打印表格。所以你的第一个for循环似乎是这样做的。

在每一行中,您必须首先打印年份(从当前年份开始)直到最大年份。多年来第一个for循环迭代是一个不错的选择(即让i2018转到maxYears + 2018)。其次,在通过提供的等式计算改进后,您必须打印每年的速度。 (我假设在问题描述中给出了第一个速度是10000?如果不是,起始值是多少?)因为你只打印一个数字,所以你不需要第二个for循环。只需计算新速度并打印即可。至于第三和第四列,我不确定究竟是什么问题,所以现在它在代码中是空白的。

我根据我的评论修改了代码,还有一些与我对问题描述的理解,编码最佳实践和风格选择相关的其他修改(请参阅下面的代码以获取有关原因的更多信息)。

#include <iostream>
//--1
int main()
{
  //--2
  const float speedLight = 299792;
  const int startingYear = 2018;
  //--3
  float percentIncrease = 0;
  while ((percentIncrease <= 0) || (percentIncrease >= 100))
  {
    std::cout << "What percentage do rocket speeds increase by each year?" << std::endl;
    std::cin >> percentIncrease;
  }
  //--4
  int maxYears = -1;
  while (maxYears < 1)
  {
    std::cout << "What is the maximum number of years you are willing to wait on earth before you leave? " << std::endl;
    std::cin >> maxYears;
  }

  std::cout << "Year|\tAvg Speed|\tEarth ETA|\tYour ETA" << std::endl;
  //--5
  float currentSpeed = 10000;
  for (int year = startingYear; year <= (maxYears + startingYear); ++year)
  {
    //--6
    std::cout << year << "\t" << currentSpeed << std::endl;
    currentSpeed = currentSpeed + (speedLight - currentSpeed) * (percentIncrease / 100);
  }
  //--7
  system("pause");
  return 0;
}
  • - 1:我删除了未使用的库。 (您可能将它们用于其他部分 该程序,如果你想打印浮点数)。我也 删除了using namespace std;,因为这是一种不好的做法。您 可以谷歌吧。

  • - 2:这些数字似乎没有变化,所以制作它们会更好 常数。

  • - 3:也许percentIncrease不一定是整数。

  • - 4:问题描述表明年数为a 正整数,因此它不能是0

  • - 5:currentSpeed(以前的j)应该在。之外定义 循环,因为它将在循环内更新。另外,它是一个浮动 因为#3。

  • - 6:速度应在年后打印。

  • - 7:如果您希望程序窗口不关闭,这是可选的 立即。您也可以通过放置一个来调试 断点或任何其他解决方案。