找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。 注:应当至少准备两组测试数据: ① 二维数组有鞍点,例如: 9 80 205 40 90 -60 96 1 210 -3 101 89 ② 二维数组没有鞍点,例如: 9 80 205 40 90 -60 196 1 210 -3 101 89 45 54 156 7 函数从键盘输入数组各元素的值。检查结果是否正确。题目并未指定二维数组的行数和列数。程序应能处理任意行数和列数的数组。因此,从理论上说,应当准备许多种不同行数和列数的数组数据,但是这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。 如果已指定了数组的行数和列数,可以在程序中对于数组元素赋初值,而不必用scanf函数
时间: 2023-06-18 07:07:48 浏览: 167
C语言程序设计-求一个二维数组中的鞍点
5星 · 资源好评率100%
以下是一个求鞍点的函数实现:
```c
#include <stdio.h>
#define MAX_ROW 100 // 最大行数
#define MAX_COL 100 // 最大列数
// 求二维数组的鞍点,返回鞍点坐标,如果没有鞍点,返回{-1,-1}
int* saddle_point(int arr[][MAX_COL], int row, int col) {
static int point[2] = {-1, -1}; // 静态变量用于存储鞍点坐标
int max, min, i, j, k;
for (i = 0; i < row; i++) {
max = arr[i][0]; // 找到第i行中的最大值
k = 0; // 记录最大值的列数
for (j = 1; j < col; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
k = j;
}
}
min = arr[0][k]; // 找到第k列中的最小值
for (j = 1; j < row; j++) {
if (arr[j][k] < min) {
min = arr[j][k];
}
}
if (max == min) { // 如果找到鞍点
point[0] = i;
point[1] = k;
return point;
}
}
return point;
}
int main() {
int arr[MAX_ROW][MAX_COL];
int row, col, i, j;
int* p;
// 从键盘输入数组各元素的值
printf("请输入二维数组的行数和列数:");
scanf("%d %d", &row, &col);
printf("请输入数组各元素的值:\n");
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
scanf("%d", &arr[i][j]);
}
}
// 求鞍点
p = saddle_point(arr, row, col);
if (*p == -1) {
printf("该二维数组没有鞍点。\n");
} else {
printf("该二维数组的鞍点坐标为(%d,%d),值为%d。\n", p[0], p[1], arr[p[0]][p[1]]);
}
return 0;
}
```
测试数据1:
```
9 80 205 40
90 -60 96 1
210 -3 101 89
```
输出:
```
该二维数组的鞍点坐标为(1,2),值为96。
```
测试数据2:
```
9 80 205 40
90 -60 196 1
210 -3 101 89
45 54 156 7
```
输出:
```
该二维数组没有鞍点。
```
阅读全文