题目
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
输出样例:
题解:
确定n个学生类型(由姓名,学号,成绩构成),该类型用struct构建函数,再依次对该类型中的学生变量进行比较与处理,取出最大值与最小值,回到学生类型中,输出对应的学号,成绩。
思路:
1,先用struct构建一个学生函数,包括姓名,学号,成绩,定义一个students变量用于储存上述内容。
2,利用循环语句对students变量中成绩变量依次进行比较,再定义两个整形变量(int min=students[0].mark,max=students[0].mark)用于存储最大值与最小值对应的次序,方便之后的输出。
3,利用之前定义的min,max分别打印出对应的学生姓名与学号。
注意:
1,用structural定义函数时将各个变量定义清楚,防止出现编译上的错误,也使接下来的使用更清楚,方便。
2,在讨论成绩大小时,对同一数据一定记得要有两种讨论,最好同时讨论,以免遗漏,导致答案错误。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct student //构造一个student函数,用于储存学生信息
{
char name[11];
char number[11];
int mark;
};
student students[100]; //定义students变量
int main()
{
int i,n,low=0,high=0;
cin>>n;
for(i=0;i<n;i++) //录入n位学生的信息
{
scanf("%s %s %d",students[i].name,students[i].number,&students[i].mark);
}
int min=students[0].mark,max=students[0].mark; //定义最大值与最小值,用于输出样例
for(i=0;i<n;i++) //利用循环比较各组数据的大小并找出最大值与最小值
{
if(students[i].mark>max)
{
max=students[i].mark;
high=i;
}
if(students[i].mark<min)
{
min=students[i].mark;
low=i;
}
}
printf("%s %s\n",students[high].name,students[high].number);
printf("%s %s",students[low].name,students[low].number);
return 0;
}