无语是我的本性。
#include <stdio.h>
#include <stdlib.h>
#define DataType int
#define N 500//数据长度
int M=0,A=0;
DataType data[N];
//函数声明
DataType GetMid(DataType *data,int i,DataType *dm);
void ReadData(DataType *data,const char *filename);
void MidFilter(DataType *dm);
void AAFilter();
DataType GetAA(DataType *d,int i);
int main(){
DataType *dm;
ReadData(data,"E://data.txt");
printf("输入中值滤波和均值滤波的窗口大小:");
scanf("%d %d",&M,&A);
dm = (DataType *)malloc(sizeof(DataType)*M);
MidFilter(dm);
free(dm);
AAFilter();
return 0;
}
DataType cmp(const void *a,const void *b){
return (*(int *)a - *(int *)b);
}
DataType GetMid(DataType *da,int i,DataType *d){
if(i<M/2){
i = 0;
}else{
i -= M/2;
}
for(int k=0;k<M;k++){
d[k] = da[i++];
}
qsort(d,10,sizeof(d[0]),cmp);
return (d[M/2-1]+d[M/2])/2;
}
void ReadData(DataType *data,const char *filename){
FILE *fp;
fp = fopen(filename,"r");
DataType d;
int i = 0;
while(!feof(fp)){
fscanf(fp,"%d\n",&d);
data[i++] = d;
}
fclose(fp);
}
void MidFilter(DataType *dm){
FILE *fp;
fp = fopen("E://mid.txt","w");
for(int i=0;i<N;i++){
fprintf(fp,"%d\n",GetMid(data,i,dm));
}
fclose(fp);
}
void AAFilter(){
FILE *fp;
fp = fopen("E://aav.txt","w");
for(int i=0;i<N;i++){
fprintf(fp,"%d\n",GetAA(data,i));
}
fclose(fp);
}
DataType GetAA(DataType *d,int i){
if(i<A/2){
i = 0;
}else{
i -= A/2;
}
DataType sum = 0;
for(int k=0;k<A;k++){
sum += d[i++];
}
return sum/A;
}
运行结果: