侧重实践,分散难点

时间:2022-09-08 12:43:46

侧重实践,分散难点

摘要:“C语言程序设计”是高校多数非计算机专业本科生的必修课,也是学生普遍认为非常难学的课程。为了降低难度,笔者提出从调整授课顺序和改革教学内容两个方面入手,进行改革。实践证明,这一做法能够取得比较好的教学效果,学生的程序设计能力也较以前有明显提高。

关键词:C语言程序设计;教学效果;授课顺序;教学内容

中图分类号:G642 文献标识码:B

文章编号:1672-5913 (2007) 20-0067-03

随着计算机在各个专业领域的普及,许多非计算机专业的本科生都需要在学习和工作中根据专业的特点编写实用程序。以“C语言程序设计”(下面简称为“C语言”)为代表的“程序设计”类课程是高校多数非计算机专业本科生的必修课。通过系统地学习该课程,学生主要学习两大类的知识:一种流行的程序设计语言(例如C)和程序设计初步。其中,程序设计的思维方式以及与之相关的概念、操作等都将比较系统地介绍给学生。

按照传统的教学模式,学生普遍认为《C语言》比较难学,而且在后续课程学习中也不能很好地用它进行程序设计。学生程序设计能力普遍偏低,主要体现在两个方面:编写程序的效率低和程序的质量低。就此,国内有的学者提出通过按照专业调整授课重点、补充多媒体等教学手段激发学生兴趣、通过“精选”、“精讲”、“勤练”等方式提高授课质量[1]。

在讲授过程中,笔者对比和研究了多种教学手段和国内外计算机程序设计语言类教材[2~8],并进行了小范围的实验,最终发现,单纯改革教学方式能够收到一定的教学效果,但是受教师本身教学水平的影响比较大,不会从根本上解决问题。另外一个结论就是传统教学中有两方面值得推敲:一方面是授课顺序,另一方面是教学内容。

1传统的教学顺序

传统的“C语言”教学中,概述之后往往要用两章的篇幅(大约10学时)分别介绍数据类型和运算符,然后依次是程序控制结构、数组、指针、函数等知识。这种教学顺序可能来自于教材的编纂顺序。笔者认为,这种顺序比较适合于编写产品使用说明书,而不适合组织教材,更不适合教学。它存在如下两个问题:

(1) 初期的知识点过于繁多。以数据类型部分为例,C语言中用于修饰数据的基本数据类型只有4个(分别是char、int、float和double)。如果只是简单介绍,这些内容并不多,但在这部分通常还要讲述short、long、signed和unsigned修饰,其他进制整数的表示、各种小数的表示、字符和字符串的表示、各种数据的输入和输出、输入输出数据时格式的控制等等。如果学生已经基本掌握了C语言,作为复习,倒还可以按此方式总结,但在学习伊始就要面对如此繁杂的内容,确实有些不妥。调查发现,学习完这部分内容以后,许多学生都表示听明白了,但什么都没有记住,更谈不上如何在程序中使用,为什么要这样用等。甚至有的学生在进行到一半的时候就产生了畏难情绪和放弃思想。类似的问题在讲授运算符部分时也存在。

(2) 数组、指针和函数比较难掌握。这是整个课程的重点和难点部分,其中既包括很多新的概念和相应的操作,还包括课程要求掌握的大部分算法。学习完这部分内容之后,学生普遍反映能够读懂程序,但不能熟练编写和调试程序,因此有必要研究这部分内容的教学方法。

2调整授课顺序

从软件工程的角度分析,C语言属于结构化程序设计语言。结构化程序设计的一个突出特点是程序要围绕着数据展开。就此,笔者根据几本国内外语言类教材的组织方式[2-8],并站在初学者的角度,本着由问题引入、由浅入深的原则,重新组合了部分内容,分散了知识点和难点,基本消除了上面提到的问题。具体说明如下:

(1) 按照程序处理对象安排教学顺序。围绕着不同类型的数据,我们把整个教学过程主要分成三个阶段进行。第一阶段采用以int型数据为例,重点介绍整型数据及其相关操作,例如常量、变量、定义、输入、输出、计算等概念。第二阶段在前一阶段的基础之上,通过简单扩充,讲授完float、double等其他数值型数据的相关概念和操作等知识。最后一个阶段讲授有关字符与字符串的概念及其操作。

(2) 综合介绍数组、指针和函数。数组、指针和函数是C语言中的重点和难点部分。这三个概念之间既包括相互独立的部分,也有相互重叠的部分。在讲授的时候,最好按照各部分的难易、重叠关系安排教学顺序。为此,我们把这部分也分成三个阶段进行。第一阶段,仍然以整型数据为例,重点介绍三部分的基本概念和操作。第二个阶段重点介绍要求掌握的算法,例如排序、查找等。第三阶段,重点讨论涉及字符串的概念和操作。当然,如果能够把前后两部分综合考虑,从整体上划分成三个阶段讲授,会使得课程更为紧凑。

经过这样划分以后,由于每一阶段都针对特定的数据类型展开,所以不论是学生理解和掌握,还是教师的备课和授课,都将轻松许多。经笔者小范围实验证明,调整之后也确实取得了令人满意的教学效果。

3调整课程内容

当然,这里说的调整课程内容并不是说哪些专业适合学习C语言,哪些专业不适合,什么专业适合学习哪部分内容等有关分级教学的问题。《中国高等院校计算机基础教育课程体系2004》(简称CFC2004)提出计算机基础教育的理念是:“面向应用需要;采用多种模式;启发自主学习;重视实践环节;培养创新意识;树立团队精神。”传统的《C语言》教学中,多以介绍语法为主,所讲述的程序或者是针对理想数据的验证性程序,或者是简单的算法,例如数组的排序、检索、插入与删除元素等。这些内容当然重要,但是它们都是针对理想数据、特定情况展开的。因此,学生按照这种方式学习了一个学期之后并不能保证顺利编写和调试具有实用价值的简单的小程序。

为了使学生具有一定的实践能力,笔者认为需要从两个方面调整课程。第一个方面是修改例题。具体地讲,就是要改变原来程序的给出方式。原来的方式是在简单分析之后直接给出程序的。笔者认为,例题必须从零开始,按照自顶向下逐步细化的设计过程逐步给出,尤其是比较靠前面的例题和比较复杂的例题更应如此。

另一方面是补充有关程序调试、测试方法和异常处理等方面的知识。其中,程序调试方法至少包括设置断点、跟踪、查看变量的值等操作。测试方法主要介绍黑盒测试和白盒测试。针对初学者的特点,不妨把异常处理的重点放在以scanf为代表的输入函数上。除了上面这些内容以外,根据专业需要,笔者认为针对不同的专业,还可以考虑补充有关人机界面设计和程序格式方面的内容。要补充的内容看似很多,其实,只要在讲授例题的时候调整一下方式方法,就可以使学生在潜移默化中掌握这些内容。

异常处理是所有补充内容中最不容易实现的部分。因为一般情况下,scanf出现在课程的初期,而异常处理则出现在课程的中期或者后期。按照完全沉浸法解决这个问题的一种策略是教师编写具有异常处理功能的输入函数myScanf,替代原来输入函数scanf,供学生使用。到后面讲述异常处理的时候,再剖析myScanf的设计。这样的好处是既培养了学生处理异常情况的习惯,又教会了学生处理异常的常见方法。可谓“一举两得”。

为了便于交流,下面简单介绍一下myScanf的设计思路。在C语言中,最为常用的输入函数就是scanf,它主要包括3个组成部分:作为第1个参数的格式字符串部分,作为后续参数的地址列表,以及该函数的返回值。地址列表按顺序提供了存储各输入数据的存储单元的地址;格式字符串部分是程序员明确定义的输入数据的顺序、数据类型、个数等信息。可以把scanf函数的执行过程描述为:操作者通过键盘输入数据,程序按照格式字符串分解输入的数据,并把它转换成一个相应的值,最后再按照地址列表中的地址存储;重复前面的分解、转换和存储过程,直到格式字符串为空。当分解出的数据非法时,scanf函数将终止运行。返回值描述的是正确接收和存储的数据个数。初学者在使用scanf函数时,问题主要包括:

(1) 缺少或者不会给出提示信息

(2) 编写程序时,格式字符串中格式转换说明符与后面的地址在数据类型、个数、顺序方面不统一

(3) 运行程序时,输入的数据与格式字符串不匹配,造成不能正常接收部分数据

(4) 运行前面scanf时多输入的数据会影响后面输入函数读取数据

myScanf围绕着上述问题展开。由于根据地址很难判断出数据类型,此外,按阶段教学时,数据类型也非常单一,因此在myScanf函数中可以不处理有关格式转换说明符与后面地址的数据类型是否匹配的问题。

据此,设计myScanf函数的流程图如图1所示。教学中,可在此基础之上根据学生实际情况增减功能。

4结束语

诚然,提高学生程序设计能力绝对不是靠一门“C语言”就能够做到的,但对于非计算机专业的学生来讲,由于后续的相关课程非常少,该课程的学习效果将直接影响到他们的程序设计能力,因此笔者认为有必要仔细研究在不开设后续课程的基础上,如何调整以C语言为代表的语言课程的教学方法。

在近几年的教学中,笔者尝试在不增加学时的情况下,调整了教学顺序,用符合上述规范的例题替换了原来过于简单的例题,同时也要求学生按此规范编写程序、完成实验。从作业、实验情况等反馈信息来看,学生的程序设计能力明显提高,取得了比较好的教学效果。

参考资料:

[1] 雷学生,胡多. C语言程序设计教学方法探讨[J]. 计算机教育,2006,(6).

[2] K&R. The C Programming Language[M]. 北京:清华大学出版社.

[3] Bjarne Stroustrup. C++程序设计语言(特别版影印本)[M]. 北京:高等教育出版社.

[4] Richard C. Detmer. 80X86汇编语言与计算机体系结构[M]. 北京:机械工业出版社.

[5] Bradley L. Jones, Peter Aitken. 21天学通C语言(第6版)[M]. 北京:人民邮电出版社.

[6] 面向对象程序设计[M]. 北京:机械工业出版社.

[7] 谭浩强. 程序设计[M]. 北京:清华大学出版社.

[8] 彭旭东,王成霞,万红. 程序设计教程[M]. 北京:清华大学出版社.

作者简介

彭旭东(1971-),男(汉族),副教授,研究方向:数字图像处理、并行计算。

联系地址:天津理工大学计算机科学与技术学院 300191

电话:13752123198

E-mail:

上一篇:Inventor在建筑设计中的应用和技巧 下一篇:“计算机组成原理”课程阶梯化教学研究