用c语言编程实现给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2)按名次列出每个学生的姓名与分数
时间: 2024-02-03 12:13:31 浏览: 98
以下是用C语言编写的实现代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NUM 100 // 学生数量的最大值
struct student {
char name[20]; // 学生姓名
int score; // 学生成绩
};
int main() {
struct student stu[MAX_NUM];
int n, i, j, rank;
printf("请输入学生人数(不超过100人): ");
scanf("%d", &n);
// 输入学生信息
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和分数(用空格隔开): ", i+1);
scanf("%s %d", stu[i].name, &stu[i].score);
}
// 按分数从高到低排序
for (i = 0; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (stu[i].score < stu[j].score) {
struct student temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
// 输出名次和成绩
printf("\n按分数从高到低排名如下:\n");
rank = 1; // 初始化名次为第1名
printf("%d\t%s\t%d\n", rank, stu[0].name, stu[0].score);
for (i = 1; i < n; i++) {
if (stu[i].score == stu[i-1].score) { // 如果分数相同,名次不变
printf("%d\t%s\t%d\n", rank, stu[i].name, stu[i].score);
} else {
rank = i+1; // 更新名次
printf("%d\t%s\t%d\n", rank, stu[i].name, stu[i].score);
}
}
// 按名次输出学生姓名和分数
printf("\n按名次输出学生姓名和分数如下:\n");
for (i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", i+1, stu[i].name, stu[i].score);
}
return 0;
}
```
运行结果示例:
```
请输入学生人数(不超过100人): 5
请输入第1个学生的姓名和分数(用空格隔开): Tom 90
请输入第2个学生的姓名和分数(用空格隔开): Bob 80
请输入第3个学生的姓名和分数(用空格隔开): Alice 95
请输入第4个学生的姓名和分数(用空格隔开): John 75
请输入第5个学生的姓名和分数(用空格隔开): Mary 90
按分数从高到低排名如下:
1 Alice 95
2 Tom 90
2 Mary 90
4 Bob 80
5 John 75
按名次输出学生姓名和分数如下:
1 Alice 95
2 Tom 90
3 Mary 90
4 Bob 80
5 John 75
```
阅读全文