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 185。Student 是新类型,student 是这个类型的一个变量;student.math 表示其中的数学成绩。
关键过程与易错点
struct Student { ... };结尾的分号不能漏。花括号中写的是成员的类型和名字。- 成员通过
.访问,例如student.name;不要写成Student.name,类型本身没有某一名学生的具体数据。 - 可以在定义时初始化:
Student student = {"Alice", 90, 95};。初学阶段优先按成员顺序写,避免遗漏。 - 多个对象可以放进结构体数组:
Student students[100];。第i位学生的语文分数是students[i].chinese。 - 结构体用于组织信息,不会自动帮你排序或计算;这些操作仍要由变量、条件和循环完成。
动手检查
把最小示例扩展为三科成绩,增加 int english;,并让总分包含它。故意把一门成绩改成另一个数,确认只会影响这位学生自己的总分。
再定义一个容量为 3 的 Student 数组,读入三名学生的信息,逐个输出姓名和总分。
立即练习
| 难度 | 题目 | 题解 | 训练目标 |
|---|---|---|---|
| 基础 | 洛谷 P5740:最厉害的学生 | 题解 | 用结构体保存一名学生的姓名和多科成绩。 |
| 巩固 | 洛谷 P5741:旗鼓相当的对手 | 题解 | 用结构体数组比较多名学生的多项属性。 |
| 挑战 | 洛谷 P5742:评等级 | 题解 | 组合总分和条件判断,输出每名学生的等级。 |