APP下载

逆向思维在C++程序设计教学中的应用

2012-06-17张雪伍常晋义

常熟理工学院学报 2012年6期
关键词:数组程序设计逆向

张雪伍,常晋义

(常熟理工学院 计算机科学与工程学院,江苏 常熟 215500)

逆向思维是对司空见惯的似乎已成定论的事物或观点反过来思考的一种思维方式。C++程序设计中的诸多抽象复杂的概念和规则,除了用传统思维方式去理解外,还可通过逆向思维的方式进行思考,以加深学生对知识的理解,促使其进行创造性、多角度的主动思考,培养其创新能力,增强创新意识。

一、逆向思维教学的基本思想

逆向思维是一种重要的思维方法,具有普适性、批判性和新颖性。它在研究问题时,能突破常规,从常规思维的反向进行探索,除了加深理论知识的理解和活用外,有时还能在常规思维方式无法求解的情况下,获得出奇制胜的效果。

逆向思维的思考方法主要有:反转型逆向思维法,即从已知问题的相反方向进行思考;转换型逆向思维法,即变换问题的思考角度的思维方法。在C++程序设计的教学过程中,对抽象、难理解的概念和问题,在常规思维的基础上,引导学生通过逆向思维,从反向、侧面、缺点利化的角度对问题进行充分理解,通过肯定、否定的思维方式,加深问题理解、增强思维的灵活性,提升学生的创新能力。

C++程序设计课程的主要内容可以分成过程程序设计和对象程序设计两部分。C++程序设计课程内容多且抽象难懂,因此应根据开课学生专业和基础知识掌握情况对教学内容进行适当的裁剪。

过程程序设计部分主要是讲述C++程序语言的基本语法规则,教学过程中需要强调记忆且很难实施逆向思维教学;面向对象程序设计部分着重强调现实世界的抽象、表达以及基于它们的程序设计,具有较强的思维灵活性,使用传统的教学方法只能从正面进行讲授,若将其与逆向思维相结合,从问题的反面或侧面进行教学,会收到更好的教学效果。

二、逆向思维的教学应用

(一)反转型逆向思维教学案例

反转型逆向思维,即从事物的相反方向进行思考,从而使问题得到很好的解决。在C++程序设计教学过程中,主要针对较难理解的概念和语法规则,通过与常规教学方法相结合,从问题的反方向来进行思考,加深问题的理解和掌握。

1.类与对象逆向思维教学

类、对象的概念及其相互关系是面向对象程序设计教学中非常重要的概念之一,对其的理解是否透彻直接影响后面内容的继续学习。

传统的类与对象的教学思路主要是通过类与结构体的对比来说明类的特性,并对类中的数据和方法进行讲授,利用类进行对象构建来演示类与对象的关系、对象的使用方法,如图1所示。采用传统的教学方式讲授,学生虽能够掌握类的概念和使用方法,但对现实世界的抽象过程和类的创建过程比较陌生,很难活用。

图1 传统的类与对象的教学模式

图2 逆向思维的类与对象教学模式

基于逆向思维的类与对象教学模式如图2所示。所采用的教学方式是将现实世界中的同类对象作为教学的起点,分析同类现实对象,并对其进行泛化来构建概念对象,它包含了现实对象的描述属性和动作;基于封装思想构建相应的类,将概念对象的属性和动作转化成类的数据成员和相应的操作方法,并对类的定义和构建方法进行讲授;通过对类进行实例化创建多个对象,通过不同的对象来影射现实世界中不同的现实对象,并通过对象的数据来描述现实对象,利用类方法来模拟现实世界中现实对象的相应动作及其相互关系。基于逆向思维,以真实对象作为教学的起点和归宿,在讲授概念和语法的同时,还重点强调了类的构建过程,从而加深对概念的理解和语法的活用。

2.静态数据成员的逆向思维教学

类的静态成员是C++程序设计语言中一个重要的概念,但由于课时有限,往往采用快速的传统教学方式,即首先介绍静态成员的概念,然后结合一个程序示例进行分析。由于概念本身较难懂,学生对其理解不够深刻,感觉似懂非懂,更谈不上合理的应用。对于此种情况,可以采用逆向思维教学模式进行教学,采取实例—理论—实例的教学方式,即首先通过实例展示静态成员与普通成员的区别,然后结合实例介绍概念和相应的理论,最后再给出一个适合运用静态成员解决的实际问题,并对其进行分析,最后通过静态成员高效地解决问题,进而在传授学生静态成员知识的同时,也教会了学生如何独立地分析问题和解决问题,具体过程如图3所示。

图3给出了基于逆向思维的静态数据成员的教学过程。在CTestClass类中分别定义了静态数据成员和普通数据成员,并给出了相应的操作方法,在main函数中分别创建a和b两个对象,并在设置数据成员前后分别对静态数据成员和普通数据成员进行输出,比较它们的差异;然后结合示例讲授静态数据成员的概念;最后结合仓库管理员统计货物重量的实际问题,对静态数据成员的应用进行分析,并解决问题。

图3 逆向思维的静态数据成员教学模式

(二)转换型逆向思维教学案例

转换型逆向思维是指在研究某一问题时,由于正常解决问题的方法受阻而转换思考角度,从而使得问题得以顺利解决的思维方法。

