GESP 三级 第 04 讲:一维数组基础

本讲定位:整个三级最大的一道坎。总纲 §6 为数组留了三次课(本讲 + 第 05 讲 + 富余时间),原因不是数组的语法复杂——语法只有一行——而是学生第一次要面对”一个名字装很多个值”和”编号从 0 开始”这两个观念。前面三讲(进制 / 编码 / 位运算)是背和算,从本讲起,三级真正变成编程课。官方大纲三级知识块 5 只写了一句「C++ 一维数组(不包括变长数组)」,但编程题的两道题里至少一道要用数组。

对应官方大纲:三级知识块 5「数据结构」——C++ 一维数组(不包括变长数组)。

前置知识:一级第 03 讲(变量)、一级第 04 讲(数据类型)、一级第 08 讲(循环——数组和 for 是连体的,循环不熟就别学数组)、二级第 07 讲(多重循环)。

代码说明:本讲所有代码均已用 g++ 11.5(-std=c++11)编译运行验证,输出结果即为文中标注结果。


1. 先看一个用旧办法做不到的题

题目:输入 100 个整数,倒序把它们输出。

用我们目前会的东西试试:

int a1, a2, a3;
cin >> a1 >> a2 >> a3;
cout << a3 << " " << a2 << " " << a1;

三个数还能凑,100 个数就要定义 100 个变量、写 100 次 cin、写 100 次 cout。如果题目改成”输入 $n$ 个数”($n$ 事先不知道),这条路直接走不通。

根本困难在哪?

📌 数组就是为这两件事发明的:

$$ \boxed{\textbf{一个名字 + 一个编号}\ \longrightarrow\ \textbf{可以用循环变量当编号}} $$

有了数组,上面这道题只要 6 行。这就是本讲的全部动机。


2. 数组是什么:一排带号码的抽屉

类比:一个普通变量是一个抽屉,数组是一整排连号的抽屉。

   int a[5];   ← 申请一排 5 个抽屉,每个都能装一个 int

   编号:    0     1     2     3     4
         ┌─────┬─────┬─────┬─────┬─────┐
    a =  │     │     │     │     │     │
         └─────┴─────┴─────┴─────┴─────┘
           a[0]  a[1]  a[2]  a[3]  a[4]

三个术语(真题会用这些词):

术语 含义
数组名 这一排抽屉的总名字,上例是 a
下标(索引) 抽屉的编号,上例是 $0\sim4$
元素 某一个抽屉里的值,a[2] 就是第 3 个元素
数组长度(大小) 抽屉总数,上例是 5

关键性质:

  1. 所有元素类型必须相同。int a[5] 里五个格子全是 int,不能一个装整数一个装小数。