C++魔法代码学院:第 2 课——记忆魔法(变量与类型)
—— 为不同的数据精灵建造专属小屋
- 课时时长:90 分钟
- 核心目标:
- 理解变量(Variable)就是计算机内存里的“带标签的小房子”。
- 掌握两种核心房型:
int(整数房) 和char(字符单间)。 - 彻底颠覆对
=的认知:它不是“相等”,而是“入住(赋值)”。 - 魔法实验:发现字符背后的秘密数字(ASCII 码初探)。
课程时间表
| 环节 | 时间 | 内容 | 教学隐喻/活动 |
|---|---|---|---|
| 复习 | 10 min | 默写框架与 Hello World | “光速启动挑战” |
| 引入 | 10 min | 为什么需要变量? | 游戏演示:健忘的电脑 |
| 新知 | 25 min | 数据类型 (int vs char) |
“魔法村的两种户型” |
| 核心 | 20 min | 赋值语句 = 的真面目 |
“从右往左搬新家” |
| 实验 | 10 min | 类型转换初探 | “字符的秘密身份证” |
| 实战 | 15 min | 制作英雄卡片 | 综合运用 int 和 char |
| 总结 | 10 min | 总结与避坑 | 单引号 ' ' vs 双引号 " " |
详细教学流程
1. 复习:光速启动挑战 (10分钟)
- 活动:老师一声令下,学生在空白的 Dev-C++ 中敲出 5 行基础代码框架。
- 检查点:
- 头文件
#include <iostream>有没有写错? using namespace std;的分号漏了吗?main后面有一对小括号()吗?
- 头文件
2. 引入:健忘的“金鱼”电脑 (10分钟)
-
情景模拟:
老师扮演电脑:“我现在心里想了一个数字 100。”
学生:“好的。”
老师(过了3秒):“我刚才想的数字是多少来着?哎呀,我只有7秒钟记忆,我忘光了!”
-
痛点揭示:电脑虽然计算快,但是如果不刻意让它“记下来”,它算完就忘。
-
解决方案:我们需要在电脑的内存里申请一个“小抽屉”,把数字放进去,以后随时都能拿出来用。这个小抽屉,在 C++ 里就叫变量。
3. 新知:魔法村的两种户型 (25分钟)
- 引入:数据精灵有胖有瘦,不能乱住。我们需要根据数据的样子,申请不同类型的房子。
-
户型一:
int整数房 (Integer House)- 住户要求:只能住整数(如 1, 100, -5, 0)。小数和文字不能住,会把房子挤爆。
- 语法:
int score; - 解读:申请一个叫
score的整数房。
-
户型二:
char字符单间 (Character Room)-
住户要求:房间超级小,只能住 1 个字符!
- ✅
'A','b','1','+' - ❌
"ABC"(太长了住不下),100(数字太大)
- ✅
-
特殊装备——小雨衣(单引号):
- 字符精灵非常怕淋雨,入住
char房必须穿**单引号' '**。
- 字符精灵非常怕淋雨,入住
-
语法:
char rank; -
解读:申请一个叫
rank(等级) 的字符单间。
-
-
小测试:
100住哪? ->int'S'住哪? ->char3.14住哪? -> (老师神秘一笑) 以后再告诉你,今天它没地方住,会流浪街头。
4. 核心:赋值语句的真面目 (20分钟)
-
动作演示:
- 老师拿出两个盒子:一个大的写
score,一个小的写level。 - 板书:
score = 100; - 口诀:“从右往左看,数据进房间。”(画一个向左的大箭头
⬅)。
- 老师拿出两个盒子:一个大的写
-
字符赋值的细节:
- 板书:
level = 'A'; - 重点:一定要写单引号!
- 板书:
-
错误演示:
level = A;(电脑以为 A 是另一个变量名,报错)level = "A";(双引号是字符串,是“一列火车”,单间房住不下)
5. 实验:字符的秘密身份证 (10分钟)
- 提问:如果我们非要把字符
'L'塞进整数房int里,会发生什么? -
代码实验:
int main() { char name_initial = 'L'; cout << "My initial is: " << name_initial << endl; // 输出 L int secret_code = 'L'; // 把字符 L 赋值给整数变量! cout << "The secret code is: " << secret_code << endl; return 0; } -
观察结果:屏幕上竟然输出了一个数字(76)!
-
揭秘(ASCII 伏笔):
- 原来计算机不认识图形,只认识数字。
- 每一个字符精灵进城时,都领了一张身份证(数字编号)。
'A'的身份证是 65,'a'的身份证是 97。- 这种编号系统叫 ASCII 码。
6. 实战:制作英雄卡片 (15分钟)
- 任务:创建一个英雄的档案,包含等级(整数)和 评级(字符)。
- 代码带练:
int main() { int level = 1; // 整数房:等级 1 char rank = 'C'; // 字符房:评级 C cout << "Hero Level: " << level << endl; cout << "Hero Rank: " << rank << endl; // 升级了! level = 2; rank = 'B'; // 记得用单引号 cout << "Level UP!" << endl; cout << "New Rank: " << rank << endl; return 0; }
7. 总结与避坑 (10分钟)
- 坑王驾到:
- 雨衣穿错:
char c = "A";❌(双引号是给字符串用的,单引号' '才是 char 的)。 - 房间挤爆:
char c = 'ABC';❌(char 只能装 1 个字)。 - 名字不合法:
int 1st_score;❌(变量名不能数字开头)。
- 雨衣穿错:
课后作业:特工档案
-
基础题:
- 定义一个
int变量age存放你的年龄。 - 定义一个
char变量group存放你的分组(比如 'A' 组)。 - 用
cout打印出来。
- 定义一个
-
探究题(ASCII 猎人):
- 编写程序,把字符
'a','b','c'分别赋值给三个int变量。 - 看看打印出来的数字是多少?它们是连续的吗?
- 编写程序,把字符
-
思考题:
- 如果我写
int a = 10; int b = 20; a = b;,这时候a变成了多少?b里的东西还在吗?(引导学生理解:赋值是复制一份放进去,不是剪切)。
- 如果我写
给教练的教学话术建议
- 关于
char的大小:拿一个积木(代表 char)和一个大盒子(代表 int)。告诉学生:“char非常省空间,它只占 1 个字节,而int占 4 个字节。所以如果是存单个字母,用char更划算。” -
单引号记忆法:
- 单引号
' '里面只能住 单 个字符。 - 双引号
" "里面可以住 双 个甚至更多字符(字符串)。
- 单引号
-
关于 ASCII:不要让学生背数字!只需要让他们知道“字符本质上也是数字”这个概念即可,这对以后理解
char参与运算(如'a' + 1)非常重要。