用一个C语言程序找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。 用 scanf 函数从键盘输入数组各元素的值,检查结果是否正确。题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。
时间: 2024-05-15 20:12:57 浏览: 103
以下是一个实现该功能的 C 语言程序:
```c
#include <stdio.h>
#define MAX_ROW 100
#define MAX_COL 100
int main() {
int array[MAX_ROW][MAX_COL];
int row, col;
int i, j;
int max_row, min_col;
int is_saddle_point;
// 输入二维数组
printf("请输入二维数组的行数和列数:");
scanf("%d%d", &row, &col);
printf("请输入二维数组的元素:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
scanf("%d", &array[i][j]);
}
}
// 查找鞍点
for (i = 0; i < row; i++) {
max_row = 0;
for (j = 1; j < col; j++) {
if (array[i][j] > array[i][max_row]) {
max_row = j;
}
}
is_saddle_point = 1;
for (j = 0; j < row; j++) {
if (array[j][max_row] < array[i][max_row]) {
is_saddle_point = 0;
break;
}
}
if (is_saddle_point) {
min_col = 0;
for (j = 1; j < row; j++) {
if (array[j][max_row] < array[min_col][max_row]) {
min_col = j;
}
}
if (i == min_col) {
printf("鞍点为 (%d, %d),值为 %d\n", i, max_row, array[i][max_row]);
}
}
}
return 0;
}
```
该程序首先通过 `scanf` 函数从键盘输入二维数组的行数和列数,然后再依次输入二维数组中各个元素的值。程序通过两层嵌套循环遍历整个二维数组,对于每行找到最大值的列,再判断该列上是否为该列上最小值,若是则找到了一个鞍点。
运行程序时,输入的第一行应包含两个数字,分别为二维数组的行数和列数。接下来是一个 row 行 col 列的矩阵,包含了二维数组的所有元素。程序输出每个鞍点的位置和值。如果输入的二维数组中没有鞍点,则程序不会有任何输出。
阅读全文