选修某课程的学生有5人,学生的信息包括学号、姓名和成绩,按成绩高低对学生排序,输出排序后的学生信息。从键盘输入一学生姓名,查出其成绩和成绩等级。(用指向指针的指针处理学生的信息交换)
时间: 2024-01-01 20:05:24 浏览: 105
以下是一个示例代码,可以实现你所需的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
typedef struct {
int id;
char name[MAX_NAME_LEN];
int score;
char level;
} Student;
void swap(Student **s1, Student **s2) {
Student *tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
void sort(Student **students, int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (students[i]->score < students[j]->score) {
swap(&students[i], &students[j]);
}
}
}
}
void print_students(Student **students, int n) {
printf("学号\t姓名\t成绩\t等级\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%d\t%c\n", students[i]->id, students[i]->name, students[i]->score, students[i]->level);
}
}
void set_level(Student **students, int n) {
for (int i = 0; i < n; i++) {
int score = students[i]->score;
if (score >= 90) {
students[i]->level = 'A';
} else if (score >= 80) {
students[i]->level = 'B';
} else if (score >= 70) {
students[i]->level = 'C';
} else if (score >= 60) {
students[i]->level = 'D';
} else {
students[i]->level = 'E';
}
}
}
int main() {
int n = 5;
Student *students[n];
// 读入学生信息
for (int i = 0; i < n; i++) {
students[i] = (Student *) malloc(sizeof(Student));
printf("请输入第%d个学生的学号、姓名和成绩,用空格分隔:", i + 1);
scanf("%d %s %d", &students[i]->id, students[i]->name, &students[i]->score);
}
// 按成绩排序
sort(students, n);
// 设置等级
set_level(students, n);
// 输出学生信息
print_students(students, n);
// 根据姓名查找成绩和等级
char name[MAX_NAME_LEN];
printf("请输入要查找成绩的学生姓名:");
scanf("%s", name);
for (int i = 0; i < n; i++) {
if (strcmp(students[i]->name, name) == 0) {
printf("%s的成绩是%d,等级是%c\n", students[i]->name, students[i]->score, students[i]->level);
break;
}
}
// 释放内存
for (int i = 0; i < n; i++) {
free(students[i]);
}
return 0;
}
```
这个程序中,我们定义了一个 `Student` 结构体,包含学号、姓名、成绩和等级等信息。我们使用动态内存分配来创建学生数组,通过指向指针的指针来实现学生信息的排序和交换。在 `set_level` 函数中,我们根据成绩设置学生的等级。最后,我们通过输入学生的姓名来查找其成绩和等级。
阅读全文