用c语言编程设计一个房屋贷款计算器,输入贷...
黄盛毅
来自:
网页
2021-12-23 19:07
声明:本网站依照法律规定提供财经资讯,未授权或允许任何组织与个人发布交易广告。对任何广告信息请谨慎交易,谨防诈骗。举报邮箱:xxxxxxxxx@qq.com
2021-12-23 19:31最佳答案
* main.c
*
* Created on: 2011-6-8
* Author: icelights
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define APR1 0.0747 /*<1年(含1年)年利率*/
#define APR2 0.0756 /*1-3年(含3年)年利率*/
#define APR3 0.0774 /*3-5年(含5年)年利率*/
#define APR4 0.0783 /*5年以上年利率*/
#define A_TO_M 1/12 /*月利率 = 年利率 / 12*/
#define RTP 12 /*Reimbursement total periods还款总期数 =年限*12*/
#define LENGTH 80
struct LoanInfo
{
/*姓名*/
char name[LENGTH];
/*贷款总额*/
double LoanAmount;
/*贷款年限*/
double LoanYear;
/*月付*/
double MonthlyPayment;
/*总利息*/
double TotalInterest;
/*还款总额*/
double ReimbursementAmount;
/*年利率*/
double apr;
struct LoanInfo * next;
};
void CalcShow(struct LoanInfo * cur, struct LoanInfo * hd,
struct LoanInfo * prv);
int main(void)
{
int temp;
struct LoanInfo * head = NULL;
struct LoanInfo * prev, * current;
current = (struct LoanInfo *)malloc(sizeof(struct LoanInfo));
if (NULL == head)
{
head = current;
}
else
{
prev->next = current;
}/*End of if (NULL == head)*/
puts("请输入姓名");
gets(current->name);
fflush(stdin);
puts("请输入贷款数额(单位:万元)");
scanf("%lf", ¤t->LoanAmount);
fflush(stdin);
puts("请输入贷款年限");
scanf("%lf", ¤t->LoanYear);
fflush(stdin);
printf("姓名:%s,贷款年限:%lf, 贷款数额%lf",
current->name, current->LoanYear, current->LoanAmount);
prev = current;
puts("请确认Y/N");
temp = getchar();
switch(toupper(temp))
{
case 'Y' : CalcShow(current, head, prev);
break;
case 'N' : free(current);
main();
break;
default : puts("输入错误");
free(current);
break;
}
return 0;
}
void CalcShow(struct LoanInfo * cur, struct LoanInfo * hd,
struct LoanInfo * prv)
{
char lcv_temp;
if (cur->LoanYear <= 1)
cur->apr = APR1;
else if (cur->LoanYear <= 3)
cur->apr = APR2;
else if (cur->LoanYear <= 5)
cur->apr = APR3;
else
cur->apr = APR4;
/*End of if (year <= 1)*/
cur->LoanAmount = 10000 * cur->LoanAmount;
cur->ReimbursementAmount = cur->LoanAmount * pow((1 + cur->apr), cur->LoanYear);
cur->MonthlyPayment = cur->ReimbursementAmount / (cur->LoanYear * RTP);
cur->TotalInterest = cur->ReimbursementAmount - cur->LoanAmount;
printf("姓名:%s 贷款年限:%.0lf\n"
"贷款数额:%.2lf 每月还款额:%.2lf\n"
"利息合计:%.2lf 还款总额:%.2lf\n",
cur->name, cur->LoanYear, cur->LoanAmount,
cur->MonthlyPayment, cur->TotalInterest, cur->ReimbursementAmount);
puts("是否继续计算Y/N");
lcv_temp = getchar();
switch(toupper(lcv_temp))
{
case 'Y' : free(cur);
main();
break;
case 'N' : free(cur);
exit(0);
default : puts("输入错误");
free(cur);
main();
break;
}
system("pause");
}
其他回答(共7条)
-
2021-12-23 19:28 黄盛权 客户经理
1. 第一个scanf里面&a&b&c之间要有逗号,应该是&a,&b,&c
2. 第二个scanf("%c\n,&f);在\n后面少了后引号,应该是scanf("%c\n",&f);
3. (int)f-(int)e==0的用法不对,应该是f=='e',才表示当f输入的是e时
4. scanf里面最好不要有\n,不然容易输入错误
然后你功能好像还没做完吧,最后输出的是什么也不知道啊
另外建议最前面三个值输入的时候最好分开写,不要在一起,然后每输入一个值输出显示一次,保证正确 -
2021-12-23 19:25 米塞林 客户经理
#include<iostream>
#include<iomanip>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
char a='Y',b='N';
char name[20];
double n;
double j,k,l;
int m;
while (a=='Y')
{
b='N';
while (b=='N')
{
for(int i=0;i<=79;i++)
cout<<'^';
cout<<endl;
cout<<"输入用户姓名:";
cin>>name;
cout<<"输入贷款金额(万元):";
cin>>n;
cout<<"输入贷款年限:";
cin>>m;
cout<<"用户姓名:"<<name<<"贷款金额(万元):"<<n<<"贷款年限:"<<m<<endl;
for(int p=0;p<=79;p++)
cout<<'^';
cout<<"正确?(Y/N)";
cin>>b;
if(b=='Y') break;
}
if(m<=1)
{
n=n*10000;
j=n*0.0747/12;
k=n*0.0747;
l=n+k;
}
else if(m>1&&m<=3)
{
n=n*10000;
j=n*0.0756/12;
k=n*0.0756;
l=n+k;
}
else if(m>3&&m<=5)
{
n=n*10000;
j=n*0.0774/12;
k=n*0.0774;
l=n+k;
}
else
{
n=n*10000;
j=n*0.0783/12;
k=n*0.0783;
l=n+k;
}
cout<<"姓名:"<<name<<" "<<"贷款年限:"<<m<<endl;
cout<<"贷款数额(元):"<<setw(10)<<n<<"每月还款额(元):"<<setw(10)<<j<<endl;
cout<<"利息合计(元):"<<setw(10)<<k<<"还款总额(元):"<<setw(10)<<l<<endl;
cout<<"是否进行新的计算(Y/N)?";
cin>>a;
if(b=='N') break;
else system("cls");
}
return 0;
} -
2021-12-23 19:22 窦连波 客户经理
log10(a)/log10(b)=loga(b)
直接用c语言的库函数输出的时候用%.2f就可以了吧 -
2021-12-23 19:19 龚子飞 客户经理
房屋还款理财计算器:
-
2021-12-23 19:16 齐智善 客户经理
下面的程序是结合你的程序修改的,公式计算部分,你自己修改一下,因为我实在看不懂上面你贴出的公式,格式太乱了。
//贷款利率计算器。
#include<stdio.h>
#include<math.h>
void inputData(char c[],float *a,int *y) //姓名,贷款数额和年限
{
char ch;
while(1)
{
printf("输入用户姓名:\n");
scanf("%s",c);
getchar();
printf("输入贷款数额(万元):\n");
scanf("%f",a);
getchar();
printf("输入贷款年限:\n");
scanf("%d",y);
getchar();
printf("姓名:%s,贷款年限为%d年,贷款数额为%f万元,正确?(Y/N)\n",c,*y,*a);
scanf("%c",&ch);
getchar();
if(ch == 'Y' || ch =='y')
{
break;
}
}
}
float getliLv(int y) //获得年利率。
{
float x=0.0;
switch(y)
{
case 0:
case 1:
{
x=0.0747;
break;
}
case 2:
case 3:
{
x=0.0756;
break;
}
case 4:
case 5:
{
x=0.0774;
break;
}
default:
{
x=0.0783;
}
}
return x;
}
int main()
{
char c[30]; //姓名
int year; //年限
float a; //贷款总额。
float lilv; //年利率
double monthR; //每月还款额
double lixisum; //利息合计
double sumE; //还款总额。
double k,l;
char ch;
printf("*********************贷款利率计算系统*****************\n");
while(1)
{
inputData(c,&a,&year);
lilv = getliLv(year);
//注意,下面的计算可能存在问题,因为我实在看不懂你的计算公式,你根据公式改变一下吧。
k=lilv/12*pow((1+lilv/12),(year*12));
l=pow((1+lilv/12),(year*12-1));
monthR=k/l*a*10000;
lixisum=a*lilv*year*10000;
sumE=monthR*year*12; //每月还款额*还款期数
printf("姓名:%s 贷款年限(年):%d\n贷款数额(元):%f 每月还款数额(元):%f\n利息合计(元):%f 还款总额(元):%f\n",c,year,a*10000,monthR,lixisum,sumE);
printf("是否进行新的计算(Y/N)?\n");
scanf("%c",&ch);
getchar();
if(ch != 'Y' && ch != 'y')
{
break;
}
}
return 0;
} -
2021-12-23 19:13 龙小语 客户经理
贷款月数和还款次数相等?我不是很清楚那个还款,我的算法是每一个月还款剩余的本金在计算每月本金的,也就是说每月本金不相同,你可以把问题描述的更加详细点,我在给修改修改
# include<iostream>
using namespace std;
int main()
{
int a,n,i; //a表示贷款金额 n代表借贷月数
float k,s,p,q,m; //k代表年利率 s代表每月还款额 p代表每月本金 q代表每月利息 m表示上月本金
cout<<"请输入贷款金额"<<"a=";
cin>>a;
cout<<"请输入借贷月数"<<"n=";
cin>>n;
cout<<"请输入年利率"<<"k=";
cin>>k;
for(i=1;i<=n;i++)
{
p=a/n;
m=a-(p*i);
q=m*(k/12);
s=p+q;
cout<<"第"<<i<<"个月的还款金额为"<<"s="<<s<<endl;
a-=s;
}
return 0;
}
我运行试了,你看看可以不可以,不可以的话我在给改改
-
2021-12-23 19:10 边友康 客户经理
lz ,这个问题其实是个数学公式,编程求解的话,也就是起到一个计算器的作用(如果不具备公式的话,那就只能通过枚举来一个个尝试了,那就失去针对性了)
刚我算了一下,思路:
1. 年利率为i ,则第一年的利息是 s * i ,第二年是 (s - 12x) * i ,其中x是每月还款额,第三年 (s - 24x) * i ... ... ,第n年的利息是 [ s - 12(n-1)x ] * i ,该等差数列之和为 [s - 6(n-1)x ] * n * i ,这就是n年所产生的总利息了。
2.通过等式 :
(总利息 + 本金)/ 年数 / 12 = 每月还款额
{ [s - 6(n-1)x ] * n * i + s } / 12n = x
解得x = ( nis + s ) / [ 12n + 6(n-1) ni ]
假设房贷 300000 按揭10年 ,利率5% ,每月还3061 ,差不多
没有满意答案?看看这些问答能否帮助您?
相关百科精选
生命人寿保... 富德生命人寿保险股份有限公司...
中国人寿养老保险股份有限公司 中国人寿养老保险股份有限公司是一家为客户提供企业年金、职业年金、养老保障管理产品等服务的全国性专业养老保险公司,于2007年1月15日由中国人寿保险(集团)公司、中国人寿保险股份有限公司和中国人寿资产管理有限
已有 86485 位专家入驻汇财吧问答
已经帮助 1173961 人解决了问题