1.冒泡排序的逆向思维教学

通用的教材中,无论是递增还是递减的冒泡排序均是自顶向下进行的,首先对排序的数列中的第1对数进行沉底交换操作,直至第n对数,完成第一趟;第二趟,仍然从第1对数开始,直至第n-1对数据;如此下去,重复以上过程,直至最终完成排序(n为数的个数)。基于逆向思维,将传统的冒泡排序的操作方法进行逆转,即从底向上的操作顺序,先从第n对数进行冒泡交换操作,然后是第n-1数进行冒泡排序交换,直至第n对数。传统与逆向思维方式的冒泡排序过程如图4所示。

图4 传统与逆向思维方式的冒泡排序

逆向思维的冒泡排序代码:

在实施冒泡排序教学时,先使用传统的冒泡排序方法讲授,在学生掌握了该方法后,对其进行逆向启发,启发他们从另一个角度思考冒泡的操作方向,并结合示例程序对其进行介绍。通过不同思维方式的冒泡排序,可以活跃学生的思维方式,加深其对排序本质的理解,更重要的是可以培养其创新能力。

2.数组筛选的逆向思维教学

对于给定的一个整数数组arr[n],数组中不包括0和1,n为数组元素的个数,输出数组中的所有的合数。常规的思维方式是通过循环对数组中的各个整数进行合数判断,若是合数则放在构建好的临时数组中,最后将其作为计算结果返回。

可以启发学生采用逆向思维进行如下思考:问题要求寻找出数组中的合数,可以从问题的反面来操作,找出数组中的非合数,即素数,并把这些素数从数组中剔除出来,那么原始数组中剩下的数组元素就是问题的解。由于素数有着清晰的定义和算法,实现起来较为容易。

对数组的访问是通过数组下标进行的。常规的循环筛选方向是从第一个元素向最后一个元素进行循环,由于在筛选过程中会删除部分数组元素,致使数组个数发生变化,但循环次数的结束条件和访问数组元素的递增的下标没有变化,当前被删除的元素的下标指示位置会被其后的元素占据,而下标在下一次循环后依然会递增,从而漏掉该元素,数组元素的数目也会减少但循环结束的条件未变,访问数组元素时会产生数组越界的问题。基于逆向思维,将循环方向进行逆转,即从最后一个数据元素向第一数据元素进行循环,访问元素的下标是递减的,筛选过程中删除的元素位于循环的后面,且循环结束的条件是止于第一个元素,因此不会出现遗漏数据元素和数组越界的问题。

基于逆向思维的数组求合数的代码如下:

三、逆向思维教学应注意的问题

(一)逆向思维的主从关系

从教学过程来看,教学内容和问题是思维的对象,学生应该是思维主体,教师是学生思维的引导者。教师思维不能代替学生思维,又不能让学生在别人思维途径上进行模仿,因此要把握好引导的度,在讲授知识的同时,启发学生的逆向思维,引导学生主动地逆向思考,寻找问题的解决方法。

(二)遵循可接受原则

逆向思维教学是比较灵活的教学方式,旨在传授知识的同时,提高学生的思维能力,因此必须针对学生的知识、思维能力和教学内容,做到因材施教,按学生的认知规律,遵循可接受原则,使学生的思维能力得以自然形成。

(三)教师应更新教育观念

教师要充分认识到逆向思维对提高计算机类专业学生素质和技能的重要性。在常规教学方式中,要尽可能多地穿插逆向思维训练,提高学生的思维能力。

四、结 语

逆向思维的思考方式具有很好的启发性,在拓宽学生的思维方式、调动学生的学习积极性、提升其分析问题解决问题的能力、培养学生创新思维等方面具有较大的优势。但是逆向思维教学也存在一定的弊端,主要有:(1)备课时间较长;(2)要求教师对问题有深刻的理解,并具备较强的思维能力;(3)课程的课时要比较充分。逆向思维是一种异于常规思维的思考方式,在将其运用到教学中时,需要根据问题本身的难易程度,与常规的思维教学方式相结合,取长补短,从而在活跃学生思维方式的同时,使教学内容更易理解和掌握,将教学效果提升一个层次。逆向思维教学方式何时、以何种方式与其他教学方法进行有机地结合,取长补短、相得益彰,是一个值得深入研究的课题。

[1]肖明.案例教学法在“C++语言程序设计”教学中的应用[J].计算机教育,2010(6):83-86.

[2]夏承遗,李文杰,孙世温.问题驱动的“C++程序设计”教学方法研究[J].计算机教育,2010(1):122-125.

[3]杜少武,张毅,黄海宏,等.电力电子技术课程的逆向思维教学法研究[J].电气电子教学学报,2007,29(4):94-97.

[4]向华.如何在C++教学中引入初步的设计模式思想[J].长江大学学报(自然科学版),2009,6(2):388-389.

猜你喜欢

数组程序设计逆向
逆向而行
JAVA稀疏矩阵算法
基于Visual Studio Code的C语言程序设计实践教学探索
JAVA玩转数学之二维数组排序
从细节入手,谈PLC程序设计技巧
Excel数组公式在林业多条件求和中的应用
高职高专院校C语言程序设计教学改革探索
寻找勾股数组的历程
PLC梯形图程序设计技巧及应用
逆向工程技术及应用