头文件
#include <stdio.h>
主函数
int main()
{
int arr[5][5] = { {16,2,3,4,5,},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25},{31,32,33,34,35} };
int i, j;
printf("改变前:\n");
print(arr); //输出改变前矩阵
move(arr);//改变四个边
maxx(arr);//改变中心
printf("改变后:\n");
print(arr);//输出改变后
return 0;
}
输出函数
void print(int* p)//输出函数
{
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%-4d", *(p + i * 5 + j));
}
printf("\n");
}
}
最大值中心函数
void maxx(int* p)
{
int i, j, t, * pmax;
pmax = p;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (*(p + i * 5 + j) > *pmax)
pmax = p + i * 5 + j;
}
}
t = *pmax;
*pmax = *(p +5*2+2);
*(p + 5 * 2 + 2) = t;
}
最小值四边函数
void move(int* p)
{
int i, j,*pmin,t;
pmin = p;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (*(p + i * 5 + j) < *pmin)//判断是否小于第一位
pmin = p + i * 5 + j;//把最小值存放到pmin中,使得pmin这个地址指向p + i * 5 + j地址
}
}
t = *pmin;
*pmin = *p; //把最小值放如第一位
*p = t;
/*pmin = p + 1;*/
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((p != (p + i * 5 + j)) && (*(p + i * 5 + j) < *pmin)) // 使得第二位的值不等于不等于前面的值
pmin = p + i * 5 + j;
}
}
t = *pmin;//第二
*pmin = *(p+4);
*(p+4) = t;
/*pmin = p + 1;*/
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((p+4 != (p + i * 5 + j)) && (p !=p + i * 5 + j) && (*(p + i * 5 + j) < *pmin))// 使得第三位的值不等于不等于前面的值
pmin = p + i * 5 + j;
}
}
t = *pmin;//第三
*pmin = *(p + 20);
*(p + 20) = t;
pmin = p + 1;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if ((p + 20 != (p + i * 5 + j)) && (p + 4 != (p + i * 5 + j)) && (p != p + i * 5 + j) && (*(p + i * 5 + j) < *pmin))// 使得第四位的值不等于不等于前面的值
pmin = p + i * 5 + j;
}
}
t = *pmin;//第三
*pmin = *(p + 24);
*(p + 24) = t;
}
仅供参考,如有雷同纯属意外;