C程序设计教学初探

时间:2022-07-05 03:52:36

C程序设计教学初探

摘要:从C程序设计的教学实践出发,讨论了C程序设计课堂教学中需注意激发学生学习兴趣、培养学生程序设计思想和现场编程教学等问题,以及实验教学中需注意引入具有一定规模的综合实验和培养学生良好的编程习惯等问题,并论述了培养学生自学能力及综合评价学生成绩的重要性。

关键词:C程序设计;课堂教学;实验教学

中图分类号:G642.0文献标识码:A文章编号:1009-3044(2011)25-6269-02

On the Teaching of C Programming

JI Xiao-hui, YAN Hong-ping, XIN Xiao-hui

(School of Information Engineering, China University of Geosciences(Beijing), Beijing 100083, China)

Abstract: Based on teaching practice, this paper discussed the methods in the class teaching and the experimental instructing. In class teaching, this paper emphasized the importance of stimulating the students' learning interests, training their programming thought and the teaching in real-time programming. In experimental instructing, this paper focused on how to introduce a large-scale problem and to train the students to have a good programming habit. The importance of training the students' self-learning ability and offering a comprehensive review of the students' performances was described.

Key words: C programming; class teaching; experimental instructing

C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好[1],以其为语言编制出的程序具有较强的结构化及模块化特点,并且可以直接对硬件操作,因此C语言是各高校理工科专业大一学生学习计算机程序设计所广泛使用的一种语言。通过本门课程的学习,学生不仅可以掌握此种高级程序设计语言的语法和语义,还可以掌握结构化程序设计“自顶向下、逐步求精”的思想及方法、常用的算法及实现技术,以及分析和解决实际问题的语言应用能力,是一门以激发学生的程序设计兴趣、培养学生探索精神和实际编程能力为重点的课程[1]。

但由于课程面向的是大一学生,此时学生还没有接触专业课,不能将专业的实际需要与本门课程的学习联系起来,对课程地位认识不足,因此存在对课程的兴趣不大、学习动力不足、主观能动性差、投入精力有限等问题。同时,学生此时尚不具备程序设计思想,往往会感到C语言规则繁多,枯燥无趣,看似明白,但上机出错,且不知道如何解决实际问题,不能学以致用。因此,学生如何学好、教师怎样教好基于C语言的程序设计课程成为学生和教师普遍关注的一个问题。

该文从教学实践出发,提出了一些C程序设计教学需注意的问题,并针对这些问题提出了相应的改革措施。

1 C程序设计课堂教学中应注意的问题

1.1 激发学生学习兴趣

如前所述,本课程面向的是大一学生,其尚不具备专业知识,不能将专业的实际需要与本门课程的学习联系起来,对课程的地位认识不足,缺乏学习兴趣。针对此情况,教师可以在绪论部分根据所教专业的具体特点,以具体实例来强调其将来可能从事的工作与本门课程之间的联系。以电子信息工程专业的学生为例,教师可以强调其未来可能从事的电路设计工作需要正确性的验证,而电路的正确性验证需要将所学的专业知识通过计算机语言这一桥梁教给计算机来进行处理,从而将学生未来的实际工作需要与当前所学的课程联系起来,激发学生的学习兴趣,增加其学习动力,调动其主观能动性。

除此之外,还可以以学生经常使用的网络浏览器、聊天工具、银行的ATM机、车站售票系统等软件为例,说明程序设计语言可能生产的具有各种功能、能满足各种实际需要的产品。以此为基础,强调C语言是当今使用最广泛的计算机语言之一,并且许多新型的计算机语言也是以C语言为基础或与之相似的,学完C语言后,可以很快地掌握其他语言,并且在C语言学习过程中所学到的程序设计思想,实际问题的解决能力同样适用于其他计算机语言,以进一步提高学生学习C语言的热情。但教师需要同时强调,要真正地学好程序设计,必须脚踏实地、打好基础、重视细节、勤于实践。

1.2 突出程序设计思想

作为程序设计类课程,学生不能只拘泥于具体的语法,必须对程序设计的基本思想和方法有一定的了解。本门课程的教学目的不仅要使学生能够读懂程序,还要使学生能够通过编写C语言程序去解决实际问题。因此本门课程对学生的分析问题、解决问题的能力的引导和培养是非常重要的,需要把逻辑与编程解题思路的教学放在重要位置上。同时要注意讲授时的重点放在程序设计思路、算法及编程的构思和程序的实现上,避免语法的过细阐述,防止学生产生“只见树木,不见森林”的体验,引导学生在解题编程的实践中探索其中具有规律性的认识,将感性认识升华到理性高度,让学生尽量做到举一反三。

针对刚开始程序设计时学生不知如何下手这一普遍现象,可以结合所教内容所用到的具体实例,引导学生使用“数据输入、运算处理和结果输出”的步骤进行编程。在“运算处理”步骤上,可以将结构化程序设计思想的“自顶向下,逐步求精”的方法渗透给学生,具体可以先以伪代码的形式写出概要算法,再逐层分解,并逐步以所学的C语言替换之,最终转化成可以解决实际问题的源程序。通过此种方法既解决了提出的问题,也让学生学到了程序设计的方法。此种方法可以贯穿课程的始终,以强化学生的程序设计思想,提高学生分析问题和解决问题的能力。

1.3 现场编程解决问题

由于课程面向的是大一学生,绝大多数学生没有任何编程经验。因此本课程的另一项重要任务就是教会学生熟练地使用常用的软件开发环境进行编程和调试。为达到此教学目的,最好的方法就是结合所教内容所用到的具体实例进行现场编程及调试。在向学生交代清楚所求解的问题及所采用的算法后,可以先在所用的软件开发环境中以伪代码的形式写出概要算法,再逐层分解,并逐步以所学的C语言替换之,最终转化成可以解决实际问题的源程序并现场编译。对编译出现的问题进行现场分析及排错,或者对于编译通过但结果出现逻辑错误的程序进行现场调试,以提高学生分析、解决编程中出现的问题及相应的调试能力。这种方法虽然加大了教师授课的随机性和难度,但却可以充分调动学生的学习积极性和主动性,可以给学生留下更深刻的印象,深化教学效果。

另一方面,现场演示编程可以进一步加深学生对知识点的理解。例如,学生不易理解“指针一定要初始化”的问题,此时,教师可以进行现场编程,打印出或者通过调试状态观察指针的值,让学生明白如果指针不初始化,那么其值是不确定的,而在指针不确定指向哪里的情况下对指针指向的内容进行修改,不仅得不到正确的结果,还是非常危险的。另外,还可以对将较复杂的程序进行调试,以单步跟踪的方式监控某些变量在程序执行过程中值的变化,加深学生对程序执行过程的理解,进一步帮助学生理解算法。

2 C程序设计实验教学中应注意的问题

2.1 引入具有一定规模的综合实验

C语言程序设计是一门实践性很强的课程,课程的最终目的是让学生能够综合应用所学知识通过实际上机编程解决应用问题,因此上机实验是教学过程中必不可少而且至关重要的环节。在上机实验内容上,既要有比较简单的验证性题目,也要包含具有一定难度的设计性题目,每个知识点的题目都应由易到难,循序渐进,并具有一定的趣味性,以更好地调动学生的学习兴趣。为了锻炼学生解决复杂问题的能力,可以要求学生在期末时提交一份具有多个功能模块、相对较为复杂的大作业,并将其完成的好坏作为最终成绩的一部分。为了让学生能够体会所学各章知识点不是相互孤立、而是彼此联系、是构成大型程序的必要组成部分,可以将所要求完成的大作业根据各章不同的知识点进行任务分解,并在各章的实验部分予以完成,最终课程学完后,学生也完成了一个相对较为完整、复杂的程序。

以“学生成绩管理系统”为例,在课程开始就可以把该系统演示给学生,让学生第一次看到用C语言开发出的界面友好、功能完善的综合软件,并将其各部分的实现方法与所学各章的知识点进行简要的对应性介绍,并告诉学生,完成本门课程的学习就可以编制出类似软件,以激发学生的学习兴趣。在具体到各章的实验任务上,在学习了输入/输出语句后就可以让学生实现简单的显示界面及菜单;学习了数据类型及分支结构,就可以要求学生实现菜单选择;学习了数据类型、输入函数及循环结构,就可以要求学生实现成绩的录入及分数的计算;学习了数组,就可以要求学生实现成绩的排序,让学生明白,复杂的程序实质上也是通过简单语句及函数的拼接来实现的,在潜移默化中培养了学生采用模块化方法解决实际问题的意识。学完结构体及文件后,可以要求学生分别使用结构体及文件来实现学生成绩的管理,并与前面所使用的方法予以对比,使学生能从整体的角度来审视整个程序的设计过程并进行不同方法的对比,以加强对所学知识点的理解,进一步通过上机综合调试,达到提高编程能力的目的。

