PAT乙级1004

题目

读入 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
输出样例:
   Mike CS991301
   Joe Math990112

代码

  • 不同函数

    1. 此处是记录的这种输入输入方式!!!我们可以看到两个字符串之间是有空格的,我第一时间想的在输入的时候如果出现空格时还得处理一下,经查阅资料完全多余的想法!!!
      cin函数: 当遇到空格、tab或者换行符的时候自动截断!下面的不再写入
      scanf函数: 完全也是如此。 scanf("%s,%s", &a,&b); 甚至两者之间不用有空格

      但是问题来了!如果我们想输入有空格的字符串怎么办???
      cin.getline(a, sizeof(a));便可以获取我们有空格的字符串
    2. 当需要一次性输入多个数据的时候
      while(count–) 也是我值得学习的地方!!!
  • 核心思想

  1. 我在最初做这个题目时,想创建一个student数组,将所有的学生的数据包含进来,在进行比较。 发现这是完全多余的!!
    题目中并没有要求去保存学生的数据,只是在输入之后获取成绩最高的那个学生的数据就可以,所以定义一个学生类highest和一个学生类lowest用来在每次比较好保存就可以了!!!!
#include 
#include 
#include 

using namespace std;

typedef struct {
	char name[11];
	char stuNo[11];
	int score;
}student;

int main() {
	int count;
	student highest, lowest;
	student temp;
	highest.score = -1;
	lowest.score = 101;
	scanf("%d", &count);
	while(count--) {
		cin>>temp.name>>temp.stuNo>>temp.score;
		if(temp.score > highest.score) highest = temp;
		if(temp.score < lowest.score) lowest = temp;
	}
	cout<< highest.name << " " << highest.stuNo << endl;
	cout<< lowest.name <<" " << lowest.stuNo;
	return 0;
	
}



你可能感兴趣的:(PAT,结构体)