计算年利率

(本金,本利,年限)

 

终值

 

1

(10000,20000,10)

0.07

 

 

2

(10000,-20000,20)

弹出,输入负数,请重新输入

没有提示

未改进

3

(a,20000,20)

弹出。输入不合法,请重新输入

没有提示

已改进,弹出,输入不合法!,请重新输入

计算月年收益

(投资额,年利率,年限)

 

终值

 

1

(10000,0.03,30)

            490026.78

 

 

2

(10000,1,30)

弹出,请输入年利率在0到1之间的书的数,请重新输入!

没有提示

为改进请输入年利率在0到1之间的书的数,请重新输入!

 

       

计算等额本息还款

(贷款金额,年利率,归还年限)

 

终值

 

1

(20000,0.05,10)

212.13

 

 

2

(20000,0.05,500)

弹出,您输入的年限太大,请重新输入!

没有提示

未改进

 

     

 

#include<stdio.h>
#include<math.h>
void List();
void fuli1();
void fuli2();
void danli();
void benjin();
void shijian();
void lilv();
void benxi();


void List()//目录表
{

printf("\t \n");
printf("\t 1.复利(一次) \n");
printf("\t 2.复利(多次) \n");
printf("\t 3.单利 \n");
printf("\t 4.资金 \n");
printf("\t 5.时间 \n");
printf("\t 6.利率 \n");
printf("\t 7.本息 \n");
printf("\t \n");

}
void fuli1()//一次复利计算
{

double p,i,sum1,n;//总金额p,利率i,本利和sum1
a:printf("输入存款金额:\n");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto a;
}

b:printf("输入利率:\n");
scanf("%lf",&i);
if(i>1)
{
printf("请输入0~1之间的数字");
goto b;
}
c:printf("输入存储时间(年):\n");
scanf("%lf",&n);
if(n<=1){
printf("请输入>1的贮存时间");
goto c;
}
sum1=p*pow((1+i),n);//复利的计算公式
printf("本利和为:%.2lf\n",sum1);//输出复利计算的结果
}
void fuli2()//多次复利计算
{

double p,i,n,sum2=0;
char c;
printf("多次等额投入方式:\na.等额多次月投\nb.等额多次年投\n请选择:");
scanf("%s",&c);
if(c=='a')
{
d:printf("输入月投金额:");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto d;
}
e:printf("输入年利率:");
scanf("%lf",&i);
if(i<=0&&i>1){
printf("请输入0~1之间的数字");
goto e;
}
f:printf("输入存储时间(年):");
scanf("%lf",&n);
if(n<=1){
printf("请输入>1的贮存时间");
goto f;
}
sum2=p*12*(pow(1+i,n)-1)/i;
printf("本利和为:%.2lf\n",sum2);
}
else
{
g:printf("输入年投金额:");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto g;
}
h:printf("\t*输入年利率:");
scanf("%lf",&i);
if(i<=0&&i>1){
printf("请输入0~1之间的数字");
goto h;
}
i:printf("\t*输入存储时间(年):");
scanf("%lf",&n);
if(n<1){
printf("请输入>1的贮存时间");
goto i;
}
sum2=(p*pow((1+i),n)-1)/i;
printf("本利和为:%.2lf\n",sum2);
}
}

void danli()//单利计算
{

double p,i,sum3,n;
j:printf("输入存款金额:\n");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto j;
}
k:printf("输入年利率:\n");
scanf("%lf",&i);
if(i<=0&&i>1){
printf("请输入0~1之间的数字");
goto k;
}
l:printf("输入存储时间(年):\n");
scanf("%lf",&n);
if(n<=0){
printf("请输入>1的贮存时间");
goto l;
}
sum3=p*(1+i*n);
printf("本利和为:%.2lf\n",sum3);
}
void benjin() //投入资金
{

double sum4,i,p,n;//p为投入本金
printf("\n\t*输入本利和:");
scanf("%lf",&sum4);

n:printf("\t*输入年利率:");
scanf("%lf",&i);
if(i<=0&&i>1){
printf("请输入0~1之间的数字");
goto n;
}
o:printf("\t*请输入存款时间(年):");
scanf("%lf",&n);
if(n<=0){
printf("请输入>1的贮存时间");
goto o;
}
p=sum4/(1+i*n);
printf("\t投入的本金为:%.2lf\n\n",p);
}
void shijian() //投入时间
{
double n;
double sum5,i,p;
p:printf("\n\t*输入存储金额:");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto p;
}
q:printf("\t*输入年利率:");
scanf("%lf",&i);
if(i<=0&&i>1){
printf("请输入0~1之间的数字");
goto q;
}
printf("\t*输入本利和:");
scanf("%lf",&sum5);
n=(log(sum5/p))/(log(1+i));
printf("\t投入的时间为:%.0lf\n\n",n);
}
void lilv() //利率
{
double sum6,i,p,n;
r:printf("\n\t*输入存储金额:");
scanf("%lf",&p);
if(p<=0)
{
printf("请输入>0的数");
goto r;
}
s:printf("\t*输入存储时间(年):");
scanf("%lf",&n);
if(n<=0){
printf("请输入>0的贮存时间");
goto s;
}
printf("\t*输入本利和:");
scanf("%lf",&sum6);
i=pow((sum6/p),(1/n))-1;
printf("\t利率为:%.2lf\n\n",i);
}
void benxi()
{
double sum7,i,p,n;
t:printf("\n\t*输入贷款金额:");
scanf("%lf",&sum7);
if(sum7<=0)
{
printf("请输入>0的数");
goto t;
}
u:printf("\t*输入贷款时间(年):");
scanf("%lf",&n);
if(n<=0){
printf("请输入>0的贮存时间");
goto u;
}
printf("\t*输入年利率:");
scanf("%lf",&i);
p=sum7*i/(12*(1+i)*(pow(1+i,n)-1));
printf("\t每月等额本息还款为:%.2lf\n\n",p);

}
main()
{
int a;
while(1)
{
List();
printf("\t请选择:");
while(scanf("%d",&a)!=1||a<0||a>7)
{
printf("\t输入错误!\n\t重新选择:");
getchar();
}

switch(a){
case 1:
fuli1();
break;
case 2:
fuli2();
break;
case 3:
danli();
break;
case 4:
benjin();
break;
case 5:
shijian();
break;
case 6:
benxi();
break;
case 7:
benxi();
break;
}
}
}

总结:这次单元测试改进了一些bug,但是还有一部分的bug没有想到怎么去修复。