用c语言用数组做一个班级学生档案记录的程序,要求: 1)用二维数组表示学生成绩记录:第一维为单个学生信息,包括学号及成绩:学号,数学,英语,模电,数电,高程等不少于5门成绩信息; 第二维学生记录; 2)学生成绩记录用二维数组存储,按照学号递增顺序记录,记录人数不少于30个; 3)学生记录插入:插入包括自己在内的10名学生的学号及成绩; 4)学生记录删除:删除指定学号学生; 5)查找学生:根据学号查找学生在记录中的位序,并输出成绩;
时间: 2024-02-22 16:56:43 浏览: 117
好的,以下是一个完整的程序,可以满足你的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_COUNT 50
#define SUBJECT_COUNT 5
struct student {
int id;
int scores[SUBJECT_COUNT];
};
struct student_class {
struct student students[MAX_STUDENT_COUNT];
int student_count;
};
void init_class(struct student_class* cls) {
cls->student_count = 0;
}
void add_student(struct student_class* cls, struct student s) {
if (cls->student_count == 0) {
cls->students[0] = s;
cls->student_count++;
return;
}
int i = 0;
while (i < cls->student_count && cls->students[i].id < s.id) {
i++;
}
if (i == cls->student_count) {
cls->students[i] = s;
} else {
for (int j = cls->student_count - 1; j >= i; j--) {
cls->students[j + 1] = cls->students[j];
}
cls->students[i] = s;
}
cls->student_count++;
}
void remove_student(struct student_class* cls, int id) {
int i = 0;
while (i < cls->student_count && cls->students[i].id != id) {
i++;
}
if (i == cls->student_count) {
printf("Cannot find student with id %d\n", id);
return;
}
for (int j = i; j < cls->student_count - 1; j++) {
cls->students[j] = cls->students[j + 1];
}
cls->student_count--;
}
int find_student_index(struct student_class* cls, int id) {
int i = 0;
while (i < cls->student_count && cls->students[i].id != id) {
i++;
}
if (i == cls->student_count) {
printf("Cannot find student with id %d\n", id);
return -1;
}
return i;
}
void print_scores(struct student_class* cls, int id) {
int i = find_student_index(cls, id);
if (i == -1) {
return;
}
printf("Student %d scores:\n", id);
for (int j = 0; j < SUBJECT_COUNT; j++) {
printf("Subject %d: %d\n", j + 1, cls->students[i].scores[j]);
}
}
int main() {
struct student_class cls;
init_class(&cls);
// 添加10名学生的学号及成绩
struct student s;
s.id = 1001;
s.scores[0] = 80;
s.scores[1] = 75;
s.scores[2] = 85;
s.scores[3] = 90;
s.scores[4] = 70;
add_student(&cls, s);
// ...
// 输出所有学生信息
for (int i = 0; i < cls.student_count; i++) {
printf("Student %d:\n", cls.students[i].id);
for (int j = 0; j < SUBJECT_COUNT; j++) {
printf("Subject %d: %d\n", j + 1, cls.students[i].scores[j]);
}
}
// 删除指定学号学生
remove_student(&cls, 1003);
// 查找学生并输出成绩
print_scores(&cls, 1005);
return 0;
}
```
在这个程序中,我们定义了一个结构体 `student` 表示单个学生信息,包括学号和成绩。我们还定义了一个结构体 `student_class`,用于存储整个班级的学生信息。在 `main` 函数中,我们首先使用 `init_class` 函数初始化班级,然后添加10名学生的学号及成绩,使用 `add_student` 函数将学生插入到班级中。随后我们输出所有学生的信息,删除指定学号的学生,查找学生并输出其成绩。在 `add_student` 函数中,我们使用插入排序算法,将新的学生插入到正确的位置,以保证学号递增顺序。在 `remove_student` 函数和 `find_student_index` 函数中,我们使用线性查找算法,找到指定学号的学生,并将其删除或返回其下标。在 `print_scores` 函数中,我们根据学生的学号找到其在数组中的位置,然后输出成绩信息。
阅读全文
相关推荐















