#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
char name[20];
int num;
float grade[5];
float average;
struct student *next;
}stu;
void _chazao(stu *head,int num);
void _insert(stu *head,stu *p);
void _delete(stu *head,int num);
void _average(stu *head);
int main()
{
stu *head,*p,*q;
int num,a,b,c,d;
head=(stu*) malloc (sizeof(stu));
head->next=NULL;
q=head;
printf("请输入学号: ");
scanf("%d",&num);
while(num>0)
{
p=(stu*) malloc (sizeof(stu));
printf("请输入该同学的姓名: ");
scanf("%s",p->name);
p->num=num;
printf("请输入该同学五门课的成绩: ");
for(int i=0;i<5;i++)
{
scanf("%d",&p->grade[i]);
}
q->next=p;
q=p;
p->next=NULL;
printf("请再次输入学号(-1停止输入):");
scanf("%d",&num);
}
//查找某个学号是否存在
printf("从链表中查找某个节点:");
scanf("%d",&num);;
_chazao(head,num);
//插入任意新节点
printf("在链表中插入某个节点:");
printf("请输入学号: ");
scanf("%d",&num);
while(num>0)
{
p=(stu*) malloc (sizeof(stu));
printf("请输入该同学的姓名: ");
scanf("%s",p->name);
p->num=num;
printf("请输入该同学五门课的成绩: ");
for(int i=0;i<5;i++)
{
scanf("%d",&p->grade[i]);
}
p->next=NULL;
_insert(head,p);
printf("在链表中插入某个节点(-1停止插入):");
printf("请输入学号: ");
scanf("%d",&num);
}
// 删除某个节点
printf("从链表中删除某个节点:");
scanf("%d",&num);
while(num>0)
{
_delete(head,num);
printf("从链表中删除某个节点(-1结束删除):");
scanf("%d",&num);
}
//输出经过修改后的链表
//统计平均成绩并输出
printf("统计平均成绩:");
_average(head);
return 0;
}
void _chazao(stu *head,int a)
{
stu *p=head->next;
while(p!=NULL)
{
if(p->num==a)
{
printf("找到了,学号为 %d\n",p->num);
return;
}
else
{
p=p->next;
}
}
printf("没找到,呜呜呜\n");
return;
}
void _insert(stu *head,stu *p)
{
stu *q,*r;
r=head;
q=r->next;
while(q!=NULL)
{
if(p->next>q->next)
{
r=head->next;
q=q->next;
}
else
{
r->next=p;
p->next=q;
break;
}
}
if (q == NULL)
{
r->next = p;
}
}
void _delete(stu *head,int num)
{
stu *p,*q;
q=head;
p=head->next;
while(p!=NULL&&p->num!=num)
{
q=q->next;
p=p->next;
}
if(p!=NULL)
{
q->next=p->next;
free(p);
}
return;
}
void _average(stu *head)
{
stu *p;
float sum,average;
p=head->next;
while(p!=NULL)
{
sum=0.0;
average=0.0;
for(int i=0;i<5;i++)
{
sum+=p->grade[i];
}
p->average=sum/5.0;
printf("%10d%20s %.2f\n",p->num,p->name,sum/5);
p=p->next;
}
return;
}