您的位置:首页 > 编程语言 > C语言/C++

五道金融计算题在C语言上的实现

2020-02-16 17:43 316 查看

最近博主接了一单给财经系的学生出C语言编程题的单子;
通过查找资料和网页搜索相关题型,博主弄了下面的几道题:
参考题目来源

  1. 企业发放的奖金根据利润提成。
    利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
#include <stdio.h>
main()
{
int i;
double  bonus,bon1,bon2,bon4,bon6,bon10;
int  branch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入企业所得利润i:");
scanf("%d",&i);            //从键盘输入企业利润
branch=i/100000;
if (branch>10)  branch=10;
switch(branch)
{  case 0:bonus=i*0.1;break;
case 1:bonus=bon1+(i-100000)*0.075;break;
case 2:
case 3: bonus=bon2+(i-200000)*0.05;break;
case 4:
case 5: bonus=bon4+(i-400000)*0.03;break;
case 6:
case 7:
case 8:
case 9: bonus=bon6+(i-600000)*0.015;break;
case 10: bonus=bon10+(i-1000000)*0.01;
}
printf("应发放的奖金总数为: %10.2f\n",bonus);
return 0;
}

2.编写函数fun,功能是用复利计算本息和的逆运算,计算需要存多少本金,固定年限得到预期收益。
参考公式:复利的本息和S=现值p*(1+r)n
例:有一储户预计4年后其子女需要学费、生活费开支约5万元,现行的年利率为8%,求其需要存多少钱才能在4年后获得5万元。

#
24000
include<stdio.h>

double fun(double r,double n,double S)
{
return S/(1+r*n);

}
int main()
{
double r,n,m,S;
printf("输入年利率:");
scanf("%lf",&r);
printf("输入年限:");
scanf("%lf",&n);
printf("输入本息和:");
scanf("%lf",&S);
printf("本金:%lf",fun(r,n,S));
}

3.设计函数,功能是计算采样的多种股票的报告期加权股价指数,从键盘采集股票基期价格bp,报告期价格rp,报告期上市股票数nls。(应用数组)。
例:某股票市场采样的A、B、C、D、E五种股票,基期价格分别为15、20、30、45、60元,报告期价格分别为18、25、35、50、80元,报告期上市股票数分别为120、140、170、210、250股,基期指数值为100,试计算报告期加权股价指数。
参考公式:报告期加权股票价指数=∑(报告期股票价格×报告期上市股票数)/∑(基期股票价格×报告期上市股票数)×基期指数值。

#include<stdio.h>

double  fun(double bp[],double rp[],double nls[],double sum,int n)
{

double s=0;
for(int i=0;i<n;i++)
{

s+=(rp[i]/bp[i])*(nls[i]/sum);
// printf("%lf ",s);
}
return s;
}
int main()
{
int n;//股票的数量
printf("输入股票种类数量:");
scanf("%d",&n);
double bp[n+2];//基期价格
double rp[n+2];//报告期价格
double nls[n+2];//报告期上市股票数
int m;//基期指数值
printf("输入基期指数值:");
scanf("%d",&m);
double sum=0;//样本总股数
printf("输入bp:");
for(int i=0;i<n;i++)
{
scanf("%lf",&bp[i]);

}
printf("输入rp:");
for(int i=0;i<n;i++)
{
scanf("%lf",&rp[i]);
}
printf("输入nls:");
for(int i=0;i<n;i++)
{
scanf("%lf",&nls[i]);
sum+=nls[i];
}
printf("sum= %lf\n",sum);
double index=fun(bp,rp,nls,sum,n)*m;
printf("指数:%lf",index);
}

4.用C语言实现Excel函数IRR计算投资项目的内部回报率。
在项目产生利润之前需要先投入建设资金(假设称为 c0),建成后每年产生的利润(假设称为 c1,c2…)。内部回报率(记为 r,范围为 −100%∽+100%)是到项目末期的现金流为 0 的贴现率。设置求解的问题数量,最大计算10个问题,设项目生产年数为n。
例如:某项目建设资金为 10000,项目生产持续期为 3 年,每年利润为 3000,4000,5000,那么 r 满足:−10000(1+r)3+3000(1+r)2+4000(1+r)+5000=0
Excel 计算结果 r 大约为 8.8963%。程序所得结果与此一致为正确

