当前位置:首页 > 技术 > 正文内容

结构体排序在成绩处理中的应用与错误分析

访客 技术 2026年6月24日 1

学生成绩排序实现

使用结构体存储学生信息,按总分降序排序,总分相同时按输入顺序排序:

#include<iostream>
#include<algorithm>
using namespace std;

struct Student {
    string name;
    int chinese;
    int math;
    int english;
    int total;
    int seq;
};

bool compare(Student s1, Student s2) {
    if(s1.total != s2.total) 
        return s1.total > s2.total;
    return s1.seq < s2.seq;
}

int main() {
    int n;
    cin >> n;
    Student records[1005];
    
    for(int i=0; i<n; i++) {
        cin >> records[i].name >> records[i].chinese 
            >> records[i].math >> records[i].english;
        records[i].total = records[i].chinese + records[i].math + records[i].english;
        records[i].seq = i;
    }
    
    sort(records, records+n, compare);
    cout << records[0].name << " " << records[0].chinese 
         << " " << records[0].math << " " << records[0].english;
    return 0;
}

成绩等级评定逻辑

计算总分和加权成绩,根据条件判断优秀等级:

#include<iostream>
using namespace std;

struct Evaluation {
    int id;
    int academic;
    int practical;
    double composite;
    int total;
};

int main() {
    int n;
    cin >> n;
    Evaluation data[1005];
    
    for(int i=0; i<n; i++) {
        cin >> data[i].id >> data[i].academic >> data[i].practical;
        data[i].composite = data[i].academic*0.7 + data[i].practical*0.3;
        data[i].total = data[i].academic + data[i].practical;
    }
    
    for(int i=0; i<n; i++) {
        if(data[i].total > 140 && data[i].composite >= 80) 
            cout << "Excellent" << endl;
        else 
            cout << "Not excellent" << endl;
    }
    return 0;
}

比赛评分计算修正

错误修复:最大值最小值初始化位置不当,需在循环内重置;去除极值应直接减分而非置零:

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;

const int MAX = 1005;
double scores[MAX][MAX];
double sums[MAX];
double averages[MAX];

int main() {
    int n, m;
    cin >> n >> m;
    
    for(int i=0; i<n; i++) {
        int maxVal = 0, minVal = 100;
        for(int j=0; j<m; j++) {
            cin >> scores[i][j];
            maxVal = max(maxVal, (int)scores[i][j]);
            minVal = min(minVal, (int)scores[i][j]);
            sums[i] += scores[i][j];
        }
        sums[i] -= maxVal + minVal;
        averages[i] = sums[i] / (m - 2);
    }
    
    sort(averages, averages+n, greater<double>());
    cout << fixed << setprecision(2) << averages[0];
    return 0;
}

奖学金排序规则修正

错误修复:总分相同时未正确处理语文成绩排序:

#include<iostream>
#include<algorithm>
using namespace std;

struct Scholar {
    int id;
    int chinese;
    int math;
    int english;
    int total;
};

bool comp(Scholar s1, Scholar s2) {
    if(s1.total != s2.total) 
        return s1.total > s2.total;
    if(s1.chinese != s2.chinese)
        return s1.chinese > s2.chinese;
    return s1.id < s2.id;
}

int main() {
    int n;
    cin >> n;
    Scholar list[305];
    
    for(int i=0; i<n; i++) {
        cin >> list[i].chinese >> list[i].math >> list[i].english;
        list[i].id = i+1;
        list[i].total = list[i].chinese + list[i].math + list[i].english;
    }
    
    sort(list, list+n, comp);
    for(int i=0; i<5; i++) {
        cout << list[i].id << " " << list[i].total << endl;
    }
    return 0;
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。