“高级语言程序设计”课程教学改革与实践
摘要:针对教师与学生普遍认为高级语言“难教也难学”的现状,文章从教学内容、教学方法与手段等方面介绍了“高级语言程序设计”课程所进行的改革。实践证明,这些教学改革效果良好,不仅有利于培养学生学习兴趣,而且有利于培养学生分析问题与解决问题的能力。
关键词:C语言;教学内容;教学方法与手段;教学改革
中图分类号:G642文献标识码:A
1引言
我院“高级语言程序设计”课程是以C语言作为指定语言的。它不但成为计算机专业的必修课,而且也越来越多地成为非计算机专业的学习课程。但在“高级语言程序设计”课程教学中,许多学生都认为C语言涉及的概念比较复杂,规则繁多,使用灵活,容易出错,且程序设计课程逻辑性又很强,学生不能很好地理解算法,编写程序也很困难,教师教学和学生学习都感到困难,并在不同程度上产生畏难心理。特别是我院将C语言作为学生进校后首先接触的第一门专业基础课,这种现象尤为明显,而C语言基础打不牢会直接影响后续专业课程的学习。因此如何改革“高级语言程序设计”课程,进一步提高教学效果,成为专业课程建设中的一个紧迫任务。
本文根据多年的程序设计课程的教学实践,对“高级语言程序设计”课程从教学内容、教学手段、教学方法等方
面提出几点建议。
2教学内容
2.1教材的选择
我院一开始使用的教材是由谭浩强教授编著的《C程序设计》,该书的特色是针对初学者的特点和认知规律,精选内容,分散难点,降低台阶,例题较为丰富,通过深入浅出的叙述,阐明C语言复杂的概念,知识结构系统、清晰、通俗易懂。但在编程思路和编程技巧方面较为欠缺。
在2005级学生中使用了Harvey M.Deitel和Paul J. Deitel编著的《C程序设计经典教程》,该书的特色是应用软件工程原理讲述结构化程序设计方法,加强对控制语句和模块化的有效使用,并强调程序的清晰性,通过从各种渠道收集来的大量实例、习题以及项目,让学生能够有机会来解决现实世界中有趣的问题,对学生编程思路和编程技巧有很好的帮助。但在整个知识结构方面不如谭书系统和清晰。
由以上分析可知,两本教材各有利弊,经过实践比较,并结合我院学生的实际情况,现在计算机科学与技术系仍然使用《C程序设计经典教程》教材,而其他系使用《C程序设计》教材,但都给出若干本参考书,以弥补各自的不足。如电子信息工程系的参考书为:
《C语言设计教程》,薛万鹏等译,机械工业出版社
《C程序设计经典教程》,(美)Harvey M.DeitelPaul J.Deitl著,清华大学出版社
《从问题到程序——程序设计与C语言引论》,裘宗燕编著,机械工业出版社
《The C Programming Language》,Brain W.Kernighan,清华大学出版社
2.2课堂教学内容的改革
以谭浩强的《C程序设计》为例,教学内容主要包括C语言语法基础、数据类型、程序控制结构、函数、指针、文件等。教材在内容组织上,在语法上讲解过细、过多。在各章节的编程例子中,多数难度较大,分析较少;不够形象,学生较难理解,且适用性不强。笔者本着“深入浅出,突出实用”的指导思想,在课堂教学过程中,对教学内容重新进行了归纳,将难点再次分散,以缩小台阶,达到循序渐进。例如,C语言数据类型、运算符、表达式种类繁多,放在一块讲授,学生学习起来难度较大,且过于枯燥,于是笔者就将其分散在不同的章节。譬如,先介绍算术型的数据类型、运算符以及相关的表达式,使学生学习起来没有想象中的那么难,紧接着又教学生编写简单、实用的C程序,然后趁机引入基本输入、输出函数就顺理成章了。这样一来台阶小了,学生的信心也增加许多,学习积极性很快就被提高起来。对于生硬的语言叙述,尽量改用生动的、学生熟悉的例子进行比喻,进行详尽引导。例如,在开始学习指针的概念时,教材对“间接存取”叙述比较深硬,学生难以理解,就借用比喻:将A房间的钥匙放在B房间里,若要取A房间里的物品,就需要先打开B房间,取出A钥匙,再打开A房间,取出A房间的物品,这就是“间接存取”。学生很快就能理解,也加深了指针的概念。在教学过程中,还应及时查阅英文版教材和有关报刊杂志,对较难理解的概念,用不同的方式给以解释。
2.3实验教学内容的改革
“高级语言程序设计”是一门实践性很强的课程,既要掌握概念,更要动手编写程序。其主要任务就是培养学生具有一定的阅读程序、设计编写程序的能力,分析问题、解决问题的能力和逻辑思维的能力。因此,上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。
笔者对实验内容上进行了认真的探讨,在实验题目的设置上,应根据课时安排以及要掌握基本知识进行,一般一次实验给出2~3个实验题目,分为必做与选做。这样做的好处是一方面保留基础性实验,相对简单的基础编程实验。使学生能够较顺利地编写出程序,并及时理解和消化课堂教学内容,同时也使学生获得一定的成就感,使其学习热情得到进一步的提高。另一方面,增加一些实用性强的、难度略大的实验题目,以进一步提高学生的编程能力;同时还可以满足较高层次学生的需要。下面以电子信息工程系为例介绍实验内容的设置。
我院为非计算机科学与技术系和信息安全系开设的“高级语言程序设计”课程的实验学时是12学时,共4个实验。由于实验课时较少,在实验内容的安排上就显得十分重要。第一次实验安排在约6学时以后,实验内容是“熟悉上机环境、编写简单程序”,其目的是让学生熟悉C语言上机环境,学习完整的C程序开发过程和程序调试方法;理解简单的C程序结构。为学生课下上机练习打下良好的基础。鉴于函数、指针和文件是C语言的重点和难点,我们分别将其作为第二、第三、第四次的实验内容;其他各章我们也给出相应的实验题目,让学生课下自己上机练习。
另一方面要重视实验的总体要求,强调上机实验要经历三个步骤:
(1) 上机前的准备
让学生写出实验预习报告。内容包括对实验题目的理解和分析,选择适当算法,画出流程图并编写程序。分析可能遇到的问题及解决的对策。准备几组测试程序的数据和预期的正确结果,以便发现程序中可能存在的错误。
(2) 上机输入和编辑程序,并调试运行程序
首先调用C语言集成开发环境,输入并编辑事先准备好的源程序;然后进行调式。在调试过程中,要充分利用C语言集成开发环境提供的调试手段和工具,例如单步跟踪、设置断点、监视变量值的变化等。整个过程应自己独立完成。不要遇到一点小问题就找老师,学会独立思考,勤于分析,通过自己实践得到的经验用起来更加得心应手。同时加大实验的辅导。
(3) 整理上机实验结果,写出实验报告
实验结束后,要求学生整理实验结果并认真分析和总结,写出实验报告。实验报告要包括如下内容:
实验内容:实验题目与要求。
算法说明:用文字或流程图说明。
程序清单
3教学方法与手段
在教学方法上,从以教师为主体的“满堂灌”的方式转向以学生为主体、教师为主导的教学方法。有效地培养学生的分析问题与解决问题的能力。以“选择排序”为例,笔者没有平铺直叙地介绍算法与程序代码,而是先给出例题:在长度为10的数组中找出最小元素,并与第一个元素对调,引导学生编写出相应程序。然后给出新的问题:在后9个元素中最小值与第二个元素对调应如何修改;……;在后10-i个元素中最小值与第i+1个元素对调应如何修改;最后总结出选择排序算法的全过程,直至整个程序编写完整。即沿着问题带出算法,由算法带出程序设计语言的思路讲述C语言中的各个知识点。整个讲解过中结合板书,逐步引导,层层深入,取得很好的教学效果。
在C语言教学过程中,注意各章节讲述中的前后呼应和类比,加深学生的理解与应用。例如以“求1000以内的所有‘水仙花’数”例题为例,笔者先后分别在循环控制、数组和函数三章中进行了讲解,让学生自己总结出最佳的程序结构,提高编程能力。同时通过不同的解题方法,有利于学生加深对所学知识的理解,让学生真正体会到C语言的灵活性,激发学生的学习兴趣和求知欲。
另外在C语言教学过程中,还要充分发挥学生的积极性与主动性。笔者针对这门课程的特点,激发学生主动思考,课前可以给学生布置几个专题,让学生利用课余时间去思考、收集资料,并在课堂上组织学生发言和讨论。这种教学法不仅可以让学生获得许多课外知识,同时也促进教学内容的改革,而且也有利于充分挖掘学生的学习潜力。
在教学手段上,积极采用现代化的教学手段,如多媒体教学、网络教学等,这样有利于激发学生的学习兴趣,发展学生的主体能力;同时由于多媒体信息量大,也能够优化教学过程。但多媒体教学也有一些不利之处,主要体现在不恰当的使用会分散学生注意力,影响主要问题的理解,也不利于发挥学生的想象力。在C语言程序设计课程教学过程中,考虑到课程的特点,扬长避短,将传统教学与多媒体教学进行了有机的结合。例如可以将一些概念、语句的格式、大信息量的案例代码制作成课件,在课堂做展示供学生增加信息量用。但对于案例分析或程序的编写过程,就发挥传统教学的优势,进行课堂讨论、板书讲解、结合提问,将问题层层剖析、层层深入,达到师生互动的效果,学生的想象力也会得到充分的发挥,对问题的理解也变得更容易。另外,充分利用网络资源,将电子教案、大纲、课件、习题等放在网上,供学生自行调用,同时通过其QQ、E-mail等形式对学生的提问进行
答疑、讨论,以弥补课堂教学的不足。
4改革课程考核办法
建立一个服务于课程目标的学生学习评价方法是一项非常重要的工作,考核不是目的,“以考促学”才是考核的本质。
传统的期末“笔试”这种单一的、“一考定终身”式的考核方式,已远远不能满足课程的需要。为使考核真正发挥“以考促学”的作用,我们改革了考核内容和考核方法,重视对学生学习过程的考核,重视实际动手能力的考核,侧重考核学生对知识的融会贯通和灵活运用能力,而不仅仅是基本理论、基本知识的掌握。具体的改革措施如下:
(1) 变单一考核为复合考核,从多个方面对学生进行考核。课程总成绩由平时成绩、实验成绩、期中成绩、期末成绩四个部分构成。其中,平时成绩考核包括对出勤、随堂实训、课堂提问、作业等部分;实验成绩考核是针对课程的4次实验成绩。
(2) 衡量这门课学习的好坏,不是看学生“知不知道”,而是“会不会干”。期末试题考核的方法不用是非题和选择题,把重点放在读程序、编制程序和调试程序。
实践表明,这种考核方法不但能更客观地反映学生的学习情况,同时也能促进学生学习,起到良好的教学效果。
5结束语
本文教学内容、教学方法与手段的改革,是根据实际教学过程中学生存在的问题提出的,并已经在“高级语言程序设计”课程教学实践中加以运用,得到大部分学生的认可,取得了较好的教学效果。当然,同样的教学内容面对不同的学生,在使用与设计某种教学方法时,还要求学生的配合才行,也就是说教的方法与学的方法要有机统一。我们将继续努力探索,使“高级语言程序设计”课程教学日趋完善。希望本文能对大学计算机基础教学有一定的借鉴作用。
参考文献:
[1] 谭浩强.C程序设计[M].3版.北京:清华大学出版社,2005.
[2] (美)Harvey M.Deitel,Paul J.Deitl.C程序设计经典教程[M].4版.北京:清华大学出版社,2005.
“High-level Language Programming” Course Teaching Reform and Practice
XU Xiao-qing, LI Xiao-dong
(Department of Computer Science and Technology, Institute of Beijing Electronic Science and Technology, Beijing 100070, China)
Abstract: In view of teachers and students generally agreeing that high-level language is both difficult to learn and hard to teach, the “high-level language program design” course reform practice is introduced from the teaching content, teaching methods and means. Practice has proved that the reform of the teaching is effective, which will not only help students interest in learning, but also be conducive to train students’ abilities to analyze and solve problems.
Key words: C language; teaching content; teaching methods and means; teaching reform