电子测量.cpp

来自「自己编写的关于电子测量的莱特准则和格拉布斯准则的算法」· C++ 代码 · 共 78 行

CPP
78
字号
#include<stdio.h>
#include<math.h>
void main()
{
	int n,h;
	float x[100];

lab:
	printf("请输入数据总个数\n");
	scanf("%d",&n);
	if(n<3 || n>20)
	{	
		printf("错误,请输入一个3到20之间的整数.\n");   //防止所判断的数据超出
		goto lab;
	}


	printf("请输入数据:\n");
	for(int i=0;i<n;i++)
		scanf("%f",&x[i]);


    do
	{printf("请选择置信概率:\n 0.	95%%\n 1.	99%%\n");   //选择置信概率
	 scanf("%d",&h);
	}while(h!=0 && h!=1);

	printf("需处理的数据为:\n");
	for(i=0;i<n;i++)
		printf("%.3f  ",x[i]);
	printf("\n");

	float x0=0;   
	for(i=0;i<n;i++)
		x0=x0+x[i];
	x0=x0/n;   //求出数学期望
	printf("期望为:\n%.3f\n",x0);

	float d=0,e=0,f=0,g=0;
	for(i=0;i<n;i++)
		d=d+(x[i]-x0)*(x[i]-x0);
	e=sqrt(d/(n-1));   //标准差
	printf("标准差为:\n%.3f\n",e);
	
	int j=0;
	printf("莱特准则判断结果为:\n");
	for(i=0;i<n;i++)
	{
		if(abs(x[i]-x0)>3.0*e)
		{
			printf("第%d个值%.3f为坏值.\n",i,x[i]);  //坏值,打印
			j++;  
		}  //坏值个数
	}
		if(j==0)
			printf("无坏值.\n");
    printf("\n");


	float gbl[2][21]={0,0,0,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,
		                  0,0,0,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};
	float k=0;
	k=gbl[h][n];
	printf("格布拉斯置信系数g为:\n%.2f\n",k);

	int l=0;
	printf("格布拉斯准则判断结果为:\n");
	for(i=0;i<n;i++)
	{
		if(abs(x[i]-x0)>k*e)
		{
			printf("第%d个值%.3f为坏值.\n",i,x[i]);  //坏值,打印
			l++;  
		}  //坏值个数
	}
		if(l==0)
			printf("无坏值.\n");
}

⌨️ 快捷键说明

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