论文网
首页 职业教育教育技术学正文

依托于渐进式大作业的C语言编程实践能力训练

  • 投稿北冥
  • 更新时间2015-10-09
  • 阅读量937次
  • 评分4
  • 98
  • 0

王党校,金朝海,宁凤艳,马俊功

(北京航空航天大学机械工程及自动化学院,北京100191)

摘要:针对非计算机专业学时少、学生编程兴趣不足等问题,提出基于循序渐进大作业的编程训练方法,有效促进学生对C语言知识点的深入理解和灵活运用,提高编程实践能力,增进计算机编程兴趣。

教育期刊网 http://www.jyqkw.com
关键词 :过程管理;渐进式项目实践;编程能力;团队合作

文章编号:1672-5913(2015)15-0093-04

中图分类号:G642

基金项目:国家自然科学基金项目“面向精细操作模拟的六自由度力觉合成方法”( 61170187)。

第一作者简介:王党校,男,副教授,研究方向为触力觉人机交互、医用机器人、虚拟现实,hapticwang@buaa.edu.cn。

1 教学现状及问题分析

1.1 机械工程专业C语言教学特点

C语言是一门广泛的基础课程,是大学素质教育和计算机基础教育的一部分,理工科专业基本上都会开设此课程。

机械工程专业的课程体系一般包括4大类核心课:设计类、制造类、机电控制类和信息类。计算机程序设计和开发能力在机械工程专业的若干课程中都成为了必备基础和支撑技能,包括软件技术基础、计算机辅助三维几何设计、机械优化设计、机构运动学动力学性能分析、机械零件的有限元分析、机械系统运动可视化仿真、微机原理和嵌入式系统、机电控制类课程的MatLab程序设计等课程。图1演示了C语言程序设计对后续课程的支撑作用。C语言程序设计是信息类课程的首门课程,为后续课程奠定重要的基础。该课程在大学一年级第1学期开设,对于培养新生的计算机整体感性认识和树立程序设计的信心起到重要作用。

对于计算机专业的学生来说,C语言程序设计课程是重点基础课程,学生比较重视且经常实践,掌握情况较好;而对于其他非计算机专业的理工科学生,该门课程普遍存在下述教学现状和特点。

首先,课时供给不能满足学生需求。C语言课程是一门重实践的课程,学生只有通过上机练习才能很好地掌握程序设计思想。但在学院教学计划中,C语言程序设计作为非计算机专业开设的一门基础课程,课时设置较少。例如,北航机械工程专业原来的C语言程序设计课程总课时为24小时(包括理论课和学生上机实践课),少于其他机械基础课程。

其次,C语言课程的开设时间为大一第1学期,此时学生对于计算机文化和计算机基础知识非常欠缺,尤其是来自农村和偏远地区的学生,对计算机基础知识几乎一无所知。学生普遍认为该门课程学习吃力,非计算机专业学生的畏惧和排斥心理更强。前人课堂调查表明,只有不到5%的学生对计算机程序语言“有兴趣”,部分学生认为学习计算机语言对本专业没有用,是为了通过期末考试和国家计算机等级考试才“不得不学”。非计算机专业的学生从主观上就认为该课程是一种负担。因此,教师需要花费很大力气来引导学生逐步理解计算机程序设计的基本知识,并建立起他们学习计算机相关技术的兴趣。

1.2 传统教学的问题分析

(1)理论和实践脱节:学生对C语言程序设计理论课基础知识掌握不扎实,对计算机程序设计的理解停留在书面教条,缺乏深入理解,不擅于举一反三。其原因是:一部分学生对程序设计的理论知识点学习缺少兴趣;另一部分学生只是记住了知识点,但缺少应用,很难解决实际问题。

(2)实践编程能力差:学生不善于把数学模型和算法转化为计算机可执行的流程图和源程序,在课程设计和毕业设计时对于综合性课题中的软件开发任务无从下手。应用实践是C语言学习的目的,也是加强理论知识的重要途径,但由于实践课的课时限制,学生的问题得不到及时解答,导致学生学习C语言课程后很难完成程序的编写。

