C++结构体经典案例:10名学生成绩统计与最高分查找

Chloe
Chloe
发布时间:2026-10-14| 5人浏览过
原创

在C++初学者阶段,处理一组具有相同属性但不同数值的数据是核心技能之一。本文将通过“统计10名学生成绩”的实际题目,演示如何利用C++结构体将散乱的信息整合为对象,并结合循环与比较算法,实现数据的批量录入、平均分自动计算以及最高分数据的筛选输出。

问题描述与解决思路

我们需要处理的数据包含10个学生,每个学生拥有以下字段:

  • 基本信息:学号(num)、姓名(name)。
  • 课程成绩:英语(english)、数学(match)、物理(physics)。此处注意:题目要求中的“数学”在后续代码变量名中使用的是 match(可能是Math的误写或特定语境),逻辑上代表第二门学科成绩。
  • 计算指标:个人的平均分数(average)。

最终目标:

  1. 打印所有学生的原始信息及计算出的个人平均分。
  2. 计算出3门课程的总平均成绩(注:原代码未直接计算全局总平均,而是侧重于单科与个人均值,下文代码将严格还原原逻辑)。
  3. 找出并打印出平均分最高的那名学生的完整数据。

C++代码实现详解

为了完成上述功能,我们采用以下步骤构建程序:

第1步:定义数据结构并编写辅助函数

首先使用 struct 关键字定义名为 Student 的结构体,它包含了必要的字符串和浮点数成员。同时,为了方便多次调用打印功能,定义了一个 shuchu 函数,用于格式化输出结构体内容。

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

// 声明结构体 Student
struct Student {
    string num;      // 学号
    string name;     // 姓名
    float english;   // 英语成绩
    float match;     // 数学成绩(原文代码变量名为match)
    float physics;   // 物理成绩
    float average;   // 个人平均成绩
};

// 结构体内容输出的函数
void shuchu(Student &s) {
    cout << s.num << "\t";
    cout << s.name << "\t";
    cout << s.english << "\t";
    cout << s.match << "\t";
    cout << s.physics << "\t";
    cout << s.average << endl;
}

第2步:在主函数中初始化与数据录入

在 main 函数中,声明一个长度为10的 Student 结构体数组 s[10]。通过 for 循环迭代10次,依次读取每个学生的信息。关键在于在录入成绩的当下,立即计算该生的平均分并存入 average 字段。

此步骤完成了数据的初步结构化存储,如下图所示展示了程序的交互界面预期效果:

第3步:执行计算并找出最高分数据

在完成所有10个学生的数据录入后,我们需要找出平均分最高的那位同学。这里使用了经典的“打擂台法”(即假设第一个人为当前擂主,后续每个人与之比较,胜者成为新擂主):

  1. 初始化:假设数组第一个学生(索引0)的平均分是最大的,将其赋值给变量 max,并记录其索引 k=0(注:原文代码中k初始化为1,但比较从i=0开始,若首个最大则k需修正为0,标准写法应从0开始匹配以符合逻辑,下文提供修正后的严谨逻辑)。
  2. 遍历比较:再次遍历整个数组,如果当前学生的平均分 s[i].average 大于 max,则更新 max 的值,并记录当前的索引 i 到 k。

最后,调用 shuchu(s[k]) 输出结果。

完整可运行代码

为了确保代码的正确性和鲁棒性,以下保留了原有的结构,并优化了部分逻辑细节:

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

struct Student { // 声明结构体Student
    string num;
    string name;
    float english;
    float match;  // 对应题目中的数学成绩
    float physics;
    float average;
};

void shuchu(Student &s) { // 结构体内容输出的函数
    cout << s.num << "\t";
    cout << s.name << "\t";
    cout << s.english << "\t";
    cout << s.match << "\t";
    cout << s.physics << "\t";
    cout << s.average << endl;
}

int main() {
    Student s[10]; // 声明结构体数组
    
    cout << "num\tname\tenglish\tmatch\tphysics" << endl;
    
    int i = 0;
    for(; i < 10; i++) { // 初始化结构统计数据
        cin >> s[i].num;
        cin >> s[i].name;
        cin >> s[i].english;
        cin >> s[i].match;
        cin >> s[i].physics;
        // 计算个人平均分
        s[i].average = (s[i].english + s[i].match + s[i].physics) / 3.0;
    }
    
    // --- 寻找最高分学生 ---
    float max = s[0].average; // 先假设第一个学生最高
    int k = 0;                // 记录最高分学生的索引,修正为0以覆盖全部情况
    
    for(i = 0; i < 10; i++) {
        if(s[i].average > max) { // 通过打擂台法获得平均分最高的数据
            max = s[i].average;  
            k = i;              // 更新最高分者的索引
        }
    }
    
    cout << "=============show data=======" << endl;
    // 打印所有数据以便对比
    for(i = 0; i < 10; i++) {
        shuchu(s[i]);
    }
    
    cout << "The highest:" << endl;
    shuchu(s[k]); // 输出最高分数据
    cout << endl;
    
    return 0;
}

以上就是关于C++结构体在学生成绩统计中的应用详细内容。本例清晰地展示了如何定义自定义类型、处理数组以及运用基本算法进行数据筛选。更多关于C++基础语法与数据结构的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。