#include<stdio.h> #include<math.h> void List(); void A(); void B(); void C(); void D(); void E(); void F(); void G(); void H(); void I(int op,double record[4]); main() { int sel; while(1) { List(); printf(" 请选择:"); while(scanf("%d",&sel)!=1||sel<0||sel>8)//防止输入的是字符以及输入的数字不是整数0-8 { printf(" 输入错误!!! 请重新选择:"); while(getchar() != ' '); // 处理回车键 } if(sel==0) { printf(" 欢迎下次再使用,谢谢! "); break; } switch(sel){//选择1~8的功能 case 1: A(); break; case 2: B(); break; case 3: C(); break; case 4: D(); break; case 5: E(); break; case 6: F(); break; case 7: G(); break; case 8: H(); break; } } } void List()//目录表 { printf(" |--------------------------------------| "); printf(" | 功能 | "); printf(" |--------------------------------------| "); printf(" | | "); printf(" | 1.复利(一次支付) | "); printf(" | 2.复利(多次等额支付) | "); printf(" | 3.单利 | "); printf(" | 4.投入资金 | "); printf(" | 5.投入时间 | "); printf(" | 6.利率 | "); printf(" | 7.每月等额本息还款 | "); printf(" | 8.投资计算 | "); printf(" | 0.退出 | "); printf(" | | "); printf(" |--------------------------------------| "); } void A()//一次投入复利计算 { int n;//时间n double p,i,sum1;//总金额p,利率i,本利和sum1 printf(" *请输入存款金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入存款金额:"); getchar(); } printf(" *请输入利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入存储时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存储时间(年):"); getchar(); } ; sum1=p*pow((1+i),n);//复利的计算公式 printf(" **本利和为:%.2lf ",sum1);//输出复利计算的结果 } void B()//多次等额支付复利计算 { int n; double p,i,sum2=0; char choose; printf(" 多次等额投入方式: 1.等额多次月投 2.等额多次年投 *请选择:"); while(scanf("%d",&choose)!=1||choose<1||choose>2) { printf(" 输入错误!!! 请重新选择:"); while(getchar() != ' '); } while(getchar() != ' '); if(choose==1) { printf(" *请输入月投金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入月投金额:"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入存储时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存储时间(年):"); getchar(); } sum2=p*12*(pow(1+i,n)-1)/i; printf(" **本利和为:%.2lf ",sum2); } else { printf(" *请输入年投金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入年投金额:"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入存储时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存储时间(年):"); getchar(); } sum2=(p*pow((1+i),n)-1)/i; printf(" **本利和为:%.2lf ",sum2); } } void C()//单利计算 { int n; double p,i,sum3; printf(" *请输入存款金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入存款金额:"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入存储时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存储时间(年):"); getchar(); } sum3=p*(1+i*n); printf(" **本利和为:%.2lf ",sum3); } void D() //投入资金 { int n; double sum4,i,p;//p为投入本金 printf(" *请输入本利和:"); while(scanf("%lf",&sum4)!=1||sum4<=0) { printf(" 输入错误!!! *请重新输入本利和:"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入存款时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存款时间(年):"); getchar(); } p=sum4/(1+i*n); printf(" **投入的本金为:%.2lf ",p); } void E() //投入时间 { double n; double sum5,i,p; printf(" *请输入存储金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入存储金额:"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入本利和:"); while(scanf("%lf",&sum5)!=1||sum5<=0) { printf(" 输入错误!!! *请重新输入本利和:"); getchar(); } n=(log(sum5/p))/(log(1+i)); printf(" **投入的时间为:%.0lf ",n); } void F() //利率 { double sum6,i,p,n; printf(" *请输入存储金额:"); while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入存储金额:"); getchar(); } printf(" *请输入存储时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入存储时间(年):"); getchar(); } printf(" *请输入本利和:"); while(scanf("%lf",&sum6)!=1||sum6<=0) { printf(" 输入错误!!! *请重新输入本利和:"); getchar(); } i=pow((sum6/p),(1/n))-1; printf(" **利率为:%.2lf ",i); } void G() { double sum7,i,p,n; printf(" *请输入贷款金额:"); while(scanf("%lf",&sum7)!=1||sum7<=0) { printf(" 输入错误!!! *请重新输入本利和:"); getchar(); } printf(" *请输入贷款时间(年):"); while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入贷款时间(年):"); getchar(); } printf(" *请输入年利率:"); while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } p=sum7*i/(12*(1+i)*(pow(1+i,n)-1)); printf(" **每月等额本息还款为:%.2lf ",p); } void H()//计算哪种投资方式的利益最大
{
int n,op=0;
double i,p;
double temp;
double record[4];
printf(" *请输入存储金额:");
while(scanf("%lf",&p)!=1||p<=0) { printf(" 输入错误!!! *请重新输入存储金额:"); getchar(); } printf(" *请输入年利率:");
while(scanf("%lf",&i)!=1||i<=0) { printf(" 输入错误!!! *请重新输入利率:"); getchar(); } printf(" *请输入t投资时间(年):");
while(scanf("%d",&n)!=1||n<=0||n>100) { printf(" 输入错误!!! *请重新输入投资时间(年):"); getchar(); } record[0]=p*pow((1+i),n);//复利
I(0,record);
record[1]=p*12*(pow(1+i,n)-1)/i;//等额月投
I(1,record);
record[2]=(p*pow((1+i),n)-1)/i;//等额年投
I(2,record);
record[3]=p*(1+i*n);//单利
I(3,record);
temp=record[0];
for(int j=1;j<4;j++)
{ if(record[j]>temp)
{ temp=record[j];
op=j; }
} printf(" 推荐: "); I(op,record); }
void I(int op,double record[4])//判断哪种投资方式的利益最大
{ switch (op)
{ case 0:printf(" 选择复利投资,本利和为%.2lf ",record[0]);break;
case 1:printf(" 选择等额月投资,本利和为%.2lf ",record[1]);break;
case 2:printf(" 选择等额年投资,本利和为%.2lf ",record[2]);break;
case 3:printf(" 选择等单利投资,本利和为%.2lf ",record[3]);break;
} }