#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int principal = 1000;
int years = 1; //counter
double balance = 0.0;
double rate = .02;
do
{
cout << "Year " << years << ":" << endl;
while (rate < .05)
{
balance = principal * pow(1 + rate, years); //display rate with no decimal place
cout << fixed << setprecision(0);
cout << " Rate" << rate * 100 << "%: $";
cout << setprecision(2) << balance << endl; //display balance with two decimal places
rate += .01;
}
years += 1;
} while (years < 6);
system("pause");
return 0;
}
我有这个计划,计算年利率2%,3%和4%,并显示超过5年的金额。我的while循环将在第一年运行并显示它,但不是第2年到第5年。我已经多次编辑程序,但我似乎无法显示结果。任何帮助都将不胜感激。
答案 0 :(得分:1)
do
{
cout << "Year " << years << ":" << endl;
double rate = .02;
^^^^^^^^^^^^^^^^^^
while (rate < .05)
// rest of the code...
每次外循环运行时,您都忘记将rater
重置回.02
。因此,外部循环确实按原样执行,但由于上面的错误,内部循环没有任何作用,因此没有输出。
此外,为了在循环或条件中做出决策,比较double
或float
值并不是一个好主意。由于浮点运算由于其内部表示而在计算机中不完全准确,因此您的条件可能会与您预期的相反。更好地重做代码,只比较整数或布尔类型,并在其他地方执行浮点计算。
这是关于我是如何做到的(包括我不知道的@vsoftco修复!希望你不要因为完整性和正确性而把它包括在这里)。 for
循环使这个更整洁:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(int argc, char **argv)
{
const int principal = 1000;
double balance = 0.0;
for (int years = 1; years < 6; ++years)
{
cout << "Year " << years << ":" << endl;
for (int ratePercent = 2; ratePercent < 5; ++ratePercent)
{
double rate = ratePercent / 100.0;
balance = principal * pow(1 + rate, years);
cout << fixed << setprecision(0);
cout << " Rate" << ratePercent << "%: $";
cout << setprecision(2) << balance << endl;
}
}
cin.get(); // <--- per vsoftco comment!
return 0;
}