五道金融計算題在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股票報酬率(%)
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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章