复利计算单元测试
2016-03-30 22:12
232 查看
计算年利率 | (本金,本利,年限) | 终值 | ||
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<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没有想到怎么去修复。
相关文章推荐
- 判断现有的类对象是哪一种类的方法
- mac PHP配置
- hdu2844 Coins(多重背包)
- 笔记 - Android - 7.资产管理AssetManager
- CodeForces 618B (找规律)
- 蟠桃记 -2013
- Sereja and Suffixes
- UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 0: invalid start byte
- Python基本语法
- 实验4 颜色、字符串资源的使用
- 20135316Linux内核学习笔记第六周
- 【转】关于分布式事务、两阶段提交协议、三阶提交协议
- 2016去哪儿编程题:表达式合法判断
- 包
- Chrome设置新标签页来打开链接
- 337. House Robber III
- 设计模式之享元模式
- git版本控制工具的学习
- linux配置java环境变量
- Handler 接收Parcelable ArrayList时返回空的错误