(3)学习兴趣激发不够:由于C语言理论课知识比较枯燥,实践课又很难给所有同学提供一对一的解答,造成一部分同学逐渐失去了对C语言学习的兴趣和信心,甚至对计算机程序设计产生畏惧心理,丧失进一步自学计算机程序设计相关课程的动力,导致后续课程(软件技术基础、单片机程序设计、数控编程等信息类课程)学习出现夹生现象,形成恶性循环。

(4)缺乏行之有效的过程管理:对于学生的考核主要依赖于课堂点名、课后作业和期末考试。有些学生平时上课不认真,在考试前一个月集中突击复习以应付考试,考试后所学的知识很快遗忘。如何避免期末突击,这是教学改革需要思考的问题。

2 面向实践环节强化的教学方法及措施

2.1 循序渐进的大作业进度设计

基于上述教学现状和学生存在的问题,C语言程序设计教学改革的探索重点应为提高学生理论联系实践的能力。编程实践课的学习内容,直接影响了学生的学习状况。为此,可采取小作业和大作业相结合的形式,考查学生对于单个知识点的理解及综合知识点的运用。在每次课堂开始前,为培养学生对于C语言程序设计的兴趣,教师可先通过练习和讲解一些填空题等小作业,巩固学生对书本相关知识的理解;然后结合课堂进度,为学生布置大作业系统。教师须针对小作业题目和大作业实践内容编写课堂实践练习册,方便学生学习。

大作业是C语言课程的重要考核形式,目前在国内C语言教学中采用的大作业题目大致有:学生信息采集系统、学生成绩管理系统、电话号码管理系统、俄罗斯方块等。我们选择了学生比较熟悉的成绩管理系统作为大作业题目。设计该题目的原因是:它和学生的日常学习密切相关,学生熟悉任务的要求,容易清楚定义软件系统的需求;很多学生在高中从未接触计算机编程,该作业适合于不同知识背景的学生;程序的效果很容易演示和检验。

本大作业题目要求学生运用C语言开发班级成绩管理系统,实现本班学生成绩的录入、查询、统计等功能。覆盖的知识点包括:输入输出、分支程序设计、循环程序设计、数组、字符串操作、函数调用、指针、链表和文件操作。通过本作业的训练,学生可具备根据现有算法制定程序流程图、规范化编程、调试和查找错误的能力,并初步具备编制具有一定规模程序的能力;具备读懂较复杂C语言程序的能力;掌握C语言编程解决实际问题的能力,培养自信心。

大作业题目考察了C语言课程大部分的知识点。但是,如果把大作业放在实践课的最后阶段,仅作为学生的考试题目,往往收不到好的效果,很少有学生能完整完成大作业的要求。这是由于学生平时只对单个知识点进行训练,大作业包含多个知识点的应用,作为课程末尾的考试方式很难锻炼学生的编程能力。因此,须要求学生从学习完顺序、分支和循环3种基本结构后,就开始建立成绩管理系统的雏形,随着知识点增加逐步添加该系统的功能,最后在学期末完成大作业的设计任务,从而达到循序渐进的综合性项目练习目标,实现对学生知识点综合运用能力的培养。

大作业的设计既要涵盖基本的知识点,又要和课程进度结合,实现难度由浅入、深循序渐进的设计。

在具体讲授过程中,可将C语言课程分为12次课,每次课2个小时,拟将课堂教授、知识点单项上机练习、基于项目( Project-based)的大作业上机实践等3种形式相结合,以切实提高学生的实践能力。可以“学生成绩管理系统”为课程设计的长期任务,从常用输入/输出语句printf和scanf开始,让学生编写主函数,并在主函数中调用若干个空函数,形成一个文本型菜单的雏形;学习常用数据类型后,让学生再编写一个验证密码输入的函数;选择结构后,要求编写一个菜单选取函数;循环控制和数组后,要求建立班级课程的成绩输入输出函数;学完结构体类型后,要求使用结构体数组来存储和处理学生的信息;学习链表后,要求利用单链表动态管理学生的成绩;最后在“文件”这一章,要求利用文件操作完成学生成绩管理。

