觉得这个不好理解的同学,可以先看看这个简易版的简易版学生成绩系统C语言基础-结构体(一)综合:学生成绩管理系统( 姓名、成绩、最高分、最低分、平均分)(结构体、函数、指针)
/*班级结构体*/
typedef struct CLASS{
int data;//班级号
struct STUDENT *student_next;//班级内部指针
struct CLASS *next;//下一个班级的指针
}CLASS;
/*学生结构体*/
typedef struct STUDENT{
int c_data;//学生语文成绩
int m_data;//学生数学成绩
int e_data;//学生英语成绩
struct STUDENT *next;//下一个学生
}LNode,Linklist;
/*尾插法创建班级内部学生成绩链表*/
Linklist *linkinsert_Tail(Linklist* L,int student_num)
{
LNode *s;
int i=0;
int c_score;//学生语文成绩
int m_score;//学生数学成绩
int e_score;//学生英语成绩
L=(Linklist*)malloc(sizeof(LNode));
LNode *p=L;
printf("please input %d student Chinese,Math,English score:\n",i+1);
scanf("%d,%d,%d",&c_score,&m_score,&e_score);
for(i=1;i<=student_num;i++){
s=(LNode*)malloc(sizeof(LNode));
s->c_data=c_score;
s->m_data=m_score;
s->e_data=e_score;
p->next=s;
p=s;
if(i!=student_num){
printf("please input %d student Chinese,Math,English score:\n",i+1);
scanf("%d,%d,%d",&c_score,&m_score,&e_score);
}
}
p->next=NULL;
return L;
}
/*尾插法创建班级链表*/
CLASS* creatclass(CLASS* S,Linklist *L,int class_num)
{
CLASS* c;
int i=0;
S=(CLASS*)malloc(sizeof(CLASS));
CLASS *r=S;
for(i=1;i<=class_num;i++){
c=(CLASS*)malloc(sizeof(CLASS));
c->data = i;
r->next=c;
printf("%d class\n",c->data);
L=linkinsert_Tail(L,studentnum);/*尾插法创建班级内部学生成绩链表*/
r->student_next =L;//班级链表与班级内部链表相联,题目中A、B两个链表相联
r=c;
}
r->next=NULL;
return S;
}
void printf_allclass(CLASS* S)
{
int i=0;
CLASS*h=S;
LNode*c=h->student_next;
while(h->next!=NULL){
printf(" class %d \n",h->next->data);//打印是几班
printf_allscore(c);//打印班级所有同学成绩
printf_maxscore(c);//打印班级总分最高分成绩
printf_minscore(c);//打印班级总分最低分成绩
printf_averagescore(c);//打印班级总分平均分成绩
h=h->next;//下一个班级
c=h->student_next;
}
}
void printf_maxscore(Linklist* L)
{
int i=0;
int maxscore=0;
int totalscore=0;
LNode*p=L->next;
while(p!=NULL){
totalscore = p->c_data+p->m_data+p->e_data;
if(maxscore<totalscore){
maxscore=totalscore;
}
p=p->next;
i++;
}
printf("student maxtotalscore:%d\n",maxscore);
}
void printf_minscore(Linklist* L)
{
int i=0;
int totalscore=0;
LNode*p=L->next;
int minscore=p->c_data+p->m_data+p->e_data;
while(p!=NULL){
totalscore = p->c_data+p->m_data+p->e_data;
if(minscore>totalscore){
minscore=totalscore;
}
p=p->next;
i++;
}
printf("student maxtotalscore:%d\n",minscore);
}
void printf_averagescore(Linklist* L)
{
int i=0;
int averagescore=0;
int totalscore=0;
int class_totalscore=0;
LNode*p=L->next;
while(p!=NULL){
i++;
totalscore = p->c_data+p->m_data+p->e_data;
class_totalscore=class_totalscore+totalscore;
p=p->next;
}
averagescore=class_totalscore/i;
printf("student averagetotalscore:%d\n",averagescore);
}
int main()
{
Linklist* L;//学生
CLASS* S;//班级
S=creatclass(S,L,classnum);//创建链表
printf_allclass(S);//输出所有班级成绩(包括班级最高分、最低分、平均分)
system("pause");
return 0;
}