学习指南

记录

计算机科学· Unit 10 Data types & structures, 10.3 Records· 15 分钟阅读

1. 1. 什么是记录?★★☆☆☆⏱ 3 min

📘 定义

记录(复合数据类型)

由相关数据项(称为字段)组成的固定集合,这些数据项可以是不同数据类型,用于表示单个现实世界或抽象实体的属性。

例:

一个Student(学生)记录可以包含姓名(字符串)、年龄(整数)和注册状态(布尔值)字段。

与数组不同(数组存储同一类型的多个值,通过索引访问),记录分组异构数据,每个字段由唯一名称标识。这使得记录非常适合对具有多个不同属性的结构化对象建模。

📐 例题

判断以下哪一项最适合用单个记录表示:(A) 100个考试分数的列表,(B) 单个客户订单的详细信息,(C) 包含50条员工条目的表格

  1. 1

    记住单个记录描述一个具有多个属性的实体,逐一检查选项:

  2. 2

    选项A:所有考试分数都是相同类型的整数 → 最适合用数组存储,而非单个记录。

  3. 3

    选项B:客户订单具有多个不同类型的属性:订单ID(整数)、客户姓名(字符串)、总费用(浮点数) → 符合单个记录的定义。

  4. 4

    选项C:50条员工条目 → 每个员工是一个记录,因此这是一个记录数组,而非单个记录。

  5. 5

    最终答案:B

2. 2. 在CIE伪代码中声明记录★★★☆☆⏱ 4 min

📘 定义

记录声明

定义新记录类型结构的过程,包括每个字段的名称和数据类型。声明完成后,即可使用该记录类型创建单个实例。

CIE考试对记录声明遵循标准伪代码格式,你必须使用该格式才能获得满分。通用格式如下:

DECLARE RecordName RECORDField1:DataTypeField2:DataType...END RECORD\begin{aligned} \text{DECLARE } &\langle\text{RecordName}\rangle \text{ RECORD} \\ &\langle\text{Field1}\rangle : \langle\text{DataType}\rangle \\ &\langle\text{Field2}\rangle : \langle\text{DataType}\rangle \\ &... \\ \text{END RECORD} \end{aligned}
📐 例题

声明一个名为Movie的新记录类型,包含以下字段:标题(字符串)、发行年份(整数)、评分(实数)、是否可借阅(布尔值)。然后创建一个名为myMovie的实例。

  1. 1

    开始记录声明:

  2. 2
    DECLAREMovieRECORDDECLARE Movie RECORD
  3. 3

    声明每个字段及其数据类型:

  4. 4
    title:STRINGreleaseYear:INTEGERrating:REALisAvailable:BOOLEANtitle : STRING \\ releaseYear : INTEGER \\ rating : REAL \\ isAvailable : BOOLEAN
  5. 5

    结束声明并实例化记录:

  6. 6
    ENDRECORDDECLAREmyMovie:MovieEND RECORD \\ DECLARE myMovie : Movie

3. 3. 访问和修改记录字段★★☆☆☆⏱ 3 min

记录中的字段使用点表示法访问,这是CIE伪代码和大多数编程语言的标准格式。格式为:\textit{<record_instance>}.\textit{<field_name>}。该表示法既可用于读取字段值,也可用于赋值新值。

📐 例题

使用上一节的Movie记录类型,为myMovie赋值,并输出标题和发行年份。

  1. 1

    使用点表示法为每个字段赋值:

  2. 2
    myMovie.title"Inception"myMovie.releaseYear2010myMovie.rating8.8myMovie.isAvailableTRUEmyMovie.title \leftarrow "Inception" \\ myMovie.releaseYear \leftarrow 2010 \\ myMovie.rating \leftarrow 8.8 \\ myMovie.isAvailable \leftarrow TRUE
  3. 3

    读取字段值并输出:

  4. 4
    OUTPUTmyMovie.title+"("+STRING(myMovie.releaseYear)+")"OUTPUT myMovie.title + " (" + STRING(myMovie.releaseYear) + ")"
  5. 5

    最终输出为:Inception (2010)

