程式完成時間為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 }