陈凤祥 许 勇
摘要:本文通过分析全国计算机等级考试通过率较低的现状与原因,对程序设计语言的课堂教学与实验教学提出了坚持“掌握—学习”导向的观点。根据学生情况因材施教,合理组织实验题目,让学生体会到进步和掌握的情感,从而逐步提高程序设计能力。
关键词:计算机等级考试;“掌握—学习”导向;能力培养
中图分类号:G642 文献标识码:A
1我校全国计算机等级考试通过率分析
全国计算机等级考试是由教育部考试中心主办,用于测试应试人员计算机应用知识与能力的等级水平考试。其考试成绩可以为劳动(就业)人员提供计算机应用知识与能力的证明,为用人部门录用和考核工作人员提供一个统一、客观、公正的评价标准,因此受到高校非计算机专业的学生和广大就业人员的欢迎。作为一线教学人员,我们也非常关注学生们的考试结果,并将其作为我们改进教学方法的一种参考。通过对我校某考点近期连续三次计算机等级考试(二级和三级)通过率的分析,得到了表1和表2。从表1中可以看出,通过率不高。若是从同时参加笔试和机试两项考试,仅从其中一项看,笔试的平均通过率明显高于机试平均通过率。只有一次例外,因为三级机试只有一道程序设计题,只要选中的题目是考生背下来的,就能通过,这就会带来一定的偶然性。而二级机试中,题量比较大,偶然性大为降低。表2为这三次考试获得证书的考生统计数据,从表2中可以看出,有相当比例的考生是通过补考而获得证书,其中尤以补考机试者为多。
2通过率较低的原因分析
为什么通过率较低且有如此多的考生要补考机试?究其原因,主要是有不少考生只注重“背”而不注重上机实验。其次,很多单位只认证书不问能力,也造成了不少学生不愿动手写程序。不少学生甚至分不清编辑源程序与编译源程序的区别;有的认为只要编译没有语法错误,程序就正确了;有的考生没有掌握常用的算法,面对试题没有解决的思路,当然就写不出解决问题的程序了;有的考生对程序设计语言本身掌握不牢,无法用正确的语句写出解决问题的程序。
上述情形均从某个侧面说明了我们不少学生只注重阅读指导书上的程序,很少或不愿意动手编写与调试程序,使得程序设计能力较弱,从而造成通过率不高。
3坚持“掌握—学习”导向,做到因材施教
要改变学生重书本,轻动手实验的状况,真正提高学生程序设计能力,教师的责任与作用不容忽视。我们不少学生进入大学前,几乎没有接触过计算机,有的即使用过计算机,也几乎没有程序设计的概念。从大学新生入学到结束计算机课程的教学,从最基本的计算机应用基础开始,到结束程序设计语言的学习,只有不到120学时(包括课堂教学和实验教学)的时间。在这么短的时间里,让学生掌握使用计算机的基本技能和一门程序设计语言,其难度可想而知。李未院士在第四界全国计算机教育论坛上指出:我们要走新型工业化道路,就要更新知识结构,培养新一代产业大军。在不远的将来,程序设计和数学建模将与微积分、高等代数、大学物理一样,成为所有大学的核心基础课程。教育的根本目标之一是培养学生的问题求解能力。能力应该是理性能力,面对一个新问题,能运用所有资源将其解决,这就是对问题的求解能力。为使现在的大学生,能成为新一代的产业大军,培养他们对问题的求解能力,包括程序设计能力,是计算机教育工作者不可推卸的责任。在教学中,我们坚持以培养能力为目标,遵循“掌握—学习”导向的理念,使学生有努力成功的动机,让其体会到进步和掌握的情感。为此,在C语言的教学部分,我们作了如下尝试。
3.1分解难点,让学生能动手写出程序
初学程序设计的人,往往不知道该如何将自己的解题方法用计算机语言写出。因为计算机的语言有许多语法规则、算法的描述、还有数据类型的约束、运算符的表示、以及输入输出的实现等等。倘若按照先讲语法规则,然后介绍算法的描述方法,再讲数据类型及运算符的表示,这样的课堂教学下来,学生对如何写程序仍然很茫然。为了在一开始就让学生养成自己写程序的习惯,我们在介绍了C语言程序的大致结构后,就开始介绍顺序结构程序的设计。从学生熟悉的数学公式着手,用C语言写出求解的程序。所举的第一个例子是求正方形的面积,程序及流程图如图1所示:
在这个例子里,我们用流程图描述了顺序程序的执行过程。尽管这样的描述并不是最好的方法,但比较直观,容易理解。同时我们通过演示程序的执行,改变数据类型及相应输出函数printf()中的格式控制字符,使学生明白,不同的数据类型,在输出其值时,应匹配不同的格式控制字符。然后,我们指出此程序的不足之处:当需要计算边长不同的正方形面积时,每次都要修改程序,不仅麻烦而且容易出错,于是很自然地引出了输入函数scanf()的使用。同样地,可以通过输入不同数据类型的计算过程,让格式控制字符的使用反复刺激学生大脑,加深他们对输入函数和输出函数正确使用的理解。通过举一反三,学生对如何计算长方形的面积、圆柱体的体积的流程图和程序都能很快理解。在计算长方形面积的程序里,我们还解决了用scanf()函数输入多个数据时,数据之间的分隔符问题,这比单独讲授用scanf()函数接收输入数据的分隔问题更容易被学生接受和理解。
介绍分支程序设计和循环程序设计时,我们仍然使用那些学生很熟悉的算法。为此我们首先设问,如何解决数据输入时错误数据的排除?这样自然地引入了分支程序设计的问题。我们在已有流程图“计算面积框”前面添加一判定框,讲清楚判定框中两个出口的含义,在程序中相应位置添加条件语句就可解决问题了。这样对if语句与if…else语句的使用,学生接受起来就更加自然,不必死背语法了。再通过反复计算不同边长正方形面积的设问引入循环结构。于是,在3次课(6学时)的时间里,三种程序结构介绍完毕,且基本数据类型和输入输出函数的使用、格式控制字符的应用等,这些编程中最基本的元素在短时间里不断地刺激了学生的大脑。使他们经常将已有的知识与新知识进行连接,并不断的融合、固化,从而形成长期记忆。
3.2循序渐进,掌握程序设计的方法,培养程序设计的能力
要提高学生程序设计的能力,除了掌握语言本身的语法规则外,还得掌握一些常用的算法。在后续的教学中,我们遵循这样的原则:即在学习新的语法规则时,用已掌握的算法进行程序设计;学习新的算法时,用已学过的语法规则。这样引导学生面对一个新问题,能运用所有资源将其解决。同时,我们为逐步培养学生理解算法的能力,在学生对算法有了一些理解能力后,引导学生逐步读懂用N-S图描述的算法,通过阅读算法,可以提高学生的逻辑思维能力。比如模式匹配的问题,尽管我们介绍简单回溯法,学生理解起来仍有一定的难度。我们在学习字符数组内容时介绍这个算法,为使学生理解起来容易些,使用双重循环描述这个算法。算法描述如图2所示。
这样描述的算法省去了回溯时计算i的位置,通过图示,再辅以具体的实例,学生基本能理解。然后引导他们根据N-S图写出程序。到学习函数、指针时,再用这个算法,学着用字符数组和指针作函数参数,用函数的返回值判断st2是否在st1中,这样学生对这个算法就有了进一步的理解。
3.3合理组织实验题目,逐步提高程序设计能力
教育部在2号文件中指出要“高度重视实践环节,提高学生实践能力”。要提高学生程序设计能力,仅仅依靠良好的课堂教学效果是不够的,还需学生充分利用实验课的时间。为此,我们优选了既能让学生动手编写、调试,又能达到举一反三效果的设计题,使他们相信自己有能力完成,从而能坚持不懈的努力。
在学习之初,我们给出求面积和体积一类的程序设计题,这类题目算法简单,目的是让学生能自己动手写程序,掌握程序的结构及基本的语法规则。因此题目的要求重点在数据类型的变换和输入输出函数的使用,格式控制字符的正确使用等。同时在题目中留下让学生目前知识无法解决的问题,使学生有继续学习的愿望。
随着知识的积累,我们逐步引入了一些常用算法的程序设计题,这些常用算法可以用不同的语法规则去实现。比如常用的选择排序算法,学习数组时,实现对已给序列排序。学习函数时,将待排序数组名作函数参数,学习指针时,将待排序数组的地址传递给函数的形参指针变量,实现在函数内排好序,在主调函数中输出排好序的结果。又如模式匹配的简单回溯算法,学习字符数组时可以作为上机实践题,学习函数时 也作为上机练习题,学习指针时同样作为上机练习题。再比如十进制整数转换成八进制整数或十六进制整数的算法,同样在数组、函数、指针的学习中都作为程序设计练习题。等等,这样的练习题可以有很多。通过这样的练习,培养学生对同一个问题,用不同的方法去求解的能力。
3.4加强实验指导,引导学生协作学习,使学生能体验进步的快乐
课堂目标定向影响学生的目标定向。在课堂中的活动和重点可以分为“掌握—学习”导向型和成绩导向型。“掌握—学习”导向型的课堂强调努力、进步、挑战,掌握导向型的课堂有一个环境,在那里学生能体验进步和掌握的情感。
尽管是经过优选后给出的实验题目,但对于初学者来说,写程序时发生的错误仍然不少。如何排错是初学者最不易掌握的技能,且各种错误名目繁多,教师此时需要有耐心,除帮助学生解答各种问题外,还应引导学生学习使用调试工具。对计算机程序而言,有语法错误程序不能运行,有逻辑错误,得不到正确的结果。为提高学生程序设计的能力,学会调试程序是很重要的一个方面。为此我们有意培养学生排除错误的能力,首先,引导学生如何尽快排除语法错误,然后,引导学生学习使用调试工具,学会单步执行程序,查看变量在程序运行过程中值的变化,这样逐步让学生学习如何排除逻辑错误。学生只有在学会使用调试工具后,其程序设计能力才能真正得到提高。“授人以鱼,不如授人以渔”,当学生不需要老师为其排除程序中的错误时,我们的教学目标就达到了。另一方面,为培养学生协作学习的能力,我们在实验课时,将学生分成若干小组,每组4~5人,能力较强的学生作组长,允许他们以讨论的方式完成上机题目。通过讨论,使他们对问题的求解思路有一个较清晰的认识,共同完成作业。在这过程中,能力较强的学生,帮助较弱的同学,而他自身的能力也会得到提高。不少得到帮助的同学,也因自己经过努力后能写出程序,而体验到了进步的快乐。采用这种实验教学方式多数学生愿意动手写程序,同学之间也加深了了解,从而给学生一个良好的情感记忆,并有了成功的体验。
4教学尝试的效果与总结
经过一段时间这样的教学尝试,多数学生已养成自己动手写程序的习惯,而且能力较强的学生已开始对程序的设计有了自己独到的见解与处理能力了。比如在学习指针一章时,讲了这样一个例题:在一个串的尾部添加一个字符。当指针s指向串的结束符,给出这样的语句{*s=c;s++;*s= ;}时,我们提问,有没有更简洁的语句,就有同学指出可以将前两条语句合并成一条语句。还有的学生在学习了新的语法规则后,主动将已实现过的算法,用新的语法规则重新写程序并调试;还有的学生读程序时很用心,尤其对程序中出现的判定条件提出了为什么需要这个条件,若换一个条件会出现什么结果这样的问题。在调试程序时,已有不少学生学着使用调试工具了,尽管不够熟练,但已走出第一步,还怕没有第二步吗?
由此我们认为,结合学生的实际能力进行课堂教学与实验教学,对培养学生的程序设计能力是有效果的。有位同学在总结自己的实验时这样写道:“刚开始学习C语言时,不知该输些什么,输进电脑的程序不知是对还是错,分号与逗号总是不加以区分,函数符号区分不清。通过一段时间的学习,我开始能写一些简单的程序,并养成了一种良好的编写程序的习惯。通过学习,我发现:不会做不要紧,要紧的是我该怎样学着去做!”
提高学生程序设计的能力,还有很多的工作要做。目前并不是每个学生都认识到程序设计能力对其大学生活乃至工作的重要性。有的学生认为自己的专业不要求写程序,只要会用现成的软件就行了,甚至有因怕困难而放弃写程序的学生。这都是今后在教学中要认真对待的问题。
参考文献:
[1] 李未. 新型工业社会:信息化无处不在[J]. 计算机教育,2009(1):封二.
[2] 李凤霞. 谈计算机基础课教学的点滴体会[J]. 计算机教育,2008(1):27-30.
[3] Margaret E.Gredler. Learning and Instruction Theory into Practice(影印版)[M]. 北京:中国轻工业出版社,2004.
[4] 徐海燕. 超媒体的自适应性研究与实践[D].合肥:中国科学技术大学,2000.
[5] 教育部. 教育部关于进一步深化本科教学改革全面提高教学质量的若干意见[Z]. 教高〔2007〕2号.
[6]Ames C. Classrooms:Goals,structures,and student motivation[J]. Journal of Educational Psychology,1992,84(3): 261-271.
[7]Ames C., Archer J. Achievement goals in the classroom:Students learning strategies and motivational processes[J]. Journal of Educational Sychology,1988,80(3): 260-267.
Thinking Programming Ability through National Computer Rank Examination
CHEN Feng-xiang, XU Yong
(Anhui Normal Universiy, Wuhu 241000, China)
Abstract:In this paper, by analyzing the cause and current situation of the National Computer Rank Examination( NCRE), an approach has been suggested that the activities and emphases in the classroom may be categorized as mastery/learning-oriented or performance-oriented. According to the learners ability, we emphasize effort, improvement and establish an environment in which students can experience improvement and feelings of mastery.
Key words: National Computer Rank Examination; mastery/learning-oriented; ability cultivating