题目描述
又到一年一度的期末考试了,老师最头痛的问题就是从一堆学生中找最高分和最低分,你快来帮忙吧。
输入
测试数据有多组,每组首先是一个正整数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;
}
基本思路是正确的,需要进一步精细了解结构体的基本内容,从而本题可以彻底解决。