最近博主接了一單給財經系的學生出C語言編程題的單子;
通過查找資料和網頁搜索相關題型,博主弄了下面的幾道題:
參考題目來源
- 企業發放的獎金根據利潤提成。
利潤(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;
}