C语言定义两个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 合并两个顺序表,并根据学号进行排序; (4) 逐个显示新表中所有学生的相关信息。
时间: 2023-05-30 10:06:03 浏览: 64
学生信息管理系统的顺序表实现
以下是一种实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score; // 成绩
} Student;
typedef struct {
Student data[MAX_STUDENT_NUM]; // 学生信息数组
int length; // 学生信息数组长度
} SeqList;
void input_students(SeqList *list) {
int n; // 学生个数
printf("请输入学生个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
Student s;
printf("请输入第%d个学生的学号、姓名、成绩(用空格隔开):", i + 1);
scanf("%d %s %f", &s.id, s.name, &s.score);
list->data[i] = s;
}
list->length = n;
}
void print_students(SeqList list) {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < list.length; i++) {
Student s = list.data[i];
printf("%d\t%s\t%.2f\n", s.id, s.name, s.score);
}
}
SeqList merge_students(SeqList list1, SeqList list2) {
SeqList merged_list;
merged_list.length = list1.length + list2.length;
int i = 0, j = 0, k = 0;
while (i < list1.length && j < list2.length) {
if (list1.data[i].id < list2.data[j].id) {
merged_list.data[k++] = list1.data[i++];
} else {
merged_list.data[k++] = list2.data[j++];
}
}
while (i < list1.length) {
merged_list.data[k++] = list1.data[i++];
}
while (j < list2.length) {
merged_list.data[k++] = list2.data[j++];
}
return merged_list;
}
int main() {
SeqList list1, list2, merged_list;
printf("请输入第一个学生表的信息:\n");
input_students(&list1);
printf("第一个学生表的信息如下:\n");
print_students(list1);
printf("请输入第二个学生表的信息:\n");
input_students(&list2);
printf("第二个学生表的信息如下:\n");
print_students(list2);
merged_list = merge_students(list1, list2);
printf("合并后的学生表的信息如下:\n");
print_students(merged_list);
return 0;
}
```
注意事项:
1. 为了方便起见,这里使用了结构体来存储学生信息,可以根据实际需求进行调整;
2. 为了简化问题,这里只排序了合并后的学生表,并没有在输入时进行排序,可以根据实际需求进行调整;
3. 为了简化问题,这里只实现了输入、输出和合并功能,其他功能可以根据实际需求进行补充。
阅读全文