电类非计算机专业C语言程序设计实验教学研究
2018-12-21汪友生
汪友生
(北京工业大学 信息学部信息与通信工程学院,北京 100124)
0 引言
电类非计算机专业的本科毕业生多从事电子信息技术、通信工程、自动化、电子科学与技术、电气控制等工程应用型工作,这些工作对计算机能力要求较高。C语言凭借功能丰富,灵活方便,可移植性好的特点[1],成为高校电类非计算机专业本科生的专业基础课程,通过 C 语言程序设计课程使学生掌握程序设计的基本方法并逐步形成正确的程序设计思想。但在教学计划中,一般来说安排的课时比计算机专业的少,在实际教学中产生一些教与学的问题[2,3]。
1 C 语言程序设计教学存在的问题
学生重视度不够。C语言程序设计是计算机公共基础课程,电类非计算机专业的不少学生认为,此课程与他们所学的专业无关,重视程度低,学习积极性不高。
课程知识点多而零散。在教学中,教师经常是按教材顺序逐章讲解。这样常常导致学生过于关注细节而忽略了程序设计的本质[4]。同时由于每年的教学计划都差不多,按照单一的形式进行,教师讲授,学生按要求按步骤完成,加上课时的不足常常达不到培养学生能力的目标。
缺乏深入思考。大多数学生能够掌握课堂的知识,通常只是按照教材的程序知识验证例题的正确性,做不到对问题深入的思考,举一反三。因为课时所限,实践训练也不充分。一种普遍的情况是虽然学过C语言程序设计课,但等到高年级其它专业课或课程设计或毕业设计要用时又感觉无所适从,不知从何下手。
在教育改革的浪潮下,教育理念改变了从前“一言堂”“一刀切”的课堂形式,使学生成为课堂的主角,教师起着辅导和监督的作用。这样的学习模式,有利于学习者依据自己的学习兴趣和学习习惯把握进度,做到了因材施教[5,6]。
2 C 语言程序设计教学方法探索
对于教学中存在的问题,结合电类专业的教学计划,提出一些改进的方法。
2.1 基础知识的学习
针对电类专业的特点,授课时应重点、难点突出,避免知识细节讲述的面面俱到,否则学生容易陷入一些语法细节忽略程序设计的本质。教师在讲完每节课程知识后,积极带着学生跳出细节,从高视角回顾每章的知识联系,提炼程序语言的本质。教师可以先举一个简单具体的案例,例如输出一个“Hello,C语言!”。在此基础上逐渐加入输入输出,数据类型,函数,文件等语法知识[7]。也许学生对于例子中部分知识细节不是很明白。但他们切实的看到了一个完整的程序及其实现的功能,从整体上对C语言有了一个感性的认识后带着疑问去学后面的知识。有了疑问,学习效率才会提高。教师选择案例时,尽量选择趣味性高,综合性强的例子,有助于提高学生的学习兴趣。
2.2 思维的探索
电类专业学生毕业往往从事电子信息,通信工程等方面工作,这些工作对于思维逻辑性要求较高。而C语言程序设计中的思维主要体现在抽象和自动化两方面[2,8]。抽象表现为使用函数、常量、变量、数组和链表等元素表达实际问题中的系统、功能特征等。自动化表现为通过设计函数功能,实现函数的自动跳转和调用,最终实现系统的功能。所以实际教学中,应该结合C语言的抽象和自动化的特点,有针对性的讲解课程知识。例如,一个函数中的顺序语句可以自动执行的基础是EIP寄存器的加法操作。多个函数之间的来回自动跳转的基础是内存堆栈区的支持等。
C语言基本是在大一年级的时候开设,学生程序设计的基础较低,C语言语法对于学生来讲较难接受,若是从中体会语言的抽象与自动化就会更难。因此,对于学习初期,教师有必要提出一些引导式的问题,带领学生逐渐认识编程的奥秘。比如,可以提出这样的一系列问题:如何综合描述一个人的姓名、年龄和籍贯,如何描述一个班中的某科成绩,等等类似问题。通过抛出这些问题,使学生体会计算机与人之间的交流,感受C语言强大的功能,思考如何将实际物体元素抽象为C语言符号。
依据C语言的抽象和自动化的思想进行教学,使得C语言的各种符号不再虚幻,与真实元素紧密相连,学生的思维能力得到锻炼。
2.3 教学的实践
即使学过C语言程序设计课程,在面对实际问题的时候,学生往往依然不知道如何下手,没有程序设计思路。另外,学生对编成兴趣不一,熟练程度不同,基础也不一样。针对这一现象,提出一个“练—仿—创” 的实践教学模式[9-11]。所谓“听过的会忘记,看过的会记得,做过的才能理解”,理解了才能更好地应用,才能有更多的创新。
练主要是检验教材或老师给的程序的结果。这个过程看似简单,学生在运行过程也会出许多错误。比如符号没输对、保留字错写、0误输为o、分号省略、变量没定义或重复定义等。这个过程使学生掌握了如何快速找到程序中出现的语法错误、连接错误和功能错误,帮助今后的学习。
仿是指经过反复练习后验证性的编写程序。有了一定的基础知识后,鼓励学生根据要求对程序进行适当修改,观察输出结果有什么变化,并将修改后的程序与原来的程序进行比较,尤其是比较输出结果,然后分析修改部分对运行结果的影响。
创是学生已经掌握了较强的C编程能力后尝试解决实际问题[12]。将实际问题抽象,提取特征,完成设计。如可以设计成绩统计系统,贪吃蛇游戏等程序。这个过程的目的是培养学生运用已学知识解决实际问题的能力。教师可以将往届的资料提供给学生,让学生提前锻炼自己,挑战自己,让他们提前进入参赛状态,了解参赛难度,以及自己的潜力,享受解决问题带来的成就感。
2.4 竞赛的开展
鼓励学生多参加C语言编程竞赛。竞赛是对学生设计能力、实践能力、心理素质、团队精神以及体力的一个极大挑战。在检验学生综合运用知识的同时,更侧重于锻炼学生的实际动手操作能力,使学生真正利用C语言完成程序设计,解决实际问题。这个过程不但使学生的课程知识得到加强,团队合作能力,心理素质得到提高,动手操作能力得到锻炼,是对学生综合能力的全面考核。学校可以开展各类计算机竞赛,甚至可以将竞赛纳入学分,这样可以促使学生积极参加竞赛,调动学生的学习热情,使学生勇于思考,勇于创新。
2.5 课后作业的改进
课后作业是对课堂知识巩固和理解的必要手段。根据电类专业的特点,建议采取独自作业和合作完成相结合的方式。独自作业主要是对课堂上所学的知识细节加强练习,加深记忆;合作作业是团队合作完成各自抽取的题目。在团队合作的过程中,大家各抒己见,探讨问题,交流知识,在合作的过程中,学生的设计思维得到锻炼,模糊的知识点得到互补,学习效率会有很大提高。
3 结语
作为电类专业的一门基础课程,C 语言程序设计的教学不仅培养了学生分析问题、解决问题、编写程序的能力,而且使学生懂得程序设计的方法。电类专业本科生可以充分利用C语言程序设计基础进行后续图像处理,信号处理等课程的学习,为毕业设计和未来的工作都打下了很好的基础,将来可以更好的与程序开发人员沟通与合作,开发与本领域有关的计算机应用程序。
结合具体教学改革,从2012年和2015年两次修订本科生教学大纲以来的几年教学实践表明,适当减少理论课细节讲授,加大实践环节力度,完善考核方式,团队合作完成作业等这些改进方法符合当下的实际情况,实施起来相对新型教育方法更具有可操作性,收到了良好的效果。同时这些方法以培养学生的学习积极性,加强实际编程能力,提高程序设计的思维方式,提高创新与合作能力为宗旨,真正做到以学生为主,以学为主。
[1] 刘芳, 秦兴国, 王宇英. 《C语言程序设计》教学存在的问题及改进[J]. 教育理论与实践, 2012(36): 51-52.
[2] 汪红兵, 姚琳, 武航星, 张敏. C语言程序设计课程中的计算思维探析[J]. 中国大学教学, 2014(9): 59-62.
[3] 徐新爱. 基于学科竞赛的《C语言程序设计》课程教学改革研究[J]. 西南师范大学学报(自然科学版), 2015(9):224-228.
[4] 李晓东, 魏惠茹, 董振华. 项目驱动教学法在计算机程序设计语言课中的探索[J]. 软件, 2015, 36(4): 107-109.
[5] 叶向前. 电大非计算机专业计算机教学现状及对策[J]. 软件, 2014, 35(2): 178.
[6] 施键兰, 黄文秀. 程序设计类课程中的教改研究[J]. 软件,2016, 37(3): 34-35.
[7] 施键兰, 黄文秀, 杨立娟. C 语言程序设计教学探讨[J].软件, 2013, 34(1): 171-172.
[8] 孙晓妍. C 程序设计中循环结构的教学设计与探讨[J]. 软件, 2014, 35(3): 219-221.
[9] 李建伏, 沈中林, 衡红军. 案例教学法在面向对象程序设计课程中的应用[J]. 软件, 2015, 36(3): 48-51.
[10] 王蕾. 计算机上机实践课程改革探索[J]. 软件, 2014, 35(2):172-173.
[11] 彭星堂, 谢华成. 高等院校理工科计算机公共课教学改革研究[J]. 软件, 2014, 35(2): 169-171.
[12] 孙立民, 梁国业. 信息与计算科学专业实施大工程教育的理论与实践探索[J]. 软件, 2013, 34(5): 153-154.