#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("\t請選擇:");
while(scanf("%d",&sel)!=1||sel<0||sel>8)//防止輸入的是字元以及輸入的數字不是整數0-8
{
printf("\t輸入錯誤!!!\n\n\t請重新選擇:");
while(getchar() != '\n'); // 處理Enter鍵
}
if(sel==0)
{
printf("\t歡迎下次再使用,謝謝!\n");
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("\t|--------------------------------------|\n");
printf("\t| 功能 |\n");
printf("\t|--------------------------------------|\n");
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| 8.投資計算 |\n");
printf("\t| 0.退出 |\n");
printf("\t| |\n");
printf("\t|--------------------------------------|\n");
}
void A()//一次投入複利計算
{
int n;//時間n
double p,i,sum1;//總金額p,利率i,本利和sum1
printf("\n\t*請輸入存款金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存款金額:");
getchar();
}
printf("\t*請輸入利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入存儲時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲時間(年):");
getchar();
} ;
sum1=p*pow((1+i),n);//複利的計算公式
printf("\t**本利和為:%.2lf\n\n",sum1);//輸出複利計算的結果
}
void B()//多次等額支付複利計算
{
int n;
double p,i,sum2=0;
char choose;
printf("\n\t多次等額投入方式:\n\t1.等額多次月投\n\t2.等額多次年投\n\t*請選擇:");
while(scanf("%d",&choose)!=1||choose<1||choose>2)
{
printf("\t輸入錯誤!!!\n\n\t請重新選擇:");
while(getchar() != '\n');
}
while(getchar() != '\n');
if(choose==1)
{
printf("\n\t*請輸入月投金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入月投金額:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入存儲時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲時間(年):");
getchar();
}
sum2=p*12*(pow(1+i,n)-1)/i;
printf("\t**本利和為:%.2lf\n\n",sum2);
}
else
{
printf("\n\t*請輸入年投金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入年投金額:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入存儲時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲時間(年):");
getchar();
}
sum2=(p*pow((1+i),n)-1)/i;
printf("\t**本利和為:%.2lf\n\n",sum2);
}
}
void C()//單利計算
{
int n;
double p,i,sum3;
printf("\n\t*請輸入存款金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存款金額:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入存儲時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲時間(年):");
getchar();
}
sum3=p*(1+i*n);
printf("\t**本利和為:%.2lf\n\n",sum3);
}
void D() //投入資金
{
int n;
double sum4,i,p;//p為投入本金
printf("\n\t*請輸入本利和:");
while(scanf("%lf",&sum4)!=1||sum4<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入本利和:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入存款時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存款時間(年):");
getchar();
}
p=sum4/(1+i*n);
printf("\t**投入的本金為:%.2lf\n\n",p);
}
void E() //投入時間
{
double n;
double sum5,i,p;
printf("\n\t*請輸入存儲金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲金額:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入本利和:");
while(scanf("%lf",&sum5)!=1||sum5<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入本利和:");
getchar();
}
n=(log(sum5/p))/(log(1+i));
printf("\t**投入的時間為:%.0lf\n\n",n);
}
void F() //利率
{
double sum6,i,p,n;
printf("\n\t*請輸入存儲金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲金額:");
getchar();
}
printf("\t*請輸入存儲時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲時間(年):");
getchar();
}
printf("\t*請輸入本利和:");
while(scanf("%lf",&sum6)!=1||sum6<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入本利和:");
getchar();
}
i=pow((sum6/p),(1/n))-1;
printf("\t**利率為:%.2lf\n\n",i);
}
void G()
{
double sum7,i,p,n;
printf("\n\t*請輸入貸款金額:");
while(scanf("%lf",&sum7)!=1||sum7<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入本利和:");
getchar();
}
printf("\t*請輸入貸款時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入貸款時間(年):");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
p=sum7*i/(12*(1+i)*(pow(1+i,n)-1));
printf("\t**每月等額本息還款為:%.2lf\n\n",p);
}
void H()//計算哪種投資方式的利益最大
{
int n,op=0;
double i,p;
double temp;
double record[4];
printf("\t*請輸入存儲金額:");
while(scanf("%lf",&p)!=1||p<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入存儲金額:");
getchar();
}
printf("\t*請輸入年利率:");
while(scanf("%lf",&i)!=1||i<=0)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入利率:");
getchar();
}
printf("\t*請輸入t投資時間(年):");
while(scanf("%d",&n)!=1||n<=0||n>100)
{
printf("\t輸入錯誤!!!\n\n\t*請重新輸入投資時間(年):");
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("\t推薦:\n");
I(op,record);
}
void I(int op,double record[4])//判斷哪種投資方式的利益最大
{
switch (op)
{
case 0:printf("\t選擇複利投資,本利和為%.2lf\n",record[0]);break;
case 1:printf("\t選擇等額月投資,本利和為%.2lf\n",record[1]);break;
case 2:printf("\t選擇等額年投資,本利和為%.2lf\n",record[2]);break;
case 3:printf("\t選擇等單利投資,本利和為%.2lf\n",record[3]);break;
}
}