山东省实验中学 周光庆
当算法作为重要内容第一次被列入高中数学的必修课程时,曾引起了强烈的反响。其中一些教师持不理解的态度,如有的教师认为这些内容缺乏“数学味”,属于信息技术课程的内容,所以安排在数学课程中是不合适的,笔者也有同感。这一首次出现在中学数学课程中的内容,虽给一些教师造成了巨大的压力,成为教师教学的难点,但也激发了一些教师极大的兴趣,为教师发挥创造力和施展个人特长提供了很好的机会。随着算法初步的教学,笔者逐渐认识到:算法的引入具有必要性,它理应受到“欢迎”,而不是被“排斥”。
一、对引入算法初步的必要性体会
(一)算法是计算机科学的核心
就像人类发明机器是为了拓展人的生产能力、发明交通工具是为了拓展人的行动能力一样,计算机的发明是为了将人的抽象思维能力拓展到自身以外。算法就是将人类的思维能力形式化为计算机可以执行的步骤,使得若干微小的电子元件代替人类进行思考。具体过程是先将解决问题的一系列步骤写成算法,再翻译成某种程序设计语言在计算机上实现,就得到了我们每天操作的程序块。因此,算法是计算机科学的核心,换句话说,算法是计算机程序的基础。没有算法,计算机的存在也就失去了意义。
(二)科学计算成为第三种科学研究方法
随着社会和科学技术的发展与进步,科学的两大研究方法──理论和实验越来越多地表现出局限性。许多研究的对象既不可能用理论精确地描述,也不可能通过实验手段来实现,而计算方法与之相比,有其独到之处。例如,医生想知道病人大脑或其他器官的一些情况,他无法简单地将病人解剖来进行观察,但可以利用计算机来处理超声波或核磁共振信号,并建立可视图像;经济学家想为政府制定经济政策提供辅助信息,若采用在局部区域内制定实验性的经济政策的方法,可能会给该区域造成巨大的损失,但通过建立经济行为的算法模型,模拟各种经济现象,则可能得到理想的结果。
(三)计算思维时代的到来
如今,我们的生活方式正在被计算机和网络日益改变着。更加重要的是,计算机不仅在形式上改变着我们的生活方式,而且从思维的深处改变着我们认识世界、改造世界的方式,对我们如何思考所面对的问题和如何解决问题都产生了深刻的影响。
由此可见,算法初步引入中学数学教学是符合当今我国的教育状况和适应时代发展的要求的,如果仅仅在计算机学科中设置,会得不到应有的普及和重视,现在将其纳入数学教材中,情形就截然不同了,由于受高考指挥棒的影响,广大师生会对这一章的教学给予足够的重视。不过,任何问题都有两方面,在中学数学中加入这些内容,会大大增加教师的教学压力,教师需要重新学习,这对于许多年龄较大的教师是一种考验,同时大大加重了学生的学习负担,因为凡是在高考中涉及的内容,只要到了中学教师手里,都会把重量加大,往往与《课程标准》的要求相去甚远。但反过来考虑,教育的发展离不开不断的改革,只要教师不断提高认识,把握好高考的要求,一切都会进入一种良性的循环。从实际的教学中,笔者也感觉到,如果只让学生掌握算法的概念,达到《课程标准》的要求,也并非困难之事。
二、对现行教材的体会
由于算法初步一章首次出现,在教材编写上不可避免地会出现这样那样不尽如人意的地方。以数学B版教材为例,算法初步一章内容的编排与设置倾注了编写者莫大的心血。从总体上分三大部分,思路清晰,符合《课程标准》的要求,重点突出,难点适当,但在有些地方还需要进一步完善和提高,比如,在少数地方出现错误,习题的设置出现层次不清楚,许多题目出现重叠,练习题的数量偏多,对Scilab语言的使用和介绍有不一致的地方,如在语句中何时加逗号,何时加分号,输出语句何时用print(io%(2),变量),何时直接写输出变量,等等。
三、对算法教学的体会
在数学课程中,算法的教学更应该关注的是算法对问题的抽象过程和算法的构建过程。在这个过程中,要使学生着重理解算法的“算理”,同时体会算法的程序性、明确性、有效性和有限性等特点,学习设计和描述算法以解决实际问题和与人交流,发展有条理的思维和表达能力,提高逻辑判断能力。因此,在数学课程中,应该尽力让学生在简单的计算机语言环境中学习算法的基本知识,而把有效设计、实现、调试和测试程序的任务留给信息技术等其他课程。从这个层面上说,在教学中应该把程序框图作为描述算法的主要工具。另一方面,进行算法的教学又不能完全脱离计算机程序设计。这是因为,我们要讲的算法不是广义的解决现实中一切问题的算法,而是“用计算机来解决某一类问题的程序或步骤”。这就要求学生在设计算法时,调整以往的解数学题的思维方式,设计出明确、有效、有限、可以转化为计算机程序的算法步骤。同时,还要理解一些在计算机程序设计中所惯用的做法,主要是设置变量和赋值。例如,在求前100个正整数的和的“累加器”中,包含算法步骤“sum=sum+n”“n=n+1”,它们表示的不是相等,而是赋值过程,但很多学生在初学算法时都难以理解。为了解决这个问题,可以在进行三种基本逻辑结构的教学时,结合具体例子帮助学生学习如何设置变量和进行赋值。
笔者认为在算法教学的过程中,教学的重点是算法的三种基本逻辑结构,即顺序结构、条件结构和循环结构。
解决同一个问题,可以有不同的算法;同一个算法稍加改造,可以用于解决不同的问题。对算法的优化或改造,是帮助学生理解算法的通用性、有效性等的良好素材。对算法的优化或改造,在算法的程序框图上进行,也有利于学生看清算法的结构和更好地把握“算理”。
例如,让学生改造求1+2+…+100的值的“累加器”的程序框图表示(如下图所示)。

