C语言教学方法探析.doc_第1页
C语言教学方法探析.doc_第2页
C语言教学方法探析.doc_第3页
C语言教学方法探析.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言教学方法探析姚保峰(蚌埠学院计算机科学与技术系 安徽蚌埠 233030)摘要:C语言是目前各大高校都在讲授的一门程序设计语言。针对在实际教学和学生学习中的一些问题,本文叙述了对这些问题的感想和认识。一些问题可能是有争议的,希望这些的观点能够引起大家对C语言学习方法和目的的思考。关键词:C语言 设计理念 教学方法Abstract:The language C is a programming language which many universities teach. In view of studied in the field research and the students some questions, this article narrates the authors feelings and the understanding to these questions. Some questions possibly have the dispute, hoped these viewpoints can cause everybodys ponder to the study method and the goal of language C.Key words: Language C Design idea Teaching method0 引言C语言是早期最经典、最强大的面向过程的程序设计语言之一,虽然现在的程序设计已经全面转向面向对象,但是C本身的设计理念以及对现有C+/C#等语言的深刻影响,使其至今仍是程序设计入门的首选语言。目前各大高校也仍在开设C语言课程,很多高校还将C语言纳入校精品课程建设之中,可见C语言的地位仍然非常重要。在多年的程序设计教学中,笔者对C语言的教学有很多感触和心得,在这里希望能和大家分享。1 追求简单程序设计的目的是通过计算机来实现用户的各种要求,而这些要求需要由一定的算法来实现。一般来说,能够实现目标的最简单的算法,我们就认为是好的算法。对于现代的程序设计而言,并非所有算法都要达到时间和空间上的完美,这也是目前很多大的软件公司对程序员的基本要求。比如一段程序用数组和指针都可以实现,可是用数组或许会造成对系统资源的浪费,那么是不是专业的程序员们就一定会选择指针呢?不,大多程序员可能不会在意多占用一些资源,因为数组能带来最高的开发效率和最清晰的代码结构。其实,我们现在的C语言教学和考试中也存在类似的问题,过多的强调了一些实际应用中用不到的知识点,将简单的问题复杂化。比如在很多书上的自增运算部分,都有对j=i+ +i+ +i+这种表达式执行方法的介绍。我们为什么要用这样的表达式呢?大家都知道这种表达式在不同的编译器下可能会产生不同的执行结果,而且这样写出的程序是可读性很差的。可是我们的考试中却三番五次的出现这样的题目,这是在难为学生,也是在误导学生,因为在实际开发中几乎很少有人会这样去写。程序设计教学中,我们不能去盲目照搬和完全相信权威书籍和国际标准,权威的教材有时并非完美无瑕,自古就有“尽信书等于无书”的名言。国际通行的标准也不可全信,像ANSI C这样的标准本身就没有被大多数编译器100%的支持。所以,即使你的程序完全按照书上的要求编写,完全符合ANSI C的标准,也未必就是好的程序。简单的程序是最安全的程序,是被所有编译器支持的最好的程序,因此,追求简单往往是最正确的。2 避免背诵程序设计的基本思想不是背出来的,是通过不断的模仿、实践总结出来的。中小学的教育使学生的记忆能力极大提高,但是我们不能让学生把他们超强的记忆能力用在学习程序设计上。有人说,对于程序设计而言,如果教学中指明要学生机械背诵什么,那么这个教学是失败的;如果考卷中有需要机械背诵才能做答的题目,那么这个考卷是失败的。我特别同意这个观点。现在的程序设计语言还在飞速的发展,依靠背诵获取的知识早晚会被遗忘。如果一个学生是依靠背诵学习C语言的,那么当他再接触到一门新的语言时,又会发现自己根本无从下手。教学生写程序,就要让学生把写程序变成骑自行车一样,一旦学会,就不会忘记。当然,这来自于不断的理解和实践。当他真正掌握了程序设计的基本思路,不管以后使用哪一门语言,都能轻易上手。也许有人会说C语言中有些东西是规定下来的,不背诵怎么能行?但是看看现在的语言,不管是C+还是C#,里面大堆大堆的类库和方法难道你都能背下来吗?所以,我认为锻炼学生自己通过相关资料和网络获取知识的能力比让学生背下那些死的规定更有用。如果不是有应考的压力,我不会让学生去背什么运算符优先级,什么数学函数,字符串函数。书上网上那么多资料,想不起来了哪儿都能找到答案,干嘛要去死记硬背呢?有些东西用多了自然就记住了,用的少的背了也会忘,何必把时间浪费在这种无意义的死记硬背中呢?3 规范格式写程序必须要讲究格式吗?这个问题的答案就像写作文是否必须要讲究文体一样。有人觉得程序是为了实现既定功能的,格式规范不规范并不重要,尤其是在C语言的教学过程中,由于通常写的程序都比较短小,因此一些教师往往忽略了对学生程序格式的要求,甚至认为只要程序写对了,格式有没有问题并不重要。我觉得这是非常不可取的。因为C语言的学习阶段也是一个养成书写程序习惯的阶段,在这个阶段如果养成了不好的习惯,以后将很难改掉。懂得软件工程的人都知道,遵守规范的格式是对程序员最基本的要求。现在的程序都是程式化、团队式的开发,这要求每个程序员都按照统一的要求编写程序,这样写出来的程序才最清晰,最容易维护。如果一个团队中有一个程序员完全按照自己的想法和格式来写,可以想象会出现什么样的结果。因此,在教学过程中,教师要注意引导学生必须遵守规范,同时也要求自己在给学生做演示时,绝不出现不符合规范的写法。4 考虑全面 写程序有时很难,写出好的程序更难。众所周知,几乎没有那个程序是没有bug的,但是我们在写程序时应该尽可能的将程序的方方面面考虑全面,尽可能的消除程序中存在的隐患。教学中除了要让学生动脑筋把程序写出来,还应该培养学生全面考虑问题的能力。比如,很多书上在顺序结构一章中都有计算三角形面积的程序(程序要求通过输入三角形的三边长求出三角形的面积)。但是由于没有学过分支语句,所以书上给出的程序往往不对输入的三边长做任何判断就直接计算面积,这样的程序当然是不完善的。我们在教学中应该指出这个问题,不能只是把程序照书上的写出来解释一下就完了。再比如scanf函数,它是我们用的最多的输入函数,但是它本身不做任何函数参数类型检查,也不限制用户输入的字符串长度,这就为黑客采用“溢出”方式入侵提供了可能。还有像字符串结束标记“0”,如果它没有出现在应有的位置,那么printf、strcmp函数都可能出现越界防存的问题。这些问题如果在写程序时没有考虑到,那么这个程序本身就存在极大的隐患。因此,我们应该使学生对这些问题有一定的了解,培养学生全面考虑问题,缜密思考问题的习惯。5 重视原理在C语言的教学中,很多知识点涉及到计算机中的一些基本原理。那么这些原理要不要教给学生呢?对于计算机专业的学生这个问题没有讨论的必要,那么对于非计算机专业的学生是不是就不要介绍这些原理呢?我认为,答案是否定的。实际上,在讲解很多知识点的时候,如果不介绍原理将严重影响后续的教学和学生对相关知识的理解。举个最简单的例子,在介绍变量的时候,要不要介绍各种变量在内存中的存储方式呢?讲解整型变量时,要不要告诉学生在内存中是以数值的补码方式存放的呢?当然要,如果学生连这些都不理解,你又如何向他解释unsigned a=65535;printf(“%d”,a);的输出结果是-1呢?我认为,如果某个专业的学生学习C语言不需要了解任何原理,那么他一定根本用不着C语言,那么又何必让他们学习C语言呢?只有理解了原理,学生才能从根本上分析出一些复杂语法规则的合理性,才能更深入的掌握相关知识点。当然在实际教学中还面临一些问题。一般来说,C语言是一门开设较早的课程,往往学生只有一些计算机的基础知识后就开始学习C语言了。因此很多涉及原理的课程学生还没有学到。像操作系统、编译原理、软件工程这些课程都包含了C语言相关知识的原理,但是开设的往往都比较晚。因此对原理的介绍也要考虑到学生的接受能力。6 没有绝对哲学中有“没有绝对”的说法,在C语言教学中也同样如此。不要告诉学生哪个算法是绝对好的,或者哪个算法绝对不好,一切取决于具体的环境。就像前面我们提到的“追求简单”,同样也不是绝对的真理。如果你在做操作系统的内核开发,再去追求算法的简单恐怕就要出大问题了。再比如说goto语句,很多老师告诉学生写程序的时候绝对不要使用,因为使用goto语句是违背结构化程序设计的基本思想的。这种说法准确吗?1974年,算法大师D.E.Knuth(art of computer programming的作者)对于goto语句的争论作了全面的公正的评述,他的基本观点是:不加限制地使用goto语句,特别是使用往回跳的goto语句,会使程序的结构难于理解,这种情形应该尽量避免使用goto语句;另外,为了提高程序的效率,同时又不破坏程序的良好结构,有控制地使用一些goto语句是有必要的。用他的话来说:“有些情形,我主张废除转向语句,有些情形我主张引进转向语句。” 。因此,虽然关于结构化程序设计的讨论是从废除goto语句开始的,但是绝不能认为结构程序设计就是避免goto语句的程序设计方法。事实上,结构程序设计讨论的是一种新的程序设计的方法和风格,他所关注的焦点是得到的程序的结构的好坏,而有无goto语句并不是一个程序结构好坏的标志。也就是说,限制和避免goto语句是得到结构化程序的一个手段,而不是最终的目的。 所以,我们在向学生介绍相关内容时,要避免这种自以为是的“绝对”思想,这也对教师自身的水平和能力提出了更高的要求。7 与时俱进前面我们提到,现在的程序设计已经全面过渡到面向对象,无论C语言在过去如何盛极一时,我们都不得不承认,现在只会C语言已经不够了。看看各大企业的招聘条件就知道,没有几个公司愿意接收只懂C语言的程序员,所以我们的教学也应该做出适当的调整。可喜的是,现在大多数的C语言教材中已经加入了C+或者C#的内容。虽然只是简单的入门介绍,但是至少为学生的进一步学习埋下了伏笔,为他们指明了以后学习的方向。我觉得作为教师本身,也同样应该深入下去,学习C+/C#的相关知识。曾经在网上看到一篇文章告诫大学生在选修C语言时不要找只懂C语言而对C+/C#一窍不通的老师。我想这是很有些道理的。不可否认,C+/C#确实是更先进的程序设计工具,更符合现代的程序设计思想和设计要求,在很多方面与C语言也确实存在着本质的区别。对此没有任何基础的教师很难在深层次上指导学生,对一些问题的认识也难免比较有限。因此,教材和教师的与时俱进是摆在现时教学中的新问题。无论如何,我认为C语言的教学应该达到这样的目的:首先,让学生对程序设计产生兴趣,从学习C语言中找到写程序的乐趣;其次,让学生确定自己一定能学会C语言;最后,让学生知道如果想做程序设计方面的工作,自己应该如何深入下去。如果这些目的能够达到了,我想我们的教学应该算是成功的。参考文献1孙家启,王永国,张孟资等. C语言程序设计教程M.合肥:安徽大学出版社,20062王士元.C高级实用程序设计M. 北京:清华大学出版社,1996,63谭浩强. C程序设计M.北京:清华大学出版社,199

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论