《C程序设计教程(第四版)——谭浩强》
习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。
设d=30000元,p=6000元,r=1%。对求得的月份取小数点后一位,对第二位按四舍五入处理
提示:设环球的月数为m,则m=[logp-log(p-d*r)]/log(1+r)=log(p/(p-d*r))/log(1+r),log(p)表示以10为底p的对数
代码:
//《C程序设计教程(第四版)——谭浩强》
//习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。
//设d=30000元,p=6000元,r=1%。对求得的月份取小数点后一位,对第二位按四舍五入处理
//提示:设环球的月数为m,则m=[logp-log(p-d*r)]/log(1+r)=log(p/(p-d*r))/log(1+r),log(p)表示以10为底p的对数
#include <stdio.h>
#include <math.h>
int main()
{
float d;//贷款数
float p;//每月还款数
float r;//月利率
float m;//【计算】:还钱的月数
printf("请输入贷款总数:\n");
scanf("%f",&d);
printf("请输入每月还款额:\n");
scanf("%f",&p);
printf("请输入月利率:\n");
scanf("%f",&r);
// 检查输入的合理性(月份不能为负数)
if (p <= d * r)
{
printf("每月还款额必须大于贷款利息!\n");
return 1; // 返回错误代码
}
m=log10(p/(p-d*r))/log10(1+r);
printf("还需要%.1f才可以还清\n",round(m*10)/10);//四舍五入的实现
return 0;
}
运行结果:
代码运行过程中遇到的问题:
(1)在C语言中,要计算以10为底的对数,需要使用log10()
函数,而不是log()
函数。
log10()
函数是C标准库中的一个函数,用于计算以10为底的对数。这个函数的原型是
double log10(double x)
,它返回参数x
以10为底的对数值。在使用这个函数之前,需要包含
math.h
头文件,因为log10()
函数定义在这个头文件中。
注释:log()函数是用于计算以e为底的对数
怎么使用log10函数?
下面是一个简单的示例代码,展示了如何使用log10()
函数来计算一个数的以10为底的对数:
#include <stdio.h> #include <math.h> int main() { double num = 100.0; // 可以替换为任何正数 double logValue = log10(num); printf("The log10 of %f is %f\n", num, logValue); return 0; }
(2)怎么实现四舍五入?
在C语言中,round
函数用于将一个浮点数四舍五入到最近的整数。这在处理需要按照特定小数位(如一位小数)的结果时非常有用。