📦 C++ 数组 · 课前预习笔记
> 明天要学 “数组” ——就是让程序一次性存一堆数据,就像你有n个朋友,直接叫“朋友1号”……“朋友n号”。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、先搞懂:为什么要有数组?
假如存5个同学的年龄:
如果存100个人呢?起100个变量名?手会断! 😭
用数组就爽了:
> 💡 数组就是一组相同类型的变量,用同一个名字,用编号来区分它们。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、C++数组的下标到底从几开始?
C++规定:数组下标从 0 开始。
比如 int a[5]; 有5个元素,下标是 0, 1, 2, 3, 4,没有 a[5]!
> ⚠️ 但很多初学者觉得从1开始更自然(第1个、第2个……)。
> 我们的课堂统一这样做:定义数组时多留一个位置,下标从 1 开始使用。
> 比如要存n个数,我们直接定义一个足够大的固定数组,比如 int a[1005];,然后只用 a[1] ~ a[n],a[0] 直接不用。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、数组怎么定义
标准写法
> 💡 为什么这么写?因为很多比赛和题目会给出数据范围(比如 n ≤ 1000),我们直接开一个比范围大一点点的数组,保证够用就行。
例子
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四、数组的初始化和赋值
1. 定义时全部初始化为0(推荐)
2. 用循环输入(最常用!)
3. 用循环赋值
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
五、遍历数组
遍历 = 把每个元素都访问一遍。
用 FOR 循环输出
用 FOR 循环输入N个数
> ⚠️ 记住:循环从 1 开始,条件 i <= n,不要写成 i < n 或从0开始。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
六、常见数组操作
1. 求和
2. 求平均数
3. 找最大值
4. 找最大值和它的位置(下标)
5. 找最小值
6. 统计满足条件的个数
7. 反向输出
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
七、完整代码模板
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
八、数组注意事项(⚠️ 全是重点!)
1. 数组开多大?
我们直接写一个固定大小,比如 int a[1005];。
前提:要保证题目给的 n 不超过 1000(或者小于1005),这样用 a[1]~a[n] 就不会越界。
实际比赛一般会给数据范围,我们根据范围开大一点就行。
2. 下标范围:0 ~ 长度-1
但我们不用0,所以实际可用下标是 1 ~ 长度-1。
例如 int a[1005]; 有效下标是 0~1004,我们只用 1~1004。
如果 n=1000,用 a[1000] 没问题;如果 n=1004,用 a[1004] 也没问题;但 a[1005] 就越界了。
3. 千万不要越界!
4. 只能存同类型数据
5. 局部数组记得初始化
6. 如果数组定义在 MAIN 外面(全局),默认就是0
> 但为了保险,我们统一在 main 里面写 int a[1005] = {0};
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
九、常见错误对照表
❌ 错误写法 ✅ 正确写法 原因 a[n] 但数组长度是1005,n=1005 保证 n <= 1004 下标最大是1004 没初始化直接用 int a[1005] = {0}; 避免随机值
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
📝 快速记忆卡
概念 一句话总结 下标从几开始 我们约定从1开始,0号不用 遍历循环 for (int i = 1; i <= n; i++) 最大安全下标 数组长度 - 1,比如1004 初始化 int a[1005] = {0}; 全部清零
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
🔥 预习小任务
1. 如果题目说 n ≤ 1000,你应该定义数组为 int a[____];?
2. 如果定义 int a[1005];,n=1000,能用 a[1000] 吗?能用 a[1005] 吗?
3. 下面的代码哪里错了? (提示:数组没初始化,但只给输入的部分赋值,其他不影响,这个其实没错,但为了安全建议初始化。真正要注意的是n不能超过1004)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
明天上课带着问题来,效果翻倍!🚀