给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个C语言算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一-名次; (2)按名次列出每个学生的姓名与分数。
时间: 2024-02-13 16:06:26 浏览: 86
实验八 排序算法的实现.txt
5星 · 资源好评率100%
下面是一个简单的C语言算法,用于按分数高低次序打印出每个学生的名次和按名次列出每个学生的姓名和分数。
```
#include <stdio.h>
#include <string.h>
struct student{
char name[20]; // 学生姓名
int score; // 学生分数
int rank; // 学生排名
};
int main(){
int n;
printf("请输入学生总数: ");
scanf("%d", &n);
// 定义学生数组
struct student stu[n];
// 输入学生信息
for(int i=0; i<n; i++){
printf("请输入第%d个学生的姓名和分数: ", i+1);
scanf("%s %d", stu[i].name, &stu[i].score);
stu[i].rank = 1; // 初始化排名为1
}
// 计算学生排名
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(stu[i].score < stu[j].score){
stu[i].rank++; // 如果有分数比当前学生高的,则排名+1
}
}
}
// 按分数高低次序打印出每个学生的名次
printf("按分数高低次序打印出每个学生的名次:\n");
for(int i=0; i<n; i++){
printf("%s的排名是%d\n", stu[i].name, stu[i].rank);
}
// 按名次列出每个学生的姓名和分数
printf("按名次列出每个学生的姓名和分数:\n");
for(int i=1; i<=n; i++){
for(int j=0; j<n; j++){
if(stu[j].rank == i){
printf("第%d名: %s %d分\n", i, stu[j].name, stu[j].score);
}
}
}
return 0;
}
```
注意:此算法没有考虑分数相同的情况,如果需要考虑分数相同的情况,需要在计算排名时进行特殊处理。
阅读全文