第13课 二进制的秘密 — 小航的水果店与小白鼠测毒瓶

教师备课端 | 4C1E教学设计 | 知识点体系 | 小学四年级趣味C++ | 课程时长 120分钟

课程概览
教学流程
知识点体系
代码与拓展
反思与评价

📋课程基本信息

项目内容
课程名称第13课 二进制的秘密——小航的水果店与小白鼠测毒瓶
授课对象小学四年级学生(C++入门阶段,有循环、变量基础,数组知识较薄弱)
课程时长120分钟(2课时)
教学方法故事驱动(小白鼠测毒瓶)+ 实物类比(水果店苹果/香蕉)+ 身体互动(手指二进制)+ 场景化代码填空(水果店标签打印机)
核心知识二进制概念(0和1)、位权、除2取余法、while循环、权重累积法(不使用数组)
教学资源课件PPT、课前动画、代码填空练习、在线C++编辑器、小白鼠测毒瓶道具(可选)、水果卡片

🎯教学目标

知识与技能

  • 理解二进制"逢二进一"的规则,知道二进制只有0和1两个数字
  • 理解位权的含义(1, 2, 4, 8, 16...),能进行简单的二进制→十进制转换
  • 掌握除2取余法,能手算将十进制数转换成二进制
  • 能完成代码填空,用C++实现十进制转二进制(while循环+权重累积法,不使用数组)

过程与方法

  • 通过小白鼠测毒瓶故事,体会二进制编码的思想
  • 通过水果店苹果/香蕉类比,理解位权的概念
  • 通过手指游戏,身体记忆二进制的位权
  • 通过代码填空,建立手动算法与程序代码的对应关系

情感态度与价值观

  • 感受二进制的简洁美和计算机世界的奥秘
  • 培养逻辑思维和问题分解能力
  • 在故事和游戏中激发对编程的兴趣

📊4C1E 整体设计

C1联系 Connection
25分钟
C2建构 Construction
45分钟
C3反思 Contemplation
20分钟
C4延续 Continuance
15分钟
E评价 Evaluation
15分钟
环节核心活动学生任务
联系课前动画导入 → 小白鼠测毒瓶故事 → 水果店苹果香蕉类比 → 手指二进制游戏进入情境,初步感知二进制
建构二进制规则讲解 → 位权理解 → 除2取余法手动练习 → 代码思路讲解 → 代码填空实操掌握转换方法,完成代码填空
反思计算机为什么用二进制? → 二进制在生活中的应用 → 代码互评 → 常见错误总结深度思考,互相学习
延续课后任务布置(分层作业) → 二进制趣味拓展(秘密信息、IP地址) → 下节课预告课后巩固,拓展视野
评价课堂小测(5选择+3判断) → 学习反馈 → 知识点回顾总结检测学习效果

🔗C1 联系 Connection(25分钟)

1. 课前动画导入(5分钟)

播放课前动画《小航的水果店与二进制的秘密》,通过动画故事引入本节课主题。

教师话术:"同学们,刚才的动画里小航遇到了什么问题?对,水果店的苹果太多了,数不过来!今天我们就来学习一种神奇的计数方法——二进制,它能帮小航解决大问题!"

2. 小白鼠测毒瓶故事(8分钟)

讲述经典故事:有8瓶药水,其中1瓶有毒,小白鼠喝了有毒的药水会死亡。最少需要几只小白鼠才能一次找出毒瓶?

  • 引导学生思考:1只老鼠只能区分2种状态(活/死),2只老鼠能区分4种,3只老鼠能区分8种
  • 给每瓶药水编号0-7,用二进制表示:000, 001, 010, 011, 100, 101, 110, 111
  • 第1只老鼠喝所有第1位是1的瓶子,第2只喝第2位是1的,第3只喝第3位是1的
  • 根据哪些老鼠死亡,就能反推出毒瓶的编号!
核心思想:每只老鼠对应二进制的一位,死亡=1,存活=0,3只老鼠的生死组合就是毒瓶的二进制编号。

3. 水果店苹果香蕉类比(7分钟)

小航的水果店里,苹果代表1,香蕉代表0。用水果的摆放来表示二进制数:

  • 位权表格:从右到左,每个位置的"价值"是1, 2, 4, 8, 16...
  • 示例:苹果(1)在第1位=1个,苹果在第2位=2个,苹果在第3位=4个
  • 练习:5个苹果怎么用二进制表示?(101 = 4+0+1 = 5)

4. 手指二进制游戏(5分钟)

伸出右手,从拇指到小指分别代表1, 2, 4, 8, 16。手指伸出=1,弯曲=0。

  • 老师说数字,学生用手指表示二进制
  • 如:3 → 拇指+食指伸出(1+2=3)
  • 如:7 → 前三指伸出(1+2+4=7)

🏗️C2 建构 Construction(45分钟)

1. 二进制规则讲解(5分钟)

  • 二进制只有两个数字:0 和 1
  • 计数规则:逢二进一
  • 十进制:0,1,2,3,4,5,6,7,8,9,10(逢十进一)
  • 二进制:0,1,10,11,100,101,110,111,1000(逢二进一)

2. 位权理解(8分钟)

二进制数的每一位都有不同的"权重",从右往左依次是 1, 2, 4, 8, 16, 32...(即2的n次方)

// 二进制 1011 转十进制: 1×8 + 0×4 + 1×2 + 1×1 = 8 + 0 + 2 + 1 = 11 // 位权: 8 4 2 1
教学技巧:用水果店的苹果数目作为直观的位权参考——第1位最多放1个苹果,第2位最多放2个,第3位最多放4个,以此类推。

3. 除2取余法手动练习(10分钟)

将十进制数不断除以2,记录余数,直到商为0,最后将余数从下往上(逆序)排列。

  1. 用十进制数除以2,得到商和余数
  2. 用商继续除以2,记录新的余数
  3. 重复直到商为0
  4. 把所有余数从最后一个到第一个排列,就是二进制结果

示例(27转二进制):

27 ÷ 2 = 13 余 1 ← 最低位 13 ÷ 2 = 6 余 1 6 ÷ 2 = 3 余 0 3 ÷ 2 = 1 余 1 1 ÷ 2 = 0 余 1 ← 最高位 结果:从下往上读 → 11011

课堂练习:将 13、25、42 转换成二进制(学生手动计算,老师巡视指导)

4. 代码思路讲解(7分钟)

因为同学们数组知识还比较薄弱,我们用一种更巧妙的方法——权重累积法,完全不需要数组!

while循环除2取余
n % 2 得余数
余数×权重累加
result += r × weight
权重×10升级
weight ×= 10
巧妙之处:用一个十进制整数的每一位来存储二进制的每一位。weight从1开始递增(1→10→100→1000),先得到的余数自然放在个位(二进制最低位),后得到的放在十位、百位...所以不需要数组,也不需要逆序输出!

5. 代码填空实操(15分钟)

场景:小航的水果店标签打印机——输入苹果的数量(十进制),程序自动打印出对应的二进制标签。

#include <iostream> using namespace std; int main(){ cout << "=== 水果店标签打印机 ===" << endl; cout << "请输入苹果数量(十进制):" << endl; int n; cin >> n; int result = 0; // 存二进制结果 int weight = 1; // 位权重1,10,100... while(n > 0){ int r = n % ___; // ①除几取余? result = result + r * weight; weight = weight * ___; // ②权重乘几? n = n / ___; // ③商除以几? } cout << "二进制标签是:" << result << endl; return 0; }

填空答案:①填2(除2取余) ②填10(权重×10升级) ③填2(更新商)

运行示例:输入27 → 输出11011;输入13 → 输出1101

教学提示:给学生8-10分钟完成填空并运行验证,老师巡视指导。重点引导学生理解weight为什么要乘以10,以及为什么不需要数组和逆序输出。完成后请2-3名学生展示代码和运行结果。

🤔C3 反思 Contemplation(20分钟)

