有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,用动态链表的方式实现学生链表的创建、打印输出及相关操作

img


有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,用动态链表的方式实现学生链表的创建、打印输出及相关操作。
要求:
(1)5个学生数据的输入与链表创建。设计input函数动态创建学生数据链表,input函数的形参为学生链表的头指针,返回类型为void。
(2)5个学生数据的输出。设计print函数输出所创建的5个学生的数据,print函数的形参为学生链表的头指针,返回类型为void。
(3)在此基础上编写max函数,输出平均成绩最高分的学生的数据,函数的形参为学生链表的头指针,返回类型为void。
(4)(加做)编写插入函数insert,插入一名新学生数据,函数的形参为学生链表的头指针,返回类型为void。并执行print函数验证插入结果。
(5)(加做)编写删除函数delete,输入学号,如果链表中存在则从链表中删除该学生数据,函数的形参为学生链表的头指针,返回类型为void。并执行print函数验证插入结果。
(6)贴实验代码和运行过程截图。


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

struct node{
    char number;
    char name;
    int grade1;
    int grade2;
    int grade3;
    
    struct node *next;
};

struct node *first=NULL;

void insert(){
    struct node *new_node;
    
    new_node=(struct node *)malloc(sizeof(struct node));
    
    printf("请输入学生信息及成绩(格式:x x x x x):");
    scanf("%s %s %d %d %d",&new_node->number,&new_node->name,&new_node->grade1,&new_node->grade2,&new_node->grade3);

    
    new_node->next=first;
     first=new_node;
    
}


void print(int n){
    struct node *p;
    
    int max;
    int k;
    char number;
    int grade=0;
    int grade1=0;
    int grade2=0;
    int grade3=0;

    int i;
    
    for(p=first,i=1;p!=NULL;p=p->next,i++){
        grade=p->grade1 + p->grade2 + p->grade3;
        printf("学号:%c 姓名:%c 平均成绩:%d \n",p->number,p->name,(grade/3));
        grade1=grade1+p->grade1;
        grade2=grade2+p->grade2;
        grade3=grade3+p->grade3;
        k=grade/3;
        if(max<k){
            max=k;
            number=p->number;
        }
    }
    printf("平均分最高的学生的学号为%c 平均成绩为%d \n",number,max);
    
    printf("课程1的平均成绩:%d \n",(grade1/n));
    printf("课程2的平均成绩:%d \n",(grade2/n));
    printf("课程3的平均成绩:%d \n",(grade3/n));
}


int main(){
    
    
    int i,n;
    printf("请输入要插入学生的人数");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        printf("请输入学生%d的信息\n",i+1);
        insert();
    }
    
    print(n);
}

好家伙 是仲恺的把

啥仲恺