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

最近博主接了一单给财经系的学生出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万元。

#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股票报酬率(%)
12613
21121
31527
42741
52122
63232

程序实现下列计算并输出: (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;
    }
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜临居士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值