跳到正文
IGCSE·Tuition
计算机科学 · 课程

使用数组下标,不把它与值混淆

数组存放的是一排值,括号里的数字是位置,而不是其中的某个值。

本页内容
  1. 怎样读数组?
  2. 例题详解
  3. 要留意的错误
  4. 自我检测
  5. 接下来学什么

数组(array)用一个名字存放若干个同类型的值。每个值有一个下标(index),也就是它的位置,用 Name[index] 来访问。下标和值是两回事,把它们混淆是答案出错的常见来源。

这一课把循环技能与数组结合起来,完成重复与数组模块。它接在找最大值之后,那里位置和值都出现过。

怎样读数组?

数组带着边界和类型一起声明:

DECLARE Level : ARRAY[1:5] OF INTEGER

假设它存着这些值。

下标12345
Level[下标]35254

Level[3] 是 2。下标是 3,值是 2。

值本身也可以用作下标。Level[Level[2]] 的意思是:先算出 Level[2],它是 5,再找 Level[5],它是 4。

例题详解

这个算法找出最大值存放的位置。

Pos ← 1
FOR i ← 2 TO 5
   IF Level[i] > Level[Pos]
      THEN
         Pos ← i
   ENDIF
NEXT i
OUTPUT Pos, Level[Pos]

Pos 存的是下标,所以它永远是 1 到 5 的数字。Level[Pos] 是该下标处的值。

iLevel[i]之前的 Level[Pos]Level[i] > Level[Pos]?之后的 Pos
253真2
325假2
455假2
545假2

输出是 2, 5:下标是 2,存放在那里的值是 5。如果代码在循环结束后输出的是 i 而不是 Pos,显示的就是循环变量,而不是最大值的位置。

要留意的错误

常见的失误是题目要求加值,却加了下标。

错误的代码: Total ← Total + i

这会算出 1 + 2 + 3 + 4 + 5 = 15,也就是各个位置的总和。

纠正的方法是 Total ← Total + Level[i],它算出 3 + 5 + 2 + 5 + 4 = 19。追踪时,把 i 和 Level[i] 分成两列来写。两列都摆在纸上,就不容易混在一起。

自我检测

使用上面的数组 Level。

1. Level[4] 和 Level[Level[3]] 各是多少?

显示答案

Level[4] 是 5。Level[3] 是 2,所以 Level[Level[3]] 就是 Level[2],即 5。

2. 这段代码输出什么?

FOR i ← 1 TO 5
   IF Level[i] = 5
      THEN
         OUTPUT i
   ENDIF
NEXT i
显示答案

它输出值为 5 的下标。Level[2] 和 Level[4] 都等于 5,所以输出是 2 然后 4。它输出的不是值 5。

3. 如果代码试图读取 Level[6],会发生什么?

显示答案

边界是 1 到 5,所以位置 6 不存在。程序会因出错而停止。追踪时写“下标超出边界”。

接下来学什么

循环、错误和数组都学完了,接下来在重复与数组练习中把它们一起测试。想看每一轮下标和值怎样变化,可以使用伪代码追踪训练器。

计算机科学补习的老师可以请你对着自己的作答,逐行解释括号里每个数字的含义。

常见问题

下标和值有什么区别?

下标是某个项目的位置,例如 Level[3] 中的 3。值是该位置存放的内容,例如 Level[3] 存的是 2,值就是 2。下标是盒子的标签,值是盒子里面的东西。

Cambridge 伪代码的数组从 0 开始还是从 1 开始?

边界写在声明里,例如 ARRAY[1:5],所以请在那里读取。Python 的列表从 0 开始。题目给出边界时,就严格按照它来。请到 Cambridge 官网查看你考试年份的课程大纲,确认写法。

如果用了超出边界的下标会怎样?

该位置不存在,所以程序会出错。追踪时写明下标超出边界,不要自己编一个值。许多差一错误就是这样收场的。

更新于:

下一步

如果下标和值只在两者看起来相似时才混淆,老师可以特意设计让两者撞在一起的数组,教你一个把它们分开的追踪习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

家长:在这里咨询

  • 已通过我们的服务帮助 9,000+ 名学生
  • 9+ 年帮助 IGCSE 学生