第八章: 8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)
思考:
1.输入矩阵的值
int a[5][5] = { 0 };
int i = 0, j = 0;
printf("请输入一个5*5的数组:\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%d", &a[i][j]);
}
}
2. 交换最大值最小值
二维数组在内存中连续存放
int* p = &a[0][0];
change(p);
(1)找出最大值、最小值,并且交换
for (i = 0; i < 5; i++)
{
for (j = i; j <5; j++)
{
if (*(p + 5 * i + j) > * max)
max = p + 5 * i + j;
if (*(p + 5 * i + j) < * min)
min = p + 5 * i + j;
}
}
int tmp = 0;
tmp = *(p + 12);
*(p + 12) = * max;
* max = tmp;
tmp = *p;
*p = *min;
*min = tmp;
(2)找出最小值,并且交换
min = p + 1;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (((p + 5 * i + j)!=p) &&(*(p + 5 * i + j) < * min))
min = p + 5 * i + j;
}
}
tmp = *(p+4);
*(p+4) = * min;
* min = tmp;
3. 输出数组
printf("\n\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
思考完毕,开始敲代码
//将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素
//(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void change(int* p)
{
int* max;
max = p;
int* min;
min = p;
int i = 0, j = 0;
//找出最大值,并且交换给中间值
for (i = 0; i < 5; i++)
{
for (j = i; j <5; j++)
{
if (*(p + 5 * i + j) > * max)
max = p + 5 * i + j;
if (*(p + 5 * i + j) < * min)
min = p + 5 * i + j;
}
}
int tmp = 0;
tmp = *(p + 12);
*(p + 12) = * max;
* max = tmp;
tmp = *p;
*p = *min;
*min = tmp;
//找出最小值,并且交换给右上角的值
min = p + 1;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (((p + 5 * i + j)!=p) &&(*(p + 5 * i + j) < * min))
min = p + 5 * i + j;
}
}
tmp = *(p+4);
*(p+4) = * min;
* min = tmp;
//找出最小值,并且交换给左下角的值
min = 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) && (*(p + 5 * i + j) < * min))
min = p + 5 * i + j;
}
}
tmp = *(p + 20);
*(p + 20) = * min;
* min = tmp;
//找出最小值,并且交换给右下角的值
min = 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)&&(*(p + 5 * i + j) < * min))
min = p + 5 * i + j;
}
}
tmp = *(p + 24);
*(p + 24) = * min;
* min = tmp;
}
int main()
{
//输入矩阵的值
int a[5][5] = { 0 };
int i = 0, j = 0;
printf("请输入一个5*5的数组:\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
scanf("%d", &a[i][j]);
}
}
//交换最大值最小值
int* p = &a[0][0];
change(p);
//输出数组
printf("\n\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
输出结果:
标签:tmp,min,++,max,元素,个角,int,printf,8.10 From: https://blog.csdn.net/2301_78189441/article/details/143481487