简单数据处理的计算机语言实现Word文档下载推荐.docx
《简单数据处理的计算机语言实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《简单数据处理的计算机语言实现Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
本程序实现了简单的数据处理功能,达到了设计要求。
三、编程与调试过程总结
本次作业从流程图设计到程序调试完毕共用了整一下午时间,基本实现了设计的要求。
在编程和调试的过程中有不少收获,现简要总结如下:
首先最直接的一点就是:
通过这次作业,我对整个第二章的知识的结构和各知识点相互间的关系理解得更透彻了,同时我的计算机语言的实践能力也得到了提高。
在调试过程中发现了一个我平时没注意到的问题:
一开始,误差分析子函数是这样写的:
//误差分析子函数
voiderrorcheck(intN,double*pv,structresult*resultx)
{
//intljerflag=0;
intcicleerflag=circleerror(N,pv,resultx->
xb);
if(cicleerflag==1)
print2(resultx->
xj,resultx->
elseif(cicleerflag==0)
intljerflag=ljerror(N,pv,resultx->
vm);
//ljerflag=ljerror(N,pv,resultx->
else
cout<
"
数据处理过程出错!
!
;
if(ljerflag==1)
print3(resultx->
else
{
resultx->
xjb=resultx->
xb/sqrt(N);
print4(resultx->
xb,resultx->
xjb);
}
}
编译时会出现"
errorC2065:
'
ljerflag'
:
undeclaredidentifier"
的错误。
比较了一下前后的程序,发现其实变量cicleerflag,ljerflag的语法位置是一样的,可是为什么只报ljerflag有错呢?
分析了一下,猜想应该是编译规则的原因照成的:
系统在编译时对于分支程序只编译第一个分支,故在第二个分支中的变量定义没有检测到。
所以猜想将变量定义语句"
intljerflag=0;
提前,即将黑体的那句曲调,用注释掉的那两句代替,程序运行正常。
由于时间较紧,本程序还是存在很多需要完善的地方,比如代码可以进行优化,提高程序的效率,利用VC为其设计一个较好的操作界面等。
在以后的升级版本中,我将继续进行这些工作。
[附录1]
[附录2]:
/*********************************************************/
/*功能:
实验数据的简单处理
/*作者:
舒光华北京交通大学电子学院电子0402班
/*日期:
2006年10月14日
/*版本号:
v1.0
#include<
iostream>
usingnamespacestd;
math.h>
structresult{
doublexj;
doublexb;
doublexjb;
doublevm;
};
doublech[50]={
0,0,0,0,0,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.40,2.41,2.42,2.43,2.45,2.46,2.47,2.48,2.49,
2.50,2.51,2.52,25.3,2.54,2.54,2.55,2.56,2.56,2.57,
intprepare(intN,double*px,double*pv,result*resultx);
//返回值用于控制
//检测坏值的循环
voidabnormal(double*px,intk,int*pn);
//剔除坏值子函数
voiderrorcheck(intN,double*pv,structresult*resultx);
//剔除坏值子函数
intcircleerror(intN,double*pv,doublexb);
//误差分析子函数
intljerror(intN,double*pv,doublevm);
//周期误差分析子函数
voidprint1(intk,double*px);
voidprint2(doublexj,doublexb);
//输出存在周期误差的数据处理结果
voidprint3(doublexj,doublexb);
//输出存在累进性误差的数据处理结果
voidprint4(doublexj,doublexb,doublexjb);
//输出不存在误差的数据处理
//结果
/*******************主函数*********************/
voidmain()
//变量定以及初始化
intN;
int*pn=&
N;
intabflag=1;
//interflag=0;
//intpflag=1;
structresultresult1;
structresult*resultx=&
result1;
resultx->
xj=0;
xb=0;
xjb=0;
vm=0;
请输入您要处理的数据的个数:
cin>
if(N<
5)
{cout<
您要输入的数据个数太少,处理的结果可能很不准确,"
cout<
数据个数至少在5个以上才能获得比较满意的处理结果,"
请重新输入您要处理的数据个数:
//动态分配内存
double*x;
x=newdouble[N];
double*v;
v=newdouble[N];
//数据输入
开始输入数据:
endl;
for(inti=0;
i<
i++)
x["
]="
cin>
x[i];
//做好剔除坏值的准备工作
while(abflag)
abflag=prepare(N,x,v,resultx);
if(abflag>
0)
{
abnormal(x,abflag,pn);
}
坏值剔除完毕!
剩余数据"
N<
个"
下面进行误差分析:
errorcheck(N,v,resultx);
//释放内存空间
delete[]x;
delete[]v;
/*****************子函数****************************/
//数据初步处理子函数
intprepare(intN,double*px,double*pv,result*resultx)
doubletemp1=0;
doubletemp2=0;
doubletemp3=0;
//计算均值
for(inti=0;
{
temp1+=px[i];
temp1=temp1/N;
xj=temp1;
//获得最大残差
for(intj=0;
j<
j++)
pv[j]=px[j]-temp1;
temp2=abs(pv[0]);
for(intm=1;
m<
m++)
if(abs(pv[m])>
temp2)
temp2=abs(pv[m]);
vm=temp2;
//计算标准差
for(intn=0;
n<
n++)
temp3+=px[n]*px[n];
temp3=sqrt((temp3-N*temp1*temp1)/(N-1));
xb=temp3;
doubletemp4=ch[N-1];
for(intl=0;
l<
l++)
if(abs(px[l]-temp1)>
temp4*temp3)
return(l+1);
return0;
voidabnormal(double*px,intk,int*pn)
利用肖维纳剔除坏值:
print1(k,px);
for(inti=k-1;
*pn-1;
px[i]=px[i+1];
*pn=*pn-1;
//输出剔除坏值的信息
voidprint1(intk,double*px)
第"
k<
个数据"
k-1<
px[k-1]<
为坏值,"
将予以剔除!
ljerflag=ljerror(N,pv,resultx->
resultx-