方格网上观测数据的窗口滑动平均处理C语言Word文档下载推荐.docx
《方格网上观测数据的窗口滑动平均处理C语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《方格网上观测数据的窗口滑动平均处理C语言Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
三.总体设计
#include<
stdio.h>
malloc.h>
voiddata(double**a,intx,intm,intn)
{
doublesum=0;
inti,j,y,z,n9=0,n25=0;
for(i=0;
i<
m;
i++)
{
for(j=0;
j<
n;
j++)
switch(x)
case1:
for(y=i-1;
y<
=i+1;
y++)
if(y<
0||y>
=m)
continue;
for(z=j-1;
z<
=j+1;
z++)
if(z<
0||z>
=n)
sum+=a[y][z];
n9++;
}
break;
case2:
for(y=i-2;
=i+2;
=m)
for(z=j-2;
=j+2;
=n)
n25++;
if(x==1)
a[i][j]=sum/n9;
elsea[i][j]=sum/n25;
sum=0;
}
intmain()
introw,col,x,i,j;
FILE*in,*out;
double**p;
printf("
\n\n\n\n\n\n\n\n"
);
*********************方格网上观测数据的窗口滑动平均处理******************\n"
**\n"
*请选择使用圆滑方式*\n"
*1.9点圆滑方式.*\n"
*2.25点圆滑方式.*\n"
*************************************************************************\n"
请选择使用方式1或2:
\n"
scanf("
%d"
&
x);
请输入行列数(行列数必须相同):
\n"
%d%d"
row,&
col);
in=fopen("
D:
\\data.TXT"
"
r"
out=fopen("
\\newdata.TXT"
w"
p=(double**)malloc(sizeof(double)*row);
for(i=0;
row;
p[i]=(double*)malloc(sizeof(p)*col);
for(j=0;
col;
j++)
fscanf(in,"
%lf"
p[i][j]);
if((in=fopen("
data.TXT"
))==NULL)
{printf("
cannotopenfile"
return0;
}
data(p,x,row,col);
fprintf(out,"
p[i][j]);
free(p[i]);
free(p);
fclose(in);
fclose(out);
}
四.详细设计
1.主函数
程序:
FILE*in,*out/*定义二个文件型指针in和out*/;
double**p/*定义双浮点型的指向指针p的指针*/;
2.主菜单函数
主页面用如下函数进行处理:
[]\b\b"
start:
c);
3.其中用到了data(p,x,row,col)子函数,它是处理数据的核心函数,
函数内容如下:
/*用到系统提供的标准函数库中的输入输出函数*/
/*动态内存分布*/
voiddata(double**a,intx,intm,intn)/*自定义函数:
窗口滑动平均*/
doublesum=0/*sum计数器*/;
j++)/*两层循环控制使数组中每一个数据都成为窗口中心一次*/
switch(x)/*选择窗口滑动平均的方式*/
=m)/*行超出观测区域*/
=n)/*列超出观测区域*/
sum+=a[y][z]/*sum累计窗口里所有数据的和*/;
n9++/*记住相加数据个数,为后面提供方便*/;
case2/*算法同上*/:
elsea[i][j]=sum/n25/*求取窗口内所有观测点的平均值即为窗口中心点的新值并保存至数组a[i][j]中*/;
n9,n25是两个记录相加次数的变量,最后用于求平均值,continue和break是控制求平均的数据在方格网上。
由于要求事先将数据以文件的形式存放,故我先建了一个data.TXT的文件,数值如下:
由于题意叙述不是很清楚,故不知道是如何平移,思索一番后我决定让系统自动将所有的数据都处理到,故用了两个for循,将数据全部处理了一遍!
M;
N;
{……
……
另外,超出观测数据的部分用if来控制,使得程序不至于出错,具体程序如下:
if(y<
=M)
continue;
………………
4.程序末尾对文件的运用
)/*以只读的方式打开文本文档*/;
)/*以只写的方式打开文本文档*/;
p[i]=(double*)malloc(sizeof(p)*col)/*申请内存*/;
p[i][j])/*从指针in所指的文件中提取数据*/;
))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
data(p,x,row,col)/*调用自定义窗口滑动平均处理函数*/;
p[i][j])/*将经过窗口滑动平均处理后的数组数据输出到指针out所指向的文件*/;
free(p)/*释放空间*/;
fclose(out)/*关闭文件*/;