早教吧 育儿知识 作业答案 考试题库 百科 知识分享

用链表完成学生成绩管理总体设计:学生成绩由学生姓名、学号、数学、英语和语文三门课程组成,采用链表形式实现对这三门成绩;要求:(1)采用链表形式实现对学生成绩的添加,删

题目详情
用链表完成学生成绩管理
总体设计:学生成绩由学生姓名、学号、数学、英语和语文三门课程组成,采用链表形式实现对这三门成绩;
要求: (1)采用链表形式实现对学生成绩的添加,删除,修改
(2)统计当前链表中有多少个学生;
(3)统计每门成绩的最高分,最低分和平均分;
▼优质解答
答案和解析
#include"stdio.h"
#include"stdlib.h"
int num1=0;
struct student
{
char name[10];
int num;
float math,eng,chinese;
struct student *next;
};
struct student *creat()//创建学生链表
{

struct student *head,*p1,*p2;
head=p1=p2=(struct student *)malloc(sizeof(struct student));
scanf("%s%d%f%f%f",p1->name,&p1->num,&p1->math,&p1->eng,&p1->chinese);
while(p1->num!=0)
{
p1=(struct student *)malloc(sizeof(struct student));
scanf("%s%d%f%f%f",p1->name,&p1->num,&p1->math,&p1->eng,&p1->chinese);
p2->next=p1;
p2=p1;
num1++;
}
printf("学生的数目为:%d\n",num1);
return head;
}
struct student *cr(struct student *head1)//插入学生节点
{
struct student *p1,*p2,*p0;
p1=p2=head1;
p0=(struct student*)malloc(sizeof(struct student));
scanf("%s%d%f%f%f",p1->name,&p1->num,&p1->math,&p1->eng,&p1->chinese);
while(p1->numnum&&p1->num!=0)
{
p2=p1;p1=p1->next;
}
if(p1->num==0)
printf("***");
else
if(p1==head1)
{ p0->next=p1;head1=p0;num1++;}
else
{
p2->next=p0;p0->next=p1;num1++;
}
printf("学生的数目为:%d\n",num1);
return head1;
}
struct student *sc(struct student *head2)//删除学生节点
{
struct student *p1,*p2,*p0,*t;
int n;
scanf("%d",&n);
p1=p2=head2;
while(p1->num!=n&&p1->num!=0)
{
p2=p1;p1=p1->next;
}
if(p1->num!=n)
printf("***");
else
if(head2->num==n)
{ t=head2->next;
head2->next=head2;
free(head2);
head2=t;num1--;
}
else
{p0=p2->next;
p2->next=p1->next;
free(p0);num1--;
}
printf("学生的数目为:%d\n",num1);
return head2;
}
void mp(struct student *head3)//求各门分数最大值,最小值,平均值
{
struct student *p1;
float max1,mix1,max2,mix2,max3,mix3,sum1=0,sum2=0,sum3=0;
max1=mix1=head3->math;
max2=mix2=head3->eng;
max3=mix3=head3->chinese;
p1=head3;
while(p1->num!=0)
{
if(p1->math>max1)
max1=p1->math;
if(p1->math mix1=p1->math;
sum1+=p1->math;
if(p1->eng>max2)
max2=p1->eng;
if(p1->eng mix2=p1->eng;
sum2+=p1->eng;
if(p1->chinese>max3)
max3=p1->chinese;
if(p1->chinese mix3=p1->chinese;
sum3+=p1->chinese;
p1=p1->next;
}
printf("数学最高分数,最低分数,平均分数:%f %f %f\n",max1,mix1,sum1/num1);
printf("英语最高分数,最低分数,平均分数:%f %f %f\n",max1,mix1,sum2/num1);
printf("语文最高分数,最低分数,平均分数:%f %f %f\n",max1,mix1,sum3/num1);
}
void print(struct student *m)
{
while(m->num!=0)
{printf("%s---%d--%f--%f--%f\n",m->name,m->num,m->math,m->eng,m->chinese);
m=m->next;
}
}
void main()
{
struct student *g,*m,*k;
printf("建立学生链表:\n");
g=creat();
print(g);
printf("插入学生节点:\n");
m=cr(g);
print(m);
printf("删除学生节点:\n");
k=sc(g);
print(k);
mp(k);//求各门分数最大值,最小值,平均值
}
看了用链表完成学生成绩管理总体设计...的网友还看了以下: