C++ 竞赛入门

结构体

结构体

本节学会什么

  • struct 定义由多项数据组成的新类型
  • . 访问结构体成员
  • 用结构体数组保存多个对象的信息

为什么需要它

数组要求所有元素类型相同。一个学生却同时有姓名、语文成绩和数学成绩;把这些信息拆到多个数组里,数据很容易错位。结构体把“属于同一个对象的不同信息”绑定在一起。

最小可运行示例

读入一名学生的两科成绩,输出总分:

#include <iostream>
#include <string>

struct Student {
    std::string name;
    int chinese;
    int math;
};

int main() {
    Student student;
    std::cin >> student.name >> student.chinese >> student.math;

    int total = student.chinese + student.math;
    std::cout << student.name << ' ' << total << '\n';
    return 0;
}

若输入 Alice 90 95,输出为 Alice 185Student 是新类型,student 是这个类型的一个变量;student.math 表示其中的数学成绩。

关键过程与易错点

  • struct Student { ... }; 结尾的分号不能漏。花括号中写的是成员的类型和名字。
  • 成员通过 . 访问,例如 student.name;不要写成 Student.name,类型本身没有某一名学生的具体数据。
  • 可以在定义时初始化:Student student = {"Alice", 90, 95};。初学阶段优先按成员顺序写,避免遗漏。
  • 多个对象可以放进结构体数组:Student students[100];。第 i 位学生的语文分数是 students[i].chinese
  • 结构体用于组织信息,不会自动帮你排序或计算;这些操作仍要由变量、条件和循环完成。

动手检查

把最小示例扩展为三科成绩,增加 int english;,并让总分包含它。故意把一门成绩改成另一个数,确认只会影响这位学生自己的总分。

再定义一个容量为 3Student 数组,读入三名学生的信息,逐个输出姓名和总分。

立即练习

难度 题目 题解 训练目标
基础 洛谷 P5740:最厉害的学生 题解 用结构体保存一名学生的姓名和多科成绩。
巩固 洛谷 P5741:旗鼓相当的对手 题解 用结构体数组比较多名学生的多项属性。
挑战 洛谷 P5742:评等级 题解 组合总分和条件判断,输出每名学生的等级。