学生成绩字典排序
时间: 2023-07-01 20:13:16 浏览: 105
好的,我可以帮你解决这个问题。你可以先将学生成绩存储在一个字典中,键为学生姓名,值为学生成绩。然后可以使用 Python 中的 sorted() 函数对字典进行排序,按照学生成绩从高到低排序。以下是一个示例代码:
```python
# 学生成绩字典
scores = {'小明': 90, '小红': 85, '小刚': 92, '小李': 88}
# 按照学生成绩排序
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
# 输出排序后的结果
for name, score in sorted_scores:
print(name, score)
```
运行上述代码,输出结果如下:
```
小刚 92
小明 90
小李 88
小红 85
```
其中,sorted() 函数的 key 参数指定了排序方式,这里使用了一个 lambda 表达式,表示按照字典的值进行排序。reverse 参数为 True 表示按照降序排序。最终的 sorted_scores 是一个元组列表,元组的第一个元素为键(学生姓名),第二个元素为值(学生成绩)。
相关问题
数据结构根据学生姓名进行字典排序,再根据成绩进行由高到低排序
可以使用多关键字排序,先按照姓名进行字典排序,再按照成绩进行由高到低排序。可以使用稳定的排序算法,如归并排序或插入排序。具体实现可以参考以下伪代码:
```
struct Student {
string name;
int score;
};
bool cmp(const Student& a, const Student& b) {
if (a.name != b.name) {
return a.name < b.name;
} else {
return a.score > b.score;
}
}
void sortStudents(vector<Student>& students) {
sort(students.begin(), students.end(), cmp);
}
```
其中,cmp 函数定义了排序规则,先按照姓名进行字典排序,如果姓名相同则按照成绩进行由高到低排序。sortStudents 函数接受一个学生数组,对其进行排序。
用C语言代码设计一个学生成绩查询统计系统,要求如下:1、输入学生成绩的数据信息;2、输出全体或根据条件选取部分学生成绩的数据信息;3、根据学生姓名对数据进行字典排序并输出;4、根据成绩对数据进行由高到低排序并输出;5、根据学号或姓名查找学生成绩信息并输出;6、统计及格、中、良、优秀和不及格学生人数及其所占比例并输出;7、学生成绩的数据信息用文件进行读写。
以下是一个简单的学生成绩查询统计系统的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生人数
#define MAX_NAME_LEN 20 // 姓名最大长度
// 学生信息结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
int score; // 成绩
} Student;
// 全局变量
Student students[MAX_STUDENT_NUM]; // 学生数组
int student_count = 0; // 学生总人数
// 函数声明
void add_student();
void print_all_students();
void print_filtered_students(int min_score, int max_score);
void sort_by_name();
void sort_by_score();
void search_by_id();
void search_by_name();
void statistics();
int main() {
int choice;
while (1) {
printf("\n");
printf("学生成绩查询统计系统\n");
printf("1. 输入学生成绩的数据信息\n");
printf("2. 输出全体学生成绩的数据信息\n");
printf("3. 根据条件选取部分学生成绩的数据信息\n");
printf("4. 根据学生姓名对数据进行字典排序并输出\n");
printf("5. 根据成绩对数据进行由高到低排序并输出\n");
printf("6. 根据学号查找学生成绩信息并输出\n");
printf("7. 根据姓名查找学生成绩信息并输出\n");
printf("8. 统计及格、中、良、优秀和不及格学生人数及其所占比例并输出\n");
printf("9. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
printf("\n");
switch (choice) {
case 1:
add_student();
break;
case 2:
print_all_students();
break;
case 3:
printf("请输入最低分数:");
int min_score;
scanf("%d", &min_score);
printf("请输入最高分数:");
int max_score;
scanf("%d", &max_score);
print_filtered_students(min_score, max_score);
break;
case 4:
sort_by_name();
print_all_students();
break;
case 5:
sort_by_score();
print_all_students();
break;
case 6:
search_by_id();
break;
case 7:
search_by_name();
break;
case 8:
statistics();
break;
case 9:
exit(0);
default:
printf("无效的操作,请重新输入\n");
}
}
}
// 添加学生信息
void add_student() {
if (student_count >= MAX_STUDENT_NUM) {
printf("学生人数已达到上限,无法添加\n");
return;
}
printf("请输入第 %d 个学生的信息(学号 姓名 成绩,用空格隔开):", student_count + 1);
Student student;
scanf("%d %s %d", &student.id, student.name, &student.score);
students[student_count++] = student;
printf("学生信息添加成功\n");
}
// 输出所有学生信息
void print_all_students() {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < student_count; i++) {
printf("%d\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
}
}
// 根据条件输出学生信息
void print_filtered_students(int min_score, int max_score) {
printf("学号\t姓名\t成绩\n");
for (int i = 0; i < student_count; i++) {
if (students[i].score >= min_score && students[i].score <= max_score) {
printf("%d\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
}
}
}
// 根据姓名排序
int compare_by_name(const void* a, const void* b) {
return strcmp(((Student*)a)->name, ((Student*)b)->name);
}
// 根据姓名排序并输出
void sort_by_name() {
qsort(students, student_count, sizeof(Student), compare_by_name);
printf("学号\t姓名\t成绩\n");
}
// 根据成绩排序
int compare_by_score(const void* a, const void* b) {
return ((Student*)b)->score - ((Student*)a)->score;
}
// 根据成绩排序并输出
void sort_by_score() {
qsort(students, student_count, sizeof(Student), compare_by_score);
printf("学号\t姓名\t成绩\n");
}
// 根据学号查找学生信息
void search_by_id() {
printf("请输入学号:");
int id;
scanf("%d", &id);
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
printf("学号\t姓名\t成绩\n");
printf("%d\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
return;
}
}
printf("未找到该学生的信息\n");
}
// 根据姓名查找学生信息
void search_by_name() {
printf("请输入姓名:");
char name[MAX_NAME_LEN];
scanf("%s", name);
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("学号\t姓名\t成绩\n");
printf("%d\t%s\t%d\n", students[i].id, students[i].name, students[i].score);
return;
}
}
printf("未找到该学生的信息\n");
}
// 统计学生人数及其所占比例
void statistics() {
int pass_count = 0;
int middle_count = 0;
int good_count = 0;
int excellent_count = 0;
int fail_count = 0;
for (int i = 0; i < student_count; i++) {
if (students[i].score >= 90) {
excellent_count++;
} else if (students[i].score >= 80) {
good_count++;
} else if (students[i].score >= 70) {
middle_count++;
} else if (students[i].score >= 60) {
pass_count++;
} else {
fail_count++;
}
}
printf("学生总人数:%d\n", student_count);
printf("及格人数:%d,占比:%.2f%%\n", pass_count, pass_count * 100.0 / student_count);
printf("中等人数:%d,占比:%.2f%%\n", middle_count, middle_count * 100.0 / student_count);
printf("良好人数:%d,占比:%.2f%%\n", good_count, good_count * 100.0 / student_count);
printf("优秀人数:%d,占比:%.2f%%\n", excellent_count, excellent_count * 100.0 / student_count);
printf("不及格人数:%d,占比:%.2f%%\n", fail_count, fail_count * 100.0 / student_count);
}
```
该程序有以下功能:
1. 输入学生信息。
2. 输出所有学生信息。
3. 根据条件(最高分数和最低分数)输出学生信息。
4. 按照姓名字典序排序学生信息并输出。
5. 按照成绩从高到低排序学生信息并输出。
6. 根据学号查找学生信息并输出。
7. 根据姓名查找学生信息并输出。
8. 统计及格、中、良、优秀和不及格学生人数及其所占比例并输出。
9. 退出程序。
该程序使用学生信息结构体来存储学生的学号、姓名和成绩,使用全局变量存储学生数组和学生总人数。在输入学生信息时,将学生信息存储到数组中,并将学生总人数加1。在输出所有学生信息时,遍历数组并输出学生信息。在根据条件输出学生信息时,遍历数组并输出符合条件的学生信息。在排序并输出学生信息时,使用标准库函数qsort()对学生数组进行排序,并输出排序后的结果。在查找学生信息时,遍历数组并查找符合条件的学生信息。在统计学生人数及其所占比例时,遍历数组并统计各类学生人数,然后输出结果。
阅读全文