韦立梅 林琳
(广东白云学院,广东 广州 510450)
C语言是当前使用比较广泛的面向过程的程序设计语言,它功能强大,运算符丰富,执行效率高,但知识点繁多,抽象难于理解。目前,C语言程序设计课程是我校电子信息工程、通信工程、自动化工程专业、材料工程、工业工程等非计算机专业本科生的必修课。
C语言包含的知识点繁多且抽象,一般都是按照数据类型、运算符、表达式、程序结构、数组、函数、指针、结构体、文件等知识点顺序组织教学,学生虽然掌握了这些分散的知识,但又不知道这些知识到底能用来解决什么实际问题,每次课的学习都没有什么成就感,体会不到C语言的强大功能。
另一方面,C语言程序设计是大学一年级第二学期开设的课程,共48学时,学生此前只有计算机基础应用储备知识,从来没有接触过编程,当教师用演示文稿讲解晦涩难懂的理论知识时,学生会一头雾水,不知所云,两节课下来,基本上只能模仿教师完成两三个简单程序的学习,有的甚至用手机将教师演示的程序代码拍下来,按照所拍摄的照片输入代码,程序设计变成了打字输入练习,学生遇到问题基本上就是举手问老师,没有钻研的精神,课后又不及时复习,时间久了,渐渐地失去了学习兴趣,到最后大部分学生都放弃了学习,而教师由于受到学生基础和学时的限制,只能按照授课计划完成每次课的教学,没有更多的时间引导学生深入独立地思考问题、解决问题,教学效果非常差。
课程改革的目标在于:第一,选取实用的、贴近生活的项目作为载体对教学内容重新整合,项目始终贯穿教学的整合过程,探索出一套以培养学生实际应用能力为主要目标的项目教学内容,让学生从“做中学”、使枯燥的C语言程序设计变得有趣味性,让学生从模仿教师的项目开发学习过程中,学会程序设计的方法、编程技术;第二,采用以项目为导向,以任务为驱动的教学方法,教师要事先设计好项目,将零散的知识点整合到项目中的每个具体任务,由浅入深由易到难地带领学生学习,使学生在完成一个个具体的项目任务后,就会完成一个完整的项目开发,让学生有成就感。教师不能再照本宣科,避免只有理论没有实践的程序设计教学法;第三,建立一套能激发学生学习兴趣、提高学生实际应用能力为主的考核体系;第四,通过本项目的研究,提高学生的学习兴趣,让学生从被动学习变为主动学习,提高教学效果,学以致用;第五,转变以教师为中心的教学观念,更好地设计以学生为中心的教学过程。
先用一两个C语言开发的综合项目作为引导,让学生明白C语言的实际应用情况,提高学生的学习兴趣,将各章知识点进行细致合理地组织与编排,精心选择和设计一些趣味性和实用性较强的案例,来实现这些知识点的应用,再通过一个典型项目比如“学生成绩管理系统”将分散的知识点进行有机联系,并由浅入深地应用每章所涉及的知识点,强调了知识的层次性和技能培养的渐进性。当完成整个学期的内容时,一个完整的项目也就完成了,学生体会到学以致用的好处。
按照学院的以培养应用型人才为目标的教学宗旨,对整个学期C语言程序设计课程的教学内容进行合理地分类与整合,教学内容不再是分散的知识点,而是采用项目案例为主,精选案例为辅的教学内容,教师可以用精选案例或项目案例本身讲解有关的知识点。一方面,精选案例作为项目案例的补充,可以扩充学生的知识面,同时它又与项目案例有很高的相似性,有利于学生自己能迅速地完成项目案例相应功能的开发。另一方面,有一部分项目案例内容较少,不利于学生全面掌握知识,增加精选案例可以让学生掌握得更全面、更牢固,而不局限于项目案例的内容掌握。学生在项目案例的引导下,由浅入深、逐步求精地学习程序设计,并将所有的知识综合运用到解决实际问题中,让学生真正体会到学以致用的乐趣。
将知识与具体的项目实例相结合的目的,是让学生快速地理解与掌握本次C语言程序设计课程的知识点,然后再通过课堂上项目实例的练习,和课后学生对项目实例的进一步完善,让学生逐步掌握C语言程序设计课程的全部知识点,学会开发一个完整的、有实际应用价值的项目的过程,这样可以很好地锻炼学生的自学能力和编程能力,弥补以前教学的不足,充分激发学生的学习兴趣,让学生的学习始终由项目这个主线索牵引,先用所学的知识解决当前的问题,随着学习的深入,当学习新的知识和方法后,学生会发现原来还可以有更好的解决方法,让学生发现学习的兴趣,再不断地、主动地探索中掌握知识,循序渐进地提高编程的能力,当学生在学期末完成整个项目的学习后,一个完整的项目系统就展现在他们面前,使学生感受到了知识的力量,不仅仅是对知识的理解,更重要的是对知识的实际应用与知识间的相互关联。
下面用一个表格来说明C语言程序设计课程所有知识点与项目功能模块之间的对应关系。(表1)
在基础阶段,学生主要学习C语言的基本输入输出语句、数据类型、变量的定义与使用、运算符的使用,运用顺序结构、选择结构、循环结构进行结构化程序设计等基础知识。
在进阶阶段,学生首先用C语言的数组知识完成系统项目中的每个子功能;接下来,引导学生用结构体数组来描述学生的成绩信息,进一步完善系统项目的每个增删改查子功能模块;当学生完成后,教师又提出新的问题让学生讨论思考,程序存在什么不足之处?学生会发现所有的功能都在主函数中实现,程序代码很长,不利于程序后期的维护与阅读,因此引入函数这个概念,引导学生如何将程序模块化,在潜移默化中培养学生的模块化程序设计思想,与直接告诉学生的方式相比,这种项目导向的方式,效果会更好。
在高级应用阶段,学生在学习完指针的相关知识后,教师引导学生利用指针来重新编写项目系统,学生会发现指针很灵活。有了指针作为文件和链表操作的基础后,教师就可以继续引领学生深入地学习文件和链表的知识了。当重新运行项目系统程序后,学生会发现,之前录入的学生信息全部没有了,而为了解决这个问题,学生会明白只有将录入的学生成绩信息保存在硬盘某个文件里,才能方便以后的读取,文件的操作自然而然地被引出,学生也就知道了为什么要学文件的操作,以及文件操作的重要性。最后,引导学生如何根据班级实际的学生人数,动态分配内存,取代前面数组无法动态定义大小的缺陷,引出可以动态分配内存空间的链表的操作,从而避免内存空间的浪费,让学生在实践中,程序设计思想更加完善。
表1 C语言程序设计课程知识点与项目功能模块的对应关系
改革前,主要是教师讲解知识点,然后举实例演示,学生上机练习的传统教学方法,不能有效地激发学生的学习积极性。改革后,每次课堂上教师可以根据上一次课堂提出的问题作为引入,以项目为导向展开项目化教学方法,这种教学方法要求教师在教学的过程中始终以项目为中心,展开教学,把相关的知识点融入到项目的各个功能模块中去,通过项目功能的逐步实现与功能的不断完善,让学生对知识点的学习也越来越多,知识的广度和深度逐步加强,直到最后完成一个完整的项目,学生既学到了知识,也培养了解决问题的实际应用能力。当单一的教学方法不能满足复杂的教学需要时,也可以结合学生分组讨论等其它教学方法,总之,以项目教学法为主,其它教学方法为辅。
为了更好地对学生的学习作出评价,调动学生的学习积极性,本次教学改革也对以前的考核方式进行了改革,由以前的出勤(10%)+上机操作(20%)+期末考试(70%)改为出勤(10%)+上机操作(20%)+项目作品(40%)+期末综合测试(30%)。
表2 新的考核方式
从表2可以看出,新的考核方式,更加侧重对学生实际应用能力的考核,有助于激发学生的学习积极性。
首次课,需要教师带领学生完成学生成绩管理系统的主界面设计。接下来,教师要在每次课堂的最后,引导学生发现此次项目系统需要改进的地方,以便引出下次课的内容,同时要给学生布置下一次课要预习知识点与新的项目需求,让学生课后提前预习,可以很好地解决课时不足的情况,更有助于学生自学能力的提高。新的项目需求就是下一次要解决的问题。对于每次课堂的教学,教师可以围绕上一次课堂布置给学生思考的问题作为本次课堂知识的引入,以项目为中心开展教学活动。首先教师讲授此次课中项目相关的知识点,然后让学生根据自己所预习和教师讲授的知识,上机实践与自由讨论,完成本次课堂项目要达到的需求。学生在问题和项目的驱动下,会更加专注。以基础阶段,选择结构第一次课为例,课堂教学设计流程如图1所示。
图1 课堂教学设计流程
《C语言程序设计》课程的项目化教学改革已经起步,由于是起步之初,难免会存在不足,本人会在今后的教学实践中,不断地完善此次改革的方案,提高教学质量,让学生真正地体会到学习的乐趣,增强编程的实际应用能力,为他们后续课程的学习和今后的工作夯实基础。
[1]张蕾.基于项目化教学的“C语言程序设计”课程改革[J].计算机教育,2013,182(02):17-20.
[2]张悦.项目驱动教学法在C语言课程中的应用[J].职业教育研究,2007(02):164-165.