当学完整个课程,完成平时要求的各项编程作业之后,学生就会发现,自己完成的不是零碎的程序段,而是整个程序的各部件的制作,通过简单的拼装,就可以构成比较复杂的程序。最后,学生可以从整体的角度来审视整个程序的设计,并通过上机进行综合调试,达到提高编程能力的目的。

2.2 基于团队合作的过程管理措施

为了有效实现理论和实践结合,保证大作业编程练习的效果,可采取2个具体措施:加强过程管理、培养团队合作意识和能力。

为避免学生平时上课不认真,仅在考试前一个月集中突击复习以应付考试,可依托大作业实现过程管理和监督。大作业进度的检查设置3个考核时间点,分别设定在第7次课数组学习结束后,第10次课动态数组学习结束后,以及第12次课结束时,每次都要求所有项目组提交大作业的源程序和程序文档供教师检查。

由于教学资源有限,师生比例过低是目前国内很多高校普遍存在的问题。一位教师很难直接管理60名学生,及时解答学生在编程中出现的问题。为此,可采用分层管理的思想,将全班同学分成10个小组,每组5~6人。分组工作在开学之初即启动,由班长、课代表和同学讨论,自由组合分组,第4周确定分组名单。分组的关键环节是组长的遴选,编程能力强、程序开发悟性高的同学将被选为组长。在课程教学中后期即大作业编程的错误调试环节,强化分组教学的模式,即教师重点辅导组长,组长带动本组同学,以成绩管理系统的大作业开发为抓手,通过层次化管理模式保证大多数同学的编程能力得到切实提高。

在期末考试前的最后一节课上,每组都要上台面对全班同学,详细演示本小组编制的成绩管理系统的详细功能,并介绍设计思路的独特之处。为防止组内同学对于编程能力掌握的不一致,教师可对各组内的同学进行随机抽查,分析其存在的弱点和不足,督促组长对编程能力差的同学加强辅导和帮助。

2.3 课堂互动环节设计

C语言课程上机练习中,及时解答学生存在的问题,及时发现学生的错误并纠正,对于保证学习效果十分重要。但由于师生比例悬殊,在既定的课时内难以实施对学生的个别指导。如何借鉴小班化教学的个性化辅导经验来保证教学质量?可以采取强化课堂互动的措施。为了更好地发挥教师的作用,提高上机实践的学习效率,可通过多媒体软件“传奇电子教室”有效促进课堂中的教学互动。利用该软件的“现场点评”功能,教师可以将某个学生的屏幕切换到全体学生的机器屏幕上,针对该学生出现的典型编程错误进行讲解,可先让学生查找该程序错误的原因,然后进行现场调试和错误纠正。利用该软件的“教学演示”功能,教师可以使全体学生的机器屏幕和教师的屏幕显示相同内容,保证所有学生集中精力听讲解,避免部分学生开小差或看其他网页。通过这些措施,切实保证学生上机实践中遇到的问题得到及时解决,保证实践课的教学效果。

在每次实践课中,教师讲解和学生编程实践穿插进行,充分实现学生为主体及教师和学生互动的实践教学方法,实现由学期初期教师引导实践,最后逐步过渡到学生自主实践的教学过程。此外,通过对学生进行小组划分,实现学生之间的学习互助,培养团队合作能力;并积极开展课后电子邮件交流,鼓励学生给教师写信,针对编程中的问题开展讨论。

3 教学效果分析和讨论

经过2年多的教学实践,以循序渐进大作业为依托强化实践能力的教学方法收到了明显的教学效果。

首先,学生的学习兴趣明显提高,课堂出勤率高达95%以上,并主动发Email向教师咨询编程问题,小组内在课后仍然深入讨论程序中存在的问题。

