c语言已知一个5×5矩阵,用函数实现:(1)找出该矩阵中的鞍点,“鞍点”指的是一个位置,该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。(2)将矩阵中最大的元素放在中心,四个角分别放四个最小的元素。说明:将矩阵中最大的元素放在中心,四个角分别放四个最小的元素,也就是按从左到右,从上到下顺序依次从小到大存放
时间: 2023-05-24 13:02:15 浏览: 96
。非常感谢您的提问。以下是我对问题的回答:
(1) 下面是一个实现鞍点查找的C函数:
```c
void find_saddle_point(int *matrix, int rows, int cols, int *saddle_point) {
int i, j, max, min, is_saddle_point;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
max = *(matrix + i * cols);
min = *(matrix + i * cols + j);
is_saddle_point = 1;
for (int k = 0; k < cols; k++) {
if (*(matrix + i * cols + k) > max) {
is_saddle_point = 0;
break;
}
}
if (is_saddle_point) {
for (int k = 0; k < rows; k++) {
if (*(matrix + k * cols + j) < min) {
is_saddle_point = 0;
break;
}
}
}
if (is_saddle_point) {
*(saddle_point + 0) = i;
*(saddle_point + 1) = j;
return;
}
}
}
*(saddle_point + 0) = -1;
*(saddle_point + 1) = -1;
}
```
该函数的参数为一个一维数组 `matrix`,表示矩阵,`rows` 和 `cols` 分别表示矩阵的行数和列数,`saddle_point` 是一个长度为2的数组,用于保存鞍点的坐标。该函数会在找到鞍点时将其坐标存入 `saddle_point` 数组中返回,如果没有鞍点则将其设为 `-1`。
(2) 下面是一个实现最大值保存在中心、四个最小值保存在角落的C函数:
```c
void put_max_and_min(int *matrix, int rows, int cols) {
int max_index = -1;
int min_indices[4] = {-1, -1, -1, -1};
int max = INT_MIN;
int min = INT_MAX;
int i, j, k;
// 1. 找到最大值和最小值
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
int val = *(matrix + i * cols + j);
if (val > max) {
max = val;
max_index = i * cols + j;
}
if (val < min) {
min = val;
min_indices[0] = i * cols + j;
}
}
}
// 找到剩余三个最小值
k = 1;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
int val = *(matrix + i * cols + j);
if (val == min && i * cols + j != min_indices[0]) {
min_indices[k++] = i * cols + j;
}
}
}
// 2. 把最大值放在中心
*(matrix + rows / 2 * cols + cols / 2) = max;
// 3. 把四个最小值放在角落
*(matrix + 0) = min;
*(matrix + cols - 1) = *(matrix + 1) == min ? *(matrix + 2) : *(matrix + 1);
*(matrix + (rows - 1) * cols) = *(matrix + (rows - 2) * cols) == min ? *(matrix + (rows - 3) * cols + cols - 1) : *(matrix + (rows - 2) * cols);
*(matrix + rows * cols - 1) = *(matrix + rows * cols - 2) == min ? *(matrix + rows * cols - 3) : *(matrix + rows * cols - 2);
}
```
该函数的参数同样是一个一维数组 `matrix`,表示矩阵,`rows` 和 `cols` 分别表示矩阵的行数和列数。该函数会把最大值放在中心,四个最小值分别放在四个角上(按从左到右、从上到下的顺序从小到大),并直接修改原始的 `matrix` 数组。
阅读全文