一、🧙♂️📦《C++ 数组魔法王国》开讲了!
🧙♂️ 第一章:数组是什么?(超级重要!)
📖 故事:魔法储物柜 🧳
想象一下:
魔法学校里有一排一模一样的小柜子
每个柜子都可以放一个魔法球 🔮
每个柜子都有一个编号
这排柜子,就是——
👉数组(Array)!
📌一句话理解数组:
数组 = 一排排在一起的“同类型小盒子”
🧠 数组和普通变量的区别
❌ 不用数组(很累 😵)
int a1, a2, a3, a4, a5;✅ 用数组(很爽 😄)
int a[5];📌数组帮我们:
一次存很多数据
名字只用一个
管理超级方便
🧙♂️ 第二章:数组怎么创建?
🎯 创建一个数组的魔法公式:
类型 名字[数量];🌰 例子:5 个学生的成绩
int score[5];🧠 含义是:
int:每个盒子放整数score:这一排柜子的名字[5]:一共有 5 个柜子
📌重点:数组大小一旦创建,就不能变!
🧙♂️ 第三章:数组的编号(索引 index)
🚨 超级重要的魔法规则!
第一个盒子编号是 0 不是 1!!!| 柜子 | 编号 |
|---|---|
| 第 1 个 | 0 |
| 第 2 个 | 1 |
| 第 3 个 | 2 |
| 第 4 个 | 3 |
| 第 5 个 | 4 |
🌰 例子
score[0] = 90; // 第 1 个学生 score[1] = 85; // 第 2 个学生📌口诀:
数组从 0 开始数!
🧙♂️ 第四章:给数组放东西(赋值)
📖 故事:给柜子放魔法球 🔮
int a[3]; a[0] = 10; a[1] = 20; a[2] = 30;🧠 理解:
a[0]:第一个盒子=:放进去
🎁 创建时直接放好(推荐)
int a[3] = {10, 20, 30};📌 如果少写了?
int a[5] = {1, 2};👉 后面自动变成0
🧙♂️ 第五章:数组怎么一个一个看?(遍历)
📖 故事:巡逻小机器人 🤖
小机器人从第 0 个柜子,
一直走到最后一个柜子。
🎯 遍历数组的经典写法
for (int i = 0; i < 5; i++) { cout << a[i] << endl; }🧠 解释:
i是柜子编号i++一个一个走a[i]取出里面的东西
📌数组 + for 循环是黄金搭档!
🧙♂️ 第六章:修改数组里的值
📖 故事:魔法球升级 ✨
a[1] = a[1] + 5;🧠 意思是:
找到第 2 个柜子
里面的值 +5
再放回去
🌰 全体加 10 分(超常用)
for (int i = 0; i < 5; i++) { a[i] += 10; }一行循环,改一排数据!
🧙♂️ 第七章:数组到底帮了我们什么?(超重要)
🌟 例子 1:统计成绩及格人数
❌ 不用数组(写到哭 😭)
int s1, s2, s3, s4, s5;✅ 用数组(轻松 😎)
int score[5]; int pass = 0; for (int i = 0; i < 5; i++) { cin >> score[i]; if (score[i] >= 60) pass++; }📌数组 + 循环 + 分支 = 真正的程序!
🌟 例子 2:找最大值
int a[5] = {12, 45, 7, 30, 20}; int mx = a[0]; for (int i = 1; i < 5; i++) { if (a[i] > mx) { mx = a[i]; } } cout << mx << endl;🧠 数组让“比较很多数”变简单!
🌟 例子 3:记录每天的温度 🌡️
int temp[7]; for (int i = 0; i < 7; i++) { cin >> temp[i]; }📌 不用 7 个变量,一个数组就够!
🧙♂️ 第八章:数组学习必记口诀(送你!)
🌟数组四大口诀🌟
1️⃣ 一排盒子装同类
2️⃣ 编号从 0 开始
3️⃣ for 循环来帮忙
4️⃣ 修改读取用下标
🧙♂️ 第九章:数组 + 编程能力升级路线 🚀
学会数组,你就能写:
✅ 成绩统计系统
✅ 游戏血量记录
✅ 商店价格表
✅ 排名、计数、分类
✅ 为以后学习字符串、二维数组、算法打基础!
🎉 一句话小结❤️
数组就像“帮你记忆很多事情的小助手”,
学会它,程序才真的变聪明!
二、我们接下来,继续上一节🌟“防踩坑”特别课🌟
🧙♂️《C++ 数组 · 十大魔法陷阱大冒险》🕳️✨
🧙♂️ 陷阱 1:数组从 1 开始?❌
❗ 真相:数组从 0 开始!
📖 故事
小法师以为第一个柜子是1 号,
结果把魔法球塞进了不存在的柜子💥
❌ 错误代码
int a[5]; a[1] = 10; // 想放第一个✅ 正确做法
a[0] = 10; // 第一个柜子📌口诀 1️⃣
数组编号从 0 起!
🧙♂️ 陷阱 2:访问不存在的柜子(越界)💥
📖 故事
明明只有 5 个柜子,
却去打开第 5 号柜子……
结果——炸了!💣
❌ 错误代码
int a[5]; a[5] = 100; // 最大只能到 a[4]✅ 正确范围
a[0] ~ a[4]📌口诀 2️⃣
最大下标 = 数量 − 1
🧙♂️ 陷阱 3:for 循环写错范围 😵
📖 故事
巡逻机器人走太远,
走出了柜子区,掉坑里了 🤖🕳️
❌ 错误代码
for (int i = 0; i <= 5; i++) { cout << a[i] << endl; }✅ 正确代码
for (int i = 0; i < 5; i++) { cout << a[i] << endl; }📌口诀 3️⃣
<对,<=危险!
🧙♂️ 陷阱 4:数组没装东西就用 ❄️
📖 故事
柜子是空的,
却直接拿来用,
拿出来的是“空气魔法” 👻
❌ 错误代码
int a[3]; cout << a[0];✅ 正确做法
int a[3] = {0};或
a[0] = 10;📌口诀 4️⃣
用之前,先放值!
🧙♂️ 陷阱 5:数组不能整体输入 ❌
📖 故事
小法师想一次把 5 个球塞进柜子,
结果柜子说:我不吃整包!📦❌
❌ 错误代码
int a[5]; cin >> a; // ❌ 不行!✅ 正确做法
for (int i = 0; i < 5; i++) { cin >> a[i]; }📌口诀 5️⃣
数组要一个一个来!
🧙♂️ 陷阱 6:把数组当成一个普通变量 🤯
📖 故事
一整排柜子,
却想直接加 1?
柜子:我不懂啊!😵
❌ 错误代码
a = a + 1; // ❌✅ 正确做法
a[0] = a[0] + 1;或用循环
for (int i = 0; i < 5; i++) { a[i]++; }📌口诀 6️⃣
数组不是一个数!
🧙♂️ 陷阱 7:数组大小写错 😬
📖 故事
只有 3 个柜子,
却硬要放 5 个球,
后果你懂的 💥
❌ 错误代码
int a[3]; for (int i = 0; i < 5; i++) { cin >> a[i]; }✅ 正确做法
int a[5];或
for (int i = 0; i < 3; i++)📌口诀 7️⃣
数量和循环要一致!
🧙♂️ 陷阱 8:忘记数组大小是固定的 🧱
📖 故事
魔法柜子已经做好,
却想中途加一个,
柜子:做不到!🚫
❌ 错误想法
int a[5]; // 运行时想改成 10✅ 正确认知
数组大小创建时决定
想变大?以后学
vector!
📌口诀 8️⃣
数组大小不能变!
🧙♂️ 陷阱 9:忘了 break,switch 里数组被连环执行 😱
📖 故事
魔法机关本该停下,
却一路狂奔,
把好几个柜子都改了 😵💫
❌ 错误代码
switch (x) { case 1: a[0] = 10; case 2: a[1] = 20; }✅ 正确代码
switch (x) { case 1: a[0] = 10; break; case 2: a[1] = 20; break; }📌口诀 9️⃣
case 后面要 break!
🧙♂️ 陷阱 10:数组下标写成变量值 😵💫(终极)
📖 故事
柜子编号只能是 0、1、2……
却拿“成绩 90”当编号,
柜子直接爆炸 💥
❌ 错误代码
int score = 90; int a[5]; a[score] = 10; // ❌✅ 正确思路
int i = 2; a[i] = 10;📌口诀 🔟
下标是编号,不是内容!
🎓 学习总结(送给小程序员)
🌟数组防坑十守则🌟
1️⃣ 从 0 开始
2️⃣ 不越界
3️⃣<不要<=
4️⃣ 用前先赋值
5️⃣ 一个一个输入
6️⃣ 数组不是数
7️⃣ 大小要对齐
8️⃣ 创建就定死
9️⃣ switch 要 break
🔟 下标别乱用
❤️ 老师寄语
数组就像一排整齐的小抽屉,
用对了,它帮你记住一切;
用错了,它就闹脾气!
三、接下来我们开启《数组 + 选择语句 + 循环 ·魔法试炼》⚔️✨
🟢 低难度区(第 1–3 题)
👉 目标:熟练数组 + for + if
🧩 第 1 题:魔法糖果统计员 🍬(低)
📖 故事
小魔法师有n颗糖果,每颗糖果都有甜度值。
甜度 ≥ 60 的糖果是“好糖果”。
📥 输入
一个整数
n接着
n个整数(甜度)
📤 输出
好糖果的数量
🧠 思路分析
用数组存甜度
用循环读入
用
if判断是否 ≥ 60用计数器统计
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int sweet[100]; int good = 0; for (int i = 0; i < n; i++) { cin >> sweet[i]; if (sweet[i] >= 60) { good++; } } cout << good << endl; return 0; }📌重点:数组存数据,if负责筛选
🧩 第 2 题:魔法温度报警器 🌡️(低)
📖 故事
记录7天的温度:
温度 < 0 → “结冰”
否则 → “正常”
📤 输出
每天一行对应状态
🧠 思路分析
固定 7 个数据
循环遍历
if-else二选一
✅ 参考代码
#include <iostream> using namespace std; int main() { int temp[7]; for (int i = 0; i < 7; i++) { cin >> temp[i]; if (temp[i] < 0) { cout << "结冰" << endl; } else { cout << "正常" << endl; } } return 0; }📌重点:数组 + if-else 的基本配合
🧩 第 3 题:魔法数字加分 ✨(低)
📖 故事
有n个魔法数:
如果是偶数→ 加 10
如果是奇数→ 不变
最后输出修改后的数组。
🧠 思路分析
数组存数
if (x % 2 == 0)判断直接修改数组中的值
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int a[100]; for (int i = 0; i < n; i++) { cin >> a[i]; if (a[i] % 2 == 0) { a[i] += 10; } } for (int i = 0; i < n; i++) { cout << a[i] << " "; } return 0; }📌重点:通过下标修改数组内容
🟡 中等难度区(第 4–6 题)
👉 目标:分类、统计、综合判断
🧩 第 4 题:魔法宝箱编号整理 🧰( 数组索引)
📖 故事
魔法城有n个宝箱,每个宝箱都有一个编号。
城主想知道:
第一个宝箱
最后一个宝箱
分别是多少编号。
🧠 思路分析
用数组存编号
第一个宝箱是
a[0]最后一个宝箱是
a[n-1]
👉必须理解数组下标
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int box[100]; for (int i = 0; i < n; i++) { cin >> box[i]; } cout << box[0] << " " << box[n - 1] << endl; return 0; }📌重点:
数组从0 开始
最后一个元素是n − 1
🧩 第 5 题:魔法商店折扣 🏪
📖 故事
记录n件商品价格:
价格 ≥ 100 → 打 8 折
否则 → 原价
输出最终价格。
🧠 思路分析
数组存价格
if 判断是否打折
修改数组再输出
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int price[100]; for (int i = 0; i < n; i++) { cin >> price[i]; if (price[i] >= 100) { price[i] = price[i] * 8 / 10; } } for (int i = 0; i < n; i++) { cout << price[i] << " "; } return 0; }📌重点:数组 + 条件修改
🧩 第 6 题:魔法能量反转术 🔁(数组整体操作)
📖 故事
魔法师施放了“反转术”,
一个能量序列需要从后往前输出。
🧠 思路分析
用数组保存所有能量
倒着用下标访问数组
数组顺序可以随意控制
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int energy[100]; for (int i = 0; i < n; i++) { cin >> energy[i]; } for (int i = n - 1; i >= 0; i--) { cout << energy[i] << " "; } return 0; }📌重点:
数组让“顺序变化”成为可能
👉 没数组就几乎做不到!
🔴 高难度区(第 7–8 题)
👉 目标:综合判断 + 稍强逻辑
🧩 第 7 题:魔法排名助手 🏆
📖 故事
输入n个分数,
统计高于平均分的人数。
🧠 思路分析
1️⃣ 用数组存分数
2️⃣ 先算总和、平均分
3️⃣ 再遍历统计
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int a[100]; int sum = 0; for (int i = 0; i < n; i++) { cin >> a[i]; sum += a[i]; } int avg = sum / n; int cnt = 0; for (int i = 0; i < n; i++) { if (a[i] > avg) { cnt++; } } cout << cnt << endl; return 0; }📌重点:数组要遍历两次!
🧩 第 8 题:魔法重复值探测器 🔍(高 · 数组综合)
📖 故事
魔法仪器记录了n次能量值,
如果相邻两次能量一样,说明仪器出故障了。
请统计发生故障的次数。
🧠 思路分析
用数组存所有数据
从第2 个数开始比较
比较
a[i]和a[i-1]相等就计数
✅ 参考代码
#include <iostream> using namespace std; int main() { int n; cin >> n; int a[100]; int error = 0; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 1; i < n; i++) { if (a[i] == a[i - 1]) { error++; } } cout << error << endl; return 0; }🎓 总结 ❤️
数组负责“记住很多东西”,
循环负责“一个一个处理”,
选择语句负责“做出正确决定”。
学会这三件套,
你已经是真正的小程序员啦!🚀✨