经验证,计算结果无误。
源代码:
#include 
float x[50],v[50],sum=0,y=0,dx,s1,s2,vmax,v1=0,v2=0,v3=0,a,b; double ch,g,t; double
ch1[33]={1.65,1.73,1.79,1.86,1.92,1.96,2.00,2.04,2.07,2.10,2.13,2.16,2.18,2.20,2.22,2.24,2.26,2.28,2.30,2.32,2.33,2.34,2.35,2.37,2.38,2.39,2.45,2.50,2.58,2.64,2.74,2.81,3.02};//肖特纳准则表 double
g1[28]={1.15,1.46,1.67,1.82,1.94,2.03,2.11,2.18,2.23,2.29,2.33,2.37,2.41,2.44,2.47,2.50,2.53,2.56,2.58,2.60,2.62,2.64,2.66};//格拉布斯准则表0.95 double
g2[28]={1.16,1.49,1.75,1.94,2.10,2.22,2.32,2.41,2.48,2.55,2.61,2.66,2.71,2.75,2.79,2.82,2.85,2.88,2.91,2.94,2.96,2.99,3.01};//格拉布斯准则表0.99 double
t1[30]={12.706,4.303,3.182,2.776,2.571,2.447,2.365,2.306,2.262,2.228,2.201,2.179,2.160,2.145,2.131,2.120,2.110,2.101,2.093,2.086,2.080,2.074,2.069,2.064,2.060,2.056,2.052,2.048,2.045,2.042};//t分布表0.95 double
t2[30]={63.657,9.925,5.841,4.604,4.032,3.707,3.499,3.355,3.250,3.169,3.106,3.054,3.012,2.977,2.947,2.921,2.898,2.878,2.861,2.845,2.831,2.819,2.807,2.797,2.787,2.779,2.771,2.763,2.756,2.750};//t分布表0.99 int i,j,n,u;
printf(\请输入数据个数(不超过30个)n=\ scanf(\
 printf(\请输入%d个数据:\\n\     for(i=0;i    y=0;     printf(\请选择粗大误差判别准则:\\n\       printf(\莱特准侧\\n2.肖维纳准则\\n3.格拉布斯准则(置信概率为0.95)\\n4.格拉布斯准则(置信概率为0.99)\\n\\n\   scanf(\     for(i=0;i     dx=sum/n;//求平均值          printf(\输出平均值:%.4f\\n\    printf(\输出残差值:\\n\    for(i=0;i   v[i]=x[i]-dx;//求残差         printf(\:\  y=x[i]*x[i]+y;     }         putchar('\\n');      s2=sqrt((y-n*dx*dx)/(n-1));//求标准差     printf(\输出标准差值:%.6f\\n\    if(v[0]<0)     vmax=-v[0];     else       vmax=v[0];     for(i=0;i     if(v[i+1]<0)       v[i+1]=0-v[i+1];     if(vmax     printf(\输出残差最大绝对值vmax=%.4f\\n\\n\     for(i=0;i        i=i+1;//第i个数残差绝对值最大        break;     }        if(u==1)    { if(n<10)   {     printf(\莱特准则不可用。请选择其他准则:\\n\\n\   scanf(\  }    else       if(vmax>3*s2)        printf(\由莱特准则可知第%d个数据为异常值\\n\\n\   else    {      printf(\由莱特准则可知该数据无异常值\\n\\n\    break;    }   }    if(u==2)  {      ch=ch1[n-5];       printf(\   if(vmax>ch*s2)     printf(\由肖维纳准则可知第%d个数据为异常值\\n\\n\         else     {      printf(\由肖维纳准则可知该数据无异常值\\n\\n\          break;    }  }     if(u==3)    {     if(n<=25)      g=g1[n-3];    else     {      if(n==30)     g=2.74;    if(n==35)     g=2.81;    if(n==40)     g=2.87;    if(n==50)     g=2.96;    if(n==100)     g=3.17;    }     printf(\   if(vmax>g*s2)            printf(\由格拉布斯准则可知第%d个数据为异常值\\n\\n\          else    {     printf(\由格拉布斯准则可知该数据无异常值\\n\\n\         break;   }    } if(u==4) {  if(n<=25)      g=g2[n-3];    else     {     if(n==30)     g=3.10;    if(n==35)     g=3.18;    if(n==40)     g=3.24;    if(n==50)     g=3.34;    if(n==100)     g=3.58;    }     printf(\   if(vmax>g*s2)     printf(\由格拉布斯准则可知第%d个数据为异常值\\n\\n\     else       {     printf(\由格拉布斯准则可知该数据无异常值\\n\\n\   break;   } }    if(i   for(i=i-1;i printf(\判断数据系统误差:\\n\if(n/2==0) //偶数个数据 {   for(i=0;i      for(i=n/2;i       if(v1>v2&&v1-v2>=vmax)       printf(\由马利科夫判据知该数据存在累进性系统误差\\n\   else       printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\     if(v1    printf(\由马利科夫判据知该数据存在累进性系统误差\\n\   else      printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\}  else //奇数个数据 {  for(i=0;i<(n-1)/2;i++)      v1=v1+v[i];       for(i=(n-1)/2;i    if(v1-v2>=vmax)          printf(\由马利科夫判据知该数据存在累进性系统误差\\n\     else    printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\     if(v1   if(v2-v1>=vmax)    printf(\由马利科夫判据知该数据存在累进性系统误差\\n\   else    printf(\由马利科夫判据知该数据不存在累进性系统误差\\n\}     for(i=0;i  printf(\由阿卑-赫梅特判据知该数据存在周期性系统误差\\n\\n\else   printf(\由阿卑-赫梅特判据知该数据不存在周期性系统误差\\n\\n\   printf(\给出置信区间:(请选择置信概率)\\n\printf(\置信概率0.95\\n2.置信概率0.99\\n\\n\scanf(\if(u==1)  {   s1=s2/sqrt(n);  t=t1[n-2];   printf(\