其次,通过小组的团队合作,以小组成绩作为每个组员的实践课考核成绩,促进了学生之间的密切沟通和合作,更锻炼了组长的技术组织能力,使其初步体验了如何把一个复杂问题进行分解。组长通过和组员的讨论,确定成绩管理系统的模块化设计,明确每个同学的任务分工,确定项目进展的时间节点,满足3次阶段性考核的里程碑要求。组长须给出程序的运行流程、模块划分,基于此进行细致的分工。每个小组长在学期末最后总结演示时要明确阐述大作业任务分工和各组员的贡献点。具体分解任务包括查询模块设计、用户输入输出交互模块设计、文档编写以及程序测试等。

再次,通过小组的软件功能演示和任务讲解,激发了学生的创造性和竞争意识。针对给定功能,教师向学生强调实现的算法和途径可以是多样的,鼓励他们有意识地培养发散性思维和创新性思维。从结果可以看到,不同小组学生编制的程序界面呈现出明显的风格差异。此外,不同小组在循环结构的使用方法、数据结构设计、数值排序算法等方面,也都做出了新颖的设计,例如针对同一功能,有的同学用循环来解决此问题,而有的同学用递归的方法解决。在功能演示总结时,教师让学生比较各个方案的优劣,将某一组好的解决方案向更多的学生推广,从而使每位同学的创新思维大大加强。

最后,基于过程管理,避免了学生在考试前一个月突击,从而保证了教学质量,最后学生理论课的考试成绩也达到了理想的效果,不及格率在10%以下。在C语言课程结束后,通过调查统计我们发现,学生的C语言学习有了很大的改善。小班分组后,每个小组都有2—3名同学的考试成绩及作业完成比较优秀,而其他组员也在小组的帮助下得到了提升。课后,很多学生会主动联系助教请教学习中遇到的问题。一部分学生后续还参加了学校组织的冯如杯、大学生科技创新竞赛等科技实践比赛,尤其是各组的组长,在冯如杯科技竞赛中担任了项目负责人,带领团队独立完成科技项目制作,取得了优异的成绩。这都反映了大作业对于学生编程能力的良好锻炼效果。

4 结语

初步的教学改革实践表明,实践课小班教课的授课形式、渐进式项目开发的上机作业、教师和学生课内外密切互动的授课方法等课程改革取得了成效,提高了学生的学习兴趣。教学改革的路程是漫长的,如何教授好C语言课程,并让学生主动提高计算机编程的兴趣以及自主学习和解决问题的能力,还需要教师在未来的教学实践中继续探索,不断完善。

教育期刊网 http://www.jyqkw.com
参考文献:

[1]国家教委高教司.加强工科非计算机专业计算机基础教学工作的几点意见[S].教育司([1997]155号).

[2]李文新,梅宏,陈徐宗,北京大学计算机学科的教学体系改革[J].中国大学教学,2008(4): 14-16.

[3]房媛,赵秀岩,刘剑,等,高校非计算机专业C语言课程教学方法研究[J].计算机教育,2011(22): 74-76.

[4]白洪涛,何丽莉,刘阳,等,非计算机专业“C语言程序设计”课程教学探讨[J]长春理工大学学报:社会科学版,2012,25(4):163-164.

[5]高枚,杨志强,许兰兰,等.C/C++教学改革的探索与实践[J]计算机时代,2005(11): 8-10.

[6]谢竞博.C语言程序设计教学中的问题及改革建议[J]重庆邮电大学学报:社会科学版,2008(3): 137-140.

[7]郝惠馨,李秀坤,辛明影,“C语言程序设计”课程教学实践与创新[J].计算机教育,2009(15): 75-77。

[8]陆蓓,建构主义指导下的C语言程序设计教学[J]杭州电子科技大学学报:社会科学版,2006(4): 65.

[9]叶枫,深化实验教学改革,不断培养创新人才[J]实验室研究与探索,2008,27(10): 103-105.

[10]郝惠馨,李秀坤,夏清泉.C语言程序设计实验教学探索[J].计算机教育,2010(17): 82-84.

[11]谭浩强.C程序设计[M].4版,北京:清华大学出版社.2010: 11.

(编辑:杨涛]