C语言定义两个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 合并两个顺序表,并根据学号进行排序; (4) 逐个显示新表中所有学生的相关信息。并备注代码功能
时间: 2023-05-30 09:05:40 浏览: 118
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 20 // 学号和姓名的最大长度
// 定义学生结构体
typedef struct {
char id[MAX_LENGTH]; // 学号
char name[MAX_LENGTH]; // 姓名
int score; // 成绩
} Student;
// 定义顺序表结构体
typedef struct {
Student *data; // 存储学生信息的数组指针
int length; // 当前数组长度
int capacity; // 数组容量
} SeqList;
// 初始化顺序表
void initList(SeqList *list, int capacity) {
list->data = (Student *) malloc(capacity * sizeof(Student));
list->length = 0;
list->capacity = capacity;
}
// 逐个输入学生信息
void inputStudents(SeqList *list, int count) {
printf("请输入%d个学生的信息:\n", count);
for (int i = 0; i < count; i++) {
Student student;
printf("请输入第%d个学生的学号、姓名、成绩:\n", i + 1);
scanf("%s%s%d", student.id, student.name, &student.score);
list->data[i] = student;
list->length++;
}
}
// 逐个显示学生表中所有学生的相关信息
void printStudents(SeqList list) {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < list.length; i++) {
printf("%s\t%s\t%d\n", list.data[i].id, list.data[i].name, list.data[i].score);
}
}
// 合并两个顺序表,并根据学号进行排序
void mergeLists(SeqList *list1, SeqList *list2, SeqList *result) {
int i = 0, j = 0, k = 0;
while (i < list1->length && j < list2->length) {
if (strcmp(list1->data[i].id, list2->data[j].id) < 0) {
result->data[k] = list1->data[i];
i++;
k++;
} else {
result->data[k] = list2->data[j];
j++;
k++;
}
}
while (i < list1->length) {
result->data[k] = list1->data[i];
i++;
k++;
}
while (j < list2->length) {
result->data[k] = list2->data[j];
j++;
k++;
}
result->length = k;
result->capacity = result->length;
}
int main() {
SeqList list1, list2, result;
initList(&list1, 10);
initList(&list2, 10);
initList(&result, 20);
inputStudents(&list1, 2);
printf("第一个顺序表中的学生信息为:\n");
printStudents(list1);
inputStudents(&list2, 3);
printf("第二个顺序表中的学生信息为:\n");
printStudents(list2);
mergeLists(&list1, &list2, &result);
printf("合并后的顺序表中的学生信息为:\n");
printStudents(result);
return 0;
}
```
代码功能:
1. 定义学生结构体和顺序表结构体;
2. 初始化顺序表;
3. 逐个输入学生信息;
4. 逐个显示学生表中所有学生的相关信息;
5. 合并两个顺序表,并根据学号进行排序;
6. 逐个显示新表中所有学生的相关信息。
阅读全文