(1)求1+2+…+m(m∈N*)的值的过程;
(2)求3+5+…+(2m+1)(m∈N*)的值的过程;
(3)输出1,1+2,1+2+3,…,1+2+3+…+100的过程;
(4)求2+22+…+2100的值的过程;
(5)求使2+22+…+2n(n∈N*)的和大于100的最小正整数n的过程。
其中,(1)将求前100个正整数的和推广为求前m个正整数的和,只需在循环结构前给定变量m的初始值,并将循环的终止条件变为“n>m?”即可;(2)也是求m个正整数的和,但起始的数字变成了3,终端的数字变成了2m+1,“步长”变成了2,这时需要改变变量初始值和循环的终止条件,循环体变为“sum=sum+(2n+1)”;(3)在循环体中增加输出框“输出sum”,就可以得到前n(n=1,2,…,100)个正整数的和了;(4)需要将循环体变为“sum=sum+2∧n”;(5)除了需要将循环体变为“sum=sum+2∧n”,还需要将循环的终止条件变为“sum>100?”。
如果学生能解决以上问题,以下问题便会迎刃而解:(1)求12+22+32+…+1002的值的过程;(2) 求13+23+33+…+1003的值的过程;(3) 求1+3+5+7+…+99的值的过程;(4) 求 的值的过程;(5) 求 的值的过程。
诸如此类的例子是大量存在的,又如“判断某一年是否为闰年”的问题,根据“算理”的不同有不同的算法,可以让学生寻求最简单的算法;将“除2取余法”的程序框图稍加改造,就可以得到“除k取余法”的程序框图;等等。通过这样的练习,学生不仅可以更好地把握算法的“算理”,而且也能体会到算法在解决问题中的强大威力。同时,通过这样的练习,可以大大激发学生的学习积极性,对学生的创新意识的培养和创新能力的提高也具有很强的现实意义。 |