zoukankan      html  css  js  c++  java
  • 复利(结对2.0)

    # include <stdio.h>
    # include <stdlib.h>
    # include <conio.h>              // getch() 函数头文件
    # include <string.h> 
    #include <math.h> 
    
    char list[20][100] = {
        {"|----------------------------------------------------|"},
        {"|                    目录                            |"},
        {"|----------------------------------------------------|"},
        {"|                >> 一. 单利                         |"},
        {"|                   二. 复利                         |"},
        {"|                   三. 投入资金                     |"},
        {"|                   四. 投入时间                     |"},
        {"|                   五. 利润计算                     |"},
        {"|                   六. 利率                         |"},
        {"|                   七. 每月等额本息还款             |"},
        {"|                   八. 投资计算                     |"},
        {"|                   九. 退出                         |"},
        {"|----------------------------------------------------|"}
    };
    
    char list2[3][100] = {
        {"|                      > 1. 一次支付                 |"},
        {"|                        2. 多次等额支付             |"},
        {"|                        3. 后退                     |"}
    }; 
     
     void A(); 
     void B(); 
     void C(); 
     void D(); 
     void E();
     void F();
     void G();
     void H();
     void I(int op,double record[4]);
     void display(int x)                           // 输出列表 函数  
    {
        int i, j;                            
        for(i = 0; i < 13; i++)            // 循环打印列表
        {
            if(x == 2 && i == 5)            // x = 2时, 打开目录的子菜单
            {
                for(j = 0; j < 3; j++)
                {
                    printf("      	%s", list2[j]);
                    putchar('
    ');
                }
            }
            printf("      	%s", list[i]);
            putchar('
    ');
        }
    }
    
    int move(int x, int row, int levl)                    // x为上下移动的变量, row确定光标在字符串里的位置, levl表示当前的表格为第几个表
    {
        if(levl == 1 && row+x >= 3 && row+x <= 13)            // 当row 在1到3之间时,指标可以上下移动
        {
            system("cls");                                // 清屏
            list[row][17] = list[row][18] = ' ';            // 将当前指标所在的位置变为空格
            row = row + x;                                // row 指向新的位置
            list[row][17] = list[row][18] = '>';            // 让指标出现在新的位置上
            display(0);                                    // 再次打印列表
        }    
       else if(3 == levl && row+x >= 0 && row+x <= 2)
        {
            system("cls");
            list2[row][23] = ' ';
            row = row + x;
            list2[row][23] = '>';
            display(2);
        }
        return row;                                                // 返回当前row 所在的位置
    }
    
     main() 
     { 
        char x;                                         //  获取用户的输入
        int row = 3;                                 //   记录当前所选择的功能
        int row2 = 0;                        
    
        LAB1:
        system("cls");
        display(0);              //   先打印一次列表
        while(1)            //   无限接收用户的输入
        {
            printf("		w为上,s为下, 回车选择
    ");
            x = getch();    // 获取用户的输入
            switch(x)
            {
            case 'w':
                row = move(-1, row, 1);break;         // 输入为w , 指标向上移动  
            case 's':
                row = move(1, row, 1);break;            // 输入为s, 指标向下移动
            case '
    ':
                if(row == 3)                                
                {
                    C();                       //投入资金
                }
                    else if(row == 4)                    
                {                                        
                    system("cls");        // 清屏
                    display(2);                // 输出功能一下的2级表
                    while(1)            
                    {
                        printf("		w为上,s为下, 回车选择
    ");
                        x = getch();                             // 获取用户的输入
                        switch(x)
                        {
                        case 'w':
                            row2 = move(-1, row2, 3);break;
                        case 's':
                            row2 = move(1, row2, 3);break;
                        case '
    ':
                            if(row2 == 2)                
                            {    
                                goto LAB1;                    // goto 至 LAB1
                            }
                            else if(row2 == 0)
                            {
                                A();    //      复利计算
                            }
                            else if(row2 == 1)
                            {
                                 B();    //     单利计算
                            }
                        }
                    }
                }
                else if(row == 5)                    
                {                        
                    D();                       // 投入时间
                }
                else if(row == 6)
                {
                    E();                      // 利润计算
                }
                else if(row == 7)
                {
                    F();        // 利率
                }
                else if(row == 8)
                {
                    G();        // 每月等额本息还款 
                }
                else if(row == 9)
                {
                    H();        // 投资计算
                }
                else if(row == 10)                        // 退出选项
                {    
                    printf("
    
    	   谢谢使用.
    ");
                    return 0;
                }
                break;    // 输入回车键选择功能
            }
        }
     } 
       
     void A()//一次投入复利计算 
     { 
         int n;//时间n 
         char c;
         double p,i,sum1;//总金额p,利率i,本利和sum1 
    
    LABA:    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);//输出复利计算的结果 
         printf("是否要重新输入(y/n): ");
         getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABA;
            else
            {
                system("cls");
                display(2);
            }
        }
    
    void B()//多次等额支付复利计算
     { 
         int n;
         double p,i,sum2=0;
         char choose,c;
    LABB:     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);
         }
          printf("是否要重新输入(y/n): ");
         getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABB;
            else
            {
                system("cls");
                display(2);
            }
     } 
    
     void C()//单利计算 
     { 
         int n; 
         char c;
         double p,i,sum3; 
    LABC:    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); 
         printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABC;
            else
            {
                system("cls");
                display(1);
            }
     } 
    
     void D() //投入资金
     { 
         int n; 
         char c;
         double sum4,i,p;//p为投入本金 
    LABD:    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); 
              printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABD;
            else
            {
                system("cls");
                display(1);
            }
     }
    
     void E()   //投入时间
     {
         double n;
         char c;
         double sum5,i,p;
    LABE:    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);
              printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABE;
            else
            {
                system("cls");
                display(1);
            }
     }
    
    void F()  //利率
    {
        char c;
        double sum6,i,p,n;
    LABF:   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);
             printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABF;
            else
            {
                system("cls");
                display(1);
            }
    }
    
    void G()
    {
        char c;
        double sum7,i,p,n;
    LABG:    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);
                  printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABG;
            else
            {
                system("cls");
                display(1);
            }
    }
    
     void H()//计算哪种投资方式的利益最大
     {
        int n,op=0;
        char c;
        double i,p;
        double temp;
        double record[4];
    LABH:    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);
                       printf("是否要重新输入(y/n): ");
              getchar();
            scanf("%c",&c);
            if(c=='y')
                goto LABH;
            else
            {
                system("cls");
                display(1);
            }
     }
    
     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;
         }
     }
  • 相关阅读:
    hdu 1551 恶心的卡精度题
    ubuntu下升级firefox
    清理windows垃圾
    hdu 1575 矩阵快速幂
    右键菜单中添加用记事本打开(转)
    hdu 1525 博弈
    PHP字符串函数(转)
    笔试注意事项
    .NET 2.0面向对象编程揭秘 继承
    李开复:21世纪7种人才最抢手
  • 原文地址:https://www.cnblogs.com/mingyin/p/5393961.html
Copyright © 2011-2022 走看看