习题 3.3 购房从银行贷了一笔款d, 准备每月还款额为p, 月利率为r, 计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。

C程序设计 (第四版) 谭浩强 习题3.3 个人设计

习题 3.3 购房从银行贷了一笔款d, 准备每月还款额为p, 月利率为r, 计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。

代码块

方法1:(利用公式直接计算)

#include 
#include 
#include 
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 
#include 
#include 
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 
#include 
#include 
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);
}

你可能感兴趣的:(C程序设计,(第四版),谭浩强,课后答案)