给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个C语言算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2)按名次列出每个学生的姓名与分数。
时间: 2024-02-03 17:13:39 浏览: 139
实验八 排序算法的实现.txt
5星 · 资源好评率100%
可以使用结构体来存储每个学生的姓名和分数,然后再对结构体进行排序来实现按照分数排名和按照排名列出学生信息的功能。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 20
#define MAX_STUDENT_NUM 50
typedef struct {
char name[MAX_NAME_LENGTH];
int score;
int rank;
} Student;
// 比较函数,用于结构体排序
int compare(const void* a, const void* b) {
const Student* s1 = (const Student*)a;
const Student* s2 = (const Student*)b;
return s2->score - s1->score;
}
int main() {
Student students[MAX_STUDENT_NUM];
int n, i;
// 输入学生信息
printf("请输入学生人数:");
scanf("%d", &n);
printf("请按照姓名和分数的顺序输入学生信息:\n");
for (i = 0; i < n; i++) {
scanf("%s%d", students[i].name, &students[i].score);
students[i].rank = 0;
}
// 按照分数排序
qsort(students, n, sizeof(Student), compare);
// 计算排名
int rank = 1;
for (i = 0; i < n; i++) {
if (i > 0 && students[i].score != students[i - 1].score) {
rank = i + 1;
}
students[i].rank = rank;
}
// 按照排名输出
printf("按照分数排名输出:\n");
for (i = 0; i < n; i++) {
printf("%s 获得第 %d 名,分数为 %d\n", students[i].name, students[i].rank, students[i].score);
}
// 按照名次输出
printf("\n按照名次输出:\n");
for (rank = 1; rank <= n; rank++) {
printf("第 %d 名:", rank);
for (i = 0; i < n; i++) {
if (students[i].rank == rank) {
printf("%s %d分\t", students[i].name, students[i].score);
}
}
printf("\n");
}
return 0;
}
```
示例输入:
```
5
张三 90
李四 95
王五 80
赵六 90
钱七 85
```
示例输出:
```
按照分数排名输出:
李四 获得第 1 名,分数为 95
赵六 获得第 2 名,分数为 90
张三 获得第 2 名,分数为 90
钱七 获得第 4 名,分数为 85
王五 获得第 5 名,分数为 80
按照名次输出:
第 1 名:李四 95分
第 2 名:赵六 90分 张三 90分
第 3 名:钱七 85分
第 4 名:王五 80分
```
阅读全文