何钰娟
摘 要:C语言课程包括语法与算法两方面的内容,二者密切相关,对于写好一个C程序,缺一不可。鉴于以往教学中存在的问题——轻算法/重语法,或轻语法/重算法,都无法很好的培养学生的程序设计能力。因此,我们将课程教学划分为六个模块,通过六个模块的训练培养学生六个方面的能力:灵活运用C语言语法的能力、读程序能力、写程序能力、程序调试能力、程序优化能力、规范编程能力,目的在于使学生不仅会编程序,还会编好程序。
关键词:C语言;模块化;程序设计
一、引言
20世纪90年代以来,C语言迅速在全世界普及推广,至今依然是最常用、最受欢迎的编程语言之一。同时“C语言程序设计”是很多高等学校的一门基本的计算机课程。该课程在计算机教育和计算机应用中发挥着重要的作用。
该课程最初的教学模式为:注重语句、语法细节的讲解,对如何用计算机解决问题的方法和思路讲得不够,课程的训练着重于C语言语法和简单程序的阅读,而对学生编程能力的训练不够。结果导致学完该门课程,绝大多数学生不会编程,这样就给后续课程留下了缺憾。针对这种情况,我们对该课程的教学进行了改革,具体为:课堂上注重编程思路的分析和讲解,对C语言本身只讲大语法,例如if语句的功能、循环语句的功能等,而更细节的语法由学生在编程实践中自己学习。几年的教学实践表明,我们的改革在提高学生的编程能力方面取得了一定的效果,但另一方面,我们发现由于在课程教学中侧重于编程思路的讲解及训练,C语法本身的讲解及练习偏少,而二本院校的学生其自学能力及学习的自觉性较差,导致很多同学在编程时思路正确,但由于对语法的理解不够深入,在编写程序时不能正确灵活地选用语句,程序出错时也不知如何修改,阅读程序的能力也很差。
“C语言程序设计”课程涉及到两个内容——C语言和程序设计。C语言是程序设计的工具,主要涉及语法和语义两个方面;而程序设计需要掌握对问题求解过程的理解与描述方法。两个概念密切相关但又互不相同,如果只会用工具,无法编写程序;如果只会程序设计的方法,不会使用或用不好工具,也无法编写程序。因此,我们对以往的教学模式进行了调整。
二、模块化的教学设计
(一)本课程的教学目标
“C语言程序设计”课程的核心教学目标就是教会学生使用C语言进行设计程序,使学生掌握程序设计的基本思想和方法,具有灵活应用这些思想和方法编写出C程序来解决实际问题的能力。同时,还要培养学生较强的程序调试能力和程序阅读能力,让学生学习基本的编程规范,养成良好的编程风格,了解程序优化的方法和原则,为将来编写高效的程序做准备。
(二)实施模块化教学,全方位、多角度进行编程训练
我们将课程教学划分为C语言语法理论练习、程序阅读、程序跟踪调试、程序优化、编程规范、程序设计六个模块,通过六个模块的训练培养学生六个方面的能力:灵活运用C语言语法的能力、读程序能力、写程序能力、程序调试能力、程序优化能力、规范编程能力。
1.C语言语法理论练习
在课程的学习中,C语言作为编程的工具非常重要。掌握基本的语法规则是编程的基础,如果不掌握必要的语法规则,连最简单的程序也编不出来,或者编出来的程序错误百出,无法运行。而C语言的语法知识点多、覆盖面广,因此我们创建了C语言语法理论练习题库,包括单项选择题、多项选择题、判断题几种题型,在每次上机课前给学生布置与本周上机内容相关的语法练习题作为上机预习内容,使学生先熟悉即将用到的语法,并且使用技术手段促使学生必须在上机课前完成预习内容,以保证预习效果,为上机课做好准备。
2.程序阅读
一切学习都从模仿开始,编程也一样。编程就像写文章,如果想成为一名卓越的作家,在能写出任何拿得出手的东西之前,需要品读其他伟大作家的文章,吸收不同的风格,看看前辈已尝试过的东西,從中吸取精华,自己的知识才会慢慢增长,自己的作品最终才会透露出些许成熟。编写代码和写作一样,对于程序员来说,阅读优秀的代码就如同作家阅读优秀书籍一样重要。
对于初学C语言的学生,阅读程序就从一本优秀的教材开始,要求学生将教材上的源程序代码一个一个的输入到电脑中,编译运行,并且用纸和笔记录下程序的运行过程,对每一个程序都认真剖析、认真阅读,在输入代码的过程中慢慢就可以品出程序的好坏了,例如,如果发现自己输入了很多重复代码,那就可以看出至少这个程序的结构就不好,需要改进。除了教材,还为学生推荐一些经典的C语言书籍,让学生阅读和剖析书上的源代码。我们还收集了经典的程序代码,为学生布置阅读程序的作业,作业的形式多样,有传统的读程序写结果的题型,也有自己设计的新题型,例如选程序注释、为程序添加注释等,选程序注释就是给出源代码,让学生为指定代码选择已给出的注释;为程序添加注释就是给出源代码,让学生为程序的指定行添加注释。
3.程序跟踪调试
在程序的开发过程中,程序调试的重要性并不亚于编写代码,因为一个设计得再好的程序,也难免会出现错误,这些错误需要通过调试来排除,通常程序的功能越复杂,调试过程的工作量也就越大。
编写程序时可能产生的错误通常可以分为三大类:语法错误、运行时错误和逻辑错误。语法错误是程序代码违反了C语言的语法规则而产生的错误,语法错误在编译阶段就会被编译器检查出来。
运行时错误只有在运行时才会体现出来,例如,在应用程序过程中打开了并不存在的文件,或者使用越界的指针等等。运行时错误可以在集成调试环境下通过设置断点、单步跟踪、添加监视等方法来查找和排除。
逻辑错误是由于程序算法不完善而产生的运行结果不符合程序设计功能的问题,这一类错误比较难以检查,一般需要通过监视和检查程序中数据的变化情况,来检查错误发生的位置。
大多数初学C语言的学生在面对错误提示时,无从下手,不知错在哪里,如何修改。为了培养学生调试程序的能力,对于不同的错误类型采用不同的方式教学。对于语法错误,我们将常见的错误编成一个文档提供给学生,供学生查阅,同时要求学生上机写程序时每个人都带一个小本子和一支笔,当程序出现语法错误时,记下英文错误提示信息和解决相应错误的方法,用于积累经验,避免以后编程时再犯同样的错误或犯了错误知道如何修改,此外,还布置程序改错题对学生进行相关训练。对于运行时错误和逻辑错误,我们为学生介绍了不同的调试方法,例如使用注释程序的方法缩小错误范围,使用增加printf函数查看程序运行中相关变量的变化,使用调试工具监视和检查数据变化情况来判断错误位置。此外,还设计了程序跟踪调试的题目训练学生,让学生在实际的操作中学习和领会调试工具及调试方法。以下是我们设计的有关调试练习的一个题目,该类题可以实现计算机自动评阅。
4.程序优化
程序优化指的是针对同一问题的不同程序进行比较、调整或修改,将程序变为语句比较少、内存占用量比较小、运行速度比较快的程序。每一个学习程序设计的人都应该了解程序优化的一些常用方法和技巧。在课程中我们为学生介绍了一些程序优化的原则(主要是运行时间的优化),还设计了一些程序优化的题目让学生练习,在期末考试中也要考核,目的是使学生了解程序优化的概念,具有程序优化的意识。
5.编程规范
现在我们用的软件都是规模相当大的,非常熟悉的Windows操作系统,Office办公软件,各种网络管理软件等,都是需要一个庞大的研发团队才能完成,如果没有规范,那开发出来的将是一堆电子垃圾,没有任何用处;没有成功的规范,一定没有成功的软件;大型软件的成功并不是某个人的智力决定的,它是严格按照规范来生成的。
有人说,印度十个人编程,会编出一样的东西,而中国十个人编程可能会有十种风格。因为我们忽略了一个重要问题,即“顾客”的感受,程序的编写是给别人看的,而不是只给我们自己看。因此,我们参考了业界比较推崇的一些编程规范,制定了适合C语言初学者使用的编程规范,目的在于培养学生良好的编程规范和意识、素质,促进所设计程序安全、健壮、可靠、可读与可维护。在课上我们强调和要求程序的可读性、规范性等编程规范,在平时的作业和期末考试中,一个程序的得分由程序结果和编程规范两部分决定,计算机会对程序结果和编程规范进行评阅,程序中如果有3个或以上的规范错误,该程序计为0分。
6.程序设计
程序设计课程就是要培养学生利用计算机分析和解决问题的能力,学习怎样用计算机的方式去思考和解决问题。程序设计不是听会的,也不是看会的,而是自己练会的。学生只有在编写大量程序之后,才能获得真知灼见,找到感觉,最后能运用自如。因此,我们给学生提供了大量的上机练习时间,上机时我们将机房设置为实验环境,学生在限定的时间、限定的机房内完成老师布置的程序,并由计算机自动评分,如果发现有错,还可以根据提示反复修改提交。在实验环境下,由于无法使用U盘等外部设备、无法使用外网,学生之间无法互相拷贝程序,每个学生都只能自己动手,不可能依赖其他同学,无法吃大锅饭。
除了上机实验课的编程,为了让学生巩固所学,还布置了课后编程作业,也是限定时间提交,计算机自动评分。
期末考核也采用全机考的方式,不考死记硬背的东西,考核学生程序设计、程序调试、查阅资料等能力,计算机自动评分,对就是对,错就是错。
通过大量的编程练习,学生编写程序及调试程序的能力普遍有了较大提高。
三、结语
“C语言程序设计”是一门重要的课程,对于零编程基础的学生来说,同時又是一门困难的课程,为了上好这门课程,多年来我们一直致力于该课程的教学研究和改革,经过多年的努力,我们的教学取得了良好的效果。
参考文献:
[1]谭浩强.C程序设计(第四版)[M].清华大学出版社,2010.
[2]李越辉.C语言程序的跟踪与调试[J].东西南北(大学生),2007,2:38-41.
[3]马晓娟.浅析程序的优化[J].电子制作,2014,11:89-90.
[4]郑秀雷.计算机教学过程中关于编程规范的一点思考[J].科教文汇,2011,30:53.
[5]吴文虎,等.程序设计基础(第3版)[M].清华大学出版社,2010.
(作者单位:成都信息工程大学)