程式構造思路:
第一點:新增每年或每月定期輸入等值金額,求複利計算本利和,在編寫代碼過程中有點困難
第二點:新增加循環繼續功能,按所需不斷進行計算
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void DEBXHK()//等額本息還款
{
double F,rate,P;
int year;
printf("請輸入貸款金額:");
scanf("%lf",&F);
printf("請輸入存入貸款年限:");
scanf("%d",&year);
printf("請輸入年利率:");
scanf("%lf",&rate);
P=F*rate/(12*(1+rate)*(pow(1+rate,year)-1));
printf("每月等額本息還款為:%.2lf",P);
}
void Benjin()
{
int Year;
double P,i;
double S;
double E,D=1;
int l;
printf("輸入期待金額為:");
scanf("%lf",&S);
printf("\n請輸入存儲年限:");
scanf("%d",&Year);
printf("\n請輸入年利率:");
scanf("%lf",&i);
for(l=1;l<=Year;l++)
{
E=D*(1+i);
D=E;
}
P=S/D;
printf("\n應輸入的本金為:");
printf("%.2lf",P);
}
void Zhongzhi()//複利終值計算
{
int year;//year表示複利年限
double p;//p表示本金
double i;//i表示年利率
double F;//表示複利後的終值
int k;
printf("請輸入複利次數(年):");
scanf("%d",&year);
printf("\n請輸入本金:");
scanf("%lf",&p);
printf("\n請輸入年利率:");
scanf("%lf",&i);
for(k=1;k<=year;k++){
F=p*(1+i);
p=F;
}
printf("\n複利後的終值為:");
printf("%.2lf",F);
}
void Dingqi()//定投計算
{
double Money,money,money1,rate1,rate,sum;
int years,i,n;
char j;
ab:
printf("|***************************************************************|\n");
printf("| 1.按年投 2.按月投 |\n");
printf("|***************************************************************|\n");
printf("請選擇功能[1,2]:");
scanf("%d",&n);
if(n==1){
printf("請輸入每年定存金額:");
scanf("%lf",&money);
printf("請輸入年回報率:");
scanf("%lf",&rate);
printf("請輸入次數(年):");
scanf("%d",&years);
Money=money;
sum=0;
for(i=1;i<=years;i++)
{
sum=money*(1+rate);
money=sum+Money;
}
printf("若連本帶利投資,最後得到的資産總值為:%.2lf",sum);
}
if(n==2)
{
printf("請輸入每月定存金額:");
scanf("%lf",&money);
printf("請輸入月回報率:");
scanf("%lf",&rate);
printf("請輸入次數(年):");
scanf("%d",&years);
Money=money*12;
sum=0;
money1=money*12;
rate1=rate*12;
for(i=1;i<=years;i++)
{
sum=money1*(1+rate1);
money1=sum+Money;
}
printf("若連本帶利投資,最後得到的資産總值為:%.2lf",sum);
}
printf("\n是否繼續定額計算(y or n)? :");
scanf(" %c",&j);
if(j=='y' || j=='Y')
goto ab;//是否繼續查詢
return;
}
void Rate()//利率計算
{
int year,flat=0;
double P,F;
double i;
printf("請輸入本利和:");
scanf("%lf",&F);
printf("請輸入次數(年):");
scanf("%d",&year);
printf("請輸入本金:");
scanf("%lf",&P);
i=pow(F/P, 1.0/year)-1;
printf("年利率為:%.3lf",i);
}
void Time()//存款年份計算
{
int n,flat=0;
double P,i,F;
printf("請輸入本利和:");
scanf("%lf",&F);
printf("請輸入年回報率:");
scanf("%lf",&i);
printf("請輸入本金:");
scanf("%lf",&P);
for(n=1;n<100;n++) //窮舉法求100年滿足的計息期數
{
if((P*(pow((1+i),n)))>=F)
{
printf("計息期數:%d\n\n",n);
flat=1;
break;
}
}
if(flat==0)
printf("在100年内沒有符合計息期數!\n\n");
}
void menu()
{
puts("\n\n");
puts("\t\t|******************************************************|");
puts("\t\t| 利息計算系統 |");
puts("\t\t|******************************************************|");
puts("\t\t| 1: 複利計算 |");
puts("\t\t| 2: 單利計算 |");
puts("\t\t| 0: 退出程式 |");
puts("\t\t|******************************************************|");
printf("請選擇<0~2>:");
}
void Fuli()
{
int n;
char j;
abs:
puts("\t\t|******************************************************|");
puts("\t\t| 1: 終值計算 |");
puts("\t\t| 2: 本金計算 |");
puts("\t\t| 3: 期數計算 |");
puts("\t\t| 4: 利率計算 |");
puts("\t\t| 5: 定期計算 |");
puts("\t\t| 6: 等額本息還款 |");
puts("\t\t|******************************************************|");
printf("請選擇功能[1~6]:");
scanf("%d",&n);
if(n==1)
{
Zhongzhi();
}
if(n==2)
{
Benjin();
}
if(n==3)
{
Time();
}
if(n==4)
{
Rate();
}
if(n==5)
{
Dingqi();
}
if(n==6)
{
DEBXHK();
}
printf("\n是否繼續(y or n)? :");
scanf(" %c",&j);
if(j=='y' || j=='Y')
goto abs;//是否繼續查詢
return;
}
void Danli()//單利計算
{
int year;//year表示複利年限
double p;//p表示本金
double i;//i表示年利率
double Fv;//表示複利後的終值
printf("請輸入單利次數(年):");
scanf("%d",&year);
printf("\n請輸入本金:");
scanf("%lf",&p);
printf("\n請輸入年利率:");
scanf("%lf",&i);
printf("\n單利後的終值為:");
Fv=p*(1+i*year);
printf("%.2lf",Fv);
}
main(){
int n;
while(1)
{
menu();
scanf("%d",&n);
if(n==0) break;
switch(n)
{
case 1:
Fuli(); break;
case 2:
Danli();break;
case 0:
n=0;exit(0);
}
}
}
