高手进来看看C语言c++

来源:百度知道 编辑:UC知道 时间:2024/06/24 16:57:02
用C语言C语言C语言C语言C语言C语言C语言C语言C语言C语言C语言

方格网上观测数据的窗口滑动平均处理
要求
已知m行n列方格网上的观测数据,为了压制其中的高频干扰信号,使个观测点之间的数据平滑过渡,要求编写程序对该方格网上的数据进行窗口滑动平均处理。
所谓窗口滑动平均,就是用9点或25点的窗口在观测区域上移动,每次移动时窗口中心所对应的观测点重新取值为:窗口内所有观察点数据的平均值。
对于9点圆滑有:
ai,j=(ai-1,j-1+ai-1,j+ai-1,j+1+ai,j-1+ai,j+ai,j+1+ai+1,j-1+ai+1,j+ai+1,j+1)/9
对于25点圆滑的情况可自己列出。
功能:
1使用文件输入输出,已知数据要事先存在文件中,处理结果要输出到文件中。
2观测点的行列和列数任意。
3使用9点还是25点圆滑可选。
4对于窗口跨越观测区域内外的边缘点,只取其中落在观测区域内的数据参加平均值计算。
提示
m行n列方格网数据事先存放在文件中,在处理过程中,可采用二维数组存储,然后根据9点圆滑或者25点圆滑对观测数据进行滑动窗口平均处理,计算结果写入结果文件。

下面是一个c++版的 也不知道对不对反正运行不了 不过可以参考一下我还有82分好答案全给了
#include<iostream>
#include<fstream>
using namespace std;

void data(double* *a,int x,int m,int n)
{
double sum=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)//两层循环控制使数组中每一个数据都成为窗口中心一次
{
switch(x)
{
case 9:
for(int y=i-1;y<=i+1;y++)
{
if(y&

我修改成C语言的了,并且能编译通过了,可以运行了
只是,运行的结果,对不对,我没有验证。

#include<stdio.h>
#include<malloc.h>

void data(double* *a,int x,int m,int n)
{
double sum=0;
int i,j,y,z;

//两层循环控制使数组中每一个数据都成为窗口中心一次
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
switch(x)
{
case 9:
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)//列超出观测区域
continue;
sum+=a[y][z];//sum累计窗口里所有数据的和
}
}
break;
case 25://算法同上
for(y=i-2;y<=i+2;y++)
{
if(y<0||y>=m)
continue;
for(z=j-2;z<=j+2;z++)
{
if(z<0||z>=n)
continue;
sum+=a[y][z];
}
}
break;
}
a