哭着笑189 2021-10-29 10:19 采纳率: 0%
浏览 48
已结题

结构体成员比较大小插入单链表中

问题是输入学生信息成绩,按照平均分排序。
我的思路是根据结构体成员平均分,找到单链表中比这个平均分大的第一个数,然后把结构体插入到单链表中。
帮帮萌新,谢谢。

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

struct Sorce
{
    int chinese;
    int math;
    int english;
};

struct Student
{
    int num;
    char name[20];
    struct Sorce*sorce;
    float average;
    struct Student*next;
};

void getInput(struct Student*student);
void getInput(struct Student*student)
{
    printf("请输入学号");
    scanf("%d",&student->num);
    printf("请输入名字");
    scanf("%s",student->name);
    printf("请输入语文数学英语成绩");
    scanf("%d %d %d",&student->sorce->chinese,&student->sorce->math,&student->sorce->english);
    student->average=(student->sorce->chinese+student->sorce->math+student->sorce->english)/3;
}

void addStudent(struct Student**list);
void addStudent(struct Student**list)
{
    struct Student*previous;
    struct Student*current;
    struct Student*new;
    current=*list;
    previous=NULL;
    new=(struct Student*)malloc(sizeof(struct Student));
    if(new==NULL)
    {
        printf("内存分配失败\n");
        exit(1);
    }
    getInput(new);
    while(current!=NULL && (current->average)<(new->average))
    {
        previous=current;
        current=current->next;
    }
    new->next=current;
    if(previous==NULL)
    {
        *list=new;
    }
    else
    {
        previous->next=new;
    }
}

void printStu(struct Student*list);
void printStu(struct Student*list)
{
    struct Student*current;
    current=list;
    while(current!=NULL)
    {
        printf("%d %s %d %d %d\n",current->num,current->name,current->sorce->chinese,current->sorce->math,current->sorce->english);
        current=current->next;
    }
    putchar('\n');
    free(current);
}
int main()
{
    struct Student*list=NULL;
    int ch;
    while(1)
    {
        printf("是否录入学生信息(Y/N)");
        do
        {
            ch=getchar();
        }
        while(ch!='Y' && ch!='N');
            if(ch=='Y')
        {
            addStudent(&list);
        }
        else
        {
                break;
        }
    }
    printStu(list);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 关注

    楼主大几呀

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥20 VM打开不了ubuntu虚拟机,如何解决?
  • ¥15 java请求一个返回流式数据的接口,如何将流式数据直接返回前端
  • ¥15 为什么连接不了啊,配置都没问题啊
  • ¥15 c语言做一个简单的计算器,大家来看看
  • ¥15 nuxtjs3+ts 报错,急呀!
  • ¥15 matlab矩阵复数本征值排序
  • ¥15 skynet MySQL ProtocolBuffers
  • ¥15 浏览器关闭事件有时没执行怎么回事
  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)