学习指南

数组

计算机科学· 第10单元:数据类型与结构· 15 分钟阅读

1. 核心概念与一维数组★★☆☆☆⏱ 5 min

📘 定义

一维(1D)数组

DECLAREname[size]:DATATYPEDECLARE name[size] : DATA_TYPE

存储在连续内存中的同类型元素线性集合。每个元素通过相对于数组起始地址的单个索引偏移量访问。

例:

存储10个学生考试分数的整数数组

与单个变量不同,数组将相关数据分组在一起,便于通过循环处理所有元素。它们是入门编程中最常用的数据结构,几乎出现在每一道试卷2的编程题中。

📐 例题

声明一个名为temperatures的包含5个浮点数的一维数组,将第一个元素初始化为22.5,输出第三个元素(零索引)。

  1. 1
    1. 用正确的类型、名称和大小声明数组:
  2. 2
    DECLARE temperatures[5]:REAL\text{DECLARE } temperatures[5] : \text{REAL}
  3. 3
    1. 初始化索引0处的第一个元素:
  4. 4
    temperatures[0]=22.5temperatures[0] = 22.5
  5. 5
    1. 第三个元素在索引2处,因此输出它:
  6. 6
    OUTPUT temperatures[2]\text{OUTPUT } temperatures[2]

Exam tip:

编写代码前,请务必确认题目中给出的索引约定。

2. 二维(2D)数组★★★☆☆⏱ 5 min

📘 定义

二维(2D)数组

DECLAREname[rows][columns]:DATATYPEDECLARE name[rows][columns] : DATA_TYPE

数组的数组,结构为包含行和列的网格。每个元素通过两个索引访问:第一个是行索引,第二个是列索引。

例:

井字棋游戏的3×3棋盘网格

二维数组在考题中通常用于表示网格、矩阵、表格和游戏棋盘。试卷1也可能要求你计算行优先或列优先存储顺序下二维元素的内存地址。

📐 例题

声明一个名为gameGrid的4行6列二维整数数组,将(零索引下的)第2行第5列的元素设为10。

  1. 1
    1. 先声明行数,再声明列数:
  2. 2
    DECLARE gameGrid[4][6]:INTEGER\text{DECLARE } gameGrid[4][6] : \text{INTEGER}
  3. 3
    1. 第2行 = 索引1,第5列 = 索引4,因此赋值:
  4. 4
    gameGrid[1][4]=10gameGrid[1][4] = 10
✓ 快速检测

测试你的理解:

  1. 在零索引二维数组中,访问第一行第一列元素的索引是什么?

    • [0][0]

    • [1][1]

    • [0][1]

    • [1][0]

    显示答案
    [0][0]

    正确!零索引从0开始计数,因此每个维度的第一个元素索引都是0。

3. 考试常考数组操作★★★☆☆⏱ 5 min

考试中最常考的数组操作包括遍历(迭代所有元素)、查找最大值/最小值、计算总和/平均值、线性搜索、插入和删除。所有这些操作都使用循环通过索引访问元素。

📐 例题

编写伪代码,在包含10个整数的零索引一维数组scores中查找最大值。

  1. 1
    1. 将最大值初始化为数组的第一个元素:
  2. 2
    maxScore=scores[0]maxScore = scores[0]
  3. 3
    1. 从第二个元素(索引1)开始遍历数组:
  4. 4
    FOR i=1 TO 9\text{FOR } i = 1 \text{ TO } 9
  5. 5
    IF scores[i]>maxScore THEN\quad \text{IF } scores[i] > maxScore \text{ THEN}
  6. 6
    maxScore=scores[i]\quad \quad maxScore = scores[i]
  7. 7
    END IF\quad \text{END IF}
  8. 8
    END FOR\text{END FOR}
  9. 9
    1. 循环结束后,maxScore即为数组的最大值。

4. 常见陷阱

错误做法:

循环时的偏移一错误:对10个元素的零索引数组从1循环到10

原因:

10个元素零索引数组的最后一个有效索引是9,因此访问索引10是越界访问

正确做法:

对于大小为n的零索引数组,从0循环到n-1,与题目给出的约定一致

错误做法:

声明或访问二维数组时交换行和列索引

原因:

CIE伪代码默认使用[行][列]约定,交换会导致错误的大小声明和错误的元素访问

正确做法:

始终先写行索引/大小,再写列索引/大小

错误做法:

假设数组是动态的,可以增长到超过声明的大小

原因:

静态数组(9618课程中讲授的标准数组)在声明时大小固定,程序执行期间无法调整大小

正确做法:

在程序开始时声明一个足够大的数组,可容纳所有可能的输入值

错误做法:

不检查题目就假设所有数组都是零索引

原因:

有些考题为了简化明确使用一索引,因此使用零索引会导致错误结果

正确做法:

编写任何代码前,始终先阅读题目描述确认索引约定

5. 速查表

概念

核心要点

伪代码示例

一维数组声明

大小固定,元素同类型

DECLARE scores[10] : INTEGER

二维数组声明

先声明行,再声明列

DECLARE grid[3][3] : INTEGER

零索引一维数组

大小为n时索引范围0到n-1

FOR i ← 0 TO 9

一索引一维数组

大小为n时索引范围1到n

FOR i ← 1 TO 10

二维元素访问

先行索引,后列索引

grid[row][col]

查找最大值

从第一个元素开始迭代

max = arr[0] IF arr[i] > max THEN max = arr[i]

6. 常见问题

在CIE 9618考试中数组是零索引还是一索引?

CIE 9618中使用的大多数伪代码默认零索引,但你必须始终检查题目描述,因为有些题目明确使用一索引。未经确认切勿妄下结论。

真题中的出现

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

  • 2022 · 1

    数组内存地址计算

  • 2023 · 2

    二维数组网格操作

  • 2021 · 1

    遍历数组查找最大值

深入阅读

下一步

数组是你在A-Level计算机科学中学习几乎所有更复杂数据结构的基础。理解数组如何在连续内存中存储数据,对于理解链表、栈、队列和哈希表的工作方式至关重要,因为所有这些结构通常都使用数组作为底层存储层。掌握遍历、搜索等数组操作也能培养你在试卷2中解决复杂编程问题所需的核心算法思维。接下来,你将学习如何使用记录组合不同的数据类型,之后再学习更高级的算法和动态数据结构。