C语言(顺序表学生学号,姓名,成绩且有定义,插入,删除,排序操作)完整代码
时间: 2024-06-13 22:08:38 浏览: 153
以下是C语言顺序表学生学号、姓名、成绩的完整代码,包括定义、插入、删除、排序操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 // 定义最大学生数
// 定义学生结构体
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
int score[4]; // 四科成绩
float avg; // 平均成绩
int sum; // 总成绩
} Student;
// 定义顺序表结构体
typedef struct {
Student data[MAXSIZE]; // 存储学生信息的数组
int length; // 学生数
} SqList;
// 插入学生信息
void insert(SqList *L, Student s) {
int i, j;
for (i = 0; i < L->length; i++) {
if (strcmp(s.id, L->data[i].id) < 0) { // 按学号排序
for (j = L->length - 1; j >= i; j--) {
L->data[j + 1] = L->data[j]; // 后移
}
L->data[i] = s; // 插入
L->length++; // 学生数加1
return;
}
}
L->data[L->length] = s; // 插入到末尾
L->length++; // 学生数加1
}
// 删除学生信息
void delete(SqList *L, char *id) {
int i, j;
for (i = 0; i < L->length; i++) {
if (strcmp(id, L->data[i].id) == 0 || strcmp(id, L->data[i].name) == 0) { // 按学号或姓名查找
for (j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j + 1]; // 前移
}
L->length--; // 学生数减1
i--; // 继续查找
}
}
}
// 按总成绩排序
void sort(SqList *L) {
int i, j, k;
Student temp;
for (i = 0; i < L->length - 1; i++) {
k = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[j].sum > L->data[k].sum) { // 按总成绩排序
k = j;
}
}
if (k != i) {
temp = L->data[i];
L->data[i] = L->data[k];
L->data[k] = temp;
}
}
}
// 查找学生信息
void find(SqList L, char *id) {
int i;
for (i = 0; i < L.length; i++) {
if (strcmp(id, L.data[i].id) == 0 || strcmp(id, L.data[i].name) == 0) { // 按学号或姓名查找
printf("学号:%s\n姓名:%s\n性别:%s\n年龄:%d\n语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n物理成绩:%d\n平均成绩:%.2f\n总成绩:%d\n", L.data[i].id, L.data[i].name, L.data[i].sex, L.data[i].age, L.data[i].score[0], L.data[i].score[1], L.data[i].score[2], L.data[i].score[3], L.data[i].avg, L.data[i].sum);
}
}
}
// 输出学生信息
void output(SqList L) {
int i;
for (i = 0; i < L.length; i++) {
printf("学号:%s\n姓名:%s\n性别:%s\n年龄:%d\n语文成绩:%d\n数学成绩:%d\n英语成绩:%d\n物理成绩:%d\n平均成绩:%.2f\n总成绩:%d\n", L.data[i].id, L.data[i].name, L.data[i].sex, L.data[i].age, L.data[i].score[0], L.data[i].score[1], L.data[i].score[2], L.data[i].score[3], L.data[i].avg, L.data[i].sum);
}
}
int main() {
SqList L;
L.length = 0;
int i, j;
Student s;
// 输入学生信息
for (i = 0; i < 20; i++) {
printf("请输入第%d个学生的学号、姓名、性别、年龄、四科成绩:\n", i + 1);
scanf("%s%s%s%d%d%d%d", s.id, s.name, s.sex, &s.age, &s.score[0], &s.score[1], &s.score[2], &s.score[3]);
s.avg = (float)(s.score[0] + s.score[1] + s.score[2] + s.score[3]) / 4;
s.sum = s.score[0] + s.score[1] + s.score[2] + s.score[3];
insert(&L, s);
}
// 输出学生信息
printf("所有学生的信息如下:\n");
output(L);
// 查找学生信息
char id[20];
printf("请输入要查找的学生的学号或姓名:\n");
scanf("%s", id);
find(L, id);
// 删除学生信息
printf("请输入要删除的学生的学号或姓名:\n");
scanf("%s", id);
delete(&L, id);
// 输出学生信息
printf("删除后所有学生的信息如下:\n");
output(L);
// 按总成绩排序
sort(&L);
// 输出学生信息
printf("按总成绩排序后所有学生的信息如下:\n");
output(L);
return 0;
}
```
阅读全文