📄 73.c
字号:
/*
在一个5*5矩阵中最大的元素放在中心,
4个角分别放4个最小的元素(四个最小的元素按从左到右,
从上到下的顺序,依次从小到大存放),写一个函数实现。
*/
#include<stdio.h>
void change(int *p);
void mofang1()
{
int a[5][5],*p,i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=5*i+j; //对二维数组赋值
}
}
p=&a[0][0];//把二维数组的首地址赋值给指针
change(p);
printf("after change,the matrix:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}
void change(int *p)
{
int i,j,temp;
int *pmax,*pmin;
pmax=p;
pmin=p;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(*pmax<*(p+5*i+j)) pmax=p+5*i+j; //查找二维数组的最大值;
if(*pmin>*(p+5*i+j)) pmin=p+5*i+j; //查找二维数组的最小值;
}
}
temp=*(p+12); //最大值和二维数组的中间数交换值
*(p+12)=*pmax;
*pmax=temp;
temp=*p; //最小值和二维数组的第一个元素交换值
*p=*pmin;
*pmin=temp;
pmin=p+1; //指向最小值的指针指向二维数组的第二个元素;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((p+5*i+j)!=p&&*pmin>*(p+5*i+j)) //寻找下一个的最小值;
pmin=p+5*i+j;
}
}
temp=*(p+4); //第二个最小值与二维数组的右上角的元素进行值交换
*(p+4)=*pmin;
*pmin=temp;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((p+5*i+j)!=(p+4)&&(p+5*i+j)!=p&&*pmin>*(p+5*i+j)) //寻找第三个最小值
pmin=p+5*i+j;
}
}
temp=*(p+20); //第三个最小值与二维数组的左下角元素交换
*(p+20)=*pmin;
*pmin=temp;
pmin=p+1;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if((p+5*i+j)!=(p+20)&&(p+5*i+j)!=(p+4)&&(p+5*i+j)!=p&&*pmin>*(p+5*i+j)) //寻找第四个最小值
pmin=p+5*i+j;
}
}
temp=*(p+24); //第四个最小值与二维数组的右下角的元素进行交换
*(p+24)=*pmin;
*pmin=temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -