#题目:链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。
场景:一个年级,相当链表A
该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统
学生成绩有语文 数学 英语
功能: 录入成绩 找最三科总分的最高分 最低分 算出平均分
首先这是一个双链表的题目(也就是两个结构体)首先我们要定义两个结构体,class和student
struct Class //A
{
struct student *top;
struct Class *next;
};
struct student //B
{
double yuwen;
double shuxue;
double yingyu;
struct student *next;
};
首先我们要实现第一个功能(插入学生的信息)
struct student *BinitNode(int i)//使用头插法插入新的学生信息
{
int j;
struct student *B = NULL;
struct student *New = NULL;
for (j = 1; j <= 5; j++){
New = (struct student *)malloc(sizeof(struct student));
printf("请输入%d班的第%d个学生的语文成绩:", i, j);
scanf("%lf", &(New->yuwen));
if (New->yuwen < 0 || New->yuwen > 150)
{
printf("输入错误,请重新输入:");
scanf("%lf", (&New->yuwen));
}
printf("请输入%d班的第%d个学生的数学成绩:", i, j);
scanf("%lf", &(New->shuxue));
if (New->shuxue < 0 || New->shuxue > 150)
{
printf("输入错误,请重新输入:");
scanf("%lf", (&New->shuxue));
}
printf("请输入%d班的第%d个学生的英语成绩:", i, j);
scanf("%lf", &(New->yingyu));
if (New->yingyu < 0 || New->yingyu > 150)
{
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;
}