使用C语言给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2)按名次列出每个学生的姓名与分数
时间: 2024-02-03 17:13:19 浏览: 80
可以使用结构体来存储每个学生的信息,结构体中包括姓名和分数两个属性。然后使用冒泡排序或者快速排序等算法对学生的分数进行排序,得到每个学生的名次。最后根据名次输出每个学生的姓名和分数。
示例代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
// 定义结构体
struct student {
char name[20];
int score;
int rank;
};
int main() {
struct student students[MAX_STUDENTS];
int n;
printf("请输入学生人数:");
scanf("%d", &n);
// 输入每个学生的信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和分数:", i + 1);
scanf("%s%d", students[i].name, &students[i].score);
students[i].rank = 1; // 初始排名为1
}
// 对学生的分数进行排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (students[j].score < students[j + 1].score) {
struct student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
// 给每个学生确定名次
for (int i = 1; i < n; i++) {
if (students[i].score == students[i - 1].score) {
students[i].rank = students[i - 1].rank; // 分数相同,名次相同
} else {
students[i].rank = i + 1;
}
}
// 按名次输出每个学生的姓名和分数
printf("按名次输出每个学生的姓名和分数:\n");
for (int i = 0; i < n; i++) {
printf("%d %s %d\n", students[i].rank, students[i].name, students[i].score);
}
// 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次
printf("按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次:\n");
int current_rank = 1;
printf("%d %s %d\n", current_rank, students[0].name, students[0].score);
for (int i = 1; i < n; i++) {
if (students[i].score == students[i - 1].score) {
printf("%d %s %d\n", current_rank, students[i].name, students[i].score);
} else {
current_rank = i + 1;
printf("%d %s %d\n", current_rank, students[i].name, students[i].score);
}
}
return 0;
}
```
阅读全文