用c语言给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2)按名次列出每个学生的姓名与分数。
时间: 2024-02-03 13:13:23 浏览: 55
C语言——建立一个链表表示学生的信息(学号、姓名、分数)
4星 · 用户满意度95%
可以使用结构体来表示每个学生的信息,然后根据分数进行排序,最后输出每个学生的名次和姓名与分数。
以下是使用选择排序实现的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
// 定义学生信息结构体
typedef struct {
char name[20];
int score;
int rank;
} Student;
void print_ranking(Student students[], int n) {
int i, j;
for (i = 0; i < n; i++) {
students[i].rank = 1;
for (j = 0; j < n; j++) {
if (students[j].score > students[i].score) {
students[i].rank++;
}
}
printf("%s 的名次是:%d\n", students[i].name, students[i].rank);
}
}
void print_students(Student students[], int n) {
int i;
for (i = 0; i < n; i++) {
printf("第 %d 名: %s,分数:%d\n", students[i].rank, students[i].name, students[i].score);
}
}
void sort_students(Student students[], int n) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (students[j].score > students[i].score) {
temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
int main() {
int n, i;
Student students[MAX_STUDENTS];
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入每个学生的姓名和分数(用空格分隔):\n");
for (i = 0; i < n; i++) {
scanf("%s %d", students[i].name, &students[i].score);
}
sort_students(students, n);
print_ranking(students, n);
print_students(students, n);
return 0;
}
```
输入示例:
```
请输入学生人数:5
请输入每个学生的姓名和分数(用空格分隔):
Tom 88
Jerry 76
Lucy 91
Lily 88
Bob 60
```
输出示例:
```
Lucy 的名次是:1
Tom 的名次是:2
Lily 的名次是:2
Jerry 的名次是:4
Bob 的名次是:5
第 1 名: Lucy,分数:91
第 2 名: Tom,分数:88
第 2 名: Lily,分数:88
第 4 名: Jerry,分数:76
第 5 名: Bob,分数:60
```
阅读全文