用c语言编程设计一个房屋贷款计算器,输入贷...

用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日由中国人寿保险(集团)公司、中国人寿保险股份有限公司和中国人寿资产管理有限