⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 误差程序.c

📁 这是我做的一个对输入数据进行误差分析处理的程序,包括求平均值,标准差,极限误差,判断误差类型等
💻 C
字号:
#include <stdio.h>
#include <math.h>
int  N  ;
//extern float c,t;
 
 /*********************子函数:求输入数组的算术平均值*******************************/

float pingjun(float *p)                   
 { int i;float e,sum=0.0;
   for (i=0;i<N;i++)
    sum+=p[i];
   e=sum/N;
   return e;
 }

 /******************子函数:求输入数组的标准差*******************************/

float biaozhuncha(float *p)                   
{ float b[100],aver;
  float sum1=0.0;
  int i; 
  aver=pingjun(p);
     for (i=0;i<N;i++)
	  { b[i]=(p[i]-aver)*(p[i]-aver);        
	  	sum1+=b[i];                       /*求残余误差平方和*/
	  } 
	 sum1=(float)sqrt(sum1/(N-1));              /*标准差*/
 return sum1;

}

/*******************求算术平均值标准差**********************************/

float aver_biaozhuncha (float *p)
{float aver_bzc;
	aver_bzc=(float)biaozhuncha(p)/sqrt(N);
	return aver_bzc;
}

/*********************求算术平均值的极限误差*****************************/
 
float aver_jixian(float *p)
{ double t, fenbu1[]={63.66,9.92,5.84,4.60,4.03,3.71,3.50,3.36,3.25,3.17,
	                   3.11,3.05,3.01,2.98,2.95,2.92,2.90,2.88,2.86,2.85,
	                   2.83,2.82,2.81,2.80,2.79,2.78,2.77,2.76,2.76,2.75,2.70,
	                   2.68,2.66,2.65,2.64,2.63,2.63,2.58},                    /*显著度取0.01*/
	        fenbu2[]={12.71,4.30,3.18,2.78,2.57,2.45,2.36,2.31,2.26,2.23,
	        	       2.20,2.18,2.16,2.14,2.13,2.12,2.11,2.10,2.09,2.09,2.08,
	        	       2.07,2.07,2.06,2.06,2.06,2.05,2.05,2.05,2.04,2.02,2.01,
	        	       2.00,1.99,1.99,1.99,1.98,1.96}    ;                            /*显著度取0.05*/     
  float aver_jx;
  int v,i,j,m;
  v=N-1;                /*自由度v=n-1*/
  j=v-1;
  printf("极限误差 = \n");
loop:  printf("          请选择显著度水平:'1'---0.01      '2'---0.05\n");
       m=getchar();
       putchar(m);
  /*    if(m=='1') t=fenbu1[j];
      else if(m=='2')  t=fenbu2[j];
      else printf(" \n输入错误 ! 请重新输入\n ");goto loop;*/
   
   	switch (m=getchar())
   	{ case '1' :for (i=0;i<38;i++)
   		          t=fenbu1[j]; break;
   	  case '2' :for (i=0;i<38;i++)
   	              t=fenbu2[j]; break;
   	  default :printf(" \n输入错误 ! 请重新输入\n ");goto loop;
   	//}
   }
  aver_jx=(float)t*aver_biaozhuncha(p);        /*极限误差为t与平均标准差之积*/
  return aver_jx;
}

/***************************粗大误差分析函数****************************/

float cudawucha ( float *p)
{ int i,m,n;
  float k,c,b[100],aver,sum=0.0,sum1=0.0,d;
  double tfenbu1[27]={11.46,6.53,5.04,4036,3.96,3.71,3.54,3.41,3.31,
  	                   3.23,3.17,3.12,3.08,3.04,3.01,3.00,2.95,2.93,
  	                   2.91,2.90,2.88,2.86,2.85,2.84,2.83,2.82,2.81};/*显著度取0.01*/
         
  double       tfenbu2[27]={4.97,3.56,3.04,2.78,2.62,2.51,2.43,2.37,2.33,2.29
  	                 ,2.26,2.24,2.22,2.20,2.18,2.17,2.16,2.15,2.14,2.13
  	                 ,2.12,2.11,2.10,2.10,2.09,2.09,2.08};  /*显著度取0.05*/
  
 
 for(m=0;m<N;m++)
  { sum=0.0;
  	sum1=0;
  	for (i=0;i<N;i++)
  	  { if (i==m)  continue;
  	  	sum+=p[i];
    	aver=sum/(N-1);
  	  }
  	 for (i=0;i<N;i++)
  	  { if (i==m)  continue;
        b[i]=(p[i]-aver)*(p[i]-aver);
        sum1+=b[i]; 
  	 }
  	   /*  printf("i=%d   ",i);
  	     printf("m=%d   ",m);
  	     printf("\n");
         printf("aver=%f  ",aver);
        printf("sum1=%f  ",sum1);*/
     
  	 c=(float)sqrt(sum1/(N-2));
loop:  printf("          请选择显著度水平:'1'---0.01      '2'---0.05\n");
       n=getchar();
       putchar(n);
   switch (n=getchar())
   	{ case '1' : k=(float)tfenbu1[N-4]; break;
   	  case '2' :k=(float)tfenbu2[N-4]; break;
   	  default :printf(" \n输入错误 ! 请重新输入\n ");goto loop;
   	
    }
     //k=(float)tfenbu[N-4];
     k*=c;
     d=(float)fabs(p[m]-aver);
      // printf("d=%f  ",d);
     //  printf("k=%f  \n",k);
  	 if (d>k)
    	  printf ("\n原数组中的 a[%d] 即数字 %f 存在粗大误差,必须剔除!\n",m,p[m]);
    	/*   for (i=0,j=0;i<N,j<N-1;i++,j++)
    	    {   
    	    	if (i==m)  continue; 
    	    	printf("i=%d   ",i);
    	     	p[j]=p[i];
    	     	printf("%f    ",p[j]);
    	     	
    	    }*/
    	 
    
    	
     // printf ("\n数组不存在粗大误差!\n");        
	
  }
  //for(j=0;j<N-1;j++)
  //printf("%f    ",p[j]);
  printf ("\n数组不存在粗大误差!\n");  
  
}
/*****************************主函数************************************/

main()
{  int i;    
   char d;
   float a[100];
   float c,t,m,n,cdwc;
  printf("请输入数组元素个数:\n");
  scanf("%d",&N);
  printf("请输入数组:\n");
  for (i=0;i<N;i++)
   scanf("%f",&a[i]);                         /*输入一数组,传递给子函数计算处理*/
   printf("\n");
  //clrscr();
loop:  printf("\n请选择操作: a--等精度误差分析\n");
       printf("              b--粗大误差分析\n");
       printf("              c--退出\n");
  d=getchar();
  putchar(d);
  switch(d=getchar())
  {
  	case 'a':c=pingjun(a);
              printf("数组的平均值=%f\n",c);
             t=biaozhuncha(a);
              printf("数组的标准差 =%f\n",t);
             m=aver_biaozhuncha(a);
              printf("算术平均值的标准差 =%f\n",m);
             n=aver_jixian(a);
              printf("极限误差 =%f\n",n); goto loop;
    case 'b': cdwc=cudawucha (a); goto loop;
    case 'c':break;
   default: printf("字符输入错误,请重新输入 \n");goto loop;
  }

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -