一维数组:一排格子的存储

想一次存 100 个数?别用 100 个变量,用一个数组。

GESPCSP-J

◎学完你会

1拖一拖:一排放 5 个数

看下标:格子下面写的是下标 0 1 2 3 4,不是 1~5。 第 1 个格子是 a[0],第 5 个是 a[4]。a[5] 是不存在的!

2关键命令

写法含义
int a[5];申请 5 个连着的 int 格子
int a[5]={7,2,9,4,5};声明同时填初值
a[0] = 100;改第 1 个格子的值
for(i=0;i<5;i++) cin>>a[i];循环读入一整排
for(i=0;i<5;i++) sum += a[i];循环求和
长度写多大?给"最多要存几个数"留出余量:题目说 n≤100,就开 a[105] 而非 a[100]——防止恰好越界。

3试一试:求最大值

int best = a[0]; for (i=0; i<5; i++) if (a[i] > best) best = a[i];
把"当前最大"先设为 a[0],然后一路比过去。这是后面很多算法的原型。

4易错点

① 下标从 0 不是 1。循环到 i<n 不是 i<=n,否则越界。
② 开了没填就取值。数组没初始化时里面的数也是垃圾值,先读入或先赋 0。
③ a[n] 会"悄悄"越界。不报编译错,但读到别的内存,结果看心情。

↗跨学科小贴士

数组就像"体育课点名册":一行 40 个座位,编号 0~39。老师说"报数到 40"对应下标 39—— 数组把"第几个"习惯从 0 开始数,是计算机从 0 数起的由来(内存地址从 0 编起)。

✎练一练

int a[3]; 里能用的下标是?
a[3] 恰好 3 个格子,下标 0、1、2;a[3] 越界。
int a[4]={1,2,3,4}; int s=0; for(int i=0;i<4;i++) if(a[i]%2==0) s+=a[i]; cout << s;
答案:6。偶数 2、4 相加。注意循环 i<4,访问的是 a[0]~a[3]。