/* 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 delet(struct node*p,struct node*maxave){
struct node*n,*m,*p1;//n指向删除节点的指针,m为指向删除节点的前一个
printf("开始\n");
if(p==NULL){
printf("链表为空不执行");}
else{
n=p;
while(maxave->stu.ave!=n->stu.ave&&n->next!=NULL){
m=n;
n=n->next ;}
if (maxave->stu.ave!=n->stu.ave){
if (n==p)
p=n->next;
else
m->next=n->next;
printf("结点1已删除! \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);//找出最大值
delet(p,maxave);//删除平均值最大的节点
return 0;
}
删除平均成绩最大的信息
最新推荐文章于 2022-11-15 19:22:03 发布
1729

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



