Do-while循环仅针对每月付款迭代一次

时间:2016-11-01 22:05:45

标签: c loops do-while

我正在尝试创建一个C程序,用于计算每月付款并打印固定利率贷款的付款计划表。我的问题是循环只迭代一次,但我无法弄清楚原因。以下是输出的外观: enter image description here

#include <stdio.h>
#include <math.h>
double calculatePayments(double loan, double rate, int payment);
int main(){
   double loan,rate,monthly,principal,interest,balance;
   int payment, counter;
   counter = 0;
   balance = 0.0;
   printf("Enter amount of loan: ");
   scanf("%lf", &loan);
   printf("Enter interest rate per year:%% ");
   scanf("%lf", &rate);
   printf("Enter number of payments: ");
   scanf("%d", &payment);

   monthly = calculatePayments(loan, rate, payment);

   printf("Monthly payment should be %.2f\n", monthly); 
   printf("—————AMORTIZATION SCHEDULE—————\n ");
   printf("N\tPayment\tPrincipal\tInterest\tBalance\n ");

do{
   rate = rate/12/100;
   interest = loan * rate;
   principal = monthly - interest; 
   balance = loan - principal;
   counter++;
   printf("%d\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n", counter, monthly, principal, interest, balance); 
 }while(balance < 0);

return 0;
}
double calculatePayments(double loan, double rate, int payment) {
   rate = rate/12/100;
   double mul = pow(1+rate, payment);
   return (loan * mul * rate) / (mul - 1);
}

3 个答案:

答案 0 :(得分:3)

更改do ... while循环

// e.g. 7.5/12/100 = 0.00625
rate = rate/12/100;
do{
   // e.g. 500*0.00625=3.125
   interest = loan * rate;
   // e.g. 101.88-3.125=98.76
   principal = monthly - interest; 
   // e.g. 500-98.76=401.24
   balance = loan - principal;
   // update loan
   loan = balance;

   counter++;
   printf("%d\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n", counter, monthly, principal, interest, balance); 
 }while(balance > principal);

答案 1 :(得分:1)

余额永远不会是< 0。这就是你循环只运行一次的原因。如果您完成了while循环而不是do while,则根本不会运行。

balance < 0更改为balance > 0

答案 2 :(得分:1)

只有当余额小于零时才检查循环。

但是在第一次迭代时,余额的值将是401 $(不是<0) 如此破碎。

你应该检查余额&gt;

时为0