✓ 快速检测

测试你对点表示法的理解:

  1. 输出myMovie实例评分的正确方式是哪一个?

    • OUTPUT Movie.rating

    • OUTPUT myMovie(rating)

    • OUTPUT myMovie.rating

    • OUTPUT rating.myMovie

    显示答案
    2

    正确!点表示法遵循实例名称.字段名称的顺序,不能使用记录类型名称访问字段。

4. 4. 记录数组★★★☆☆⏱ 5 min

在CIE考试中,记录最常见的用途是将多个同类型实体存储为记录数组。这结合了数组(可简单迭代元素)和记录(每个实体存储异构属性)的优点。例如,你可以将100部电影存储为数组,其中每个元素都是一个Movie记录。

📐 例题

声明一个包含20个Movie记录的数组,名为cinemaCollection,然后输出所有评分高于8.0的电影标题。

  1. 1

    在定义Movie记录类型后声明数组:

  2. 2
    DECLAREcinemaCollection:ARRAY[1:20]OFMovieDECLARE cinemaCollection : ARRAY[1:20] OF Movie
  3. 3

    遍历每个元素,检查评分字段,输出符合条件的标题:

  4. 4
    FORindex1TO20IFcinemaCollection[index].rating>8.0THENOUTPUTcinemaCollection[index].titleENDIFENDFORFOR index \leftarrow 1 TO 20 \\ \quad IF cinemaCollection[index].rating > 8.0 THEN \\ \quad \quad OUTPUT cinemaCollection[index].title \\ \quad ENDIF \\ ENDFOR
  5. 5

    该循环正确检查了数组中的每个记录,仅输出满足条件的标题。

5. 常见陷阱

错误做法:

访问字段时混淆记录类型和记录实例。

原因:

记录类型只是模板,只有实例才存储实际数据值。

正确做法:

始终使用instanceName.fieldName,而非typeName.fieldName

错误做法:

忘记用END RECORD结束记录声明。

原因:

CIE评分标准要求明确结束RECORD块才能给满分。

正确做法:

始终在声明完记录的所有字段后添加END RECORD

错误做法:

记录数组中字段的点表示法顺序错误。

原因:

学生经常写错顺序,写成arrayName.fieldName[index]而非正确顺序。

正确做法:

先对数组索引,再访问字段:arrayName[index].fieldName

错误做法:

使用单个记录存储多个实体。

原因:

记录设计用于描述单个实体。在一个记录中存储多个实体会导致无法迭代。

正确做法:

使用记录数组:每个实体对应一个记录,作为数组元素存储。

6. 速查表

概念

CIE伪代码格式

声明记录类型

DECLARE <Name> RECORD
<Field>: <Type>
END RECORD

声明记录实例

DECLARE <InstanceName>: <RecordName>

访问记录字段

<Instance>.<FieldName>

声明记录数组

DECLARE <ArrayName>: ARRAY[<low>:<high>] OF <RecordName>

访问记录数组中的字段

<ArrayName>[<index>].<FieldName>

7. 常见问题

记录和数组之间的区别是什么?

数组存储同一数据类型的多个元素,通过索引访问;而记录存储描述单个实体的多个不同数据类型的相关值。记录中的字段通过名称而非索引访问。

真题中的出现

AI 根据考纲规律估算的考点位置,请对照官方真题核实准确性。仅作复习重点参考。

  • 2022 · 12

    声明图书馆书籍的记录

  • 2023 · 11

    处理学生记录数组

  • 2021 · 13

    访问嵌套记录字段

深入阅读

下一步

记录是基础复合数据类型,你在CIE A-Level计算机科学的试卷1解题和试卷2编程任务中都会大量使用。掌握记录声明和字段访问对于处理结构化的现实世界数据至关重要,也为理解更高级的数据结构(如链表、类和关系数据库条目)奠定基础。记录经常与文件处理结合使用,你需要将记录读写到文本或二进制文件中以存储持久化数据。理解如何迭代记录数组也是实现排序和搜索算法的常见要求,而这两项都是考试核心考点。