阅读下面程序,完成下面函数,将一个5×5的矩阵(二维整型数组)中最大的元素存放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放)。存放方式即与原来元素互换。假定数组中元素各不相同。请使用指针实现。
#include <stdio.h>
#define N 5
void change(int *p)
{
///程序填空,请将该函数填写完整
}
int main()
{
int a[N][N], i, j, *p;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d", &a[i][j]);
p = &a[0][0];
change(p);
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}
输入
输入包含五行,为按照行列顺序输入的二维数组元素。
第一行到第五行每行均有5个整数,相邻两项之间用一个空格隔开。
输出
输出包含五行,是调整后的矩阵。每行均有5个整数,相邻两项之间用一个空格隔开。
输入示例
35 34 33 32 31
30 29 28 27 26
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
输出示例
11 34 33 32 12
30 29 28 27 26
25 24 35 22 21
20 19 18 17 16
13 23 15 31 14
数据范围
输入输出均为int范围的整数
#include <stdio.h>
#define N 5
void change(int *p)
{
int cpy[25],i,j,t,a,b,c,d,max;
for(i=0;i<25;i++){
cpy[i]=*(p+i);
}
for (j=0;j<25;j++){
for (i=0;i<25-j-1;i++){
if (cpy[i]>cpy[i+1]){
t=cpy[i];
cpy[i]=cpy[i+1];
cpy[i+1]=t;
}
}
}
a=cpy[0];
b=cpy[1];
c=cpy[2];
d=cpy[3];
max=cpy[24];
for(i=0;i<25;i++){
if(*(p+i)==a){
*(p+i)=*p;
*p=a;
}
}
for(i=0;i<25;i++){
if(*(p+i)==b){
*(p+i)=*(p+4);
*(p+4)=b;
}
}
for(i=0;i<25;i++){
if(*(p+i)==c){
*(p+i)=*(p+20);
*(p+20)=c;
}
}
for(i=0;i<25;i++){
if(*(p+i)==d){
*(p+i)=*(p+24);
*(p+24)=d;
}
}
for(i=0;i<25;i++){
if(*(p+i)==max){
*(p+i)=*(p+12);
*(p+12)=max;
}
}
}
int main() {
int a[N][N], i, j, *p;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d", &a[i][j]);
p = &a[0][0];
change(p);
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}