张 颖
(莆田学院信息工程学院,福建 莆田 351100)
C语言程序设计是高校计算机专业的专业基础课,很多非计算机专业也有开设,是学生学习计算机程序设计的一门重要基础课程,通过学习C语言程序设计,使学生能够熟练掌握C语言的基本知识和程序设计方法,进而灵活运用C语言进行程序设计,并通过上机操作来完成源程序的录入、编译、运行,培养学生具有较高的计算机编程技巧、较强的思维方法和解决问题的能力,为以后的学习奠定一个良好的基础。
程序设计是一门需要进行大量编程实践的课程,C语言程序设计传统的教学方式是教师把重点放在了语法规则的叙述上,但由于这些知识点“太抽象”“名词太多”“内容太多”“很复杂”等原因,导致学生失去学习兴趣,整体学习情况并不理想,同时传统的授课方式都是教师在授课后布置上机实验,这些实验都是为解决某个小问题而进行的编程,各个实验之间也没有任何联系,学生只是单纯的完成实验作业,并没有系统的做出一个完整的软件或者解决一个大型的综合性问题,以至于到学期末学生也没有感觉到通过这门课程学到了哪些对自己有用的知识,只是单纯地去参加考试,学生的综合能力也没有得到更好的锻炼。因此,要想达到好的学习效果,学生学习兴趣的培养和学生综合能力的锻炼是教师在教学过程当中需要不断探寻的。
案例式教学就是一个能激发学生学习兴趣和提高学生综合能力的很好方法,它将各种小问题综合到一起形成一个大型的实际问题并在开学初就引入课堂中,引导学生要解决这个问题需要学习哪些理论知识,再把这个复杂的综合性问题拆分成一个个小问题小模块,让学生通过学习理论知识,通过编程逐个解决各个小模块,直到期末时把整个大问题全部解决,学生平时的完成情况和最终的作品可作为平时成绩计入期末总评成绩中,这样不但提高了学生的学习兴趣和积极性,还提升了学生运用理论知识分析解决实际问题的能力。
为了提高学生解决综合性问题的能力,摆脱应试教育,故把各种相关零散的小问题综合到一起,形成一个大的综合性的问题,授课教师在学期初就把这个综合性问题布置下去,并要求学生编出解决这个问题的软件,学生每学完一个章节,就利用所学的知识解决这个综合性问题里面的相关小模块,这样这个作品从学期初一直陪伴到学期末,学生也会对自己的作品产生感情,也会更有热情更迫切的学习下去以便最终完成这个软件。那么这个综合型的案例如何选取就变得非常重要,将直接影响整个学期的教学效果。
案例要紧密贴合教学内容和学生的培养目标:首先要明确每一章节的教学目的和教学重点,把需要学生掌握的知识点进行提炼,然后根据这些知识点设计出生动有趣并贴近生活的问题,使学生对问题产生兴趣,并能主动地想去解决这些问题。
学期初先将学生每2~3人分成一个小组,要求每小组用C语言编程制作一个软件。要求各小组学生根据题目的基本要求,画出流程图,编写程序,并写好程序设计说明书。学生应将所设计的程序进行上机调试,并将调试结果(是否通过,哪些问题尚未解决等)在设计说明书给予说明,源程序以书面形式提交。
每小组也可扩展软件功能,若三人的小组需要扩展至少五项以上,并在设计说明书中标注出各小组成员负责的模块,某些模块也可两人协力完成。学生在学期初先将软件的封面、登录界面和主菜单界面做出来,然后随着所学知识的增加逐渐完善各功能模块。
通过传统的课堂教学发现,学生如果课前预习课堂效果会完全不同,因此要求学生课前预习,这样讲课时就以学生预习过为起点,只讲难点、重点、有变化之处,这样既给了学生思维分析的余地,又能使学生更易掌握新知识,所以教师必须精选教学内容,注意详略安排合理,在每次课程结束后把下次课要预习的知识点布置下去。
在案例式教学中,教师应把重点放在算法和程序设计方法上,通常由案例或例题引出一种语法规则,根据实例分析算法,介绍程序设计的基本思路和技巧,不要求学生死记语法规则,而是要求学生能把规则运用到编程中,编出一个好的程序,培养学生良好的编程风格,让学生在编程中不断总结、巩固,达到学会算法、记住语法规则,提高程序阅读和设计的目的。
在章节间的授课安排上应注意详略得当,如“顺序结构”就应略一点,而“选择分支结构”“循环结构”这些关键性章节就应详细一点,并能做到精讲;使学生做到非常熟练、透彻掌握的程度,为后面“数组”“函数”等章节的讲解也作了良好的铺垫。课上经常找一些解题思路比较精、技巧比较好的例题让学生写出运行结果,让学生自己“读程序”,找出程序中精彩之处或不理解之处,对于普遍性问题共同讲解,个别问题课后解答。
在案例教学后半阶段则采取分组教学,每3~4个小组形成一个大组进行互评和讨论,对于这个案例中的每个功能模块,是否有创新出不同的编程法,然后讲解分组中有代表性的程序,让学生来评论哪种程序更简单,效率更高。从而让学生明白如何分析并解决实际问题,逐渐培养学生进行程序设计的正确思维方式。
通过一段时间的学习,发现有少部分同学具有“天赋”的优势,他们总比其他同学学得快、领悟力高,理解能力强。因此在教学中,特别是在上机实践环节,对有“天赋”的同学可区别对待,额外布置学习任务、用不同的方法解题等,经过一段时间的重点培养,这些同学在程序设计和上机调试程序方面都比一般同学优秀,在后期分组时,让这些优秀的同学当组长带动小组其他成员来完成任务,平时的学习和上机中也可为其他同学提供一些帮助。
下面就是精炼出来的案例实例:中小学生电子助手软件的设计。设计一个为中小学生用户提供数学方面帮助的软件。整体的功能及流程如图1所示。
图1 系统流程图
整个案例设计要求应有软件封面、用户登录(密码验证)、主菜单、功能化模块、操作帮助等。封面上应标明该软件名称、版本号、编程者院系、班级、姓名、完成日期,可参考图2所示。
图2 软件封面图
用户输入密码,如果密码输入错误则要求用户重新输入,直到密码正确为止。如果密码验证成功则进入欢迎及主菜单界面,可参考图3所示,两人以上小组需要再提供五项以上功能。用户根据自己的需要选择输入功能前的序号,完成此功能后能回到主菜单界面继续选择其他功能菜单,直到退出为止。
图3 菜单界面
整个程序设计应按模块化设计的要求,分模块设计和调试,再完成整个系统的调试。各个模块中所有要求用户输入处都应有适当的人机对话。每一模块运行结束都应回到主菜单,正常情况下只能从主菜单中退出,并且正常退出后应有适当的告别辞。
各模块功能的详细要求如下:
(1)九九乘法表模块要求在屏幕上以三角形的形式输出九九乘法表。
(2)计算器模块要求用户输入运算数和四则运算符后输出运算结果。
(3)一元二次方程求根模块要求用户通过此模块输入a、b、c后可求解ax+bx+c=0的完全解。
(4)求三角形周长和面积模块要求用户通过此模块输入三角形三条边后可求出此三角形的周长和面积。
(5)质数判断模块要求用户通过此模块输入一个整数后能判断出这个数是否为质数。
(6)求最大公约数和最小公倍数模块要求用户通过此模块输入两个整数后能求出这两个整数的最大公约数和最小公倍数。
(7)整数的阶乘模块要求用户通过此模块输入一个整数后能求出这个数的阶乘。
(8)数值排序模块要求用户通过此模块输入若干实数后对这些实数升序排序。
(9)求转置矩阵模块要求用户通过此模块输入一个矩阵后对这个矩阵进行转置输出。
(10)通信录模块要求用户可通过此模块添加联系人信息、显示全部联系人,用户还可以根据姓名查找、删除联系人等。
(11)小游戏模块要求编写至少一个小游戏,比如石头剪刀布、贪吃蛇、五子棋等。
(12)退出模块要求选择退出序号后关闭软件。
整个软件完成后,要书写软件设计说明书,要求内容完整、条理清楚、算法清晰、文字通顺,字体工整,源程序的书写格式应符合规范。用打印机打印,纸张规格为A4纸,标明页次,装订成册。
案例式教学是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要方法,是对学生实际工作能力的具体训练和考察过程。通过贯穿学期始终的案例教学,不仅使学生巩固了已学的知识,而且调动了学生继续学习新知识的积极性,同时学生还学到了很多在书本上学不到的知识。考试通过率也有很大提高。另外,案例式教学把理论与实践相结合,以理论为基础在实践中得出结论,这样学生才能真正为社会服务,从而提高学生实际动手能力和独立思考的能力。