(2)将一个5X5的矩阵(二维数组)中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用(本题是第8章第10题)。运用指针
时间: 2024-03-09 13:44:17 浏览: 218
5*5的矩阵中最大的元素放在中心 四个角分别放四个最小的元素
好的,下面是使用指针实现的代码:
```c
#include <stdio.h>
void sort(int *arr, int len)
{
int i, j, temp;
for(i = 0; i < len - 1; i++)
{
for(j = 0; j < len - 1 - i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void print_matrix(int (*matrix)[5], int row, int col)
{
int i, j;
for(i = 0; i < row; i++)
{
for(j = 0; j < col; j++)
{
printf("%d\t", *(*(matrix+i)+j));
}
printf("\n");
}
}
void set_matrix(int (*matrix)[5], int row, int col)
{
int i, j, max_index_i, max_index_j, min_index;
int max, min[4];
int *pmax, *pmin[4];
// 找到矩阵中最大值的位置
pmax = *matrix;
max_index_i = max_index_j = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < col; j++)
{
if(*(*(matrix+i)+j) > *pmax)
{
pmax = *(matrix+i)+j;
max_index_i = i;
max_index_j = j;
}
}
}
max = *pmax;
// 找到矩阵中最小值的位置
min_index = 0;
pmin[0] = *matrix;
pmin[1] = *matrix+col-1;
pmin[2] = *(matrix+row-1);
pmin[3] = *(matrix+row-1)+col-1;
for(i = 0; i < 4; i++)
{
min[i] = *(pmin[i]);
}
sort(min, 4);
// 设置矩阵元素
*pmax = max;
*(*(matrix)+0) = min[0];
*(*(matrix)+col-1) = min[1];
*(*(matrix+row-1)) = min[2];
*(*(matrix+row-1)+col-1) = min[3];
}
int main()
{
int matrix[5][5] = {{5, 4, 3, 2, 1},
{10, 9, 8, 7, 6},
{15, 14, 13, 12, 11},
{20, 19, 18, 17, 16},
{25, 24, 23, 22, 21}};
printf("原始矩阵:\n");
print_matrix(matrix, 5, 5);
set_matrix(matrix, 5, 5);
printf("处理后的矩阵:\n");
print_matrix(matrix, 5, 5);
return 0;
}
```
这段代码中,`set_matrix` 函数用于设置矩阵中的元素,`print_matrix` 函数用于打印矩阵,`sort` 函数用于排序。在 `main` 函数中,首先打印原始矩阵,然后调用 `set_matrix` 函数设置矩阵元素,最后再打印处理后的矩阵。注意,指针的使用需要特别小心,需要注意指针的类型和指针的取值方式。
阅读全文