PTA:简易学籍管理系统(2)--查找最高、低总成绩

计算机某班有若干学生,每个学生的信息包括班级、学号、姓名、程序设计成绩、高数成绩、电路成绩,以及3门课总分。学生信息可用如下结构体定义:

struct stud
{
    char clas[20];//班级
    double num; //学号
    char name[10];//姓名
    float program; //程序设计成绩
    float math; //高数成绩
    float circuit; //电路成绩
    float sum; //3门总分
    struct stud *next;
};


(1)编程创建动态链表,由键盘输入学生的信息(输入已默认按3门总分降序排列),当班级为x表示输入结束;
(2)查找3门总分最高分,以及最低分,并输出相应学生信息。当最高成绩有多个相同时,匹配到最后一个最高成绩才输出;最低成绩同上。

输入格式:

每个学生信息占一行,用空格分隔。

输出格式:

每个学生信息占一行,各信息之间以空格分隔,需输出表头(空格分隔),每一行前需标识序号。

输入样例1:

在这里给出一组输入。例如:

计算机1601 3141910130 李未 65 100 71
计算机1601 3161911117 张申 70 100 64
计算机1603 3161911307 谢酉 80 94 60
计算机1603 3161911313 李戌 75 100 59
计算机1602 3161911205 冯亥 60 100 73
计算机1601 3161911112 林子 75 82 75
计算机1601 3161911101 陈丑 75 100 56
计算机1602 3151911126 刘寅 100 88 41
计算机1602 3161911219 甘卯 85 94 48
计算机1603 3161911301 王辰 80 60 87
计算机1602 3161911203 经巳 55 100 71
计算机1601 3160107308 张午 55 94 75
计算机1602 3161911220 吴未 65 100 59
计算机1603 3161911315 王申亥 75 100 49
计算机1603 3161911309 经酉 65 100 57
计算机1601 3161911128 叶戌 100 53 68
计算机1601 3161911116 高亥 45 100 75
x

输出样例1:

在这里给出相应的输出。例如:

Highest 3 lesson scores:
计算机1601 3141910130 李未 65.0 100.0 71.0 236.0
Lowest 3 lesson scores:
计算机1601 3161911116 高亥 45.0 100.0 75.0 220.0

输入样例2:

在这里给出一组输入。例如:

x

输出样例2:

在这里给出相应的输出。例如:

none!

代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stud
{
    char clas[20];//班级
    double num; //学号
    char name[10];//姓名
    float program; //程序设计成绩
    float math; //高数成绩
    float circuit; //电路成绩
    float sum; //3门总分
    struct stud* next;
};
int len = sizeof(struct stud);
struct stud* creat()
{
    struct stud* head, * tail;
    head = tail = NULL;
    char input[20];
    scanf("%s", input);
    while (strcmp(input, "x") != 0)
    {
        struct stud* pnew = (struct stud*)malloc(len);
        strcpy(pnew->clas, input);
        scanf("%lf%s%f%f%f", &pnew->num, pnew->name, &pnew->program, &pnew->math, &pnew->circuit);
        pnew->sum = pnew->math + pnew->program + pnew->circuit;
        pnew->next = NULL;
        if (head == NULL)
        {
            head = pnew;
            tail = pnew;
        }
        else
        {
            tail->next = pnew;
            tail = pnew;
        }
        scanf("%s", input);
    }
    return head;
}
int main()
{
    struct stud* p = creat();
    struct stud* pmin, * pmax;
    pmin = pmax = NULL;//分别用于存放最大值与最小值的节点
    if (p == NULL)
    {
        printf("none!\n");
    }
    else
    {
        float max = p->sum;
        float min = p->sum;
        while (p)
        {
            if (p->sum >= max)
            {
                max = p->sum;
                pmax = p;//将pmax指向总分最大的学生所对应的节点
            }
            if (p->sum <= min)
            {
                min = p->sum;
                pmin = p;//将pmin指向总分最小的学生所对应的节点
            }
            p = p->next;
        }
        if (pmax)//pmax不为空的时候
        {
            printf("Highest 3 lesson scores:\n");
            printf("%s %.f %s %.1f %.1f %.1f %.1f\n", pmax->clas, pmax->num, pmax->name, pmax->program, pmax->math, pmax->circuit, pmax->sum);
        }
        if (pmin)//pmin不为空的时候
        {
            printf("Lowest 3 lesson scores:\n");
            printf("%s %.f %s %.1f %.1f %.1f %.1f\n", pmin->clas, pmin->num, pmin->name, pmin->program, pmin->math, pmin->circuit, pmin->sum);
        }
    }
    return 0;
}

 

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值