c语言练手–学生成绩管理
链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。
场景:一个年级,相当链表A
该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统
学生成绩有语文 数学 英语
功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5//班级数,学生人数
typedef struct Student{
char *name;
float chinese;
float math;
float english;
float sum;
float ave;
struct Student *next;
}RNode,*Stu;
typedef struct Class{
char *name;
struct Class *next;
struct Student *back;
}LNode,*LinkList;
LinkList Creat_class(void);
Stu Creat_stu(void);
float Find_max(LinkList A,float max);
float Find_min(LinkList A,float min);
void print_stu(LinkList A);
int main()
{
LinkList A;
Stu B;
int i;
float max,min;
A=Creat_class();
B=A->next->back;
max=min=B->sum;
print_stu(A);
max=Find_max(A,max);
printf("最高分:%f\n",max);
min=Find_min(A,min);
printf("最低分:%f\n",min);
system("pause");
return 0;
}
Stu Creat_stu()
{
Stu H = (Stu)malloc(sizeof(RNode));
H->next=NULL;
RNode *s,*r=H;
char *x;
x=(char *)malloc(128);
float c,m,e;
for(int i=0;i<N;i++)
{
s=(Stu)malloc(sizeof(LNode));
s->name=(char *)malloc(128);
printf("\n输入第%d个学生名字:",i+1);
scanf("%s",&x);
printf("输入语文成绩:");
scanf("%f",&c);
printf("输入数学成绩:");
scanf("%f",&m);
printf("输入英语成绩:");
scanf("%f",&e);
s->name=x;
s->chinese=c;
s->math=m;
s->english=e;
s->sum=c+e+m;
s->ave=(s->sum)/3;
r->next=s;
r=s;
}
r->next=NULL;
return H;
}
LinkList Creat_class()
{
LinkList H = (LinkList)malloc(sizeof(LNode));
LNode *s,*r=H;
char *x;
x=(char *)malloc(128);
for(int i=0;i<N;i++)
{
s=(LinkList)malloc(sizeof(LNode));
s->name=(char *)malloc(128);
printf("输入第%d个班级名称:",i+1);
scanf("%s",&x);
s->name=x;
r->next=s;
RNode *B = Creat_stu();
s->back=B->next;
r=s;
printf("\n");
}
r->next=NULL;
return H;
}
float Find_max(LinkList A,float max)
{
LNode *r=A;
RNode *p;
p=(Stu)malloc(sizeof(RNode));
float m=max;
for(int i=0;i<N;i++)
{
r=r->next;
p=r->back;
for(int j=0;j<N;j++)
{
if(m<p->sum)
{
m=p->sum;
}
p=p->next;
}
}
return m;
}
float Find_min(LinkList A,float min)
{
LNode *r=A;
RNode *p;
p=(Stu)malloc(sizeof(RNode));
float m=min;
for(int i=0;i<N;i++)
{
r=r->next;
p=r->back;
for(int j=0;j<N;j++)
{
if(m>p->sum)
{
m=p->sum;
}
p=p->next;
}
}
return m;
}
void print_stu(LinkList A)
{
LNode *r=A;
RNode *p;
p=(Stu)malloc(sizeof(RNode));
for(int i=0;i<N;i++)
{
r=r->next;
p=r->back;
printf("%s班学生:\n",&r->name);
for(int j=0;j<N;j++)
{
printf("%s\t",&p->name);
printf("语文:%f\t",p->chinese);
printf("数学:%f\t",p->math);
printf("英语:%f\t",p->english);
printf("总分:%f\t",p->sum);
printf("平均分:%f\t",p->ave);
printf("\n");
p=p->next;
}
}
printf("\n");
}