黄丽华
当今世界提高学生的核心素养已成为教育界的共识,如何发展学生的学科核心素养,是教师迫切需要解决的问题。教育部颁布的《普通高中信息技术课程标准(2017年版)》明确了高中信息技术学科核心素养是由信息意识、计算思维、数字化学习与创新、信息社会责任等组成。笔者结合自身的教学实践,以《循环结构的综合应用》一课为例,探究如何在高中信息技术课堂教学中培养学生的学科核心素养。
教师展示这段时间所完成的比较有代表性的探究任务。
(1)100~999间符合条件的水仙花数。
(2)实现了百钱买百鸡的经典数学问题。
(3)逐行逐列地绘制了规则的图案。
(4)优美的数学函数图像的动态绘制。
复习循环的基本语法结构及for循环与do loop循环在实现上的异同,体验程序设计的基本过程和基本方法及相关的拓展应用。
信息技术学科核心素养的培养对知识点的要求不再是一味要求学生掌握某一种固定的操作方式、某一些简单的语法格式,而是强调利用信息技术解决一系列问题。这就要求教师在教学中不但要让学生系统掌握所学知识,还要让学生把知识灵活地运用到一类问题当中,会迁移,会举一反三。
教师展示“谁是冠军”的问题描述。
探究任务一:“谁是冠军”。
在2018年底我校第四届教职工冬季趣味运动会的女子甲组“滚铁环”项目中只有五位女教师报名参加,为了增加趣味性,当时在赛前就有人让他们预测比赛结果。
A选手说:“B第二,我第三。”
B选手说:“我第二,E第四。”
C选手说:“我第一,D第二。”
D选手说:“C最后,我第三。”
E选手说:“我第四,A第一。”
比赛结束后,每位选手都说对了一半,无并列名次,请编程确定比赛的名次。
(1)正确描述问题,引导学生思考,合理组织数据,强化信息意识。首先要强化学生信息意识,提高信息敏感度,引导学生能够根据解决问题的需要,自觉寻求合适的方式对已有的复杂的信息进行处理,能够准确地描述问题,获取有价值的信息,并将选手名次问题逻辑地分解为若干求解步骤。每一位选手都是1至5的名次中的某一个名次,因此每个选手的名次需要枚举1至5,共五位选手,所以需要五重for循环来实现枚举。
(2)抽象数据类型,表达复杂逻辑关系,寻找自动化方案,启迪计算思维。著名心理学家鲁宾斯指出:“任何思维,不论它是多么抽象的和多么理论的,都是从观察分析经验材料开始。”信息无所不在,关键是需要学会观察和判断。描述材料中五位选手比赛,每位选手说了两句话,但只有一句是对的,因此“每位选手要么前句对要么后句对”。
例如,A选手说:“B第二,我第三。”
若前句是对的,后句就不对:(B= 2 And A <> 3)
或者前句不对,后句对:(B <> 2 And A=3)
因此A选手的逻辑表达可以是:(B=2 And A <> 3) Or (B <> 2 And A=3)
同理,其他選手的逻辑表达可以相应构建,他们之间是逻辑与(and)的关系。
通过对“谁是冠军”提取问题的基本特征,借助题目逻辑推理的分析,抽象数据,数字化,进而建立相应的模型,学生将所学知识迁移到真实生活情境中进行分析,有助于培养解决问题的能力,提高逻辑思维能力。
(3)引导学生挖掘程序设计中隐含的约束条件,提升计算思维。
A、B、C、D、E五位选手必是1至5的五个名次当中的一个,不重复,那么1至5的5个数字中与A、B、C、D、E五位选手必然存在某种一一对应的关系,所以有A*B*C*D*E=120这样一个隐性条件或表达为A+B+C+D+E=15。
在学生求解问题遇到瓶颈时,教师要引导学生分解细节,把握数据间内部关系,抓住关键问题,挖掘出数据中的深层含义。类似选手名次这样的逻辑推理题,题面复杂,我们要让学生学会从复杂的题面中抽取有价值的信息,细致地分析,挖掘信息中隐性的约束条件,形成可行的解决方案并用计算机语言表达出来,就可以实现问题的解决。这样的解决问题的思路,让学生逐渐地明确信息技术学科要推理严谨和计算精确,进一步提高学生的知识积累与知识迁移能力,让学生不断在实践中强化,灵活地将课堂所学应用到生活中,逐步形成稳定的思维方式,并把这种意识、思维和习惯迁移到其他课程的学习中乃至生活的方方面面,将使其终身受益。
教师展示“n阶乘末尾0的个数”的问题描述。
探究任务二:n阶乘末尾0的个数。
(1)算法1分析。
a).求1*2*3*…*n的值,即n阶乘存放到s中。
b).求s的末尾有几个0。
算法1,学生完成后发现当n=13时溢出了,超出了long的最大取值范围。当前算法有其局限性,这时就应该及时鼓励学生思考更好的算法,以解决更大数值范围n阶乘末尾0的问题,引导学生自主探究本题的更优算法。
(2)算法2分析。
引导学生思考0产生的原因,要使其末尾有0,必然是2*5=10,而1~n中2的因子已然足够多,我们就只需要找5的因子个数即可。1~n之间每个数包含了多少个5的因子,则n阶乘末尾就有几个0。而能被因子5整除的数必然是5的倍数,所以问题又可优化为只需要枚举小于等于n范围内的i (5,10,15,20,…)的每一个数中,当前的每一个i能被多少个5整除即可。该算法的时间复杂度为O(nlog5 n)。