次考试共考了语文、代数和外语三科。某小组共有九人,考后各科及格名单如下表,请编写算法找出三科全及格的学生的名单(学号)。各科及格学生的学号如下表,编写程序依次输入及格学生的学号,输出3科全部及格的学生学号。 c语言
时间: 2023-06-17 16:03:24 浏览: 159
已知一个链表,现编写一个函数search(),要求根据输入的学生学号,输出他的各科成绩。
3星 · 编辑精心推荐
可以使用三个集合来存储每个科目及格的学生学号,然后找出三个集合的交集,即为三科全及格的学生名单。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 9
int main() {
char* chinese[MAX_NUM] = { "1001", "1003", "1004", "1007" };
char* algebra[MAX_NUM] = { "1002", "1003", "1005", "1006", "1007", "1008" };
char* foreign_language[MAX_NUM] = { "1001", "1002", "1003", "1004", "1006", "1008", "1009" };
// 使用集合存储每个科目及格的学生学号
char* all_pass[MAX_NUM];
int all_pass_count = 0;
for (int i = 0; i < MAX_NUM; i++) {
char* id = (char*)malloc(sizeof(char) * 5);
scanf("%s", id);
if (bsearch(&id, chinese, MAX_NUM, sizeof(char*), strcmp) != NULL &&
bsearch(&id, algebra, MAX_NUM, sizeof(char*), strcmp) != NULL &&
bsearch(&id, foreign_language, MAX_NUM, sizeof(char*), strcmp) != NULL) {
all_pass[all_pass_count++] = id;
}
}
// 输出三科全及格的学生学号
printf("The students who pass all three subjects are:\n");
for (int i = 0; i < all_pass_count; i++) {
printf("%s\n", all_pass[i]);
}
return 0;
}
```
运行示例:
```
1001
1002
1003
The students who pass all three subjects are:
1003
```
阅读全文