计算思维与实例相结合为导向的C语言公共课教学研究
2016-02-22任仲晟
□任仲晟
计算思维与实例相结合为导向的C语言公共课教学研究
□任仲晟
C语言程序设计是一门重要的公共基础课,传统的教学过程存在一些弊端,诸如过多地强调语法规则,简单乏味的程序示例等。本文倡导在教学过程中引入计算思维和实例相结合为导向的实例教学法,让学生从现实逐步过渡到抽象的C语言程序世界,掌握用计算机来求解生活中的问题的方法。通过实例教学,培养学生对课程的兴趣爱好,以及学习的主动性和创新性,并最终提高他们的计算思维能力。
计算思维;实例教学;公共课改革
近年来,有关计算思维在程序设计类课程中的研究层出不穷,大量文献都对此进行了探讨。所谓计算思维指的是运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。
一、教学对象分析
作为一门重要的公共课,C语言程序设计课程面向的是广大非计算机类专业的学生。与计算机本专业的学生相比,这些学生无论在知识背景还是在认知程度上,层次差异更加明显。这些学生中的大多数学习C语言的目的并不是成为一名程序员,而是掌握程序设计的基本思想和方法,学习利用计算机解决问题,提高自身逻辑思维能力,一定程度上为学习自己本专业的课程打下良好的基础。此外,自身的学科背景差异,导致很大一部分非计算机专业的学生对C语言课程的兴趣程度不高。
二、计算思维研究
根据周以真教授的论述,计算思维的本质应该是问题的抽象、计算机的映射和自动化的求解。用C语言的观点看:面对一个现实生活中的复杂问题,采用分而治之的思想对其进行划分,亦即将一个现实问题做抽象化的同时进行子问题的分解,利用函数求解子问题,通过程序的逻辑跳转和控制来实现原问题的求解。数据类型、函数、递归等等都是C语言里面的常见概念,故而计算思维与C语言程序设计有着一种天然的联系。但由于计算思维强调的是抽象和自动化,对前文曾经分析过的学生来说,存在一定的距离,故而需要依托另外一种理念来帮助,这种理念就是下文提到的实例导向。
三、实例导向应用
尽管计算思维强调了C语言课程的教学本质和重点难点,但是结合教学对象的实际情况,我们认为,在把握计算思维的同时,更应该坚持面向实例化的教学思路。实例教学更加侧重具体的示例(案例、样例)在教学过程中的应用,它能充分弥补计算思维的不足,将抽象变成具体,由具体到抽象,让学生在具体和抽象之间游刃有余,融会贯通。近年来关于实例教学的研究也有很多,有兴趣的读者可以查阅相关文献。
四、教学内容设计
结合上述分析,我们选取一个具体的例子来描述这二者相结合的C语言公共课的教学。作为教学的实例,题目应当是学生相对熟悉的,这样才能充分调动学生的学习兴趣,激发学生的求知欲望,避免学生由于程序语言枯燥、烦琐的语法规则而失去对学习兴趣。
基于上述考虑,本次选择的实例是“石头剪刀布”小游戏的设计与实现。该实例覆盖的知识点有:数据类型的使用,输入输出函数的应用,某一特定区间范围随机数的产生与使用,循环结构的使用,指针数组的定义与使用,函数的定义与调用等等。这些知识点都是C语言程序设计中必备且重要的,是学习的重点与难点。如果对这些知识点进行单一的讲解,则容易给人支离破碎的感觉,并陷入程序语言语法漩涡的怪圈。我们应该站在全局的高度,通过实例融合各知识点,并引导学生对程序设计的全过程有一个全面的感性认知。
首先,根据冯诺依曼体系结构计算机的要求,程序的数据和指令都必须放置于内存,而后才能逐条指令地分析和执行。我们就可以这么告诉学生:现在我们用C语言和计算机交流,让计算机帮我们做一件事情(能够和人类玩石头剪刀布的游戏)。所以在交流的时候,首先要注意交流的语法规范,才能保证对方能够听得懂,其次既然是让计算机做一件事情(执行一系列的计算),就得先提供数据给它。为了提供数据,我们又该先在内存开辟足够的空间,用于存储数据。那么这个空间该开辟多大呢?为了给不同的数据量身定做一个空间,数据类型的概念和变量的定义就引入了。
其次,平时在玩这个游戏时,我们是用手势来表示不同的对象(石头、剪刀、布),那么在计算机内部,又该如何处理呢?计算机可无法用“手”来表示。计算思维的抽象化在这个时候可以得到体现。我们可以引导学生,对于不同的手势,我们可以利用不同的整数来表达,例如0,1,2分别表示石头、剪刀和布。所以出手势的过程,就相当于产生数字0,1,2的过程。人的手势就用输入来实现,让用户输入一个整数来表达自己的手势。而计算机如何产生一个整数呢?这不就是生成一个0~2区间随机整数嘛!rand()函数就引入了。不仅在手势表示的时候有一个抽象的过程,更重要的游戏规则又该如何表示呢?此时,我们可以进一步引导学生。为了描述游戏过程中的游戏规则,我们可以先在稿纸上画出一张二维表格,如表1所示(输赢从玩家角度描述)。
表1 实例游戏规则表
面对这么一张由行列构成的二维表格,学生便会发现,这不就是一个二维矩阵嘛!既然讲到了二维数组,我们又可以借势引导学生,这个用于描述游戏规则的二维数组又该定义成什么类型呢?观察发现,这个二维数组的每个元素就是玩家与电脑PK的输赢结果。进一步地,我们还可以在表1的基础上做个改进,将“平”“输”“赢”这些字眼改造成“打成平手”“Sorry,你输了”“恭喜你,赢啦”,如此一来,将游戏规则二维数组每个元素看成是一个字符串就是水到渠成的事情了。综上,类似 char*gameRule[]={“打成平手”“Sorry,你输了”“恭喜你,赢啦”}这样的二维指针数组就产生了。
再次,如何描述整个游戏的过程呢?如果照本宣科地念课本,一般就是介绍顺序、循环和选择三种结构,而学生则会陷入它们的语法结构,例如if和else的配对关系,for表达式的描述等等,而忽略了这些结构背后的内在要素。结合“石头剪刀布”游戏,我们可以先让学生回忆并感受一下平时的游戏过程。通常游戏的双方会进行多轮的PK,甚至还会在输赢的基础上弄个奖惩措施。每次PK的过程,都是双方出手势、比输赢、奖惩这三部曲,结合C语言,容易得到这就是一个循环结构的结论。一旦介入到循环结构,又会自然地引导学生思考循环的条件,引入break等机制的描述。这样若干知识点的教学就串在了一起,给人一种天衣无缝的感觉,而不是突兀的语法规则的堆砌。
囿于文章篇幅的关系,本文不再一一列举游戏的其他方面。我们只是希望在此能够抛砖引玉,展示一下计算思维与实例教学二者的结合。这种教学理念有其合理的一面,在未来的教学实践过程中,我们将进一步予以研究,并跟踪学生的学习效果。
[1]朱世敏,孙桂芳,张重阳等.C语言程序设计教学中计算思维的培养[J].Proceedings of Conference on Creative Education(CCE 2014)
[2]李妮.基于计算思维能力培养的C语言程序设计课程改革[J].运城学院学报,2014,32(5):72-74.
[3]刘红霞.基于计算思维的C语言程序设计教学模式改革[J].大学教育,2015,(8):116-117.
[4]潘亚平,徐燕.基于计算思维的计算机程序设计课程的教学改革与实践[J].淮海工学院学报(人文社会科学版),2012,10(23):76-78.
(编辑:王春兰)
G642.4
A
1671-0568(2016)26-0094-02
任仲晟,硕士,福建师范大学讲师。研究方向:数据库理论与应用、数据仓库、数据挖掘、计算机公共课教学改革等。