我写了一个,请楼主多多指教!
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
void input(int** p,int& n,int& m); //输入函数声明
int** change(int** p,int& n,int& m); //转换函数声明
void output(int** t,int& n,int& m); //输出函数声明
printf("请输入要生成的二位数组的行数:");
int n;
scanf("%d",&n);
printf("请输入要生成的二维数组的列数:");
int m;
scanf("%d",&m);
int **p,**t;
p=(int**)calloc(n,sizeof(int));
for(int i=0;i<n;i++)
p[i]=(int*)calloc(m,sizeof(int));
//函数调用
printf("请输入数组中的各个数字:\n");
input(p,n,m);
t=change(p,n,m);
printf("输出转换前的数组:\n");
output(p,n,m);
printf("输出转换后的数组:\n");
output(t,n,m);
free(p);
free(t);
return 1;
}
void input(int** p,int& n,int& m) //输入函数
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&p[i][j]);
}
int** change(int** p,int& n,int& m) //转换函数
{
int** t;
t=(int**)calloc(n,sizeof(int));
for(int i=0;i<n;i++)
t[i]=(int*)calloc(m,sizeof(int));
for(i=0;i<n;i++)
for(int j=0;j<m;j++)
{
t[i][j]=0;
if(i>0&&i<n-1&&j>0&&j<m-1)
{
if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j-1])
t[i][j]=1;
}
else if(i==0&&j>0&&j<m-1)
{
if(p[i][j]>p[i][j-1] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j+1])
t[i][j]=1;
}
else if(i==n-1&&j>0&&j<m-1)
{
if(p[i][j]>p[i][j-1] && p[i][j]>p[i][j+1] && p[i][j]>p[i][j-1])
t[i][j]=1;
}
else if(j==0 && i>0 && i<n-1)
{
if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1])
t[i][j]=1;
}
else if(j==m-1 && i>0 && i<n-1)
{
if(p[i][j]>p[i-1][j] && p[i][j]>p[i+1][j] && p[i][j]>p[i][j-1])
t[i][j]=1;
}
else if(i==0&&j==0)
{
if(p[i][j]>p[i+1][j] && p[i][j]>p[i][j+1])
t[i][j]=1;
}
else if(i==0&&j==m-1)
{
if(p[i][j]>p[i+1][j] && p[i][j]>p[i][j-1])
t[i][j]=1;
}
else if(i==n-1&&j==0)
{
if(p[i][j]>p[i-1][j] && p[i][j]>p[i][j+1])
t[i][j]=1;
}
else
{
if(p[i][j]>p[i-1][j] && p[i][j]>p[i][j-1])
t[i][j]=1;
}
}
return t;
}
void output(int** t,int& n,int& m) //输出函数
{
for(int i=0;i<n;i++)
{
putchar('\n');
for(int j=0;j<m;j++)
printf("%-4d ",t[i][j]);
}
putchar('\n');
return ;
}