读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:每个测试输入包含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 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(void) 5 { 6 struct student{ 7 char name[11]; 8 char number[11]; 9 int val; 10 }; 11 struct student *ps; 12 int i, N; 13 int Max = -1, Min = 101; 14 int cMax, cMin; 15 16 scanf("%d", &N); 17 if(N < 0) 18 goto err_exit; 19 20 ps = (struct student *)malloc(N * sizeof(struct student)); 21 if(ps == NULL) 22 goto err_exit; 23 24 for(i = 0; i < N; i++) 25 { 26 scanf("%s %s %d", ps[i].name, ps[i].number, &(ps[i].val)); 27 } 28 for(i = 0; i < N; i++) 29 { 30 if(ps[i].val < Min) 31 { 32 cMin = i; 33 Min = ps[i].val; 34 } 35 36 if(ps[i].val > Max) 37 { 38 cMax = i; 39 Max = ps[i].val; 40 } 41 } 42 43 printf("%s %s\n", ps[cMax].name, ps[cMax].number); 44 printf("%s %s\n", ps[cMin].name, ps[cMin].number); 45 46 free(ps); 47 48 err_exit: 49 50 return 0; 51 }