2.2 培养学生良好的编程习惯

良好的编程风格可以增加代码的可读性和可维护性,有利于团队合作以及别人帮助改正错误,并能帮助编程人员理清头绪,提高调试效率,是产生高质量程序的前提。本门课程是学生学习程序设计的入门课程,在此阶段就应该要求学生养成良好的编程习惯,注意编写程序时的缩进方式、注释、对于变量、函数以及文件等标识符应做到“见名知义” 以增强程序的可读性和可维护性、程序写到一定的阶段时进行测试等,尽量使程序看起来清晰、简洁、一目了然,为学生今后的编程建立良好的习惯和基础。

3 C程序设计教学中应注意的其它问题

3.1 培养学生的自学能力

当代科学技术发展迅猛、知识更新速度愈来愈快,计算机领域尤其如此,新的语言、新的技术层出不穷,如果学生的学习完全依靠教师,没有一定的自学能力,对其将来的发展是很不利的。C语言程序设计课程的知识点多,课堂授课时间有限,因此教师在授课上需要重点突出、抓大放小。所谓抓大是指强调程序设计思想以及重点、难点的讲解,放小是指淡化C语言中语法细节的讲解,而是引导学生通过课后自学,动手上机等方式进行学习。其中需要讲授的重点和难点包括变量、数据类型和表达式、选择结构、循环结构、一维和二维数组、函数、结构体和指针等,需要淡化讲解的知识点主要是学生编程过程中用的相对较少、后续课程学习中会学到的内容[2],比如多维数组、共用体、链表应用等。在重、难点内容的讲解上,教师要注意耐心、仔细、尽量降低学生的畏难情绪,引领学生掌握要点,以避免由于某一环节的缺失而影响后续知识的学习,进而降低对本门课程的学习兴趣。

另一方面,由于学生的个体差异,有的学生在较短的时间内就能完成所学内容甚至可以超前学习,对于此类学生教师可以鼓励其在在线评测系统(如、等)上进行练习,在线评测系统的特点是对正确性的评判极为严格,不仅要求逻辑上正确,而且数据的格式也要相符合,学生必须考虑到每一个细节和特殊边界条件,而不是大体上正确就能通过测试,这对于培养严谨、周密的程序设计思想及风格极为有效[3]。同时也可以鼓励这些优秀的学生帮助其他学生解答问题,调试程序,对于出现错误的学生也鼓励其为那些出现同样错误的同学进行解答、调试,以加强学生的理解,并以榜样的力量促进良好的学风建设,形成良好的学习氛围,促进整体的学习进步。

3.2 综合评价学生成绩。

C程序设计的教学目标之一是培养具有实际上机编程能力的学生,因此其上机实践能力应纳入到考核范围中来。具体可以在每堂实验课结束之前,随机抽查学生的实验结果,要求学生讲解程序执行流程,并能够针对教师对程序的改动进行现场调试和纠错,根据学生具体的完成情况予以评分,以增强学生的实验重视程度。在全部实验课结束时,可根据实际情况,对实验进行单独的实验期末考核。

另外,还可以引入期中考试,一方面可以让学生有机会了解自己的学习和掌握情况,激励好的学生,为没有学好的学生敲响警钟;另一方面,也有利于教师及时了解自己的教学效果,调整和改善教学方法。

4 结论

该文认真研究和分析了C程序设计的教学现状,并学习了其它学校的先进经验,与相关授课教师进行交流,以及结合我校学科建设特点和学生水平,提出了C程序设计课堂教学及实验教学中应注意的问题,并提出了培养学生自学能力、综合评价学生成绩的必要性及方法。

参考文献:

[1] 谭浩强. C程序设计(第四版)[M].北京:清华大学出版社,2010.

[2] 张艳明. C语言程序设计教学体会浅析[J]. 电脑知识与技术, 2010(4):2690-2691.

[3] 李文新, 郭炜, 余华山. 程序设计导引及在线实践[M].北京:清华大学出版社, 2007.11.

上一篇:关于黑盒测试用例设计方法的研究 下一篇:基于剩余能量的LEACH算法优化的研究