采用结构体数组存储学生信息(包括学号、姓名、各科成绩),按成 绩(总分)排序,按学号、姓名查找
时间: 2023-08-16 16:08:09 浏览: 132
好的,我会尽力回答你的问题。
对于这个问题,我建议你可以采用以下的方法:
1. 定义一个结构体,包含学号、姓名、各科成绩等信息。
```c
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 各科成绩
float total_score; // 总分
} Student;
```
2. 定义一个结构体数组,用来存储学生信息。
```c
Student students[100];
```
3. 编写一个函数,用来计算每个学生的总分。
```c
void calc_total_score(Student *s) {
s->total_score = 0;
for (int i = 0; i < 3; i++) {
s->total_score += s->score[i];
}
}
```
4. 编写一个函数,用来按照总分排序。
```c
void sort_by_total_score(Student *students, int n) {
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
if (students[i].total_score < students[j].total_score) {
Student tmp = students[i];
students[i] = students[j];
students[j] = tmp;
}
}
}
}
```
5. 编写一个函数,用来按照学号查找学生信息。
```c
Student *find_by_id(Student *students, int n, int id) {
for (int i = 0; i < n; i++) {
if (students[i].id == id) {
return &students[i];
}
}
return NULL;
}
```
6. 编写一个函数,用来按照姓名查找学生信息。
```c
Student *find_by_name(Student *students, int n, char *name) {
for (int i = 0; i < n; i++) {
if (strcmp(students[i].name, name) == 0) {
return &students[i];
}
}
return NULL;
}
```
以上就是一种比较简单的实现方法,你可以根据自己的需要进行修改和优化。希望可以帮到你!
阅读全文