1. 深度思考:计算机为什么用二进制?(7分钟)

  • 计算机的核心是电子元件,电子元件只有两种稳定状态:通电/断电、高电平/低电平
  • 用1表示通电,0表示断电,正好对应二进制的两个数字
  • 二进制运算规则简单,电路实现容易,可靠性高
  • 如果用十进制,需要10种稳定状态,电路设计会非常复杂且容易出错

2. 二进制在生活中的应用(5分钟)

  • 计算机内部所有数据(文字、图片、视频、音乐)最终都是二进制
  • 条形码、二维码:黑白条纹对应0和1
  • IP地址:如192.168.1.1,每个数字都是8位二进制
  • 盲文:凸点=1,平点=0
  • 灯泡开关:开=1,关=0

3. 代码互评与常见错误总结(8分钟)

随机展示2份学生代码(匿名),引导全班从正确性、可读性、注释三个维度点评。

常见错误总结:
① 忘记 weight = weight * 10(所有余数都累加到个位,结果错误)
② 混淆 % 和 /(取余和整除搞反)
③ weight 初始值设错(应从1开始,不是0)
④ n=0 时没有处理(输出为0,可引导学生思考是否合理)

🚀C4 延续 Continuance(15分钟)

1. 分层课后任务

层次任务内容目标
基础题①手动转换:将13、25、42转成二进制,写出除2取余过程;②完成课堂代码填空,输入27截图提交巩固核心算法
提高题修改代码,让输出变成"苹果/香蕉"图案(1输出苹果,0输出香蕉),不使用数组灵活运用
挑战题编写一个程序,将二进制数转成十进制数(位权展开法)逆向思维拓展

2. 二进制趣味拓展

  • 二进制秘密信息:用5位二进制给字母编码(A=00001, B=00010...),写一段只有你和朋友懂的秘密信息
  • 二进制生日:把你的出生年份转换成二进制,看看是什么样子
  • 二进制手指魔术:用手指二进制快速计算1-31以内的加法

3. 下节课预告

下节课我们将学习第14课的内容,继续探索C++的奥秘,敬请期待!

📝E 评价 Evaluation(15分钟)

1. 课堂小测(10分钟)

5道难度递增的选择题 + 3道判断题,限时完成。题目覆盖:二进制规则、位权、除2取余法、代码关键填空。

2. 学习反馈(3分钟)

请学生用一句话总结今天学到的最重要的知识,或提出一个还没弄懂的问题。

3. 知识点回顾(2分钟)

本课主线:小白鼠故事→二进制规则→位权→除2取余法→权重累积法代码实现。一句话总结:"二进制就是用0和1,逢二进一,位权是2的n次方,转换用除2取余法。"

🧠本节课知识点体系总览

本节课共涵盖 3大模块、12个核心知识点,其中 重点 标注的为必须掌握的核心内容。

3
知识模块
12
核心知识点
5
重点知识
📦 模块一:二进制基础概念

1. 二进制的定义 重点

二进制是一种以2为基数的计数系统,只有两个数字:0 和 1。每一位的计数规则是"逢二进一"。

0, 1, 10, 11, 100, 101, 110, 111, 1000...

2. 十进制与二进制对比

十进制有0-9共10个数字,逢十进一;二进制只有0和1,逢二进一。两者只是表示方式不同,数值大小可以互相转换。

十进制 5 = 二进制 101

3. 位权的概念 重点

二进制数的每一位都有不同的"权重",从右往左依次是 1, 2, 4, 8, 16, 32... 即第n位(从0开始)的位权是2的n次方。

位权:2⁰=1, 2¹=2, 2²=4, 2³=8, 2⁴=16...

4. 二进制转十进制(位权展开法)

将二进制数的每一位乘以对应的位权,然后相加,得到十进制数。

1011 = 1×8 + 0×4 + 1×2 + 1×1 = 11
🔄 模块二:十进制转二进制(除2取余法)

5. 除2取余法原理 重点

将十进制数不断除以2,每次记录余数(0或1),直到商为0。最后将所有余数从下往上(逆序)排列,就是二进制结果。

