统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个C语言代码: (1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2) 按名次列出每个学生的姓名与分数。
时间: 2024-01-02 16:05:13 浏览: 73
好的,下面是一个实现上述要求的C语言代码:
```c
#include <stdio.h>
#include <string.h>
struct student {
char name[50];
int score;
int rank;
};
void sort_desc(struct student *arr, int size) {
int i, j;
struct student temp;
for (i = 0; i < size - 1; i++) {
for (j = i + 1; j < size; j++) {
if (arr[i].score < arr[j].score) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
void print_rank(struct student *arr, int size) {
int i, rank = 1, score = arr[0].score;
for (i = 0; i < size; i++) {
if (arr[i].score < score) {
rank = i + 1;
score = arr[i].score;
}
arr[i].rank = rank;
printf("%s的名次是:%d\n", arr[i].name, arr[i].rank);
}
}
void print_score(struct student *arr, int size) {
int i;
printf("名次\t姓名\t分数\n");
for (i = 0; i < size; i++) {
printf("%d\t%s\t%d\n", arr[i].rank, arr[i].name, arr[i].score);
}
}
int main() {
struct student arr[100];
int n, i;
printf("请输入学生的数量:");
scanf("%d", &n);
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和分数:", i + 1);
scanf("%s%d", arr[i].name, &arr[i].score);
}
sort_desc(arr, n);
print_rank(arr, n);
print_score(arr, n);
return 0;
}
```
代码中定义了一个`student`结构体来存储每个学生的姓名、分数和名次。`sort_desc`函数用来按分数降序排序整个数组,`print_rank`函数用来打印每个学生的名次,`print_score`函数用来按名次打印每个学生的姓名和分数。在`main`函数中,先读入学生的信息,然后调用上述函数来实现要求的功能。
阅读全文