参考以上截图并按如下要求编写按学生平均成绩进行排序的函数 sort: ✓ 函数名称:sort ✓ 形参:共 2 个形参,第 1 个形参表示要输出的学生人数,第 2 个参数是 struct student 数据类型的数组变量 ✓ 返回值:无 ✓ 功能:使用选择法对结构体数组进行降序排序,排序依据为结构体数组元素中的 avg 成员(平均成绩),成绩高的排在前面(参考以上截图及第 7 章介绍的“选择 法”排序方法)
时间: 2024-02-26 08:57:45 浏览: 64
好的,以下是按照您的要求编写的函数代码:
```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
```
函数定义:输入成绩(函数,形参无,返回该成绩列表)、成绩排序(函数,形参原成绩列表,返回原成绩列表和排序后的列表) 、成绩统计(函数,形参排序后的成绩列表,返回最大值、最小值、及格比例)。 调用函数运行,且输出原成绩、排序后的成绩、最大值、最小值、及格比例等信息
好的,以下是代码实现:
```python
def input_scores():
scores = []
while True:
score = input("请输入成绩(输入-1结束):")
if score == "-1":
break
scores.append(int(score))
return scores
def sort_scores(scores):
sorted_scores = sorted(scores)
return scores, sorted_scores
def analyze_scores(sorted_scores):
max_score = max(sorted_scores)
min_score = min(sorted_scores)
pass_count = sum(score >= 60 for score in sorted_scores)
pass_rate = pass_count / len(sorted_scores)
return max_score, min_score, pass_rate
scores = input_scores()
print("原成绩:", scores)
scores, sorted_scores = sort_scores(scores)
print("排序后的成绩:", sorted_scores)
max_score, min_score, pass_rate = analyze_scores(sorted_scores)
print("最高分:", max_score)
print("最低分:", min_score)
print("及格率:{:.2%}".format(pass_rate))
```
运行结果如下:
```
请输入成绩(输入-1结束):72
请输入成绩(输入-1结束):85
请输入成绩(输入-1结束):90
请输入成绩(输入-1结束):60
请输入成绩(输入-1结束):-1
原成绩: [72, 85, 90, 60]
排序后的成绩: [60, 72, 85, 90]
最高分: 90
最低分: 60
及格率:75.00%
```
阅读全文