除2 → 记余数 → 商继续除2 → 直到商为0 → 余数逆序排列

6. 为什么余数要逆序排列?

第一次除以2得到的余数是二进制的最低位(最右边),最后一次得到的余数是最高位(最左边)。所以要从下往上读,才能得到正确的顺序。

先得的余数 = 低位,后得的余数 = 高位

7. 手动转换练习要点 重点

①每一步都要写清楚商和余数;②余数只能是0或1;③商为0时停止;④最后从最后一个余数往前读;⑤可以用位权展开法验证结果是否正确。

验证:11011 = 16+8+0+2+1 = 27 ✓
💻 模块三:C++代码实现(权重累积法)

8. while循环 重点

while循环在条件为真时重复执行代码块。本题中 while(n > 0) 表示当商n大于0时继续循环,n变为0时停止。

while(条件) { 循环体 }

9. 取余运算 % 和整除 /

% 是取余运算,n % 2 得到n除以2的余数(0或1);/ 是整除运算,n / 2 得到n除以2的商(整数部分)。两者配合实现除2取余法。

27 % 2 = 1(余数),27 / 2 = 13(商)

10. 权重累积法原理 重点

用一个十进制整数result的每一位来存储二进制的每一位。weight变量记录当前位权重(1,10,100...),每次循环把余数×weight累加到result中,然后weight×10升级。

result += 余数 × weight; weight ×= 10;

11. 为什么不需要数组和逆序?

因为weight从1开始递增,先得到的余数乘以1放在个位(二进制最低位),后得到的余数乘以10放在十位,乘以100放在百位... 余数自然按从低位到高位的顺序排列,所以不需要数组存储,也不需要逆序输出!

个位=最低位,十位=次低位,百位=第三位...

12. 变量跟踪与调试方法

调试循环程序时,可以用"变量跟踪表"记录每次循环后各变量的值。本题跟踪 n(商)、remainder(余数)、weight(权重)、result(结果)四个变量,能清晰看到程序的执行过程。

循环次数 | n | 余数 | weight | result

🔗知识点关联图谱

🏠 核心目标:十进制 ↔ 二进制转换
基础概念
二进制定义 · 位权 · 逢二进一
转换方法
除2取余法 · 位权展开法 · 逆序排列
代码实现
while循环 · 取余整除 · 权重累积法
三大模块层层递进:理解概念 → 掌握方法 → 代码实现,形成完整的学习闭环

📝完整代码参考(水果店标签打印机)

#include <iostream> using namespace std; int main(){ cout << "=== 小航的水果店标签打印机 ===" << endl; cout << "请输入苹果的数量(十进制):" << endl; int n; cin >> n; int result = 0; // 存储二进制结果(用十进制整数的数位表示) int weight = 1; // 当前位的权重(1, 10, 100, 1000...) // while循环:除2取余,权重累积 while(n > 0){ int remainder = n % 2; // 取余数(0或1) result = result + remainder * weight; // 余数放到对应数位上 weight = weight * 10; // 权重升级(1→10→100...) n = n / 2; // 更新商 } cout << "二进制标签是:" << result << endl; return 0; }

变量跟踪表(以输入27为例)

循环次数n(商)余数weightresult(结果)
初始27-10
第1次131101(1×1)
第2次6110011(1×10+1)
第3次30100011(0×100+11)
第4次11100001011(1×1000+11)
第5次01-11011(1×10000+1011)

💡可拓展授课知识点与思路

拓展A:二进制的历史与莱布尼茨

二进制由德国数学家莱布尼茨在17世纪完善。他受到中国《易经》八卦的启发,认为阴阳两仪与二进制的0和1有异曲同工之妙。可以给学生展示八卦图,让学生发现八卦的阴阳组合与二进制的对应关系。

拓展B:更多进制的探索

除了二进制和十进制,生活中还有其他进制:十二进制(一年12个月、一打12个)、六十进制(一分钟60秒、一小时60分)、十六进制(计算机中常用,0-9加A-F)。可以引导学生思考:为什么不同场景用不同进制?

拓展C:权重累积法的原理深化

为什么用 weight = weight * 10?因为我们用一个十进制整数的每一位来存储二进制的每一位。十进制的"个位"对应二进制的最低位,"十位"对应次低位,以此类推。引导学生理解"用一种进制的数位存储另一种进制的数位"这个巧妙的编程思想。

拓展D:二进制转十进制的代码实现(反向转换)

作为学有余力学生的拓展,用位权展开法实现二进制转十进制。输入一个二进制数(如1011),逐位取出数字,乘以对应的位权并累加。可以引导学生思考:如何逐位取出二进制数的每一位?(用 %10 取最后一位,/10 去掉最后一位)

拓展E:变量的生命周期与调试思维

result 和 weight 两个变量在循环中如何变化?每次循环后各变量的值分别是什么?引导学生用"变量跟踪表"来追踪变量变化,培养调试思维。这是编程中非常重要的能力——能在脑中"运行"程序,预测每一步的结果。

拓展F:故意写bug让学生debug

可以故意写一段有bug的代码(如忘记 weight = weight * 10,导致所有余数都累加到个位上),让学生运行后发现结果不对,然后通过变量跟踪表找出问题所在。培养学生的排错能力和批判性思维。

拓展G:n=0的边界情况处理

当输入n=0时,while(n>0)不执行,result保持为0,输出0。这在数学上是正确的(十进制0对应二进制0),但可以引导学生思考:如果要求输出"0000"这样的固定位数怎么办?需要加什么处理?(可以用if判断n==0时输出特定格式)

📐板书设计

第13课 二进制的秘密
一、二进制规则
  只有0和1,逢二进一
  位权:1, 2, 4, 8, 16...(2的n次方)

二、十进制→二进制(除2取余法)
  27÷2=13余1 → 最低位
  13÷2=6 余1
  6÷2=3 余0
  3÷2=1 余1
  1÷2=0 余1 → 最高位
  结果:11011(从下往上读)

三、代码实现(权重累积法,不用数组!)
  while(n>0) {
    r = n % 2;     // 取余
    result += r * weight; // 累加
    width *= 10;     // 权重升级
    n /= 2;       // 更新商
  }

⚠️教学注意事项与常见问题

时间把控

建构环节的代码填空可能超时,需提前准备好代码框架投影,减少学生输入负担;手动转换练习控制在2-3题,不宜过多。

概念难度

位权是核心难点,一定要花足够时间讲透,不能急于进入代码。可以用"水果店的苹果数目"(512,256,128...)作为直观的位权参考。

代码填空设计

填空点控制在3个(%2、×10、/2),重点理解权重累积法原理,语法细节预先写好,降低数组薄弱学生的认知负担。

硬件准备

确保每台电脑都有C++编译环境,课前测试运行无误;代码填空练习纸提前打印。

差异化教学

对于理解较慢的学生,可以提供"半完成代码",只需要填1-2个空;对于学有余力的学生,布置二进制转十进制的拓展任务。

📊评价标准

评价维度优秀(A)良好(B)需努力(C)
二进制概念能准确说出二进制规则和位权含义,能举例说明能说出基本规则,位权理解基本正确对二进制规则模糊,位权概念不清
手动转换除2取余过程完整正确,逆序无误,能自我验证转换过程基本正确,偶有计算错误转换过程不完整,逆序经常出错
代码实现独立完成所有3个填空,代码运行正确,理解权重累积法原理能完成大部分填空,少量错误需提示填空困难,需要大量帮助
课堂参与积极参与故事讨论、手指游戏、代码互评能参与课堂活动,偶尔主动发言参与度低,需要老师提醒

🔄教学反思(课后填写)

1. 学生对哪个环节最感兴趣?哪个环节最吃力?

(课后记录:小白鼠故事/手指游戏/代码填空...)

2. 权重累积法学生理解了吗?需不需要补充数组方法作为对比?

(课后记录:...)

3. 时间分配是否合理?哪个环节需要调整?

(课后记录:...)

4. 下节课需要复习或补充什么内容?

(课后记录:...)