PTA-乙级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

代码如下

#include
#include
struct student{
    char name[11];
    char id[11];
    int score;
}temp,ans_max,ans_min;
int main()
{
    int n;
    //struct student[n];
    ans_min.score = 101,ans_max.score = -1;
    scanf("%d",&n);
    for(int i = 0;i < n; i++){
        scanf("%s%s%d",temp.name,temp.id,&temp.score);
        if(temp.score<ans_min.score){
            ans_min = temp;
        }
        if(temp.score>ans_max.score){
            ans_max = temp;
        }
    }
    printf("%s %s\n",ans_max.name,ans_max.id);
    printf("%s %s\n",ans_min.name,ans_min.id);

    system("pause");
    return 0;
}

这题初始一直有一个测试点答案错误,没找着原因,因为之前我用的是if else if语句,用这个语句的话问题就出现了。

if(条件1)
	语句1;
else if(条件2)
	语句2;
else if(条件3)
	语句3;
	.
	.
	.
else
	语句4;

这种形式的if语句,最终只有一个出口.即当满足条件1时,执行语句1.当不满足条件1时,往下走,判断是否满足条件2,如果还是不满足,则继续往下走,一直走到else语句,说明之前的条件都不满足,最终执行语句4。
if(条件1)
	语句1;
if(条件2)
	语句2;
if(条件3)
	语句3;

多个if:

int a=0;
if(a==0){
	a++;
	printf("aaa");
}      
if(a==1)
	printf("bbb");
if(a==2)
	printf("ccc");   

最终输出:aaabbb,在多个if语句中,所有的if都会进行判断,无论是否满足情况.所以在满足a==0,执行了a++,a就变成了1,当进行a==1判断时,也符合,故也执行了printf("bbb")
-------------------------------------------------
if else if else:

int a=0;
if(a==0){
	a++;
	printf("aaa");
}      
else if(a==1)
	printf("bbb");
else
	printf("ccc");   

最终只输出了aaa.if else if else,只要有一个条件满足,则其余条件不用判断,直接跳过即可,所以a++,a=1之后不会去判断else if中的a==1,所以也就不会执行printf("bbb")

那回到题目,假如使用的是下面的代码

 if(temp.score<ans_min.score) ans_min = temp;
 else if(temp.score>ans_max.score) ans_max = temp;

假如输入学生成绩是80,50,30。
首先80小于101,故最小值更新变为80,这个else if便未执行。
然后继续比较,可以得到最小值为30,但由于else if 这个代码块一直没有实行,所以最小值还是-1。这显然错误了。所以下次使用这两个语句时需要多考虑考虑!

你可能感兴趣的:(算法笔记)