/*1. 试编写求概率密度或分布律的通用函数,调用格式为
Y=pdf(name,X,A)
Y=pdf(name,X,A,B)
Y=pdf(name,X,A,B,C)
返回参数为A,B,C的以name为分布的概率密度或分布律在X处的取值,name的值可为
bino——二项分布 poiss——泊松分布
unif——均匀分布 exp——指数分布
norm——正态分布
调用例:
pdf(‘norm’,0.7733,0,1)
结果:0.2958
注:即求标准正态分布密度函数在0.7733的值.
*/
#include<stdio.h>
#include<stdlib.h>
float chengfang(float a,int x) //求a的x次方的值
{
int i;
float u=1;
for(i=1;i<=x;i++)
u=u*a;
return u;
}
float jiecheng(float a) //求a的阶乘的值
{ float u=1;
while(a>=1)
{
u=u*a;
a--;
}
return u;
}
float bino(int k,int n,float p) //二项分布,参数n,p,在k处取值
{float result;
result=jiecheng(k)/(jiecheng(n)*jiecheng(n-k))*chengfang(p,k)*chengfang(1-p,n-k);
return result;
}
float poiss(int k,int v) //泊松分布,参数v
{int result;
float e=2.718;//欧拉常量
result=chengfang(v,k)*chengfang(e,-v)/jiecheng(k);
return result;
}
float unif(float x,float a,float b) //均匀分布,参数a,b
{float result;
if(x>a&&x<b)
result=1/(b-a);
else
result=0;
return result;
}
float exp(float x,float o) //指数分布
{float result;
float e=2.718;//欧拉常量
if(x>0)
result=chengfang(e,-x/o)/o;
else
result=0;
return result;
}
float norm(float x,float u,float o) //正态分布
{float result;
float e=2.718;//欧拉常量
result=chengfang(e,-chengfang(x-u,2)/2*chengfang(o,2))/(1.414*1.7724*o);
return result;
}
void main()
{int name;
int k,n;
float x,p,v,a,b,o,u;
printf("请输入你要查询的分布类型代号\n(1——二项分布;2——泊松分布;3——均匀分布;4——指数分布;5——正态分布):\n");
scanf("%d",&name);
printf("\n");
switch(name)
{
case(1):printf("请输入二项分布的参数n和p:");
scanf("%f%f",&n,&p);
printf("\n");
printf("请输入在何处取值,即k值:");
scanf("%d",&k);
printf("\n结果是:%f\n",bino(k,n,p));
break;
case(2):printf("请输入泊松分布的参数v:");
scanf("%f",&v);
printf("请输入在何处取值,即k值:");
scanf("%d",&k);
printf("\n结果是:%f\n",poiss(k,v));
break;
case(3):printf("请输入均匀分布的参数a和b:");
scanf("%f%f",&a,&b);
printf("请输入在何处取值,即k值:");
scanf("%f",&x);
printf("\n结果是:%f\n",unif(x,a,b));
break;
case(4):printf("请输入指数分布的参数o:");
scanf("%f",&o);
printf("请输入在何处取值,即k值:");
scanf("%f",&x);
printf("\n结果是:%f\n",poiss(x,o));
break;
case(5):printf("请输入正态分布的参数u和o:");
scanf("%f%f",&u,&o);
printf("请输入在何处取值,即k值:");
scanf("%f",&x);
printf("\n结果是:%f\n",norm(x,u,o));
break;
default:printf("你输入错误!");
}
}