天天看點

複利計算5.0

#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;

     }
 }