链表嵌套实现一个年级内各班级学生语文、数学和英语成绩录入,寻找出一个年级内学生三科总分的最高分、最低分以及平均分。

链表嵌套实现一个年级内各班级学生语文、数学和英语成绩录入,寻找出一个年级内学生三科总分的最高分、最低分以及平均分。

思路:使用头插法创建一个学生的链表,节点个数便是学生人数。使用同样的方法创建班级的链表,每一个班级中包含该班学生的链表头。最后遍历两个链表打印数据。


代码如下:

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

/**********定义结构体**********/
struct class
{
	struct student *st;
	struct class *next;
};

struct student
{
	int yuwen;
	int shuxue;
	int yingyu;
	int add;
	struct student *next;
};



/**********头插法创建学生链表**********/
struct student* insertSt(struct student *head,int i)
{
        struct student *new = head;
        new = (struct student *)malloc(sizeof(struct student));
        printf("第%d名同学语文成绩:\n",i+1);
		scanf("%d",&(new->yuwen));
        printf("第%d名同学数学成绩:\n",i+1);
        scanf("%d",&(new->shuxue));
        printf("第%d名同学英语成绩:\n",i+1);
        scanf("%d",&(new->yingyu));
        new->add = (new->yuwen)+(new->shuxue)+(new->yingyu);	
	
        if(head == NULL){
                head = new;
                return head;
        }else{
                new->next = head;
                head = new;
                return head;
        }

        return head;
}

struct student* inputSt()
{
        int i,num;
		printf("请输入该班人数:");
		scanf("%d",&num);
        struct student *st = NULL;
        for(i=0;i<num;i++){
                st=insertSt(st,i);
        }

        return st;
}


/**********头插法创建班级链表**********/
struct class* insertCl(struct class *head,int i)
{
        struct student *st = NULL;
		struct class *new = NULL;
        new = (struct class *)malloc(sizeof(struct class));

        printf("输入%d班成绩:\n",i+1);
        st = inputSt(st);
		new->st = st;
        

        if(head == NULL){
                head = new;
                return head;
        }else{
                new->next = head;
                head = new;
                return head;
        }

        return head;
}

struct class* inputCl()
{
        int i,ban;
		printf("请输入班级数目:\n");
		scanf("%d",&ban);
		struct class *cl = NULL;
        for(i=0;i<ban;i++){
                cl=insertCl(cl,i);
				putchar('\n');
        }

        return cl;
}


/**********输出打印结果**********/
void printFen(struct class *cl)
{
	int i=0;
	int max = cl->st->add;
	int min = max;
	float ave = 0;
	while(cl != NULL){
		while(cl->st != NULL){
			if(max < cl->st->add){
				max = cl->st->add;
			}
			if(min > cl->st->add){
				min = cl->st->add;
			}
			ave =(float) ave+cl->st->add;
			++i;
		
			cl->st = cl->st->next;
		}
		
		cl = cl->next;
	}
	ave =(float)ave/i;

	printf("年级总分最高分:%d\n",max);
    printf("年级总分最低分:%d\n",min);
	printf("年级总分平均分:%f\n",ave);
}	


int main()
{	

	struct class *cl=NULL;
	cl = inputCl();
	printFen(cl);

	return 0;
}

运行程序:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

money的大雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值