C语言有一个一维数组内放十个学生成绩,写一个函数当主函数调用子函数后能求出学生成绩最高分和对应的学号并且对学生成绩从高到低进行排序
时间: 2024-02-13 13:03:09 浏览: 74
可以通过以下步骤实现:
1. 定义一个结构体,包括学生姓名、学生学号和学生成绩。
2. 定义一个函数,输入一个学生成绩数组和数组长度,输出学生成绩最高分和对应的学号,并将学生成绩从高到低排序。
3. 在主函数中定义一个学生成绩数组并初始化,然后调用上面定义的函数求出学生成绩最高分和对应的学号,并打印排序后的学生成绩和学生信息。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生结构体
typedef struct {
char name[20];
int id;
int score;
} Student;
// 比较函数,用于qsort排序
int cmp(const void* a, const void* b) {
const Student* s1 = (const Student*) a;
const Student* s2 = (const Student*) b;
return s2->score - s1->score;
}
// 求最高分和对应学号,同时对成绩从高到低排序
void max_score(Student students[], int n, int* max_score, int* max_id) {
int i;
*max_score = -1;
for (i = 0; i < n; i++) {
if (students[i].score > *max_score) {
*max_score = students[i].score;
*max_id = students[i].id;
}
}
qsort(students, n, sizeof(Student), cmp);
}
int main() {
int i, max_score, max_id;
Student students[10] = {{"Tom", 1, 85}, {"Jerry", 2, 76}, {"Alice", 3, 92}, {"Bob", 4, 68}, {"David", 5, 89},
{"Eva", 6, 78}, {"Frank", 7, 94}, {"Grace", 8, 81}, {"Henry", 9, 72}, {"Ivy", 10, 87}};
// 求最高分和对应学号,同时对成绩从高到低排序
max_score(students, 10, &max_score, &max_id);
// 打印最高分和对应学号
printf("Max score: %d, Student ID: %d\n", max_score, max_id);
// 打印排序后的学生成绩和学生信息
printf("Rank\tName\tID\tScore\n");
for (i = 0; i < 10; i++) {
printf("%d\t%s\t%d\t%d\n", i + 1, students[i].name, students[i].id, students[i].score);
}
return 0;
}
```
上述代码中,首先定义了一个学生结构体,包括学生姓名、学生学号和学生成绩。然后定义了一个比较函数cmp,用于qsort排序时比较学生的成绩大小。接着定义了一个求最高分和对应学号的函数max_score,输入一个学生成绩数组和数组长度,输出学生成绩最高分和对应的学号,并将学生成绩从高到低排序。最后在主函数中定义了一个学生成绩数组并初始化,调用max_score函数求出学生成绩最高分和对应学号,并打印排序后的学生成绩和学生信息。
阅读全文