9. C精华——双链表练习题

题目:一个年级,相当链表A;一个班级,相当于链表B
该年级5个班,每个班5个人,相当于链表B1–B5
做一个学生成绩管理系统
学生成绩有语文 数学
功能: 录入成绩 找出最三科总分的最高分 最低分

#include <stdio.h>
#include <stdlib.h>

struct Stu {
        char name[12];
        int china;
        int math;
        int sum;
        struct Stu *next;
};

struct Class {
        int num;
        struct Stu *msg;
        struct Class *next;
};

struct Stu *addStu(struct Stu *headStu,struct Stu *newStu){
        struct Stu *p = headStu;
        if (headStu == NULL){
                return newStu;
        }
        while(p->next != NULL)
                p = p->next;
        p->next = newStu;
        return p;
}

struct Stu *creatStu(struct Stu *headStu) {
        int j;
        struct Stu *newStu;
        struct Stu *p = headStu;

        for (j = 1; j < 6; ++j){
                newStu = (struct Stu *)malloc(sizeof(struct Stu));
                printf("姓名:");
                scanf("%s",newStu->name);
                printf("语文成绩:");
                scanf("%d",&(newStu->china));
                printf("数学成绩:");
                scanf("%d",&(newStu->math));
                newStu->sum = newStu->china + newStu->math;
                headStu = addStu(headStu,newStu);
        }
        return headStu;
}

struct Class *addClass(struct Class *headClass,struct Class *newClass){
        struct Class *p = headClass;
        if (headClass == NULL){
                return newClass;
        }
        while(p->next != NULL)
                p = p->next;
        p->next = newClass;
        return headClass;
}

struct Class *creatClass(struct Class *headClass) {
        int i;
        struct Class *newClass;
        for (i = 1; i < 6; i++) {
                newClass = (struct Class *)malloc(sizeof(struct Class));
                newClass->num = i;
                printf("-----------正在录入%d班的信息-----------\n",i);
                newClass->msg = creatStu(NULL);
                headClass = addClass(headClass,newClass);
        }
        return headClass;
}

void printMsg(struct Class *headClass){
        struct Class *p = headClass;
        struct Stu *p1;

        while(p != NULL) {
                printf("*******%d班成绩如下*******\n",p->num);
                p1 = p->msg;
                while(p1 != NULL){
                        printf("姓名:%s 语文:%d 数学:%d\n",p1->name,p1->china,p1->math);
                        p1 = p1->next;
                }
                p = p->next;
        }
}

void getMaxStu(struct Class *headClass){
        int mark;
        struct Class *p = headClass;
        struct Stu *p1;
        struct Stu *max = p->msg;

        while(p != NULL) {
                p1 = p->msg;
                while(p1 != NULL){
                        if((p1->sum) > (max->sum)){
                                max = p1;
                                mark = p->num;
                        }
                        p1 = p1->next;
                }
                p = p->next;
        }
        printf("%d班 %s同学全段最高分:%d china=%d math=%d\n",mark,max->name,max->sum,max->china,max->math);
}

void getMinStu(struct Class *headClass){
        int mark;
        struct Class *p = headClass;
        struct Stu *p1;
        struct Stu *min = p->msg;

        while(p != NULL) {
                p1 = p->msg;
                while(p1 != NULL){
                        if((p1->sum) < (min->sum)){
                                min = p1;
                                mark = p->num;
                        }
                        p1 = p1->next;
                }
                p = p->next;
        }
        printf("%d班 %s同学全段最低分:%d china=%d math=%d\n",mark,min->name,min->sum,min->china,min->math);
}


int main() {
        struct Class *headClass;
        headClass = creatClass(headClass);
        printMsg(headClass);

        printf("\n");
        getMaxStu(headClass);
        getMinStu(headClass);

        return 0;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值