习题 3.3 购房从银行贷了一笔款d, 准备每月还款额为p, 月利率为r, 计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。
计算 处理 多少 准备 习题 银行 月份 3.3
2023-09-14 09:06:56 时间
C程序设计 (第四版) 谭浩强 习题3.3 个人设计
习题 3.3 购房从银行贷了一笔款d, 准备每月还款额为p, 月利率为r, 计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。
代码块
方法1:(利用公式直接计算)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int d = 300000, p = 6000; //定义贷款总额,每月还贷数
double r = 0.01, m, x, y; //定义利率,月份
x = p / (p - d * r);
y = 1 + r;
m = log10(x) / log10(y); //计算公式
printf("m=%.2lf\n", m);
system("pause");
return 0;
}
方法2:(利用函数的模块化设计)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double mon(int debt, int pay, double rat); //定义还款月份函数
int main()
{
int d = 300000, p = 6000; //定义还款总额和每月还款数
double r = 0.01;
printf("m=%.2lf\n", mon(d, p, r));
system("pause");
return 0;
}
//定义还款月份函数
double mon(int debt, int pay, double rat)
{
return log10(pay / (pay - debt * rat)) / log10(1 + rat);
}
方法3:(动态分配内存)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void input(double *d, double *p, double *r);
void month(double d, double p, double r);
int main()
{
double *debt=(double*)malloc(sizeof(double));
double *pay=(double*)malloc(sizeof(double));
double *rate=(double*)malloc(sizeof(double));
input(debt, pay, rate);
month(*debt, *pay, *rate);
system("pause");
return 0;
}
void input(double *d, double *p, double *r)
{
printf("Enter debt, pay, rate: ");
scanf("%lf %lf %lf", d, p, r);
}
void month(double d, double p, double r)
{
double m;
m=(log(p)-log(p-d*r))/log(1+r);
printf("month=%.1lf\n", m);
}