程序代码:
#include<stdio.h>
int min(int (*a)[5])
{
int i,j,*min,t;
min=a;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*(a[i]+j)<*min)
min=(a[i]+j); //交换地址
}
t=*min;
*min=*(a[0]+0);
*(a[0]+0)=t;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(i==0&&j==0) continue; //跳过左上角最小值
if(*(a[i]+j)<*min)
min=(a[i]+j);
}
t=*min;
*min=*(a[0]+4);
*(a[0]+4)=t;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(i==0&&j==0||i==0&&j==4) continue; //跳过左上 右上
if(*(a[i]+j)<*min)
min=(a[i]+j);
}
t=*min;
*min=*(a[4]+0);
*(a[4]+0)=t;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(i==0&&j==0||i==0&&j==4||i==4&&j==0) continue; //跳过左上 右上 左下
if(*(a[i]+j)<*min)
min=(a[i]+j);
}
t=*min;
*min=*(a[4]+4);
*(a[4]+4)=t;
}
int max(int (*a)[5])
{
int i,j,*max,t;
max=a;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
if(*(a[i]+j)>*max)
max=(a[i]+j);
}
t=*max;
*max=*(a[2]+2);
*(a[2]+2)=t;
}
int main()
{
int a[5][5]={{16,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
int i,j;
printf("原先矩阵:\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%4d ",a[i][j]);
printf("%4d",a[i][j]);
printf("\n");
}
min(a); //找出最小的一一赋给左上 右上 左下 右下
max(a); //找出最大赋给中间
printf("新矩阵:\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%4d ",a[i][j]);
printf("%4d",a[i][j]);
printf("\n");
}
}
07-08
292
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-08
4634
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交