定义一个 3×3 的二维结构体数组,数组元素的数据类型如下: struct student { int number; char name[10]; 数组元素由键盘输入。找到这个数组的鞍点(鞍点就是结构体数组中元素的成员 number 在该行上最大,在该列上最小),并输出这个鞍点对应的元素的两个成 员。如果没有鞍点,输出该结构体数组没有鞍点。
时间: 2024-02-26 22:57:21 浏览: 100
C语言程序设计-求一个二维数组中的鞍点
5星 · 资源好评率100%
好的,我来给你写一个 C 语言程序来实现这个功能:
```c
#include <stdio.h>
#include <string.h>
struct student {
int number;
char name[10];
};
int main() {
struct student arr[3][3];
int max_num, min_num, row, col;
int has_saddle_point = 0;
// 输入数组元素
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("请输入第 %d 行第 %d 列的学生信息:\n", i + 1, j + 1);
printf("学号:");
scanf("%d", &arr[i][j].number);
printf("姓名:");
scanf("%s", arr[i][j].name);
}
}
// 查找鞍点
for (int i = 0; i < 3; i++) {
max_num = arr[i][0].number;
col = 0;
for (int j = 1; j < 3; j++) {
if (arr[i][j].number > max_num) {
max_num = arr[i][j].number;
col = j;
}
}
min_num = arr[0][col].number;
row = 0;
for (int k = 1; k < 3; k++) {
if (arr[k][col].number < min_num) {
min_num = arr[k][col].number;
row = k;
}
}
if (max_num == min_num) {
printf("鞍点为第 %d 行第 %d 列的学生信息:\n", row + 1, col + 1);
printf("学号:%d\n", arr[row][col].number);
printf("姓名:%s\n", arr[row][col].name);
has_saddle_point = 1;
}
}
if (!has_saddle_point) {
printf("该结构体数组没有鞍点。\n");
}
return 0;
}
```
程序会首先让你输入 9 个学生的信息,然后依次遍历每一行,找到该行上的最大值 `max_num` 和对应的列 `col`,再在该列中依次查找最小值 `min_num` 和对应的行 `row`,如果 `max_num` 和 `min_num` 相等,即找到了一个鞍点,就输出该鞍点对应的学生信息,否则继续查找下一行。如果遍历完整个数组后仍然没有找到鞍点,就输出提示信息。注意,为了方便,程序中没有加入对输入的合法性检查,你可以自己增加这部分代码。
阅读全文