问题 A: 2011 模拟测试1(成绩排名)

题目描述

又到一年一度的期末考试了,老师最头痛的问题就是从一堆学生中找最高分和最低分,你快来帮忙吧。

输入

测试数据有多组,每组首先是一个正整数n(0 < n < 31),接下来是n行数据,每行数据代表一个学生的成绩,分部为学生的姓名、学号、成绩。其中姓名和学号均为不超过10个字符的字符串,成绩为0到100之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

输出

每组分两行输出成绩最高和成绩最低学生的姓名、学号和成绩,字符串间有1空格,两组之间用空行隔开。

样例输入 复制

3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
2
Zhangsan SW9801 70
Lisi EN9801 59

样例输出 复制

Mike CS991301 100
Joe Math990112 89

Zhangsan SW9801 70
Lisi EN9801 59
#include <stdio.h>
#include <string.h>
//结构体
struct Student {
    char name[15], id[15];
    int score;
} max_stu, min_stu, stu;//需要有三个结构体

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        max_stu.score = -1; 
        min_stu.score = 101;//给最大和最小的成绩赋值,大于最大则替换,小于最小则替换
        for (int i = 0; i < n; i++) {
            scanf("%s%s%d", stu.name, stu.id, &stu.score);//因为name和id都是字符串,所以在scanf的时候不需要加&
            if (stu.score > max_stu.score) {
                max_stu = stu;//直接是结构体的替换
            }
            if (stu.score < min_stu.score) {
                min_stu = stu;//直接是结构体的替换。
            }
        }
        printf("%s %s %d\n", max_stu.name, max_stu.id, max_stu.score);
        printf("%s %s %d\n", min_stu.name, min_stu.id, min_stu.score);
        printf("\n");//注意输入输出格式,最后要有一个空行。
    }
    return 0;
}

 基本思路是正确的,需要进一步精细了解结构体的基本内容,从而本题可以彻底解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值