/**
程序完成时间: 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(‘\n‘ != getchar()) { } printf("输入不合法!\n请重新输入: "); } 7 8 double danli() 9 { 10 double P,F,i; //P是本金,F是收益,i年利率 11 int N; //是期限 12 double nlx; 13 printf("------进入单利计算\n"); 14 printf("请输入本金:\n"); 15 WARN1 scanf("%lf",&P) WARN2 16 printf("请输入年利率\n"); 17 WARN1 scanf("%lf",&i) WARN2 18 printf("请输入年限:\n"); 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("-------进入复利计算\n"); 33 printf("请输入本金:\n"); 34 WARN1 scanf("%lf",&P) WARN2 35 printf("请输入年利率\n"); 36 WARN1 scanf("%lf",&i) WARN2 37 printf("请输入年限:\n"); 38 WARN1 scanf("%d",&N) WARN2 39 printf("请输入复利次数:\n"); 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("-------进入本金计算\n"); 52 printf("请输入收益:\n"); 53 WARN1 scanf("%lf",&F) WARN2 54 printf("请输入年利率\n"); 55 WARN1 scanf("%lf",&i) WARN2 56 printf("请输入年限:\n"); 57 WARN1 scanf("%d",&N) WARN2 58 printf("请输入复利次数:\n"); 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("-------进入投资时间计算\n"); 71 printf("请输入本金:\n"); 72 WARN1 scanf("%lf",&P) WARN2 73 printf("请输入收益:\n"); 74 WARN1 scanf("%lf",&F) WARN2 75 printf("请输入年利率\n"); 76 WARN1 scanf("%lf",&i) WARN2 77 printf("请输入复利次数:\n"); 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("-------进入项目利率计算\n"); 89 printf("请输入本金:\n"); 90 WARN1 scanf("%lf",&P) WARN2 91 printf("请输入收益:\n"); 92 WARN1 scanf("%lf",&F) WARN2 93 printf("请输入年限\n"); 94 WARN1 scanf("%d",&N) WARN2 95 printf("请输入复利次数:\n"); 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("-------进入定投计算\n"); 109 printf("####### 1-年投资 2-月投资 #######\n"); 110 WARN1 scanf("%d",&ch) WARN2 111 if(ch == 1) 112 { 113 printf("请输入年投资额:\n"); 114 WARN1 scanf("%lf",&y) WARN2 115 } 116 else 117 { 118 printf("请输入月投资额:\n"); 119 WARN1 scanf("%lf",&y) WARN2 120 } 121 122 printf("请输入年利率\n"); 123 WARN1 scanf("%lf",&i) WARN2 124 printf("请输入年限\n"); 125 WARN1 scanf("%d",&N) WARN2 126 // printf("请输入复利次数:\n"); 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("-------进入本息还款计算\n"); 146 printf("请输入贷款金额:\n"); 147 WARN1 scanf("%lf",&P) WARN2 148 printf("请输入年利率:\n"); 149 WARN1 scanf("%lf",&i) WARN2 150 printf("请输入归还年限:\n"); 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)************\n"); 170 171 printf("------ 1 复利 ------\n"); 172 printf("------ 2 单利 ------\n"); 173 printf("------ 3 本金估算 ------\n"); 174 printf("------ 4 投资年限估算 ------\n"); 175 printf("------ 5 最优投资项目利率估算 ------\n"); 176 printf("------ 6 定期投资收益计算 ------\n"); 177 printf("------ 7 等额本息还款计算 ------\n"); 178 printf("------ 0 退出 ------\n"); 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("输入不合法!!\n"); 205 continue ; 206 } 207 208 printf("结果为:%.2lf\n",F1); 209 210 } 211 212 213 }
时间: 2024-10-23 16:50:05