程序 数学期望与方差
高二的数学总是讨厌的!老师让不停地计算期望与方差!
恰好我的计算器坏了!
所以写了这个程序!
程序代码:
#include <iostream> #include <cstdio> #include <cstdlib> using namespace std; //全局变量 int wrong;// 错误编号代码 //函数声明 int start_first(void); int start_se(void); void copyright(void); void abnormity(int a); /**********************************************类部分***********************************************/ // 处理概率分布 class discrete_distributing { /* 注意由于构造函数有问题所以第一版我取消了! //构造函数 discrete_distributing() { ME=1; MV=1; c=0; //initializion for(c=0;c<=1000;c++) { discrete_num[c]=1; discrete_num_p[c]=1; } } */ public: int gl_input(void);//input data float gl_output(void);//output data int gl_control(void);//过程控制 float ME;// mathematical expection float MV;// mathematical variance int n;//define how many kinds of value of ξ will have private: int y;//arithmometer float discrete_num[1000]; float discrete_num_p[1000]; int c;//just for discrete_num[c] and sicrete_num_p[c] float expection(void);//count mathematical expection float variance(void); //count mathematical variance }; /* * 函数名:gl_control * 函数作用:控制概率分布的整个过程 * 输入值:viod * 输出值:NULL * 返回值:成功返回1 * 备注:属于discrete_distributing类 */ int discrete_distributing::gl_control(void) { int nouse; //输入函数 wrong=gl_input(); if(wrong!=0) { abnormity(wrong); } //期望函数 nouse=expection(); //方差函数 nouse=variance(); //输出函数 gl_output(); return 1; } /* * 函数名:gl_input * 函数作用:输入离散分布变量的ζ和p * 输入值:NULL * 输出值:NULL * 返回值:NULL * 备注:概率分布 */ int discrete_distributing::gl_input(void) { int m=1; //input n cout<<"Please tell how much data would you input?"<<endl; cout<<"n="; cin>>n; cout<<"OK"; //input distribution series for (m=1;m<=n;m++) { cout<<"Please input "<<m<<"seires value"<<endl; //input ζ cout<<"ζ["<<m<<"]="; cin>>discrete_num[m]; //input p cout<<"p ["<<m<<"]="; cin>>discrete_num_p[m]; if(discrete_num_p[m]<0||discrete_num_p[m]>1) { wrong=1; abnormity(wrong); } } return 0; } /* * 函数名:expection * 函数作用:计算概率分布的期望 * 输入值:NULL * 输出值:ME * 返回值:ME * 备注:属于discrete_distributing类 */ float discrete_distributing::expection (void) { c=1; for(c=0;c<=n;c++) { ME=discrete_num[c]*discrete_num_p[c]+ME; } return ME; } /* * 函数名:variance * 函数作用:计算概率分布的方差 * 输入值:NULL * 输出值:NULL * 返回值:MV * 备注:属于discrete_distributing类 */ float discrete_distributing::variance(void) { c=1; for(c=0;c<=n;c++) { MV=(discrete_num[c]-ME)*(discrete_num[c]-ME)*discrete_num_p[c]+MV; } return MV; } /* * 函数名:gl_output * 函数作用:输出概率分布的期望与方差 * 输入值:NULL * 输出值:ME MV * 返回值:ME or MV * 备注:属于discrete_distributing类 */ float discrete_distributing::gl_output(void) { cout<<"期望为"<<ME<<endl; cout<<"方差为"<<MV; return ME; //return MV; } //处理二项式分布 class binomial_distributing { public: float n; float p; float ME; float MV; void ex_input(void); float ex_output(void); int binomial_distributing_control(void); private: float expection(void); float variance(void); }; /* * 函数名:binomial_distributing_control * 函数作用:二项式的过程控制 * 输入值:NULL * 输出值:NULL * 返回值:成功则返回1; * 备注:属于binomial_distributing类 */ int binomial_distributing::binomial_distributing_control(void) { int nouse; ex_input(); nouse=expection(); nouse=variance(); nouse=ex_output(); return 1; } /* * 函数名:ex_input * 函数作用:输入二项式分布变量的n和p * 输入值:NULL * 输出值:n和p * 返回值:NULL * 备注: */ void binomial_distributing::ex_input(void) { cout<<"Please input n !"<<endl; cin>>n; cout<<"Please input p!"<<endl; cin>>p; //判断p值如果大于1 则为错误 if(p>1||p<0) { wrong=1; abnormity(wrong); } } /* * 函数名:ex_output * 函数作用:输出概率分布的期望与方差 * 输入值:NULL * 输出值:ME MV * 返回值:ME or MV * 备注:属于discrete_distributing类 */ float binomial_distributing::ex_output(void) { cout<<ME; cout<<MV; return ME; //return MV; } /* * 函数名:expection * 函数作用:计算二项分布的期望 * 输入值:n ;p * 输出值:ME * 返回值:ME * 备注:属于binomial_distribrting类 */ float binomial_distributing::expection(void) { ME=n*p; return ME; } /* * 函数名:variance * 函数作用:计算二项分布的方差 * 输入值:n ;p * 输出值:MV * 返回值:MV * 备注:属于binomial_distribrting类 */ float binomial_distributing::variance(void) { MV=n*p*(1-p); return MV; } //处理几何分布 class geometrical_distributing { public: float p; float ME; float MV; float jh_input(void); float jh_output(void); int jh_control(void); private: float expection(void); float variance(void); }; /* * 函数名:jh_control * 函数作用:几何分布的过程控制 * 输入值:NULL * 输出值:NULL * 返回值:成功则返回1 * 备注:属于geometrical_distributing类 */ int geometrical_distributing::jh_control(void) { int nouse; nouse=jh_input(); nouse=expection(); nouse=variance(); nouse=jh_output(); return 0; } /* * 函数名:jh_input * 函数作用:输入p * 输入值:p * 输出值:p * 返回值:p * 备注:属于geometrical_distributing */ float geometrical_distributing::jh_input(void) { cout<<"Please input P!"; cin>>p; return p; } /* * 函数名:jh_output * 函数作用:输出期望与方差 * 输入值:NULL * 输出值:ME MV * 返回值:ME or MV * 备注:属于geometrical_distributing */ float geometrical_distributing::jh_output(void) { cout<<ME; cout<<MV; return ME; //return MV; } /* * 函数名:expection * 函数作用:计算几何分布的期望 * 输入值:p * 输出值:ME * 返回值:ME * 备注:属于geometrical_distributing类 */ float geometrical_distributing::expection(void) { ME=1/p; return ME; } /* * 函数名:variance * 函数作用:计算几何分布的方差 * 输入值:p * 输出值:MV * 返回值:MV * 备注:属于geometrical_distributing类 */ float geometrical_distributing::variance(void) { MV=(1-p)/(p*p); return 0; } /*****************************************************************类部分结束******************************************/ //定义一个概率分布对象 discrete_distributing dis; //定义一个二项式分布对象 binomial_distributing bin; //定义一个几何分布对象 geometrical_distributing geo; int main(void) { int inutility=0; inutility=start_first(); inutility=start_se(); return 0; } /* * 函数名:start_first * 函数作用:输出各项选项 * 输入值:NULL * 输出值:NUll * 返回值:1 * 备注: */ int start_first(void) { printf("\t ╭────────────────────────────╮\n"); printf("\t ∣ 数学期望与方差1.0 ∣\n"); printf("\t |————————————————————————————|\n"); printf("\t | \t 1. 离散分布变量 |\n"); printf("\t | |\n"); printf("\t | \t 2. 二项式分布变量 |\n"); printf("\t | |\n"); printf("\t | \t 3. 几何分布变量 |\n"); printf("\t | |\n"); printf("\t | \t 4. 版权 |\n"); printf("\t | |\n"); printf("\t | \t 5. 退出 |\n"); printf("\t | 制作者:韩耿|\n"); printf("\t ╰────────────────────────────╯\n"); return 0; } /* * 函数名:start_se * 函数作用:选择选项 * 输入值:NULL * 输出值:程序代号 * 返回值:1 * 备注: */ int start_se(void) { int n; cout<<"请输入您需要的选项的代码"<<endl<<"n="; cin>>n; switch (n) { case 1: { dis.gl_control(); break; } case 2: { bin.binomial_distributing_control(); break; } case 3: { geo.jh_input(); break; } case 4: { copyright(); break; } case 5: { exit(0); break; } default: { exit(0); break; } } return 0; } /* * 函数名:copyright * 函数作用:输入版权信息 * 输入值:NULL * 输出值:NULL * 返回值:NULL * 备注: */ void copyright(void) { /*版权及作者*/ cout<<"程序名称:数学期望与方差"; printf("版本:1.0\n"); printf("作者姓名:韩耿\n"); printf("作者的电子邮箱: xingpinglixiang@ \n"); printf("Thank for my father's help!"); //system("start http://xijiao.); 打开一个网址 } /* * 函数名:abnormity * 函数作用:异常处理 * 输入值:NULL * 输出值:NULL * 返回值:NULL * 备注: */ void abnormity(int a) { int nouse; cout<<"Sorry !"; cout<<"The computer has appear unkonwn bug!"; cout<<"Although author tied not to make mistakes! "; cout<<"You can send an e-mail to xingpinglixiang@ for the mistakes!"; cout<<"Sorry!"; cout<<"Please put any key to restar!"; switch (a) { case 1 : printf("错误编号:【1】\n"); printf("概率不能大于1或小于0!\n"); }; system("pause"); nouse=main(); } /* * 函数名:exit * 函数作用:退出 * 输入值:NULL * 输出值:NULL * 返回值:NULL * 备注: */ void exit(void) { abort(); }
希望大家指出程序的所有错误!
这是第一个用C++写的!
ps:虽然是C++但我喜欢C板块啊!
下面的压缩包包扩所有的文件了!
数学期望与方差.rar
(907.82 KB)
有错请提出!
我绝对改正!
谢谢!