在您的计划中,您将让用户输入相应的百分比改进 火箭速度(高达但不超过光速!)每年。你的程序会 然后询问用户他们愿意等待的最大年数 他们离开前的地球。在此步骤中使用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;
}
答案 0 :(得分:3)
我认为考虑它的好方法是你必须逐行打印表格。所以你的第一个for循环似乎是这样做的。
在每一行中,您必须首先打印年份(从当前年份开始)直到最大年份。多年来第一个for循环迭代是一个不错的选择(即让i
从2018
转到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:如果您希望程序窗口不关闭,这是可选的 立即。您也可以通过放置一个来调试 断点或任何其他解决方案。