C语言贷款计算器的设计题

2024-12-02 08:04:31
推荐回答(3个)
回答1:

下面的程序是结合你的程序修改的,公式计算部分,你自己修改一下,因为我实在看不懂上面你贴出的公式,格式太乱了。
//贷款利率计算器。
#include
#include
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;
}

回答2:

你是不是不知道怎么处理 Y/N 这个东西啊?
最简单的就是在想重新运算的地方前面加上一个 label,然后用goto: label;。

像这段程序:

void p()
{
printf("是否进行新的计算(Y/N)?\n");
scanf("%c",&r);
}

可以改为
void p()
{
retry: printf("是否进行新的计算(Y/N)?\n");//retry可以随便改,只要和下面的goto对应就可以
r=getchar();
getchar();
/*
getchar();用来接受刚才输入的回车,不然键盘缓冲区中还有\0x10这个字符,下次执行scanf之类的键盘输入时会和你的设想不符。
但是此句只能接受一个字符,如果你在上一步乱输,比如Yasdgjxasdf这样,第一个字符是Y,会返回来retry重新运行,
但后面的asdgjxasdf还是在缓冲区内,当再次执行到r=getchar();时会直接把asdgjxasdf中的第一个字符a赋值给r,
r很显然不满足下面的if判断,程序就会退出。
推荐用fflush(stdin);它可以清空整个缓冲区
*/
if(r=='Y'||r=='y')
goto retry;
else
return;
}

或者

void p()
{
while(1)
{
printf("是否进行新的计算(Y/N)?\n");
scanf("%c",&r);
getchar();
if(r=='N'||r=='n')
break;
}
}

回答3:

没有仔细看。。如果你的子函数全部已经完成了。
在主函数里面写一个大的do{...}while()循环。。判断你是否需要重新计息。。然后按照你需要的逻辑吧你的子函数一个一个的调用就行了。。