《计算机程序设计教学中的抽象思维能力培养.doc》由会员分享,可在线阅读,更多相关《计算机程序设计教学中的抽象思维能力培养.doc(3页珍藏版)》请在三一办公上搜索。
1、计 算 机 教 育Computer Education第 3 期2012 年 2 月 10 日27中图分类号:G642文章编号:1672-5913(2012)03-0027-03计算机程序设计教学中的抽象思维能力培养刘卫国,施荣华(中南大学 信息科学与工程学院,湖南 长沙 410083)摘要:提高学生的程序设计能力是计算机程序设计教学需要解决的关键问题。本文结合教学实践,指出学生的抽象思维能力薄弱是重要的制约因素,从教学方法角度提出培养学生抽象思维能力的途径和方法。关键词:程序设计;抽象思维;能力计算机程序设计的教学关键是培养学生的程序设计能力。我们在教学过程中发现,学生的抽 象思维能力薄弱是
2、制约程序能力培养的重要因素。 这里的抽象思维能力可以理解为如何从计算机的 基本工作原理出发,将具体的解题步骤抽象为一 般的解题程序,或者可称为计算机化的思维。人们分析和解决问题的思维活动转化成计算机程序的过程 1。这就决定了在进行程序设计时的思 维方式应该是计算机化的思维,即从计算机工作 的角度来设计操作步骤,使问题一步一步地得到 解决。2程序设计难在哪里直观到抽象的1程序设计的本质“教会”计算机跨越如何解决问题程序设计教学中碰到的普遍现象,是在讲授某一个程序的设计思路(算法)时,学生往往 听得懂,但合上书本,要自己来写程序时就犯 难了,除了记忆性地罗列一些语句外,难以形 成明确的编程思路、编
3、出正确的程序,不知从 何下手。但如果能将问题分解,采用各个击破的 方式,学生就容易理解。这说明学生习惯于直计算机是在程序的控制下自动工作的,完成各种不同的任务,需要不同的程序。但计算机本 身不能形成解决实际问题的程序,而必须由人来 编写。在使用计算机求解问题时,必须从计算机 工作原理的角度,将实际问题的求解过程用计算 机所能理解的程序语言表达成程序,最终计算机 执行程序并在程序的控制之下完成解题任务。从 这个意义上说,程序设计的本质就是“教会”计 算机如何解决问题。程序设计的关键是设计算法。算法是为解决 问题而采用的方法和步骤,如果从计算机完成任 务的角度,一个计算机程序就是利用程序设计语 言
4、对算法的一种实现。本质上讲,程序设计是将观形象思维,面临的主要困难在于直观到抽象、特殊到一般的跨越,所以程序设计教学中如何实现直观思维到抽象思维的转变是需要解决的 关键问题。程序设计反映了利用计算机解决问题的全 过程,在这个过程中离不开抽象思维 2。当用计 算机对问题进行求解时,首先要对问题进行详计 算 机 教 育Computer Education282012细分析,明确问题的要求,然后要抽象成适合在计算机中表示的数据结构和形式化的数学模 型,最后把问题的数学模型或处理需求转化为 有效的算法,并编码实现,从而得到问题的结 果,这就是计算机的问题求解机制。在这个机制 中,面临的主要问题就是对问
5、题进行抽象和形 式化,并构建算法 3-4,这是一个科学抽象过程, 所以抽象思维是程序设计的基础。从提高学生的 程序设计能力上讲,对学生抽象思维能力的培 养十分重要。两个数两两进行比较,使小的在前,大的在后。先考虑第 1 轮比较:x1 与 x2 比较,如果 x1 大于 x2,则将 x1 与 x2 互换,否则不交 换。然后,将 x2 与 x3 比较,如果 x2 大于 x3,则将 x2 与 x3 互换。如此重复,最后将 xn-1 与 xn 比较,如果 xn-1 大于 xn,则将 xn-1 与 xn 互换,否则不互换,这样第 1 轮比较 n-1 次以后,xn 中必定是 n 个数中的最大数。再考虑第 2
6、 轮比较:将 x1 到 xn-1 相邻的两个数两两比较,比较 n-2 次以后,xn-1 中必定是剩下的 n-1 个数中最大的,n 个数中第二大的。3教会学生如何编程序抽象思维能力如此重复,最后进行第 n-1 轮比较:x1 与培养x2 比较,把 x1 与 x2 中较大者移入 x2 中,x1 是最小的数。最后 x 数组按从小到大顺序排序。最后归纳总结如下:用双重循环来组织排 序,外循环控制比较的轮数,n 个数排序需比较 n-1 轮,设循环变量 i,i 从 1 变化到 n-1。内循环 控制每轮比较的次数,第 i 轮比较 n-i 次,设循 环变量 j,j 从 1 变化到 n-i。每次比较的两个元 素分
7、别为 xj 与 xj+1。又如,程序设计中有一类数字问题。数字 问题的提法往往是求某一范围内符合某种条件的 数。这一类问题的算法设计思路如下。针对程序设计的难点,教学中应充分考虑初学者的认知特点,从初学者的角度来理解学生的 学习心态,帮助学生理清思路,展现程序设计的 过程,从而帮助学生建立程序设计的清晰思路。1)采用自顶向下、逐步求精的结构化方法, 将复杂问题进行分解,帮助建立明确的程序设计 思路。结构化方法是一种重要的程序设计方法, 即便在面向对象设计中,它仍是类的内部代码 设计应遵循的重要方法。结构化方法中“自顶向 下,逐步求精”的过程就是将问题求解由抽象逐 步具体化的过程,这种方法符合人
8、们解决复杂 问题的普遍规律,对初学者建立明确的程序设 计思路很有帮助,因此程序设计教学也应充分 利用这一方法。先看将 n 个数排序的问题,可以分为如下 3个步骤。 将需要排序的 n 个数存放到一个数组中(设 x 数组)。 将 x 数组中的元素从小到大排序,即 x1最小、x2 次之xn 最大。 将排序后的 x 数组输出。 其中第步是关键。 以冒泡排序法为例,其基本思路是将相邻的 考虑判断一个数是否满足条件的算法。有时可以直接用一个关系表达式或逻辑表达式来判断,如判断奇数、偶数。但更多的情况无法直 接用一个条件表达式来判断,这时可根据定义利 用一个循环结构进行判断,例如判断一个数是否 为素数。 在
9、指定范围内重复执行“判断一个数是 否满足条件”的程序段,从而求得指定范围内全 部符合条件的数。这里用的策略是穷举。2)从直观入手,帮助构造复杂的程序结构(循环结构),理解计算机解题的特点。 学生的思维能力在很大程度上与其感性经验相联系,他们习惯于直观、具体的思维方式,所人才培养29第 3 期以在程序设计教学中要采用形象直观的方法,充分利用学生已具备的知识,诱发形象思维向逻辑 思维的跃变。例如,循环结构是一种重要的程序结构,也 最能体现计算机解题的特点,但学生往往在构造 循环结构时有困难,主要表现为不清楚循环体要 包括哪些语句、如何设置循环的条件、如何设置 循环变量的初值,等等。如何帮助学生构造
10、复杂 的循环结构是教学的重要内容,为了体现循环结 构的形成过程,可以把问题先用直观的顺序结构 一步一步表示出来,然后再帮助学生寻找规律, 找出重复执行的语句,这些重复执行的语句就是 循环体。这方面的例子是很多的 5。也可以利用数学中的直观概念,适时过渡到 循环结构。例如,累加与累乘问题是最典型、最 基本的一类算法,实际应用中很多问题都可以归 结为累加与累乘问题。下面看累加问题。累加的数学递推式如下。S0 0Si Si-1+X(i i 1,2,3,)其含义是第 i 次的累加和 S 等于第 i-1 次时 的累加和 S 加上第 i 次时的累加项 X。从循环的 角度讲,即是本次循环的 S 值等于上一次
11、循环时 的 S 值加上本次循环的 X 值,这可用下列赋值 语句来实现:S=S+X显然,上述赋值语句重复执行若干次后,S的值即若干个数之和。特例 1 当 Xi 恒为 1 时,即 Si Si-1+1,S 用于计数。特例 2 当 X0 0,且 Xi Xi-1+1(i 1,2,3,N)时,S 为 1 2 3 N 的值。累乘问题的道理是一样的。 递推问题常用迭代方法来处理,即赋值语句S=S+X 或 P=P*X 循环执行若干次。相应的算法 设计思路如下。 写出循环体中需要重复执行的部分。这 一部分要确定两个内容,一是求每次要累加或累 乘的数,二是迭代关系 S=S+X 或 P=P*X。 确定终止循环的方式。
12、一般有事先知道循环次数的计数循环和事先不知道循环次数的条 件循环两种方式,依具体情况而定。计数循环可 用一个变量来计数,当达到一定循环次数后即退 出循环。条件循环可根据具体情况确定一个循环 的条件,当循环条件不满足时即退出循环。 确定循环初始值,即第一次循环时迭代 变量的值。 重新检查,以保证算法正确无误。4结语“授之以鱼,不如授之以渔”。程序设计教学不能仅仅罗列现成的程序,而要从初学者的学习心理和思维习惯出发,站在计算机解题的角度,努力呈现程序的构造过程。在这个过程中,培养学生的抽象思维能力十分重要。参考文献:崔进平. 论程序设计教学与创新能力培养J. 山东教育学院学报, 2004(1): 37-40.张树粹, 张玉林, 谭征, 等. 高级语言程序设计与计算思维能力培养C. 全国第五次程序设计语言发展与教学学术会议、第三 届全国Web信息系统及其应用学术会议暨全国首届语义Web与本体论学术研讨会, 2006.阮一文, 姚朝灼. 论程序设计语言教学与思维方法的培养J. 高等理科教育, 2006(6): 76-79.高敬阳, 朱群雄, 山岚, 等. 贯穿在系列课程中的程序设计能力的培养J. 中国大学教学, 2008(11): 47-48.王力. 程序设计教学中的几个关键问题研究J. 计算机科学, 2008, 35(4A): 361-362.1234 5(编辑:姚彦如)