C ++中的复合兴趣函数

时间:2015-03-03 03:06:00

标签: c++ function

好的,经过这个尴尬的工作时间之后,我想我想出了一些不那么令人讨厌的“真正的”程序员。 请允许我提交我的简陋且可能很糟糕的代码 它完全有效,但现在我的问题是,如果响应为负数,我试图让它回到最初的问题。我得到它说,“嘿!不要输入负数!”,然后它会进入下一个提示。这是负输入的当前输出:

**欢迎使用消费贷款计算器** 你想借多少钱? $ -100 请输入正贷款金额。 你的年度百分率是多少? %

......并积极投入:

**欢迎使用消费贷款计算器** 你想借多少钱? $ 100 你想借多少钱? $ 100 你想借多少钱? $

我希望它回到“你想借多少钱?”如果用户输入为负数,只有输入为正数时才转到下一个问题。我现在做错了什么?

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

void get_input (double &principal, double &APR, double mon_pay);

int main()
{
    double loan; // principal
    double APR; // APR
    double mon_pay; //monthly payment

    cout << "** Welcome to the Consumer Loan Calculator **"<<endl;
    do {
        cout << "How much would you like to borrow? $";
        cin >>loan;
        if (loan < 0)
        cout <<"Please enter a positive loan amount.";
        }
    while (loan > 0);
    cout << "What is your annual percentage rate? %";
    cin >>APR;
    cout << "What is your monthly payment? $";
    cin >> mon_pay;

    APR = APR/100;
    get_input (loan, APR, mon_pay);

}

void get_input (double &principal, double &APR, double mon_pay)
{
    double total, add=0; // Total payment
    int tpay=1; //Total months of payment

    while (principal > 0)
    {
        add = principal * (APR/100);
        principal = ((principal+add) - mon_pay);
        tpay++;
    }

    total = mon_pay + principal;
    cout << "Your debt will be paid off after "<< tpay << " months, with a final payment of just $" <<setprecision(3)<<total<<endl;
    cout <<"Don't get overwhelmed with debt!"<<std::endl;

}

2 个答案:

答案 0 :(得分:2)

这一行肯定是错的:

while (int tp=1, double p <= double m, double sub--m)

答案 1 :(得分:1)

从根本上说,这段代码存在很多问题。我建议开始消除所有全局变量。它们会使您的代码更难以调试,并且通常 一般认为

此外,我会为您的变量选择更多描述性标识符 - 它会使逻辑更少深奥。例如,m是变量名称的不良选择。为什么不选择monthly_pay或更清楚的东西?

此外,while循环使用 boolean 的参数。你所写的内容没有意义,如果现在没有尖叫,我老实说也不确定编译器会做什么。我的猜测是它会在int tp=1始终评估为真的无限循环中。

最后,学习模块化代码是值得的。根据您的代码,我冒昧地说您是代码领域的初学者。模块化你的代码是非常好的做法(并且很好地遵循逻辑)。如果您手动执行此操作,您会遵循哪些合乎逻辑的步骤?

  1. 问候用户
  2. 获取输入
  3. 做一些计算
  4. 输出到用户
  5. 说再见
  6. 如果有更多详细信息,预期输出等,我建议您将其添加到您的问题中,否则可能会被标记为过宽。

    祝你的家庭作业好运。 erip

    修改

    完全忘记了功能。

    像数学一样,函数需要参数。

    f(x)= x ^ 2 + 2x - 1.此函数的参数显然是x。

    在编程中,一些函数也需要参数。

    让我们说你试图模仿this等式...

    您可能会考虑这样做:

    #include <math.h>
    
    double compound_interest(double r, int n, double t, double P)
    {
        return P*pow((1+ r/n), n*t);
    }
    

    所以,如果你想在主

    中调用它
    //insert header stuff, function declarations, etc.
    
    int main()
    {
       double rate = 0.1, // 10% 
              time = 10.0,    // 10 months
              principle = 125.00, // $125.00 
              accumulated; // This is what we want to know
       int payment_period = 12; // 12 months
    
       accumulated = compound_interest(rate, payment_period, time, principle);
    
       cout << "Total accumulated cost is " << accumulated << endl;
    
       return 0;
    }