c语言完整代码给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2)按名次列出每个学生的姓名与分数。
时间: 2024-02-03 12:13:47 浏览: 85
以下是C语言完整代码实现:
```c
#include <stdio.h>
#include <string.h>
struct student {
char name[20];
int score;
int rank;
};
int main() {
int n, i, j;
struct student stu[100];
// 输入学生数量和信息
printf("请输入学生数量:");
scanf("%d", &n);
printf("请输入学生信息:\n");
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和分数:", i + 1);
scanf("%s %d", stu[i].name, &stu[i].score);
stu[i].rank = 1; // 默认排名第一
}
// 按分数排序,更新排名
for (i = 0; i < n; 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;
}
}
}
for (i = 0; i < n; i++) {
if (i > 0 && stu[i].score == stu[i - 1].score) {
stu[i].rank = stu[i - 1].rank; // 分数相同排名相同
} else {
stu[i].rank = i + 1; // 排名为当前位置+1
}
}
// 按名次输出学生姓名和分数
printf("按名次列出每个学生的姓名与分数:\n");
for (i = 0; i < n; i++) {
printf("%d\t%s\t%d\n", stu[i].rank, stu[i].name, stu[i].score);
}
// 按分数输出学生名次
printf("按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次:\n");
for (i = 0; i < n; i++) {
printf("%s\t第%d名\n", stu[i].name, stu[i].rank);
}
return 0;
}
```
代码中使用了结构体存储每个学生的姓名、分数和排名。首先按分数排序,更新排名;然后按名次输出学生姓名和分数,按分数输出学生名次。
阅读全文