题目是:
输入多个学生的学号、姓名和成绩,然后输出成绩最高的哪个学生的姓名和学号
输入描述
输入包含多组样例。
每组样例包含一个整数N,代表有N个学生。
接下来N行依次输入每个学生的学号、姓名和成绩。
若N = 0,则表示输入结束,这个样例不需要被处理。
输出描述
对于每组用例,你应当输出这组样例N个学生中成绩最高的学生的姓名和学号,每个输出占一行。
我的解题思路:
获取学生信息,以及寻找最高分那里需要修改下吧。
修改如下:
#include <stdio.h>
#include <stdlib.h>
struct stud{
int num;
char name[20];
int score;
};
int main(void){
int N,i=0,j,max=0,k;
scanf("%d",&N); // 获取学生个数
// 从输入存储N个学生的信息
while(N!=0){
// 申请一块可以存储N个学生信息的内存,并让结构指针s指向这块内存
struct stud * s = (struct stud *)malloc(sizeof(struct stud)*N);
i=0;
while(i<N){
scanf("%d%s%d",&s[i].num,s[i].name,&s[i].score);
i++;
}
if(N>0){ //如果学生人数大于0,则寻找成绩最高的学生
max=s[0].score; // 成绩最高分 初始赋值为第一个学生的成绩
k=0;
// 遍历寻找成绩最高的学生的下标
for(i=1;i<N;i++){
if(max<s[i].score){
max=s[i].score;
k=i;
// printf("max=%d,k=%d\n",max,k);
}
}
// 打印结果
printf("%d %s\n",s[k].num,s[k].name);
}
free(s);
s=NULL;
scanf("%d",&N); // 再次获取学生个数
}
return 0;
}