複利計算4.0

你若精彩,蝴蝶自來發表於2016-03-20

程式完成時間為3月20日13:35分。

發表時間為3月20日13:37分。

此版本是在前面三個版本的基礎上進行完善,實現了等額本息還款計算,解決了如果使用者輸入一部分不恰當的資料會提示輸入不合法,請重新輸入,增強了系統的執行性,不會因此而導致系統會奔潰

不斷修改的可觀性,使使用者更加直觀的運用此運算器。

  1 #include<stdio.h>
  2    #include<math.h>
  3  #define x1   while(0 == 
  4    #define x2   ){    while('\n' != getchar())    {    }    printf("輸入不合法!\n請重新輸入: ---");        }
  5   
  6    double danli(double i,int N,double P)
  7  {
  8        double nlx,F;
  9        nlx = P*i;
 10        F = nlx*N + P;
 11        return F;
 12   
 13   }
 14   
 15   double fuli(double i,int W,int N,double P)
 16   {
 17       double F;
 18       i=pow(1+i/W,W)-1;
 19       F=P*pow((i+1),N);
 20       return F;
 21   }
 22   
 23   double gusuan(double i,int W,int N,double F)
 24   {
 25       double P;
 26       i = pow(1+i/W,W)-1;
 27       P = F/pow((i+1),N);
 28       return P;
 29   }
 30   double shijian(double P,double i,double F)
 31   {
 32      double N,x;
 33       x=F/P;
 34       N=(log(x))/(log(i+1));
 35       return N;
 36   
 37   }
 38   double nianxian(double P,double N,double F)
 39  {
 40       double i;
 41        //i = W*(pow(pow(F/P,1.0/N),1.0/W)-1.0);
 42        i = pow(F/P,1.0/N)-1.0;
 43        return i;
 44   }
 45   double sum()
 46   {
 47        double y,yue,F=0.0,i,mi;
 48        double nl,yl;
 49        int N,W;
 50        int ch,j;
 51        printf("****** 1-年投資  2-月投資 ******\n");
 52        scanf("%d",&ch);
 53       if(ch == 1)
 54       {
 55            printf("請輸入年投資額:\n");
 56           x1  scanf("%lf",&y)  x2;
 57        }
 58        else
 59        {
 60            printf("請輸入月投資額:\n");
 61            x1  scanf("%lf",&yue)  x2;
 62        }
 63        
 64        printf("請輸入年利率\n");
 65        x1  scanf("%lf",&i)  x2;
 66        printf("請輸入年限\n");
 67        x1  scanf("%d",&N)  x2;
 68        
 69        if(ch == 1)
 70        {
 71            F = y;
 72            for(j=0 ; j<N ; j++)
 73            {
 74                nl = F*i;
 75                F=y+nl+F;
 76           }
 77           return F-y;
 78        }
 79        else
 80        {
 81           F = yue;
 82            mi = i/12.0;
 83            for(j=0 ; j<N*12 ; j++)
 84            {
 85                yl = F*mi;
 86               F=yue+yl+F;
 87            }
 88            return F-yue;
 89       }
 90       
 91       
 92    }
 93   double refund()
 94  {
 95      double P,i,month_amount;
 96      int N,month;
 97     printf("************您進入本息還款計算************\n");
 98      printf("請輸入貸款金額:\n");
 99      x1    scanf("%lf",&P)    x2
100      printf("請輸入年利率:\n");
101      x1    scanf("%lf",&i)    x2
102      printf("請輸入歸還年限:\n");
103      x1    scanf("%d",&N)    x2
104  
105          //每月還款額=[貸款本金×月利率×(1+月利率)^還款月數]÷[(1+月利率)^還款月數-1]
106  
107      i = i/12;
108      month = N*12;
109      month_amount = P*i*pow((1.0+i),month)/(pow(1.0+i,month)-1);
110      return month_amount;
111  
112  }
113   void main()
114   {
115       double P,F1,F,i; //P是本金,F是收益,i年利率
116       int N,W,ch2; //是期限
117       while(1)
118       {
119       printf("\t\t***************歡迎使用複利計算器*************\n\n");
120       printf("\t\t|     -----1--------為複利---------------    |\n\n");
121       printf("\t\t|     -----2--------為單利---------------    |\n\n");
122      printf("\t\t|     -----3-------為估算----------------    |\n\n");
123     printf("\t\t|     -----4-------為年限----------------    |\n\n");
124      printf("\t\t|     -----5-------為年利率--------------    |\n\n");
125      printf("\t\t|     -----6-------為月年收益--------------    |\n\n");
126      printf("\t\t|     -----7-------等額本息還款--------------    |\n\n");
127      printf("\t\t|     -----0-------為退出----------------    |\n\n");
128      printf("\t\t**************請選擇想要的功能************\n");
129      x1  scanf("%d",&ch2)  x2;//控制選擇
130      switch(ch2){
131      case 1:
132          printf("請輸入本金:\n");
133          x1  scanf("%lf",&P)  x2;
134          printf("請輸入年利率\n");
135          x1  scanf("%lf",&i)  x2;
136          printf("請輸入年限:\n");
137          x1  scanf("%d",&N)  x2;
138          printf("請輸入複利次數:\n");
139          x1  scanf("%d",&W)  x2;
140          F1 = fuli(i,W,N,P); break;
141      case 2:
142          printf("請輸入本金:\n");
143          x1  scanf("%lf",&P)  x2;
144          printf("請輸入年利率\n");
145          x1  scanf("%lf",&i)  x2;
146          printf("請輸入年限:\n");
147          x1  scanf("%d",&N)  x2;
148          F1 = danli(i,N,P); break;
149      case 3:
150          printf("請輸入本利\n");
151          x1  scanf("%lf",&F)  x2;
152          printf("請輸入年利率\n");
153          x1  scanf("%lf",&i)  x2;
154          printf("請輸入年限:\n");
155          x1  scanf("%d",&N)  x2;
156          printf("請輸入複利次數:\n");
157          x1  scanf("%d",&W)  x2;
158          F1 = gusuan(i,W,N,F);
159          break;
160          
161      case 4:
162          printf("請輸入本金\n");
163          x1  scanf("%lf",&P)  x2;
164          printf("請輸入年利率\n");
165         x1  scanf("%lf",&i)  x2;
166           printf("請輸入本利\n");
167          x1  scanf("%lf",&F)  x2;
168          F1=shijian(P,i,F);
169          break;
170      case 5:
171  
172          printf("請輸入本金:\n");
173           x1  scanf("%lf",&P)  x2;
174           printf("請輸入本利:\n");
175           x1  scanf("%lf",&F)  x2;
176           printf("請輸入年限\n");
177           x1  scanf("%d",&N)  x2;
178          F1=nianxian(P,N,F);
179          
180 //    i=pow((F/P),(1.0/N))-1;
181          break;
182      case 6:
183          F1=sum();
184          break;
185      case 7:
186      F1=refund();
187          break;
188      case 0:break;
189          default:
190              printf("輸入不合法!!\n");
191             continue ;
192     }
193      if(ch2==0)
194          break;
195      printf("結果為:%.2lf\n",F1);
196      }
197  } 

相關文章