对一个班某门课程成绩进行处理,分别写出用顺序表的三串代码实现对一个班的一门课程成绩信 息的显示、查询、插入、删除功能,并对已排好序(非递减有序)的两个班成绩 合并,具体如下: 1.定义成绩顺序表结构体。 typedef struct SqList { ElemType*elem; int length; int capacity; }SqList,*Ptr; typedef Ptr SqListPtr;实现循环菜单显示选择,并完成以下菜单功能:
时间: 2023-06-06 22:07:22 浏览: 157
1. 显示班级成绩信息
2. 查询某个学生的成绩
3. 插入某个学生的成绩
4. 删除某个学生的成绩
5. 合并两个班级成绩信息并排序显示
6. 退出程序
下面是三串用顺序表实现的代码:
代码1:显示班级成绩信息
void displayClassScore(SqListPtr L) {
printf("班级成绩如下:\n");
for(int i = 0; i < L->length; i++) {
printf("学生%d: %d分\n", i+1, L->elem[i]);
}
printf("\n");
}
代码2:查询某个学生的成绩
void queryScore(SqListPtr L) {
int index = 0;
printf("请输入要查询的学生序号:\n");
scanf("%d", &index);
if(index < 1 || index > L->length) {
printf("序号错误,请输入1~%d之间的数字\n", L->length);
return;
}
printf("学生%d的成绩为:%d分\n", index, L->elem[index-1]);
}
代码3:插入某个学生的成绩
void insertScore(SqListPtr L) {
int index = 0;
int score = 0;
printf("请输入要插入的学生序号和分数:\n");
scanf("%d%d", &index, &score);
if(index < 1 || index > L->length+1) {
printf("序号错误,请输入1~%d之间的数字\n", L->length+1);
return;
}
if(L->length == L->capacity) {
printf("成绩表已满,无法插入\n");
return;
}
for(int i = L->length; i >= index; i--) {
L->elem[i] = L->elem[i-1];
}
L->elem[index-1] = score;
L->length++;
printf("插入成功!\n");
}
代码4:删除某个学生的成绩
void deleteScore(SqListPtr L) {
int index = 0;
printf("请输入要删除的学生序号:\n");
scanf("%d", &index);
if(index < 1 || index > L->length) {
printf("序号错误,请输入1~%d之间的数字\n", L->length);
return;
}
for(int i = index; i < L->length; i++) {
L->elem[i-1] = L->elem[i];
}
L->length--;
printf("删除成功!\n");
}
代码5:合并两个班级成绩信息并排序显示
void mergeClassScore(SqListPtr L1, SqListPtr L2) {
SqListPtr L = (SqListPtr)malloc(sizeof(SqList));
L->capacity = L1->capacity + L2->capacity;
L->length = L1->length + L2->length;
L->elem = (ElemType*)malloc(sizeof(ElemType)*L->capacity);
int i = 0, j = 0, k = 0;
while(i < L1->length && j < L2->length) {
if(L1->elem[i] <= L2->elem[j]) {
L->elem[k++] = L1->elem[i++];
} else {
L->elem[k++] = L2->elem[j++];
}
}
while(i < L1->length) {
L->elem[k++] = L1->elem[i++];
}
while(j < L2->length) {
L->elem[k++] = L2->elem[j++];
}
printf("合并后的成绩如下:\n");
for(int i = 0; i < L->length; i++) {
printf("%d分 ", L->elem[i]);
}
printf("\n");
}
阅读全文