数组
计算机科学· 第10单元:数据类型与结构· 15 分钟阅读
1. 核心概念与一维数组★★☆☆☆⏱ 5 min
一维(1D)数组
存储在连续内存中的同类型元素线性集合。每个元素通过相对于数组起始地址的单个索引偏移量访问。
例:
存储10个学生考试分数的整数数组
与单个变量不同,数组将相关数据分组在一起,便于通过循环处理所有元素。它们是入门编程中最常用的数据结构,几乎出现在每一道试卷2的编程题中。
声明一个名为temperatures的包含5个浮点数的一维数组,将第一个元素初始化为22.5,输出第三个元素(零索引)。
- 1
- 用正确的类型、名称和大小声明数组:
- 2
- 3
- 初始化索引0处的第一个元素:
- 4
- 5
- 第三个元素在索引2处,因此输出它:
- 6
Exam tip:
编写代码前,请务必确认题目中给出的索引约定。
2. 二维(2D)数组★★★☆☆⏱ 5 min
二维(2D)数组
数组的数组,结构为包含行和列的网格。每个元素通过两个索引访问:第一个是行索引,第二个是列索引。
例:
井字棋游戏的3×3棋盘网格
二维数组在考题中通常用于表示网格、矩阵、表格和游戏棋盘。试卷1也可能要求你计算行优先或列优先存储顺序下二维元素的内存地址。
声明一个名为gameGrid的4行6列二维整数数组,将(零索引下的)第2行第5列的元素设为10。
- 1
- 先声明行数,再声明列数:
- 2
- 3
- 第2行 = 索引1,第5列 = 索引4,因此赋值:
- 4
测试你的理解:
在零索引二维数组中,访问第一行第一列元素的索引是什么?
[0][0]
[1][1]
[0][1]
[1][0]
显示答案
[0][0] —正确!零索引从0开始计数,因此每个维度的第一个元素索引都是0。
3. 考试常考数组操作★★★☆☆⏱ 5 min
考试中最常考的数组操作包括遍历(迭代所有元素)、查找最大值/最小值、计算总和/平均值、线性搜索、插入和删除。所有这些操作都使用循环通过索引访问元素。
编写伪代码,在包含10个整数的零索引一维数组scores中查找最大值。
- 1
- 将最大值初始化为数组的第一个元素:
- 2
- 3
- 从第二个元素(索引1)开始遍历数组:
- 4
- 5
- 6
- 7
- 8
- 9
- 循环结束后,
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中解决复杂编程问题所需的核心算法思维。接下来,你将学习如何使用记录组合不同的数据类型,之后再学习更高级的算法和动态数据结构。
