使用c语言写一子函数,实现动态建立链表,输入五个同学的信息:学号,姓名,三门课成绩,平均分
写一子函数,以上述链表作为实参,要求实现按照平均成绩从高到低输出五位同学的所有信息,并返回成绩最高的同学信息指针
在主函数中使用函数指针实现子函数的调用,并输出“成绩最高的学生姓名+is the best”。
定义链表结构,然后逐个输入学生信息形成节点。遍历链表搜索最高分的学生信息
//写一子函数,以上述链表作为实参,要求实现按照平均成绩从高到低输出五位同学的所有信息,并返回成绩最高的同学信息指针
//在主函数中使用函数指针实现子函数的调用,并输出“成绩最高的学生姓名+is the best”。
#include <stdio.h>
#include <stdlib.h>
typedef struct _linknode
{
int num;
char name[20];
int score[3];
float avg;
struct _linknode *next;
}linknode,*linklist;
void creat(linklist head)
{
linklist q = head;
linklist p = NULL;;
int i=0;
for(i=0;i<5;i++)
{
p = (linklist)malloc(sizeof(linknode));
scanf("%d%s%d%d%d",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
p->avg = (p->score[0] + p->score[1]+p->score[1])/3.0;
p->next = NULL;
q->next = p;
q = p;
}
}
linklist LinkListSort(linklist head)
{
linklist p = head->next, pre, r = p->next;
p->next = NULL;
p = r;
while (p)
{
r = p->next;
pre = head;
while (pre->next&&pre->next->avg > p->avg)
pre = pre->next;
p->next = pre->next;
pre->next = p;
p = r;
}
return head->next;
}
int main()
{
linklist head = (linklist)malloc(sizeof(linknode));
linklist p = NULL,h;
head->next = NULL;
creat(head);
h = LinkListSort(head);
p = head->next;
while(p != NULL)
{
printf("%d\t%s\t%d\t%d\t%d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);
p = p->next;
}
if(h!=NULL)
printf("%s is the best",h->name);
return 0;
}