题目描述
有若干个学生的信息,每个学生包括学号、姓名、C语言成绩,请找出成绩最高的学生,并输出他(她)的信息。
其中:学号由不少于11位、不超过15位数字组成;姓名不超过50个汉字,中间不含空格;C语言成绩为0-100之间的整数。
输入
测试数据有多组,每组的第一行为一个正整数n(n不超过100),表示有n个学生的信息,每个学生的信息单独占一行,学生的各数据之间由一个空格分隔。
输出
对于每组测试数据,找出成绩最高的学生,输出他(她)的信息,输出单独占一行,各数据之间由一个空格分隔。若有多个学生并列最高分,则输出第一个最高分学生的信息。
样例输入
5
20151214001 张老三 98
20151214002 李老四 99
20151214003 王老五 99
20151214004 李麻子 98
20151214005 赵二财 92
8
202031222003 华金科 98
202031222128 田启总 97
202031222139 王永彬 99
202031222194 张旭 100
202031222018 李国豪 95
202031222091 刘志航 96
202031222156 刘斌羽 97
202031222162 施树翔 100
样例输出
20151214002 李老四 99
202031222194 张旭 100
提示
必须使用结构体数组来存放学生的信息。
我测试了第一组学生信息,测试结果和输出样例一致,代码如下,供参考:
#include <stdio.h>
#include <stdlib.h>
struct stu{
long long int id; //因为在我的电脑上,long int 是四位,存放不了学生学号,所以我用的long long int
char name[60];
int score;
};
//寻找学生信息结构数组里成绩最高的学生信息下标
int findMaxScoreStu(struct stu * s,int n){
int i=0;
int maxScore=0; //最高分
int index =-1;
if(s==NULL){
printf("学生信息为空!\n");
}
//遍历数组,寻找最高分学生的下标
while(i<n){
if(s[i].score>maxScore){
maxScore=s[i].score;
index=i;
}
i++;
}
return index;
}
int main(void){
int n;
scanf("%d",&n); //获取要输入的学生个数
struct stu s [100]; //学生信息结构数组,默认可以存放100个学生
//printf("sizeof(long)=%d\n",sizeof(long));
int i;
while(n>0){ //如果输入的学生个数大于0,则获取学生信息并输出最高分学生的信息
i=0;
while(i<n){
scanf("%lld%s%d",&s[i].id,s[i].name,&s[i].score); //获取学生信息
// printf("id=%lld,name=%s,score=%d\n",s[i].id,s[i].name,s[i].score);
i++;
}
int index = findMaxScoreStu(s,n); //调用函数寻找学生结构数组里最高分学生的下标
// printf("index=%d\n",index);
printf("%lld %s %d\n",s[index].id,s[index].name,s[index].score); //打印最高分学生信息
scanf("%d",&n);
}
}