📄 a.cpp
字号:
#include <iostream.h>
#include <math.h>
void main()
{
float sum,v,x,A,a[100],b[100],c[100][100];
float b0,b1,b2,b3,b4 ,y,dx,dy;
float v1 ,xbzc,average ,bzc,sjwc;
float sumx,sumdx,sumy,sumdy,sumxy,sumdxy,sumxydx,sumxydy,sum2;
int i,n,w,d,e, j,n1,n2,s,t;
b0=b1=b2=b3=b4=0;
loop1:
{
cout<<"请选择要输入的项目:"<<endl;
cout<<"计算均值及校核请输入0"<<endl;
cout<<"计算标准差及方差请输入1"<<endl;
cout<<"计算函数系统误差请输入2"<<endl;
cout<<"计算函数随机误差请输入3"<<endl;
cin>>s;
}
//000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
if(s==0)
{
cout<<"请输入样本个数n:";
cin>>n;
cout<<"请输入"<<n<<"次测量值的大小,并以空格隔开。"<<endl;
for(i=0,sum=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
x=sum/n;
cout<<"样本平均值大小为:"<<x<<endl;
//下面开始算样本平均值X小数点后的位数
w=floor(x+0.00001);
if ( x-w>1e-5)
{
if (x*10-floor(x*10+1e-4)>1e-4)
{
if (x*100-floor(x*100+1e-3)>1e-3)
{
if(x*1000-floor(x*1000+1e-2)>1e-2)
A=0.0001;
else A=0.001;
}
else A=0.01;
}
else A=0.1;
}
else A=0;
cout<<A<<endl;
//下面要比较输入的样本有效位和样本平均值X小数点后的位数来确定A的大小
for (i=0;i<n;i++)
{
if (a[i]*1000-floor(a[i]*1000+1e-2)>1e-2)
{ b4=0.0001,b3=0.001,b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
if (b3==0)
{
for (i=0;i<n;i++)
{
if (a[i]*100-floor(a[i]*100+1e-3)>1e-3)
{ b3=0.001,b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
}
if(b2==0)
{
for (i=0;i<n;i++)
{
if (a[i]*10-floor(a[i]*10+1e-4)>1e-4)
{ b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
}
if (b1==0)
{
for (i=0;i<5;i++)
{
if (a[i]-floor(a[i]+0.0001)>1e-5)
{ b1=0.1,b0=0;
break;
}
else continue;
}
}
else b0==0;
if (b4)
A=b4>A?A:b4;
else if(b3)
A=b3>A?A:b3;
else if (b2)
A=b2>A?A:b2;
else if (b1)
A=b1>A?A:b1;
else A=A;
cout<<A<<endl;
//下面由求得的A通过第二种规则校核该算术平均值
for(v=0,i=0;i<n;i++)
v+=(a[i]-x); //求残余误差代数和
cout<<"用第二种规则校核该算术平均值,求得残余误差代数和为:"<<v<<", "<<"A为:"<<A<<",";
if(n%2==0)
{
if(fabs(v)<=(n*A/2))
cout<<"经校核说明计算结果正确。"<<endl;
else
cout<<"经校核说明计算结果错误。"<<endl;
}
else if (fabs(v)<=(n/2-0.5)*A)
cout<<"经校核说明计算结果正确。"<<endl;
else
cout<<"经校核说明计算结果错误。"<<endl;
}
//111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
else if (s==1)
{
cout<<"请输入样本个数n:";
cin>>n;
cout<<"请输入"<<n<<"次测量值的大小,并以空格隔开。"<<endl;
for(i=0,sum=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
x=sum/n;
w=floor(x+0.00001);
if ( x-w>1e-5)
{
if (x*10-floor(x*10+1e-4)>1e-4)
{
if (x*100-floor(x*100+1e-3)>1e-3)
{
if(x*1000-floor(x*1000+1e-2)>1e-2)
A=0.0001;
else A=0.001;
}
else A=0.01;
}
else A=0.1;
}
else A=0;
for (i=0;i<n;i++)
{
if (a[i]*1000-floor(a[i]*1000+1e-2)>1e-2)
{ b4=0.0001,b3=0.001,b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
if (b3==0)
{
for (i=0;i<n;i++)
{
if (a[i]*100-floor(a[i]*100+1e-3)>1e-3)
{ b3=0.001,b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
}
if(b2==0)
{
for (i=0;i<n;i++)
{
if (a[i]*10-floor(a[i]*10+1e-4)>1e-4)
{ b2=0.01,b1=0.1,b0=0;
break;
}
else continue;
}
}
if (b1==0)
{
for (i=0;i<5;i++)
{
if (a[i]-floor(a[i]+0.0001)>1e-5)
{ b1=0.1,b0=0;
break;
}
else continue;
}
}
else b0==0;
if (b4)
A=b4>A?A:b4;
else if(b3)
A=b3>A?A:b3;
else if (b2)
A=b2>A?A:b2;
else if (b1)
A=b1>A?A:b1;
else A=A;
for(v=0,i=0;i<n;i++)
v+=(a[i]-x); //求残余误差代数和
for ( i=0,v1=0;i<n;i++)
v1+=pow((a[i]-x),2);
bzc=sqrt (v1/(n-1));
xbzc=bzc/sqrt(n);
cout<<"标准差的大小为:"<<bzc<<endl;
cout<<"算术平均值的标准差大小为:"<<xbzc<<endl;
cout<<"方差的大小为:"<<pow(bzc,2)<<endl;
}
//22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
else if (s==2)
{
loop:{ cout<<"选择一元函数请输入1,选择二元函数请输入2:";
cin>>t;
}
if(t==1)//一元函数系统误差
{
cout<<"请输入变量x的值及其误差值dx:"<<endl;
cin>>x>>dx;
cout<<"请输入变量X的最高次数n"<<endl;
cin>>n;
for(i=1,dy=0;i<=n;i++)
{
cout<<"请输入x的"<<i<<"次方的系数"<<endl;
cin>>a[i];
}
for(i=1,dy=0;i<=n;i++)
{
dy+=i*a[i]*pow(x,i-1)*dx;
}
cout<<"y的系统误差为dy="<<dy<<endl;
}
else if(t==2)//二元函数系统误差
{
cout<<"请输入第1个变量x的最高次数:"<<endl;
cin>>n1;
cout<<"请输入第1个变量x的值:"<<endl;
cin>>x;
cout<<"请输入变量x的误差:"<<endl;
cin>>dx;
for (i=1;i<=n1;i++)
{
cout<<"请输入x的"<<i<<"次方的系数"<<endl;
cin>>a[i];
}
cout<<"请输入第2个变量y的最高次数:"<<endl;
cin>>n2;
cout<<"请输入第2个变量y的值:"<<endl;
cin>>y;
cout<<"请输入变量y的误差:"<<endl;
cin>>dy;
for (i=1;i<=n2;i++)
{
cout<<"请输入y的"<<i<<"次方的系数"<<endl;
cin>>b[i];
}
for (i=1;i<=n1;i++)
for(j=1;j<=n2;j++)
{
cout<<"请输入x "<<i<<"次方y "<<j<<"次方的系数"<<endl;
cin>>c[i][j];
cout<<"c["<<i<<"]["<<j<<"]="<<c[i][j]<<endl;
}
for(i=1,sumx=sumdx=0;i<=n1;i++)
{
sumx+=a[i]*pow(x,i);
sumdx+=a[i]*i*pow(x,i-1)*dx;
}
cout<<"sumx="<<sumx<<endl;
cout<<"sumdx="<<sumdx<<endl;//对x的n次方求导
for(j=1,sumy=sumdy=0;j<=n2;j++)
{
sumy+=b[j]*pow(y,j);
sumdy+=b[j]*j*pow(y,j-1)*dy;//对y的n次方求导
}
for(i=1,sumxy=sumxydx=sumxydy=0;i<=n1;i++)
for(j=1;j<=n2;j++)
{
sumxy+=c[i][j]*pow(x,i)*pow(y,j);//含xy项的求和
sumxydx+=c[i][j]*i*pow(x,i-1)*pow(y,j)*dx;//对含xy项求x偏导
sumxydy+=c[i][j]*pow(x,i)*j*pow(y,j-1)*dy;//对含xy项求y偏导
sumdxy=sumxydx+sumxydy;//对含xy项求x、y全微分
}
cout<<"sumdxy="<<sumdxy<<endl;
sum2=sumdx+sumdy+sumdxy;
cout<<"函数系统误差大小为:"<<sum2<<endl;
}
else
{
cout<<"您的输入有误!请重新输入:";
goto loop;
}
}
//333333333333333333333333333333333333333333333333333333333333333333333333333
else if (s==3)
{
cout<<"请输入一元函数变量x的最高次数:";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"请输入x "<<i<<"次方的系数:"<<endl;
cin>>a[i];
}
cout<<"请输入样本的个数:"<<endl;
cin>>n1;
cout<<"请输入样本值,并以空格隔开:";
for (i=1,sumx=0;i<=n1;i++)
{
cin>>b[i];
sumx+=b[i];
}
average=sumx/n1;
for (i=1,v=0;i<=n1;i++)
{
v+=pow(b[i]-average,2);
}
bzc=sqrt(v/(n1-1));
for (i=1,sumdx=0;i<=n;i++)
{
sumdx+=i*a[i]*pow(average,i-1);
}
cout<<"sumdx="<<sumdx<<endl;
sjwc=sumdx*bzc;
cout<<"一元函数随机误差值为:"<<sjwc<<endl;
}
//
else
{
cout<<"您的输入有误!请重新输入:"<<endl;
goto loop1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -