题目:
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
分析:
1.考察结构体
2.数据的存储可以用结构体。姓名和学号都是最长10位的。
3.每次录入的时候可以去和之前的最大值和最小值比一下,大于最大值则把标记给这次的录入(小于的话同理)。
解题:
#include <stdio.h>
struct Student {
char name[11];
char num[11];
int achievement;
};
int main() {
int number;
//记录一下输入的数量
scanf("%d", &number);
//定义一下分数最高的和最低的
struct Student studentHall;
struct Student studentLow;
if (number <= 0) {
return 0;
}
for (int i = 0; i < number; i++) {
//获取每一次输入的值
struct Student student;
scanf("%s %s %d", student.name, student.num, &student.achievement);
//第一次的时候初始化一下值
if (i == 0) {
studentHall = studentLow = student;
} else {
//后面进行判断,每次输入的新值和当前最高 或者最低比较即可,
//没必要去弄个数组记录所有
if (student.achievement > studentHall.achievement) {
studentHall = student;
}
if (student.achievement < studentLow.achievement) {
studentLow = student;
}
}
}
//最后输出结果即可
printf("%s %s\n", studentHall.name, studentHall.num);
printf("%s %s\n", studentLow.name, studentLow.num);
return 0;
}
转载需要注明出处,有问题留言即可。