程序代码:
#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");
}
}
定义一个5*5的矩阵(二维数组),赋上初值,通过调用函数实现:将数组中的最大值放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),在主函数中输出变换后的数组。
最新推荐文章于 2024-03-07 12:32:49 发布
该程序代码实现了一个功能,即在5x5的矩阵中找到最小值和最大值,并将最小值依次赋给左上、右上、左下和右下角,将最大值赋给中间位置。程序首先通过双重循环找到最小值和最大值,然后进行相应的值交换。最后打印原始矩阵和操作后的矩阵。
262

被折叠的 条评论
为什么被折叠?



