第一次写动态链表————学生信息管理 【优化】

本文介绍了一个使用动态链表存储学生信息并找出平均分最高学生的方法。通过C语言编程,创建了包含学生姓名、学号和三门课程成绩的结构体,并通过链表进行数据存储和遍历,最终输出平均分最高的学生详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

****优化版****//**3名学生,每名学生有3门课成绩,输出平均分最高的学生信息,
//要求利用动态链表存储学生信息。**
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct student{
	char name[20];
	int num;
	int score[3];
	float ave;
	//指向下一个地址的指针
};
struct Node{
	struct student stu;
	struct Node *next;
	};
int main()
{
	struct Node *p1;
	struct Node *head=NULL;	
	struct Node *p2,*m;
	int i,sum=0,t=0;
	p1=p2=(struct Node*)malloc(sizeof(struct Node));
	printf("请输入学生信息,学号,3门成绩,姓名");
	scanf("%d%d%d%d%s",&p1->stu.num,&p1->stu.score[0],&p1->stu.score[1],&p1->stu.score[2],p1->stu.name);
	p1->stu.ave=(p1->stu.score[0]+p1->stu.score[1]+p1->stu.score[2])/3;
	printf("平均成绩为:%f\n",p1->stu.ave);
	p1->next=NULL;//保证安全
	p2=p1;
	head=p1;
	
	p1=(struct Node*)malloc(sizeof(struct Node));
	printf("请输入学生信息,学号,3门成绩,姓名");
	scanf("%d%d%d%d%s",&p1->stu.num,&p1->stu.score[0],&p1->stu.score[1],&p1->stu.score[2],p1->stu.name);
	p1->stu.ave=(p1->stu.score[0]+p1->stu.score[1]+p1->stu.score[2])/3;
    printf("平均成绩为:%f\n",p1->stu.ave);
	p1->next=NULL;//保证安全
	p2->next=p1;
	p2=p1;
	
	p1=(struct Node*)malloc(sizeof(struct Node));
	printf("请输入学生信息,学号,3门成绩,姓名");
	scanf("%d%d%d%d%s",&p1->stu.num,&p1->stu.score[0],&p1->stu.score[1],&p1->stu.score[2],p1->stu.name);
	p1->stu.ave=(p1->stu.score[0]+p1->stu.score[1]+p1->stu.score[2])/3;
    printf("平均成绩为:%f\n",p1->stu.ave);
	p1->next=NULL;//保证安全
	p2->next=p1;
	p2=p1;
	
	 //遍历链表,求各个学生的平均值 
   /* for(p2=head;p2!=NULL;p2=p2->next){
    		sum=0;
    	for(i=0;i<3;i++){
    	sum+=p2->stu.score[i];
    	} 
    p2->stu.ave=sum/3;
    }
         for(p2=head;p2!=NULL;p2=p2->next)
	{printf("%d,%f\n",p2->stu.num,p2->stu.ave); 	
	} */

    
 //比较平均值的大小
	m=head;
	printf("遍历数据\n");
	for(p2=head;p2!=NULL;p2=p2->next){
		if(p2->stu.ave>m->stu.ave){
			m=p1;}
	    }
	
		
	printf("**********平均成绩最大的学生信息***********\n");
    printf("姓名为:%s\n",m->stu.name);
    printf("学号为:%d\n",m->stu.num);
    printf("3门成绩为:%d %d %d\n",m->stu.score[0],m->stu.score[1],m->stu.score[2]); 
    printf("平均成绩为:%f",m->stu.ave);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值