时间:2024-08-31
陈丹亚
摘要:本文以《数据与计算》第三章3.4节《分支结构算法实现》的教学过程为例,以“一元二次方程求解”为学习问题,建构问题化学习教学模式,以“呈现问题è分析问题è推进问题è解决问题è总结问题è拓展问题”为实施路径,让学生在问题的解决中,层层深入的认识选择结构,完善程序。旨在让学生通过对某“个”实例的分析,找出分支结构的规律性问题,归纳出选择结构的一般格式,实现从“个”到“类”的提升。文中详细分解问题化学习实施路径中的每个环节,总结设计意图和注意事项,以希望对高中信息教学中问题化学习的教学策略的应用提供参考。
关键词:分支结构;问题化学习;课堂建构;实施路径
本课的授课对象为必修1《数据与计算》的高一学生,大多学生对利用信息技术解决实际问题充满好奇心,乐于和同学一起进行问题的分析与探讨。急切地想编写程序解决生活中更为复杂的实际问题,但是他们现有的知识结构仅仅掌握Python常量、变量、函数、书写表达式等基础知识,仅限于解决顺序结构的问题,将实际问题转化为算法程序的能力也有待提高。经过本课学习后,学生应达到课程标准“计算思维水平2”中的部分要求,在日后实践中,能认识到分支结构在学习生活中的应用价值,自觉运用分支结构解决问题。
针对这一学情和教学目标,我们以问题为导向,按照问题化学习模式进行如下实施:
一、呈现问题,引入主题
提问1:生活中大家有碰到过哪些选择性问题吗?实例应用的选择结构类型一样吗?
师生互动举例。(略)
提问2:在前面的章节学习中,我们已经分析了“一元二次方程求解”算法的流程图实现,很明显也是一种分支结构,那又该如何实现呢?
设计意图:创设情境,导入主题,联系生活实例让学生产生共鸣,让学生感受到选择结构是用于判断给定的条件,根據判断的结果控制程序执行流程,分为单分支、双分支及多分支选择结构。
二、分析问题,抽象建模
提问3:第二章学习时已经分析了“一元二次方程求解”算法的流程图实现,现在要求输入a,b,c的值,有解的情况下输出解,无解的情况下输出“无解”,程序该如何实现?
自学导学案中的if语句的语法要点,先尝试用if语句实现两种情况的求解程序。
1、用流程图表达分支算法
(1)明确判断的条件表达式
(2)梳理条件成立和不成立时的执行步骤
(3)画出算法流程图
2、Python 语句实现的语法格式归纳:
(1)双分支结构:有if,也有else,用来处理二选一的情况
If语句的语法格式如下:
if <条件表达式> :
<语句块1>
else:
<语句块2>
双分支if语句的执行过程是:首先计算条件的值,如果条件的值为“真”,则执行语句1后结束if语句;如果条件的值为“假”,则执行else后边的语句2后结束if语句。
(2)单分支结构:只有if,没有else
If语句的语法格式如下:
if <条件表达式> :
<语句块>
单分支if语句的执行过程是:首先计算条件的值,如果条件的值为“真”,则执行语句后结束if语句;如果条件的值为“假”,则立即结束。适合只需要对条件为真的情况做出处理的程序。
设计意图:学生通过第二章的学习铺垫,已经理清了一元二次方程求解的思路和求根公式的表达式书写,所以只要应用合适的if语法结构,就可以完成实践1的目标设定。
注意事项:因为学生是第一次接触Python的if语句结构,教师需要总结语法格式书写的注意事项与要点。特别强调Python中的缩进是强制的,缩进的语句视为代码块(以缩进标记程序结构),通过缩进,Python能够识别出语句是隶属于if(else)的分支。这也是以后解题划分结构的重要依据。
实践1:依次输入a,b,c的值,有解的情况下输出解,无解的情况下输出“无解”,代码如下:
a=int(input(“a=”))
b=int(input(“b=”))
c=int(input(“c=”))
d= b**2-4*a*c
if d>=0 :
x1=(-b+ d**0.5)/(2*a)
x2=(-b-d**0.5)/(2*a)
print(“x1=”,x1, “x2=”,x2)
else:
print(“无解”)
三、推进问题,提升难度
提问4:如果要实现依次输入a,b,c的值,程序运行后能分别判断输出2个不同的解,2个相同的解,无解的三种情况的算法,程序又该如何实现?
1、Python 语句多重分支实现的语法格式归纳:
(1)块if语句结构
if <条件1> :
<语句块1>
elif <条件2> :
<语句块2>
……
elif <条件N-1> :
<语句块N-1>
else:
<语句块 N>
教师总结归纳:首先计算条件1的值,如果条件1的值为“真”,则执行语句1后结束if语句;否则计算条件2的值,如果条件2的值为“真”,则执行语句2后结束if语句;……;条件1至条件n-1的值都为“假”时,最后执行else子句的语句n。
级联式if语句在语法上是一条语句,只是在else子句中包含了if语句,而该if语句的else子句又包含了if语句,以此类推。
四、解决问题,实践应用
实践2:在实践1的基础上,优化算法,应用块if语句结构,实现依次输入a,b,c的值,程序运行后能分别判断输出2个不同的解,2个相同的解,无解的三种情况的算法。
a=int(input(“a=”))
b=int(input(“b=”))
c=int(input(“c=”))
d= b**2-4*a*c
if d>0 :
x1=(-b+ d**0.5)/(2*a)
x2=(-b-d**0.5)/(2*a)
print(“x1=”,x1, “x2=”,x2)
elif d==0 :
x1=(-b+ d**0.5)/(2*a)
x2=x1
print(“x1=x2=”,x1)
else:
print(“无解”)
五、总结问题,探索规律
实践3:编写程序:输入身高和体重,求BMI指数。
要求:输入身高(米)、体重(千克),求BMI指数(体重除以身高的平方),IBM值低于18.5 時输出“偏轻”; 18.5-25 输出“正常”; 25-28 输出“过重”; 28-32 输出“肥胖 ”。
设计意图:实践3的要求相对实践2增加为4种情况的判断,学生在掌握三种情况的块if语句书写的前提下应该是很容易完成要求的,进一步提升学生的迁移能力。
提问:多分支结构在哪些生活情景中有应用?大家是否可以应用本节课所学知识编写程序解决?
【应用一】出租车费计算问题
【应用二】电费计算问题
【应用三】超市打折问题
设计意图:本课在对学生核心素养的培养重在通过对现实问题的分析、抽象与建模,形成分支结构算法概念,并使用计算机程序解决问题。总结利用计算机解决问题的过程与方法,并迁移到与之相关的其他问题解决中。
六、拓展问题,激发思考
提问5:多分支的选择结构是不是只有块if语句结构呢?能不能分解为多个双分支或单分支结构?语法格式又该如何调整?
教师给出嵌套if结构语句实现的导学案,学生自主学习,鼓励学生思考如何用嵌套if语句将一元二次方程三种情况求解的程序进行结构调整,体验嵌套if语句格式和块if语句的区别。
设计意图:不同的分支结构有不同的语法格式和适用场合。牢固掌握选择结构程序设计,是学习程序设计的基本要求,是学会编写结构清晰、易读易懂的程序的前提。
程序设计的学习主要围绕环境、语言和应用三个方面的知识和内容展开,语言视图的学习,其核心主要在于语言规则本身。从教学方式来看,以往的程序设计语言规则的学习往往采用三步走的形式,即“提出问题,给出解答,再加点解释”,特别是“解释”,往往过多的纠缠于程序设计语言的语法知识的细枝末节之中,学生较少体验到解决问题的成功的喜悦。
本节课运用了问题化学习的教学模式,首先选择学生已有的知识架构贴近的“一元二次方程求解”问题引入,分析解决这个问题的“程序”。遵循学生认知能力的发展规律,从简单的双分支逐渐提升到多分支,在尝试补充程序模板中关键代码的过程中,逐步认识If选择结构,并引导学生提取出If语句的基本格式,最终得到功能强大If语句的指令集。最后进行拓展应用,将现实生活中各种多分支问题问题归类,学以致用,让学生感受编程学习的魅力。
问题化学习的教学模式在有限的课堂教学时间内,聚焦问题,层层递进,学生通过自主发现问题、持续探索问题、建构问题系统、合作解决问题的过程,完成知识的探究,有助于学生从整体上认识选择结构,并不断向纵深发展。这是使用传统的讲授法是无法完成的。这一课堂建构模式与实施路径值得在后续的章节教学中推广应用。
参考文献:
[1]中华人民共和国教育部.普通高中信息技术课程标准:2017年版[S].北京:人民教育出版社,2018.
[2] 徐谊.基于学习方式变革的课堂转型探索.现代教学,2019(10A):25-26.
[3] 王天蓉.问题化学习的原理和方式.现代教学,2019(10A):27-28
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!