菜鸟求教
这是我的电子测量C语言程序“测量误差自动数据处理程序的设计”实验程序,为什么老是出错?# include "stdio.h"
# include "math.h"
# define N 100
float Data[N], vi[N];
/*定义常用变量为全局变量*/
float ave, sumxi, sumvi, sums2, s, s2;
int n, h; /*h用来判断是否存在系统误差*/
/************************
函数名:main( )
函数功能:主系统流程,输入数据、显示测量结果
*************************/
void fun( );
void deline( );
void delcyc( );
void main( )
{int I,c=2;
double t=2.26;
float aves,aves2,u;
printf("请输入要输入得数的个数:");
scanf("%d",&n);
printf("请输入%d个数",n);
for(I=0;I<n;I++)
scanf("%f",&Data[I]);
printf("/n输入的%d个数为:",n);
for(I=0;I<n;I++)
printf("%f",Data[I]);
printf("剔除坏值并求测量值的方差与标准差");
fun( ); /*Data[M]及n都定义为全局变量,所以只调用函数,不传递参数*/
printf("判断有无线形系统误差:");
deline( ); /*调用函数*/
printf("判断有无周期性系统误差:");
delcyc( ); /*调用函数*/
if(h=1) /* h=1说明存在系统误差*/
c=sumvi/(float)n; /* 消除系统误差*/
for(I=0;I<n;I++)
Data[I]=Data[I]+c;
printf("修正后的数据为:");
for(I=0;I<n;I++)
printf("%f",Data[I]);
printf("计算样本平均值的方差与标准差:");
aves2=s2/(float)n;
aves =sqrt(aves2);
printf("/n样本平均值的方差为:%f",aves2);
printf("/n样本平均值的标准差为:%f",aves);
if(n>20) u=c*aves;
else u=t*aves;
printf("测量结果的不准确度为:%f",u);
printf("测量的最终结果为:A=%f+-%f",ave,u);
/*****************************************
函数名:fun( )
函数功能:剔除坏值并求测量值的方差与标准差的估计值
******************************************/
void fun( )
{int I, j, k;
float sumxi=0.0, sumvi=0.0, sums2=0.0;
float Ar[n], t;
for (I=0; I<n;I++)
{sumxi=sumxi+Data[I];
sums2=sums2+Data[I]*Data[I];}
ave=sumxi/(float)n;
for (I=0;I<n;I++)
{vi[I]=Data[I]-ave;
sumvi=sumvi+vi[I];}
s2=(sums2-n*ave*ave)/(float)(n-1);
s=sqrts2;
for(I=0;I<n;I++)
Ar[I]=fabs(vi[I]);
t=Ar[0];j=0;
for(I=0;I<n;I++)
if(Ar[I]>t)
{t=Ar[I];j=I;}
if((t-3*s)>=0)
{printf("第%d个数据是坏值",j++);
printf("坏值=%f",Data[I])
for(k=j+1;k<n;k++)
{Data[j]=Data[k];n=n-1;}
fun( );}
else {printf("平均值为:%f",ave);
printf("样本方差为:%f",s2);
printf("样本方差为:%f",s);}
}
/********************************
函数名:deline( )
函数功能:判断是否存在线性系统误差
*********************************/
void deline( )
{int I;
float P=0.0,Q=0.0,M;
if (n%2=0)
{for (I=0;I<n/2;I++)
P=P+vi[I];
For (I=n/2;I<n;I++)
Q=Q+vi[I];}
else {for (I=0;I<(n-1)/2;I++)
P=P+vi[I];
for(I=(n-1)/2;I<n;I++)
Q=Q+vi[I];}
M=P-Q;
If(M=e^-3)
Printf("不存在线形系统误差");
else
printf("/n存在线形系统误差" );n=1;}}
/********************************
函数名:delcyc( )
函数功能:判断是否存在周期性系统误差
*********************************/
void delcyc( )
{int I; float sum=0.0;
for(I=0;I<n-1;I++)
sum=sum+vi[I]*vi[I+1];
if(fabs(sum)>sqrt(n-1)*s2)
printf("存在周期误差");h=1;}; --------------------编程问答-------------------- 这里是C#板块~撸主可以发到开发语言/框架 目录下的C语言板块求解答哦~~~~
--------------------编程问答--------------------
补充:.NET技术 , 其他语言