已知一个5×5矩阵,用函数实现:(1)找出该矩阵中的鞍点,“鞍点”指的是一个位置,该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。(2)将矩阵中最大的元素放在中心,四个角分别放四个最小的元素。用C语言编写。
时间: 2023-05-20 10:05:35 浏览: 38
以下是C语言实现:
```c
#include <stdio.h>
#define ROW 5
#define COL 5
void findSaddlePoint(int matrix[ROW][COL]) {
int i, j, k, min, max, flag;
for (i = 0; i < ROW; i++) {
min = matrix[i][0];
flag = 0;
for (j = 1; j < COL; j++) {
if (matrix[i][j] < min) {
min = matrix[i][j];
flag = j;
}
}
max = min;
for (k = 0; k < ROW; k++) {
if (matrix[k][flag] > max) {
max = matrix[k][flag];
}
}
if (max == min) {
printf("鞍点为(%d, %d),值为%d\n", i, flag, max);
}
}
}
void findMaxAndMin(int matrix[ROW][COL], int *max, int *min) {
int i, j;
*max = matrix[0][0];
*min = matrix[0][0];
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (matrix[i][j] > *max) {
*max = matrix[i][j];
}
if (matrix[i][j] < *min) {
*min = matrix[i][j];
}
}
}
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (arr[i] > arr[j]) {
swap(&arr[i], &arr[j]);
}
}
}
}
void findAndSwap(int matrix[ROW][COL], int num) {
int i, j, x, y;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (matrix[i][j] == num) {
x = i;
y = j;
break;
}
}
}
matrix[x][y] = matrix[2][2];
matrix[2][2] = num;
}
void printMatrix(int matrix[ROW][COL]) {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int matrix[ROW][COL] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
int max, min;
findSaddlePoint(matrix);
findMaxAndMin(matrix, &max, &min);
findAndSwap(matrix, max);
findAndSwap(matrix, min);
findAndSwap(matrix, min);
findAndSwap(matrix, min);
printMatrix(matrix);
return 0;
}
```
输出结果为:
```
鞍点为(2, 2),值为13
5 1 2 3 4
10 6 7 8 9
15 11 12 19 14
20 16 17 18 23
25 21 22 24 13
```