C语言程序设计实验教学方法研究
2014-02-06王冰
王 冰
北京交通大学计算机与信息技术学院 北京 100044
1 研究背景
C语言程序设计课程是高等院校计算机专业大学生接触的第一门专业基础课,也是非计算机专业大学生的一门公共基础课,是高等院校的重点课程之一,很多课程,如计算机软件技术基础、数据结构、操作系统等都以该课程为先修课。这门课程的教学目标是使学生比较全面系统地理解和掌握程序设计的基本概念和方法,具备熟练地运用C语言进行结构化程序设计的能力。学生一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言。通过本课程的学习,培养学生的逻辑思维、计算思维以及利用计算机解决问题的能力[1,2],引导学生主动将所学计算机知识应用到其他基础课和专业课中。很多大学生带着极大的兴趣学习这门课程,希望通过本课程的学习提高自己的计算机编程水平。
2 实验教学存在的问题
C语言程序设计是一门实践性很强的课程,实验教学是该课程不可或缺并极其重要的组成部分,是理论联系实际的桥梁与纽带。通过实验教学,可以增加学生的感性认识,增强认知能力,训练动手实践能力,培养科学态度,加深和巩固对理论知识的理解,从而达到提高学生观察问题、分析问题和解决问题能力的目的。但是,多年来在C语言程序设计课程的教学中存在以下问题:
2.1 轻视实验教学环节
在高校中,本课程教学学时总数一般为48学时。在学时分配上,一些教师将理论授课安排为32学时,上机实验课只安排16学时。这样的学时安排体现出教师对本课程实验教学环节的轻视。教师对实验教学的态度,必然会影响到学生对实验教学的重视程度,造成学生普遍存在重理论、轻实践的错误认识,最终培养出很多考试分数很高,但动手编程能力却很差的高分低能学生。
2.2 轻视实验教学内容与方法
由于C语言程序设计课程涉及许多概念,规则也繁多,一些教师在32学时的理论授课中,多注重和强调对理论知识和琐碎语法规则及书写格式的讲解,举例也多停留在对各种语法规则及书写格式的验证上,教学内容没有明确的主线,不分主次,不管难易,眉毛胡子一把抓;在教学方法上,一味灌输学生大量琐碎而又枯燥无味的C语言条条框框,没有以学生为中心,理论脱离实践。这样的教学内容和教学方式只能打击学生对本课程的学习兴趣,学生对所学知识掌握不深不透且容易遗忘。而在16学时的实验课上,一些教师没有明确的实验教学目标及内容,不做备课准备或准备不充分,不研究改进实验教学方法,只是让学生自己完成实验作业,教师只是简单地帮助学生解决在完成实验作业中遇到的各种具体问题,教师的引导作用没有很好地发挥。一些任课教师只让助教在实验课上做辅导,自己却不参与实验教学,这样就更谈不上实验教学内容的更新和教学方法的改进了。
2.3 轻视实验作业设计与批改
一些教师对所布置的实验作业的选题重视不够,没有精心挑选和设计实验题目。在给学生留实验作业时,不能做到难易搭配,由易到难,题量多少也不统一。实验作业留的偏易,没有挑战性,学生很快完成,激不起学生进一步学习和探索的兴趣,容易轻视所学知识,不能加深对所学知识的理解和记忆;实验作业留的偏难,挑战性太大,学生无法完成,没有成就感,会打击学生的学习积极性,容易出现抄袭作业现象,也无法达到实验教学目的。实验作业题量太少,知识点涵盖不全,学生训练强度不够,知识掌握得不牢靠不全面;实验作业题量太多,学生负担过重,无法按时完成,抄袭或不交作业现象增加,也达不到应有的教学效果。另外,一些任课教师让助教批改学生的作业,无法及时了解学生的作业情况及对所学知识的掌握程度,无法很好地在课堂上有的放矢地为学生答疑解惑。
2.4 轻视实验教学安排与管理
一些教师轻视实验教学安排与管理的设计,在上实验课时才把本次课的实验作业布置给学生,或是虽然课前布置了实验作业,但并不关心学生上实验课前是否完成。很多学生有惰性,到上实验课时才现看题目、现翻教材、现编程序[3]。由于课前没有准备或准备不充分,实验课结束时,学生只能完成本次实验作业的一部分,未完成的部分只能由学生在课余时间完成。如果遇到无法解决的问题,学生可能走“捷径”,抄袭别人的作业,或干脆将“带病”的作业一交了之。另外,上实验课时,一些教师管理松散,对学生放任自流、不闻不问,经常出现学生迟到、早退、旷课、玩游戏等现象。
2.5 轻视实验考核与评价
一些教师在本课程结课时采用闭卷笔试考试的方式[4,5],考试题型包含选择、填空、读程序写结果、编程等,使学生的学习停留在“纸上谈兵”阶段,并且卷面考试分数占期末总评成绩的80%,平时上课、上机、交实验作业等多方表现只占到期末总评成绩的20%。这样的课程考核评价体系忽视了对学生上机实践动手编程能力的考核,缺少对学生上机编程及调试重要环节的检查,给学生造成本课程实验环节不重要的误导,学生最终的期末总评成绩没有很好地反映学生的真正编程能力和调试水平,学生对期末总评成绩有一种不公平、不公正的感觉。
3 实验教学改革
多年来,C语言程序设计课程建设中存在的这些问题,使得学生在学习过程中“只见树木,不见森林”,只知其一,不知其二,只为完成实验作业而完成实验作业,达不到灵活运用所学知识并将其融会贯通的学习效果,往往遇到问题不知所措、无从下手,不会通过调试程序发现和解决问题,学习初期本来高涨的学习兴趣在学习过程中减退或消失。在学完本课程后,只能编一些解决简单问题并偏重验证性的小程序,无法跨越通过编程解决复杂实际问题的鸿沟,更达不到将本课程所学知识与自己所学专业知识有机结合的目标,所以必须对症下药,对当前的C语言程序设计课程进行实验教学改革。
3.1 精简优化理论授课内容,扩大实验教学学时,提高学生的动手实践能力
在总学时不变的情况下,采用将理论授课压缩到24学时,实验教学增加到24学时的分配方案。压缩理论授课学时后,在理论授课中,不再采用面面俱到的讲授方式,而是分清主次、精细挑选章节的重点和难点,通过精心设计的案例教学方式进行突出讲解[6],章节中容易理解的知识让学生在课余时间自学。教师不再把精力集中到C语言的语法特点和规则限制讲解上,而是放到如何用C语言编程解决实际问题的思路引导和重点知识运用上。通过增加实验教学学时,让学生有更多的时间走入实验室,在编程实战中完成感性认识与理性认识的结合,进一步理解和应用教师所讲的重点和难点以及自学的知识,在实践磨炼中使学生加深对所学知识的认识和掌握并逐渐成长壮大。
3.2 精心设计实验题目,适时布置实验作业,亲自批改学生作业
教师根据教学进度中理论授课的重点及难点,同时考虑培养学生创新能力的目标,开展与其配套的实验作业设计,每次实验作业类型应多种多样,有易有难,先易后难。有经典型实验作业,如华氏温度与摄氏温度的转换、判断素数、求和及阶乘、求最大公约数、求最小公倍数、冒泡排序与选择排序、字符串逆序输出、判断回文等题目[7,8];也有趣味实验作业,如兔子产子、猴子吃桃、谁在说谎、人机猜数、百钱百鸡、换分币等题目[9],以此激发学生的学习兴趣,并加强学生创新思维和计算思维能力的训练和培养[10]。每次实验作业题量要适中,一般三四个题目,另外再留一两个附加题,附加题供完成作业后还有余力的学生练习。另外,在本课程第一次上课时,也要给学生留一个设计型综合实验作业,如学生信息管理系统、图书信息管理系统、职工信息管理系统等,学生可以任选其一,本实验作业要求学生在学完本课程所有教学内容后完成,但在学习期间可分阶段、分步骤去做,鼓励学生在完成综合实验作业过程中进行交流和创新设计,以此重点培养学生解决问题的综合能力,让学生在沟通中学习,在协作中进步,在自主中创新。
为便于学生对本课程所学知识的消化吸收,教学一般采用理论授课和上机实验循环交叉的方式进行,上一次理论课,随后安排一次上机实验课。在上理论课前,教师通过本课程的教学网站布置与本次理论课对应的实验作业,让学生在课余时间根据教师上课时所讲内容和课余自学内容做教师布置的实验作业,程序源代码和调试所需的必要数据要求学生输入到计算机中并通过教学网站提交。教师在上实验课前,可通过教学网站检查,学生提交作业的情况。一方面,通过检查,教师基本了解学生的作业进度、做作业中存在的主要问题等情况,可有针对性地开展实验教学;另一方面,督促学生在上实验课前做作业,避免上机时出现学生现看题目、现编程的现象,使学生对每次实验作业的题目做到心中有数,也便于学生在上实验课时有所侧重地去听教师讲解,解决自己在做作业中遇到的问题。每次实验课结束后,学生再次通过教学网站提交完成的实验作业。学生的实验作业以教师亲自批改为主,助教批改为辅,并由教师对绝大多数学生在做实验作业中出现的共性错误、遇到的共同问题在课堂上进行点评和讲解,以利于学生及时走出误区、改正错误。教师应严把实验作业批改关,可采用教学网站所提供的程序相似性检测功能对学生提交的作业进行检查,发现雷同作业绝不姑息,相关学生本次作业的成绩记为0分,以此杜绝学生抄袭实验作业的现象。
3.3 精炼实验教学内容,改进实验教学方法,加强实验教学管理
上实验课前,教师根据学生提交实验作业的情况,对实验教学内容精心提炼,认真备课,每次实验课开始,用10~15分钟简明扼要地讲解本次实验课作业的实验要求、实验内容、实验难点和重点以及解题思路,尽量留出较多的时间让学生上机实践。在指导实验过程中,教师要以引导为主,传授为辅,主要通过启发等方式引导学生自己解决遇到的问题,让学生自己多动手、多调试。在实验过程中,学生不可避免地会犯各种错误,甚至会面对失败,但失败的教训也是学生积累经验的过程,这样可以让学生充分地感受到自己发现问题、独立解决问题的乐趣,体验一次又一次迈向成功的喜悦,激发他们的学习兴趣,提高他们分析和解决问题的综合能力,培养学生的创新素质。每次实验课结束前,教师要用10~15分钟对本次实验课中学生遇到的共性问题进行总结、分析和讲解。另外,为加强实验教学管理,采用由助教负责上实验课前的学生签到工作,对学生上课出勤情况进行严格监督,并且教师和助教在实验课辅导过程中注意学生的行为表现,从严管理,监督学生按时上下课,课上集中精力去完成教师布置的实验作业,尽量保证绝大多数学生能在实验课上完成教师布置的作业。对少数不能按时完成作业的学生,由教师或助教另行安排时间课外辅导或答疑。
3.4 大力改革考试方式,注重实践动手能力考核,综合测评学生素质
实行开卷机试考核方式,以程序填空、程序改错、编程题等题型为主,试题灵活,减少仅涉及单一基本知识的简单题目,增加综合运用所学基础知识的题目,全面考核学生的综合素质和动手编程及调试能力。在重视上机考试的同时,也不能忽视对学生学习过程的评价。上机考试成绩占期末总评成绩的60%,实验作业、理论及实验课出勤及设计型综合实验作业等占期末总评成绩的40%,使期末总评成绩能更全面地体现每个学生的真正水平和创新能力。
4 结束语
传统的教学方法只注重知识的传授,忽视了实验教学环节及学生创新能力培养和潜能的开发。科学理论、创新思维来自于实践,又服务于实践。只有打破传统教学方式的束缚,不断开展教学改革与实践的探索,才能激发学生的学习兴趣,培养学生的创新意识,调动学生的学习积极性,提高学生分析问题、解决问题的能力,不断提高教学质量。
[1] 黄婷.浅谈《C语言程序设计》实践教学[J].北京电力高等专科学校学报:社会科学版,2010,27(10):434-435.
[2] 卢玲,刘恒洋.以计算思维为导引的程序设计实验教学模式研究[J].福建电脑,2012,28(5):164-166.
[3] 沈建英.计算机程序设计实验教学改革探索[J].实验技术与管理,2003,20(4):105-107.
[4] 袁志民,赵宝琴.程序设计实验教学模式改革初探[J].实验室科学,2005,2:49-50.
[5] 郝惠馨,李秀坤,夏清泉.C语言程序设计实验教学探索[J].计算机教育,2010,17:82-84.
[6] 陈婷.C语言程序设计实验教学改革探究[J].实验技术与管理,2010,27(10):182-184.
[7] 何钦铭,颜晖.C语言程序设计[M].北京:高等教育出版社,2008.
[8] 颜晖,张泳,吴明晖.C语言程序设计实验指导[M].北京:高等教育出版社,2008.
[9] 陈朔鹰,陈英.C语言趣味程序百例精解[M].北京:北京理工大学出版社,1994.
[10] 陈杰华,戴丽娟.以培养计算思维为核心的程序设计实验教学[J].实验技术与管理,2011,28(1):125-127.