• 0319 复利计算器4.0


     

    /**

    程序完成时间: 3月19日 9:50pm

    发表时间: 3月20日 0:18am


    此版本是在前三个版本的基础上添加了 等额本息还贷计算 的新功能
    并且按照实验要求增强了系统的健壮性,保证在输入一部分的错误的
    数据,后程序不会崩溃。例如是在输入int或者是输入double类型的
    地方,输入了字符,是会提示并且允许重新输入。


    并且通过宏定义使得代码变得简洁,还有简化了修改的操作,还认识
    到宏定义的妙用是可以使得编程变得简单,还可以增大代码的复用性。

    
    

    **/






    1
    #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 5 #define WARN1 while(0 == 6 #define WARN2 ){ while(' ' != getchar()) { } printf("输入不合法! 请重新输入: "); } 7 8 double danli() 9 { 10 double P,F,i; //P是本金,F是收益,i年利率 11 int N; //是期限 12 double nlx; 13 printf("------进入单利计算 "); 14 printf("请输入本金: "); 15 WARN1 scanf("%lf",&P) WARN2 16 printf("请输入年利率 "); 17 WARN1 scanf("%lf",&i) WARN2 18 printf("请输入年限: "); 19 WARN1 scanf("%d",&N) WARN2 20 21 nlx = P*i; 22 F = nlx*N + P; 23 return F; 24 25 } 26 27 double fuli() 28 { 29 30 double P,F,i; //P是本金,F是收益,i年利率 31 int N,W; //是期限 32 printf("-------进入复利计算 "); 33 printf("请输入本金: "); 34 WARN1 scanf("%lf",&P) WARN2 35 printf("请输入年利率 "); 36 WARN1 scanf("%lf",&i) WARN2 37 printf("请输入年限: "); 38 WARN1 scanf("%d",&N) WARN2 39 printf("请输入复利次数: "); 40 scanf("%d",&W); 41 42 i=pow(1+i/W,W)-1; 43 F=P*pow((i+1),N); 44 return F; 45 } 46 47 double gusuan() 48 { 49 double P,F,i; //P是本金,F是收益,i年利率 50 int N,W; //是期限 51 printf("-------进入本金计算 "); 52 printf("请输入收益: "); 53 WARN1 scanf("%lf",&F) WARN2 54 printf("请输入年利率 "); 55 WARN1 scanf("%lf",&i) WARN2 56 printf("请输入年限: "); 57 WARN1 scanf("%d",&N) WARN2 58 printf("请输入复利次数: "); 59 WARN1 scanf("%d",&W) WARN2 60 i = pow(1+i/W,W)-1; 61 P = F/pow((i+1),N); 62 return P; 63 } 64 65 double TZtime() 66 { 67 double year; 68 double P,F,i; //P是本金,F是收益,i年利率 69 int W; //是期限 70 printf("-------进入投资时间计算 "); 71 printf("请输入本金: "); 72 WARN1 scanf("%lf",&P) WARN2 73 printf("请输入收益: "); 74 WARN1 scanf("%lf",&F) WARN2 75 printf("请输入年利率 "); 76 WARN1 scanf("%lf",&i) WARN2 77 printf("请输入复利次数: "); 78 WARN1 scanf("%d",&W) WARN2 79 i = pow((1+i/W),W)-1; 80 year = log(F/P)/log(1+i); 81 return year; 82 83 } 84 double bestProject() 85 { 86 double P,F,i; 87 int N,W; 88 printf("-------进入项目利率计算 "); 89 printf("请输入本金: "); 90 WARN1 scanf("%lf",&P) WARN2 91 printf("请输入收益: "); 92 WARN1 scanf("%lf",&F) WARN2 93 printf("请输入年限 "); 94 WARN1 scanf("%d",&N) WARN2 95 printf("请输入复利次数: "); 96 WARN1 scanf("%d",&W) WARN2 97 i = W*(pow(pow(F/P,1.0/N),1.0/W)-1.0); 98 return i; 99 100 101 } 102 103 double sum() 104 { 105 double y,F=0.0,i; 106 int N; 107 int ch; 108 printf("-------进入定投计算 "); 109 printf("####### 1-年投资 2-月投资 ####### "); 110 WARN1 scanf("%d",&ch) WARN2 111 if(ch == 1) 112 { 113 printf("请输入年投资额: "); 114 WARN1 scanf("%lf",&y) WARN2 115 } 116 else 117 { 118 printf("请输入月投资额: "); 119 WARN1 scanf("%lf",&y) WARN2 120 } 121 122 printf("请输入年利率 "); 123 WARN1 scanf("%lf",&i) WARN2 124 printf("请输入年限 "); 125 WARN1 scanf("%d",&N) WARN2 126 // printf("请输入复利次数: "); 127 // scanf("%d",&W); 128 if(ch == 2) 129 { 130 i = i/12.0; 131 N = N*12; 132 } 133 F = y*(1.0+i)*(-1+pow(1.0+i,N))/i; 134 135 return F; 136 137 138 139 } 140 141 double refund() 142 { 143 double P,i,month_amount; 144 int N,month; 145 printf("-------进入本息还款计算 "); 146 printf("请输入贷款金额: "); 147 WARN1 scanf("%lf",&P) WARN2 148 printf("请输入年利率: "); 149 WARN1 scanf("%lf",&i) WARN2 150 printf("请输入归还年限: "); 151 WARN1 scanf("%d",&N) WARN2 152 153 //每月还款额=[贷款本金×月利率×(1+月利率)^还款月数]÷[(1+月利率)^还款月数-1] 154 155 i = i/12; 156 month = N*12; 157 month_amount = P*i*pow((1.0+i),month)/(pow(1.0+i,month)-1); 158 return month_amount; 159 160 } 161 162 void main() 163 { 164 double F1; 165 int ch2; 166 167 while(1) 168 { 169 printf("*************复利计算机(4.0)************ "); 170 171 printf("------ 1 复利 ------ "); 172 printf("------ 2 单利 ------ "); 173 printf("------ 3 本金估算 ------ "); 174 printf("------ 4 投资年限估算 ------ "); 175 printf("------ 5 最优投资项目利率估算 ------ "); 176 printf("------ 6 定期投资收益计算 ------ "); 177 printf("------ 7 等额本息还款计算 ------ "); 178 printf("------ 0 退出 ------ "); 179 printf("请选择: "); 180 WARN1 scanf("%d",&ch2) WARN2 181 switch(ch2){ 182 case 1: 183 F1 = fuli(); break; 184 case 2: 185 F1 = danli(); break; 186 case 3: 187 F1 = gusuan(); 188 break; 189 case 4: 190 F1 = TZtime(); 191 break; 192 case 5: 193 F1 = bestProject(); 194 case 6: 195 F1 = sum(); 196 break; 197 case 7: 198 F1 = refund(); 199 break; 200 case 0: 201 exit(1); 202 break; 203 default: 204 printf("输入不合法!! "); 205 continue ; 206 } 207 208 printf("结果为:%.2lf ",F1); 209 210 } 211 212 213 }
  • 相关阅读:
    xml模塊
    xlrd,xlwt模塊
    logging模塊
    正則補充
    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
    安卓--子线程和主线程之间的交互实例(时钟)
    Android--全局获取Context的技巧
    Android 广播机制
    android编写Service入门
    Android的Looper,Handler以及线程间的通信
  • 原文地址:https://www.cnblogs.com/liezhihua/p/5290781.html
Copyright © 2020-2023  润新知