将一个55的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一函数实现之。用main函数调用。本题要求用行指针实现。
输入格式:
输入一共5行,表示一个5×5的矩阵
输出格式:
输出也是5行,表示一个5×5的矩阵,每个元素用%3d格式输出
输入样例:
6 7 18 9 14
5 24 2 9 10
22 8 5 1 8
4 12 5 7 2
13 33 8 7 9
输出样例:
1 7 18 9 2
5 24 14 9 10
22 8 33 6 8
9 12 5 7 13
2 5 8 7 4
参考 :
#include <stdio.h>
void pos(int(* p)[5],int n,int m);
int main()
{
int i,j;
int a[5][5];
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
scanf("%d",&a[i][j]);
}
}
pos(a,5,5);
for(i=0; i<5; i++)
{
for(j=0; j<5; j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
void pos(int(* p)[5],int n,int m)
{
int max,min,pos1=0,pos2=0;
int i,j,t;
max=p[0][0];
min=p[0][0];
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(max<p[i][j])
{
max=p[i][j];
pos1=i;
pos2=j;
}
}
}
t=p[2][2];
p[2][2]=max;
p[pos1][pos2]=t;
pos1=0;pos2=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(min>p[i][j])
{
min=p[i][j];
pos1=i;
pos2=j;
}
}
}
t=p[0][0];
p[0][0]=min;
p[pos1][pos2]=t;
min=p[0][1];
pos1=0;
pos2=1;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if(i==0 && j==0) continue;
else if(min > p[i][j])
{
min=p[i][j];
pos1=i;
pos2=j;
}
}
}
t=p[0][4];
p[0][4]=min;
p[pos1][pos2]=t;
min=p[0][1];
pos1=0;
pos2=1;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if((i==0 && j==0) || (i==0 && j==4)) continue;
else if(min > p[i][j])
{
min=p[i][j];
pos1=i;
pos2=j;
}
}
}
t=p[4][0];
p[4][0]=min;
p[pos1][pos2]=t;
min=p[0][1];
pos1=0;
pos2=1;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
if((i==0 && j==0) || (i==0 && j==4) || (i==4 && j==0)) continue;
else if(min > p[i][j])
{
min=p[i][j];
pos1=i;
pos2=j;
}
}
}
t=p[4][4];
p[4][4]=min;
p[pos1][pos2]=t;
}