/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct student{
char name[20];//姓名
int score[3];//3门成绩
float ave;//平均成绩
int num;//学号
};
struct node{
struct student stu;
struct node*next;
};
struct node*cread(){//建立链表
struct node*head=NULL,*p1,*p2;
int i;
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=p1;
head=p1;
for(i=0;i<2;i++){
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;
}
p2->next=NULL;
return head;
}
void print(struct node*p){//输出所有数据
struct node*p1;
printf("遍历\n");
for(p1=p;p1!=NULL;p1=p1->next){
printf("%d %d %d %d %s %f\n",p1->stu.num,p1->stu.score[0],p1->stu.score[1],p1->stu.score[2],
p1->stu.name,p1->stu.ave);
}
}
void max1(struct node*p){//找最大的平均值
struct node*maxave=p,*p1;
for(p1=p;p1!=NULL;p1=p1->next){
if(maxave->stu.ave<p1->stu.ave)
maxave=p1;
}printf("最大成绩的学员信息\n");
printf("%d %d %d %d %s %f\n",maxave->stu.num,maxave->stu.score[0],maxave->stu.score[1],maxave->stu.score[2],maxave->stu.name,maxave->stu.ave);
}
void delet2(struct node*p){
struct node*a,*b,*p1;//a指向删除节点的指针,b为指向删除节点的前一个
int numb=102;
if(p==NULL){
printf("链表为空不执行");}
else{
a=p;
while(numb!=a->stu.num&&a->next!=NULL){
b=a;
a=a->next ;}
if (numb==a->stu.num){
if (a==p)
p=a->next;
else
b->next=a->next;
printf("结点2已删除! \n遍历\n");
for(p1=p;p1!=NULL;p1=p1->next){
printf("%d %d %d %d %s %f\n",p1->stu.num,p1->stu.score[0],p1->stu.score[1],p1->stu.score[2],p1->stu.name,p1->stu.ave);
}}}}
int main()
{
struct node*p,*maxave;
p=cread();//链表返回头指针
print(p);//输出
max1(p);//找出最大值
delet2(p);//删除102学生信息
return 0;
}
删除学号为102 的学生信息
最新推荐文章于 2022-06-17 12:45:50 发布
本文介绍了一个使用C语言实现的学生信息链表程序,包括创建链表、打印所有学生信息、查找平均成绩最高者及删除指定学号学生信息的功能。通过此程序,读者可以学习到如何在C语言中进行链表的基本操作。
597

被折叠的 条评论
为什么被折叠?



