题目描述
给你n个学生的姓名和他的成绩,然后请你按成绩从高到低输出每个人的姓名及他的成绩。(保证学生成绩都不相同)
输入
第一行输入一个整数n(1<=n<=100),然后n行每行一个长度小于20的串 name(表示学生姓名),一个小于100的非负数 d(表示该同学的成绩)
输出
输出n行,每一行输出一个学生信息(姓名加成绩,成绩保留一位小数)
样例
输入
4
xiaoming 67.7
xiaoliu 99.9
xiaoqiang 87.6
hunzi 33.3
输出
xiaoliu 99.9
xiaoqiang 87.6
xiaoming 67.7
hunzi 33.3
题解
下面是一份基于选择排序的C语言程序,可以实现输入n个学生的姓名和成绩,按成绩从高到低输出每个人的姓名及他的成绩。
#include <stdio.h>
#include <string.h>
#define MAX_N 100
struct Student {
char name[21];
float score;
};
void selectionSort(struct Student arr[], int len) {
int i, j, maxIdx;
struct Student temp;
for (i = 0; i < len - 1; i++) {
maxIdx = i;
for (j = i + 1; j < len; j++) {
if (arr[j].score > arr[maxIdx].score) {
maxIdx = j;
}
}
if (maxIdx != i) {
temp = arr[i];
arr[i] = arr[maxIdx];
arr[maxIdx] = temp;
}
}
}
int main() {
struct Student students[MAX_N];
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s%f", students[i].name, &students[i].score);
}
selectionSort(students, n);
for (i = 0; i < n; i++) {
printf("%s %.1f\n", students[i].name, students[i].score);
}
return 0;
}
总结
程序中定义了一个 Student
结构体,包含学生姓名和成绩两个属性。定义了一个 selectionSort
函数,使用选择排序算法按照成绩从高到低排序输入的学生数组。在 main
函数中,首先读入学生个数 n
,然后循环读入每个学生的姓名和成绩,并将他们存入 students
数组中。然后调用 selectionSort
函数对数组进行排序,最后循环输出每个学生的姓名和成绩。