4、某班的3门成绩,请按照3门成绩的平均成绩为排序依据,进行降序,并输出平均成绩的前两名。其中记录成绩的字符串为:"张三 56 75 86;李四 75 85 90;王五 66 95 99;赵六 70 90 85",用python语言来表示
时间: 2024-11-15 13:24:43 浏览: 11
在Python中,我们可以首先解析字符串,将成绩存储到字典中,然后计算每个人的平均成绩并按降序排序。以下是完成这个任务的一个示例代码:
```python
# 定义学生的成绩数据
students_scores = "张三 56 75 86;李四 75 85 90;王五 66 95 99;赵六 70 90 85"
scores_list = students_scores.split(";") # 分割字符串
# 将每个学生的信息转换成字典
students_dict = {}
for entry in scores_list:
name, *grades = entry.strip().split() # 分割姓名和成绩
grades = [int(g) for g in grades] # 转换成绩为整数
students_dict[name] = sum(grades) / len(grades) # 计算平均分
# 按平均成绩降序排序
sorted_students = sorted(students_dict.items(), key=lambda x: x[1], reverse=True)
# 输出前两名的平均成绩及对应的学生
for i in range(2):
print(f"{i+1}. {sorted_students[i][0]}: {sorted_students[i][1]} 分")
相关问题
参考以上截图并按如下要求编写按学生平均成绩进行排序的函数 sort: ✓ 函数名称:sort ✓ 形参:共 2 个形参,第 1 个形参表示要输出的学生人数,第 2 个参数是 struct student 数据类型的数组变量 ✓ 返回值:无 ✓ 功能:使用选择法对结构体数组进行降序排序,排序依据为结构体数组元素中的 avg 成员(平均成绩),成绩高的排在前面(参考以上截图及第 7 章介绍的“选择 法”排序方法)
好的,以下是按照您的要求编写的函数代码:
```c
void sort(int n, struct student stu[]) {
int i, j, max;
struct student temp;
for (i = 0; i < n - 1; i++) {
max = i;
for (j = i + 1; j < n; j++) {
if (stu[j].avg > stu[max].avg) {
max = j;
}
}
if (max != i) {
temp = stu[i];
stu[i] = stu[max];
stu[max] = temp;
}
}
}
```
这个函数使用了选择法对结构体数组进行降序排序,排序依据为结构体数组元素中的 avg 成员(平均成绩),成绩高的排在前面。传入的第一个参数 n 表示要输出的学生人数,第二个参数 stu 是 struct student 数据类型的数组变量。函数没有返回值,直接修改 stu 数组中的元素顺序。
编写以input函数形参:函数返回类型:struct student函数功能:定义struct student类局部变量通过scanf函数输入以上结构体变量成员num、name、c、oop、db的值计算其中avg成员(平均成绩)的值返回成员值输入、计算后的结构体变量,包含output函数以及形参:共2个形参,第1个形参表示要输出的学生人数,第2个参数是struct student数据类型返回值:无功能:通过for循环用printf函数逐一显示每个学生的学号、姓名、3门课的成绩及平均成绩,共2个形参,第1个形参表示要输出的学生人数,第2个参数是struct student数据类型返回值:无功能:使用选择法对结构体数组进行降序排序,排序依据为结构体数组元素中的avg成员(平均成绩),成绩高的排在前面定义能保存多达10个学生成绩资料的struct student类型数组。通过printf、scanf提示并要求用户输入要录入成绩资料的学生人数通过for循环调用前面定义的input()函数逐一输入学生成绩资料并保存到结构体数组元素内调用前面定义的sort()函数对结构体数组进行降序排序调用前面定义output()函数显示输出每个学生的成绩资料(结构体数组各元素的成员值)
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 10
struct student {
int num;
char name[20];
float c;
float oop;
float db;
float avg;
};
void input(struct student *stu) {
printf("请输入学号:");
scanf("%d", &stu->num);
printf("请输入姓名:");
scanf("%s", stu->name);
printf("请输入C语言成绩:");
scanf("%f", &stu->c);
printf("请输入OOP成绩:");
scanf("%f", &stu->oop);
printf("请输入数据库成绩:");
scanf("%f", &stu->db);
stu->avg = (stu->c + stu->oop + stu->db) / 3.0f;
}
void output(int n, struct student *stu) {
printf("学号\t姓名\tC语言\tOOP\t数据库\t平均成绩\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", stu[i].num, stu[i].name, stu[i].c, stu[i].oop, stu[i].db, stu[i].avg);
}
}
void sort(int n, struct student *stu) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (stu[i].avg < stu[j].avg) {
struct student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
}
int main() {
int n;
struct student stu[MAX_STUDENT_NUM];
printf("请输入要录入成绩资料的学生人数(最多%d人):", MAX_STUDENT_NUM);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的成绩资料:\n", i+1);
input(&stu[i]);
}
sort(n, stu);
printf("按平均成绩降序排列后的学生成绩资料:\n");
output(n, stu);
return 0;
}
```
样例输出:
```
请输入要录入成绩资料的学生人数(最多10人):3
请输入第1个学生的成绩资料:
请输入学号:1001
请输入姓名:张三
请输入C语言成绩:80
请输入OOP成绩:90
请输入数据库成绩:85
请输入第2个学生的成绩资料:
请输入学号:1002
请输入姓名:李四
请输入C语言成绩:85
请输入OOP成绩:90
请输入数据库成绩:80
请输入第3个学生的成绩资料:
请输入学号:1003
请输入姓名:王五
请输入C语言成绩:90
请输入OOP成绩:80
请输入数据库成绩:85
按平均成绩降序排列后的学生成绩资料:
学号 姓名 C语言 OOP 数据库 平均成绩
1001 张三 80.00 90.00 85.00 85.00
1003 王五 90.00 80.00 85.00 85.00
1002 李四 85.00 90.00 80.00 85.00
```
阅读全文