链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。
场景:一个年级,相当链表A
该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统
学生成绩有语文 数学 英语
功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分
思路:先创建链表B录入5个学生的各科成绩,然后返回链表头,将链表头给链表A的各个节点
#include <stdio.h>
#include <stdlib.h>
struct Class
{
struct Person *top;
struct Class *next;
};
struct Person
{
double yuwen;
double shuxue;
double yingyu;
struct Person *next;
};
struct Class *A = NULL;
struct Person *BinitNode(int i)
{
int j;
struct Person *B = NULL;
struct Person *new = NULL;
for(j=1;j<=5;j++){
new = (struct Person *)malloc(sizeof(struct Person));
printf("请输入%d班的第%d个学生的语文成绩:",i,j);
scanf("%lf",&(new->yuwen));
if(new->yuwen < 0 || new->yuwen > 100){
printf("输入错误,请重新输入:");
scanf("%lf",(&new->yuwen));
}
printf("请输入%d班的第%d个学生的数学成绩:",i,j);
scanf("%lf",&(new->shuxue));
if(new->shuxue < 0 || new->shuxue > 100){
printf("输入错误,请重新输入:");
scanf("%lf",(&new->shuxue));
}
printf("请输入%d班的第%d个学生的英语成绩:",i,j);
scanf("%lf",&(new->yingyu));
if(new->yingyu < 0 || new->yingyu > 100){
printf("输入错误,请重新输入:");
scanf("%lf",(&new->yingyu));
}
if(B == NULL){
B = new;
}else{
new->next = B;
B = new;
}
}
return B;
}
void AinitNode()
{
struct Class *new = NULL;
int i;
for(i=1;i<=5;i++){
new = (struct Class *)malloc(sizeof(struct Class));
new->top = BinitNode(i);
if(A == NULL){
A = new;
}else{
new->next = A;
A = new;
}
}
}
void printALL()
{
double Mmax = A->top->shuxue;
double Cmax = A->top->yuwen;
double Emax = A->top->yingyu;
double Mmin = A->top->shuxue;
double Cmin = A->top->yuwen;
double Emin = A->top->yingyu;
double Msum = 0;
double Csum = 0;
double Esum = 0;
double Mav = 0;
double Cav = 0;
double Eav = 0;
double av = 0;
while(A != NULL){
while(A->top != NULL){
if(A->top->next != NULL){
if(Mmax < A->top->next->shuxue){
Mmax = A->top->next->shuxue;
}else{
Mmin = A->top->next->shuxue;
}
if(Cmax < A->top->next->yuwen){
Cmax = A->top->next->yuwen;
}else{
Cmin = A->top->next->yuwen;
}
if(Emax < A->top->next->yingyu){
Emax = A->top->next->yingyu;
}else{
Emin = A->top->next->yingyu;
}
}
Msum += A->top->shuxue;
Csum += A->top->yuwen;
Esum += A->top->yingyu;
av++;
A->top = A->top->next;
}
A = A->next;
}
Mav = Msum / av;
Cav = Csum / av;
Eav = Esum / av;
printf("mathsMax = %.1lf,chineseMax = %.1lf,englishMax = %.1lf\n",Mmax,Cmax,Emax);
printf("mathsMin = %.1lf,chineseMin = %.1lf,englishMin = %.1lf\n",Mmin,Cmin,Emin);
printf("mathsAV = %.2lf,chineseAV = %.2lf,englishAV = %.2lf\n",Mav,Cav,Eav);
}
int main()
{
AinitNode();
printALL();
return 0;
}