c++编程,自定义函数排序问题

【题目描述】
从键盘输入一个班学生某门课的成绩(班级人数不超过60人,具体人数由键盘输入),
自定义通用排序函数,该函数既能实现学生成绩升序排序,也能实现学生成绩降序排序。
【输入形式】
第一行,一个正整数n(2≤n≤60),表示学生人数。
接下来n行,每行两个正整数num(1≤num≤100000)和score(0≤n≤100),分别表示学生的学号和某门课的成绩
最后一行,一个正整数c,表示排序方式是按成绩升序还是按成绩降序,c=1表示按成绩升序排序,c=2表示按成绩降序排序。

看看是不是你要的效果哈

#include <iostream>
#include <algorithm>
using namespace std;

struct student {
    int num;
    int score;
};

bool cmp_asc(const student& a, const student& b) {
    return a.score < b.score;
}

bool cmp_desc(const student& a, const student& b) {
    return a.score > b.score;
}

void sort_scores(student* s, int n, int c) {
    if (c == 1) {
        sort(s, s + n, cmp_asc);
    } else {
        sort(s, s + n, cmp_desc);
    }
}

int main() {
    int n, c;
    cin >> n;
    student* s = new student[n];
    for (int i = 0; i < n; i++) {
        cin >> s[i].num >> s[i].score;
    }
    cin >> c;
    sort_scores(s, n, c);
    for (int i = 0; i < n; i++) {
        cout << s[i].num << " " << s[i].score << endl;
    }
    delete[] s;
    return 0;
}

代码说明:

  • struct 来存储每个学生的学号和成绩,使得对于一个学生的信息,可以方便地封装在一个对象里面。
  • cmp_asc()cmp_desc() 分别为升序和降序的比较函数。
  • sort_scores() 是通用排序函数,接受一个学生数组 s、数组长度 n 和排序方式 c;如果 c 等于 1 则升序,否则为降序。
  • 主函数中首先输入学生的信息,并创建学生数组;然后再输入排序方式,最后调用 sort_scores() 排序并输出结果。

答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
以下是一个示例的Python代码,用于根据输入的学生人数、学号和成绩,以及排序方式对学生成绩进行升序或降序排序:

def sort_students(students, order):
    if order == 1:
        return sorted(students, key=lambda x: x[1])  # 按成绩升序排序
    elif order == 2:
        return sorted(students, key=lambda x: x[1], reverse=True)  # 按成绩降序排序
    else:
        return students

# 输入学生人数
n = int(input())

students = []
# 输入学号和成绩
for _ in range(n):
    num, score = map(int, input().split())
    students.append((num, score))

# 输入排序方式
c = int(input())

# 调用排序函数进行排序
sorted_students = sort_students(students, c)

# 输出排序结果
for student in sorted_students:
    print(student[0], student[1])

在这个示例中,我们定义了一个名为sort_students的函数,它接受一个学生列表和排序方式作为参数。根据排序方式,我们使用sorted函数对学生列表进行排序,使用lambda函数指定按成绩进行排序。如果排序方式是2,则设置reverse=True以实现降序排序。

然后,我们依次读取学生的学号和成绩,并将它们存储在students列表中。接下来,我们读取排序方式,并调用sort_students函数进行排序。最后,我们按顺序打印排序后的学号和成绩。

请注意,这只是一个示例实现,您可以根据需要进行修改和调整。例如,您可以添加输入验证来确保输入的有效性。