用C语言.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法:(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。(2)按名次列出每个学生的姓名与分数。
时间: 2024-02-18 17:02:50 浏览: 148
数据结构与算法-学生成绩管理(顺序)_C-C++_
5星 · 资源好评率100%
以下是按照分数高低次序打印每个学生获得的名次的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
// 学生结构体
typedef struct {
char name[20]; // 姓名
int score; // 分数
int rank; // 名次
} Student;
int cmp(const void *a, const void *b) {
Student *sa = (Student *) a;
Student *sb = (Student *) b;
return sb->score - sa->score;
}
int main() {
int n;
Student students[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s %d", students[i].name, &(students[i].score));
students[i].rank = 1; // 初始化为第一名
}
qsort(students, n, sizeof(Student), cmp); // 按照分数排序
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;
}
}
for (int i = 0; i < n; i++) {
printf("%s %d\n", students[i].name, students[i].rank);
}
return 0;
}
```
以下是按照名次列出每个学生的姓名与分数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
// 学生结构体
typedef struct {
char name[20]; // 姓名
int score; // 分数
int rank; // 名次
} Student;
int cmp(const void *a, const void *b) {
Student *sa = (Student *) a;
Student *sb = (Student *) b;
return sa->rank - sb->rank;
}
int main() {
int n;
Student students[MAX_N];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s %d", students[i].name, &(students[i].score));
students[i].rank = 1; // 初始化为第一名
}
qsort(students, n, sizeof(Student), cmp); // 按照名次排序
for (int i = 0; i < n; i++) {
printf("%d %s %d\n", students[i].rank, students[i].name, students[i].score);
}
return 0;
}
```
阅读全文