【问题描述】
从标准输入连续读入 n 个学生的学号(不超过int类型表示范围)、姓名(由不超过10个英文字母组成)以及数学、英语、语文三门课的成绩,计算各人的平均成绩。输出总成绩最高的学生的信息(如果总成绩最高的学生有多名,按输入顺序输出总成绩最高的第一个同学),要求学号占10个字符,姓名占10个字符,数学、英语、语文、平均成绩各占5个字符)。要求用链表实现。
【输入形式】
从控制台输入一个正整数,表示学生人数;然后分行输入学号、姓名以及数学、英语、语文三门课的成绩,中间用空格分隔。
【输出形式】
控制台输出成绩最高的第一个同学,要求输出:学号、姓名、数学成绩、英语成绩、语文成绩、平均成绩。
【样例输入】
8
39060415 zf 98 88 80
39060427 lzw 87 92 88
39060413 wr 95 88 90
39060412 wp 95 87 91
39060405 syj 78 82 69
39060425 yef 85 78 93
39060419 sw 75 89 88
39060421 rr 89 88 75
【样例输出】
39060413 wr 95 86 90 91
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct stu{
int no;
char name[10];
int math;
int english;
int chinese;
int average;
struct stu *next;
} student;
int main(){
student *stud = (student *)malloc(sizeof(student));
student *temp;
student *p = stud;
int num, i;
int no;
char name[10];
int math;
int english;
int chinese;
scanf("%d", &num);
for (i = 0; i < num; i++){
temp = (student *)malloc(sizeof(student));
scanf("%d %s %d %d %d", &no, name, &math, &english, &chinese);
temp->no = no;
strcpy(temp->name, name);
temp->math = math;
temp->english = english;
temp->chinese = chinese;
temp->average = (math + chinese + english) / 3;
temp->next = NULL;
p->next = temp;
p = temp;
}
student *max = (student *)malloc(sizeof(student));
while (stud->next != NULL){
stud = stud->next;
max->no = stud->no;
strcpy(max->name, stud->name);
max->math = stud->math;
max->english = stud->english;
max->chinese = stud->chinese;
max->average = stud->average;
while (stud->next != NULL){
if (stud->average > max->average){
max->no = stud->no;
strcpy(max->name, stud->name);
max->math = stud->math;
max->english = stud->english;
max->chinese = stud->chinese;
max->average = stud->average;
}
stud = stud->next;
}
printf("%10d%10s%5d%5d%5d%5d", max->no, max->name, max->math, max->english, max->chinese, max->average);
}
return 0;
}