#include <stdlib.h>
#include <stdio.h>
int main()
{
int n,i,m,j,j2;
double A,B,r,X,Y,C,x1;
long long huge=1000000000;
int a[102];
printf("输入问题数(1到10):\n");
scanf("%d",&n);//n turn to T
for(i=1;i<=n;i++)
{
A=-1.0;B=1.0;//设定r的范围
printf("请输入项目生产年数:\n");
scanf("%d",&m);
m=m+1;
printf("case #%d:\n",i-1);
printf("请输入投入的建设资金和每年的利润:\n");

for(j=1;j<=m;j++)
{
scanf("%d",&a[j]);
}
while((B-A)*huge>1.0)
{
r=(A+B)/2.0;
x1=A+1;
X=-1*a[1];
for(j2=2;j2<=m;j2++)
{
X*=x1;
X+=a[j2];
}
x1=B+1;
Y=-1*a[1];
for(j2=2;j2<=m;j2++)
{
Y*=x1;
Y+=a[j2];
}
x1=r+1;
C=-1*a[1];
for(j2=2;j2<=m;j2++)
{
C*=x1;
C+=a[j2];
}
if(X*C>0) A=r;
else B=r;
}
printf("内部回报率为:\n");
if((r-0)*huge<1&&(r-0)*huge>-1)
printf("0.0000%%\n");
else
printf("%.4lf%%\n",r*100);
}
return 0;
}

5.股票A和的股票B的近六年年度资料如下表,

年度 A股票报酬率(%) B股票报酬率(%)
1 26 13
2 11 21
3 15 27
4 27 41
5 21 22
6 32 32

程序实现下列计算并输出: (1)分别计算投资于股票A和股票B的平均报酬率、标准差和方差。 (2)计算股票A和股票B报酬率的相关系数。
相关系数公式=标准差之积/(√股票A每年报酬率方差之和*√股票B每年报仇率方差之和)

#include<stdio.h>
#include "math.h"

double sum1=0,sum2=0;//保存求和的值
double sumst1=0,sumst2=0;//标准差之和
double stc=0;//标准差之积
double sumv1=0,sumv2=0;//方差和
double a[6] = {0.26,0.11,0.15,0.27,0.21,0.32};
double b[6] = {0.13,0.21,0.27,0.41,0.22,0.32};
int length1=0,length2=0;//数组长度
double average1=0,average2=0;//求平均数
double var1=0,var2=0; //求方差
double standard1=0,standard2=0; //求标准差
double r=0;//求相关系数

int main()
{
for (int i = 0; i <= 5;i++)
{
sum1+=a[i],sum2+=b[i];//求和
}

length1=sizeof(a)/sizeof(a[0]);
length2=sizeof(b)/sizeof(b[0]);//求数组长度
average1=sum1/length1;
average2=sum2/length2;//求平均值

for(int j=0;j<=5;j++)
{
var1+=pow(a[j]-average1,2)/length1;
var2+=pow(b[j]-average2,2)/length2;//求方差
}

standard1=pow(var1,0.5);
standard2=pow(var2,0.5);//求标准差
for(int m=0;m<=5;m++)
{
stc+=(sumst1+=a[m]-average1)*(sumst2+=b[m]-average2);
sumv1+=pow(a[m]-average1,2);
sumv2+=pow(b[m]-average2,2);
}
r=stc/((sqrt(sumv1))*(sqrt(sumv2)));
printf("股票A的平均报酬率为%f,\n股票B的平均报酬率为%f\n",average1,average2);
printf("股票A的标准差为%f,\n股票B的标准差为%f\n",standard1,standard2);
printf("股票A的方差为%f,\n股票B的方为%f\n",var1,var2);
printf("相关系数r为%f\n",r);
while (1);
return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
夜临居士 发布了3 篇原创文章 · 获赞 4 · 访问量 288 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: