在C语言中,使用顺序表存储学生成绩通常涉及以下步骤:
一、定义学生成绩结构体
首先,需要定义一个结构体来存储每个学生的信息。例如:
```c
typedef struct {
int id;// 学号
char name; // 姓名
float math_score; // 数学成绩
float english_score; // 英语成绩
float average_score; // 平均成绩
} Student;
```
二、初始化顺序表
定义一个固定大小的数组来存储学生信息:
```c
define MAX_STUDENTS 100
Student students[MAX_STUDENTS];
int student_count = 0; // 当前学生数量
```
三、实现基本操作
添加学生信息
输入学号、姓名、数学成绩、英语成绩,计算平均成绩后插入到数组末尾或指定位置。
```c
void addStudent() {
Student new_student;
scanf("%d %s %f %f", &new_student.id, new_student.name, &new_student.math_score, &new_student.english_score);
new_student.average_score = (new_student.math_score + new_student.english_score) / 2;
students[student_count++] = new_student;
}
```
删除学生信息
根据学号查找学生,存在则删除并移动后续元素。
```c
void deleteStudent(int id) {
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
for (int j = i; j < student_count - 1; j++) {
students[j] = students[j + 1];
}
student_count--;
break;
}
}
}
```
查找学生信息
根据学号查找学生,存在则输出所有信息,不存在则提示。
```c
void findStudentById(int id) {
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
printf("学号: %d, 姓名: %s, 数学: %.2f, 英语: %.2f, 平均: %.2f
", students[i].id, students[i].name, students[i].math_score, students[i].english_score, students[i].average_score);
return;
}
}
printf("不存在此学号的学生
");
}
```
按平均成绩排序
使用冒泡排序按平均成绩降序排列。
```c
void sortStudents() {
for (int i = 0; i < student_count - 1; i++) {
for (int j = 0; j < student_count - i - 1; j++) {
if (students[j].average_score < students[j + 1].average_score) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
```
四、数据持久化(可选)
将顺序表中的数据保存到文件,并在程序启动时加载:
```c
void saveToFile() {
FILE *file = fopen("students.txt", "wb");
for (int i = 0; i < student_count; i++) {
fprintf(file, "%d %s %.2f %.2f %.2f
", students[i].id, students[i].name, students[i].math_score, students[i].english_score, students[i].average_score);
}
fclose(file);
}
void loadFromFile() {
FILE *file = fopen("students.txt", "rb");
if (file) {
student_count = 0;
while (fscanf(file, "%d %s %.2f %.2f %.2f
", &students[student_count].id, students[student_count].name, &students[student_count].math_score, &students[student_count].english_score, &students[student_count].average_score) == 5) {
student_count++;
}
fclose(file);
}
}
```
五、主函数示例
```c
int main() {
int choice;
do {
printf("学生成绩管理系统
");
printf("1. 添加学生信息
");
printf("2. 显示所有学生信息
");
printf("3. 按学号查找学生信息
");
printf("4. 删除学生信息