围绕计算思维能力培养的C语言程序设计课程教学
2015-06-24沈宁
沈宁
摘要:计算思维能力是当今高校计算机基础课程培养的基本目标之一。针对目前C语言程序设计课程的教学现状,探讨对学生计算思维能力的培养,介绍培养学生计算思维能力的教学方法以及教学过程中的具体实施手段。
关键词:计算思维;程序设计;C语言;项目驱动;教学方法
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2015)11-0128-02
Computational Thinking Ability Training in C Language Programming Course
SHEN Ning
(College of Math & Computer Science, Jianghan University, Wuhan 430056, China)
Abstract: Computational thinking is one of the basic goals of training today's computer basic course in university. Aiming at the present situation of the teaching of C language programming course, discussion on cultivating computational thinking ability of students, to introduce the specific implementation means of teaching method of training student's computational thinking ability and calculation in the process of teaching.
Key words: computational thinking; C language; programming; project driven; teaching method
《中国高等院校计算机基础教育课程体系2008》中提出了对大学生计算机应用能力的三大要求是:操作使用能力、应用开发能力、研究创新能力[1]。而C语言程序设计课程是培养大学生应用开发能力和研究创新能力的一门重要课程。
1目前教学现状
由于C语言本身的数据语法结构较复杂、表达式类型众多,而大多数初学者基本没有计算机编程知识,所以,一开始理解起来存在很大难度。同时,传统的教学方法是讲授法,大多注重语句细节等知识点,实践不足,学生往往把重心放在语法语句的学习,忽视了对解决问题和抽象思维能力的培养。
2计算思维的重要性
计算思维是指运用计算机科学的基础概念进行求解、系统设计以及人类行为理解等涵盖计算机科学之广度的系列思维活动。在2010年“第六届大学计算机课程报告论坛”中,陈国良院士指出:人类科学发展的三大支柱是理论科学、实验科学和计算科学,与之相对应得是人们认识世界、改造世界的三种思维方式,即理论思维、实验思维和计算机思维。计算思维能力是大学计算机基础课程教育工程中一个重要的培养目标[2]。而且,近些年来,高校大学生的计算机应用能力普遍提高,故在计算机基础教学过程中,教育的重点由原来的以计算机应用能力培养为主转变为以计算思维的培养为主。
在大学计算机通识教育阶段,我们对计算思维的培养应当有效地融入每一堂课中[3]。C语言程序设计是新生入学第一年学的计算机基础课程,这门课能较好的体现语言级问题的求解方法,也是学生最容易理解计算机求解问题的方法的语言课程,故培养学生的计算机思维能力是这门课的重要目标。
3教学方法改革及计算思维能力的培养
3.1激发学生兴趣
教师在上第一节课时就可以用实例说明C 语言的重要地位,最好选择趣味性很强的例子给学生进行演示,增加学生对C 语言的兴趣,也使学生们也明确了学习的目的和必要性。在实际教学中,不妨多选择一些具有趣味性的问题进行讲解,如 “和尚吃馒头”、“猴子吃桃”、“爱因斯坦阶梯”,“汉诺塔”等一系列有趣且经典的问题,这些充满乐趣的问题,有利于学生带着愉快的心情学习,主动且积极的思考,学完之后也不容易遗忘,还可以达到举一反三的效果。
在平时教学中,学生对与实际生活相关的例子往往很感兴趣,因此,需要从案例设计入手,尽量选择能激发学生兴趣的范例。例如,要学生设计一个计算器程序,能将用户提供的两个操作数完成四则运算。讲完输入输出函数,就可以动手设计了,只不过此时的计算器会一次算出并显示出四则运算的四个结果,不能选择运算的类型。随着内容的深入,讲到选择结构的时候,学生就可以设计一个有着较好交互性的计算器了,这时要根据所输入的运算符做出选择,从而只得到一个结果。有多种方式可以实现,如if语句、switch语句等。当讲到循环时,可以进一步提高交互性。可以实现对多组数据进行四则运算。实现循环的语句有for语句、while语句、 do-while语句。随着教学过程的不断深入,学生循序渐进地设计出不同功能的计算器,从而掌握了相对应的知识点。
3.2抽象思维能力的培养
对大多数学生而言,学习程序设计语言的目的,是为了学习计算机解决问题的思路和方法,而不是为了成为程序员,故教师的重点应放在抽象思维能力的培养上。
3.2.1树立计算思维的概念
在C语言程序设计课程上,培养学生的计算思维体现在对问题的分析和求解能力的培养上。对于刚刚入学不久的学生而言,在学习程序设计课程时往往容易走入误区,把所有的精力放在语句本身,注意力集中在语法的学习上,过于关注语法细节本身,忽略了最重要的事情:大脑的思维方式——编程能力的学习。只会语法,只记住语句而不会分析和解决实际问题,不会灵活运用C语言编程。
针对上述情况,在第一次课上,我们并不讲解C语言本身,而是从计算思维讲起。介绍计算思维是什么,计算思维的重要意义,引导学生树立计算思维的概念。选择一些具有趣味性的问题进行讲解,如 “和尚吃馒头”、“猴子吃桃”、“爱因斯坦阶梯”,“汉诺塔”等一系列有趣且经典的问题,让学生感受计算机分析和求解问题的过程和基本方法,从而让学生在学习的初期,就在主观意识上明确语言程序设计课程的学习目标不仅是语言本身,而是学会如何把实际问题转化成计算机可以解决的问题,利用计算机的方法来解决实际问题。让学生自发的注重计算思维的培养。
3.2.2项目驱动教学
在教学过程中,以“项目驱动、兴趣引导”贯穿整个教学过程,同时结合多种教学方法。
用几个项目贯穿所有的知识点,将零散的语句连在一起。在这种教学方法下,学生学习的时候可以相互关联,学习新知识的时候,还可以复习旧知识,边学边对比总结,从而加深印象和理解。上文提到的计算器程序就是一个典型的范例,随着教学内容的不断深入,学生设计出功能越来越完善的计算器,将顺序语句、选择语句、循环语句这几种主要的控制语句都囊括在其中,比较三者的区别,从而掌握它们的用法。
3.2.3掌握计算思维的方法
程序设计课程教学中有一个常见现象,就是在讲解某个算法时,学生都能听懂,但是要自己写程序就发愁了,不知道从何下手。模仿是学习的第一步,给学生介绍各种典型范例,让学生先模仿,在模仿的基础上进行修改,再发展到自己能够独立编写程序的阶段。教师要帮助学生理清思路,将问题分解,采取自顶向下,逐步求精的结构化方法。
“自顶向下,逐步求精”就是将问题求解的过程由抽象逐步具体化的过程,这是解决复杂问题的一个有效方法,特别适合初学者明确设计思路。
下面以循环结构中数列问题的讲解为例。
循环结构是一种非常重要的控制结构,能很好地体现计算机解决问题的特点,往往也是学生学习的难点。主要的难点集中在循环条件的设置、循环变量初值的设置以及循环体的构造。累加和累乘是数列问题的基础算法。先看累加中最基础的:sum =1 +...+ 100,暂称为基础累加数列,假设我们用for语句实现,分析如下:sum是累加和变量,初值为0,循环变量i初值为1,循环体是sum=sum + i, 每次循环都是做加法,累加项就是循环变量i ,循环语句为
for(i=1;i<=100; i++ ) /* 循环条件 */
sum = sum + i; /* 不断累加 */
这个程序大多数学生都很好理解并能编写出,在此基础上分析sum=1+3+5+7+...+101,学生仔细对比发现,这个数列跟基础累加数列相比,关键的区别在于循环变量的递增规律不同,对应程序语句i++改为i=i+2,循环语句为
for(i=1;i<=101; i=i+2) /* 循环条件 */
sum = sum + i; /* 不断累加 */
再增加难度,分析sum=1-3+5-7+...+101的解题方法。大多数学生经历了前面的积累,已经可以迅速发现本程序的关键在于怎么在循环体中表示数列中项的符号的变化,这里引入符号变量m,初值为1,循环体是两条语句:sum=sum+ i*m, m=-1*m;
循环语句为
for(i=1;i<=101; i=i+2) /* 循环条件 */
{
sum = sum + i*m ; /* 不断累加 */
m=-1*m;
}
再看累乘中最基础的:p=100! 即p=1×2×3×…×100的值。 暂称为基础累乘数列,分析如下:p是累乘积变量,初值为1,循环变量初值为1,循环体是p=p*i ,每次循环都是做乘法,累乘项就是循环变量i ,循环语句为
for(i=1;i<=100; i++ ) /* 循环条件 */
p = p*i; /* 不断累乘 */
在基础累加数列和基础累乘数列的基础上,分析s=1+2! +3! + ... + 100!。这个数列的求解需要综合两者的循环体。教师讲到这里,要启发学生根据基础累加和基础累乘数列分析出数列的循环体,跟前面方法类似,过程不再赘述,循环语句为
for(i=1;i<=100; i++ ) /* 循环条件 */
{
p = p*i; /* p为当此循环的累乘积 */
s= s + p; /* 累乘积p又为当此累加循环的累加项 */
}
在讲课的过程中,既要先讲解典型范例,又要启发学生自己思考,举一反三,这样学生才能把书上的知识消化为自己的知识,灵活灵用,锻炼抽象思维的形成,自己独立编写出程序。
3.2.4发散性思维训练
程序设计课程重点培养学生的计算思维能力,所以要让学生在学习老师分析问题的同时,提出自己分析、解决问题的方法,提倡算法的多样性。鼓励学生不断探索和创新。
讲到选择结构的时候,学生就可以设计一个有着较好交互性的计算器了,这时要根据所输入的运算符做出选择,从而只得到一个结果。学生往往先想到if语句,待他们用if语句编好程序,还可以启发他们用switch语句编写程序,并要学生通过这个例子分析if语句和switch语句这两种选择语句的异同点。
4结语
在C语言程序设计课程中,学生的计算思维能力的培养是 (下转第134页)
(上接第129页)
教学的重点内容。我们把计算思维能力培养融入到教学的各个环节,贯穿始终。实践证明,我们取得了较好的教学效果,学生的学习积极性增强,分析、解决问题的能力也得到明显提高。我们还可以选择更多更好的范例将分散的语法语句结构关联起来 ,不断改进教学方法进而取得更好的教学效果。
参考文献:
[1] 中国高等院校计算机基础教育改革课题研究组.中国高等院校计算机基础教育课程体系2008[M].北京:清华大学出版社,2008.
[2] 陈国良.计算思维与大学计算机基础教育[R].济南:第六届大学计算机基础课程报告论坛,2010.
[3] 朱鸣华,赵铭伟,赵晶,等.计算机基础教学中计算思维能力培养的探讨[J].中国大学教学,2012(3):33-35.