题目描述

给你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 函数对数组进行排序,最后循环输出每个学生的姓名和成绩。