提高C语言编程能力的几点策略
邓广彪+覃贤立
摘要:C语言是计算机专业的一门专业必修课程,是其他编程类课程的基础,在教学过程中起着重要的引导作用。但在教学过程中存在学生学习兴趣不高、应用能力不强、编程能力差等问题,针对这些问题,从上好第一次课、强化实践、重视上机、进行综合实践等方面提出相关策略。经过实践,证明这些策略是可行的。
关键词:C语言;编程能力;策略
中图分类号:G424 文献标识码:A 文章编号:1009-3044(2016)12-0060-02
1 概述
C语言具有执行效率高、语法规则简单、移植性强等特点,同时具有其他高级语言不能实现的对硬件进行操作的特点,因此成为计算机类专业入门必修的计算机语言[1]。该课程一般是在大一第一学期开始,对于刚入大学校门的新生来说既感到新奇又迷惑,新奇是发现C语言能解决很多在高中没能快速解决的问题,迷惑的是如何才能学好它用好它。C语言还是《数据结构》、《操作系统》以及其他程序设计语言等计算机类专业核心课程的基础,如果C语言学不好,必然对整个大学期间其他课程学习受到影响。一般新生入学比高年级学生入学晚,又有军训,导致在大一第一学期学习该课程时存在时间紧、任务重、难度大等特点,从而导致教学过程中存在学生学习积极性不高,对课程不感兴趣,语法规则难以记住,分析和解决实际问题难,动手能力差等特点。根据存在的问题,总结多年教学经验,从上好第一次课、弱化细节、重视上机、布置综合练习等方面提出教学建议,通过实践,证明这些建议是可行的、有效的。
2 上好第一次课,确定学习目标
对于大学中的任何一门课程,都要让学生掌握本课程的学习目标,如果学习目标不明确,学习兴趣则将不高[2]。C语言课程教学一般在第1周学生学习的积极性都很高,对课程也很感兴趣,因为刚接触C语言,发现能控制电脑做自己想要的简单事情,如输出自己想要的一些内容或图形。但在后续的过程中兴趣慢慢地减少,觉得学习C语言枯燥无味,不感兴趣,难以坚持等。若从开始授课时不进行调整,不采取相关对策,势必影响后续的学习。
好的开始是成功的一半,在第一节课授课时,要以生动有趣的形式告诉学生本课程的功能、主要学习的内容及重要性,让学生有目的地去学习本课程。很多教师在第一次上课时都会告诉学生学习完本课程后要考全国计算机等级考试二级中的《C语言程序设计》科目,其实这是一种错误的引导,这种做法让学生误认为本课程的学习就是为了考过二级,导致学生在学习过程中以二级考核的内容和知识点来引导自己学习,这必然导致学生只注重细节,不注重编程思想的形成。
以计算机科学与技术专业为例,在第一次上课时给学生提出本课程的学习目标:1)本课程主要学习顺序结构、分支结构、循环结构这三种结构程序设计的基本思想和语法结构,数量掌握数组、函数、结构体、指针以及文件的使用,掌握这些知识后为后续课程《数据结构》、《Java语言程序设计》、《C#程序设计》等与编程相关课程打下基础。计算机编程语言的语法和思想基本相通[3],C语言不掌握,以后其他课程的学习就很困难,更谈不上软件开发。2)掌握使用编程知识解决实际问题的方法,如求素数、数列之和、球类循环赛编排等,同时演示1-100之间人与计算机猜数字的游戏,让学生对简单的实际问题有一个基本了解;3)基本掌握小型软件开发及合作开发的基本方法,同时演示学生成绩管理系统,该系统基于VC++6.0使用C语言开发,经过这样的演示,学生基本了解软件开发的结果是什么样子,激发了学生开发软件的兴趣。对于上述三个学习目标的解释及演示,学生既了解到本课程所需要学习的知识,又能了解到学完本课程后能做什么事情。
在第一次授课时,除开给学生讲解学习目标外,还需要告诉学生本课程的学习方法:上课认真听知识点的讲解,为做实例奠定基础;认真完成上课时讲解的实例,总结实例的解决方法,为解决其他问题提供解题思路;重视上机,通过上机查找程序编写的问题,提高编程能力;课后多讨论所布置或发现实际问题的解决方法,养成自学及协同工作的习惯。
3 弱化学习细节,强化趣味实践
任何一门课程所要学习和掌握的内容是非常多的,根据课程的作用,对学习的内容必须要有所取舍,如果上课时面面俱到,最终将导致学到最后一无所获,特别是对于C语言这种细节能进行很深入展开的课程[4]。但是很多C语言的教师在授课时总是不知不觉的强调注意细节,总怕学生如果这点不掌握就在考全国计算机二级时相关知识点的题目不会做,如强调自增自减运算符的使用、对每个转义字符进行讲解、解释for语句中三个表达式可以省略等,对这些细节的强调不仅不利于学生学习,反而让学生去纠结到底用i++好还是++i才好,去背每个转义字符的作用,这样导致学生总是去考虑细节如何记忆,而没花心思去想某个问题的解决思路,从而不利于培养学生解决实际问题的能力。
其实在授课时,对知识点的讲解以基本够用就行,重点在培养学生解决实际问题的能力,通过具体的编程学习相关的知识点。如在学习顺序结构时,只讲整型、字符型、浮点型变量的定义以及printf、scanf函数的基本格式,然后就讲解“输入两个整数,求这两个整数的和、差、积、商,并且要求输出商有2位小数”这个例子,在这个实例中引出强制类型转换的知识,让学生实现本实例后,再讲解如何通过scanf和printf设置符合实际需求的输入输出格式。这样通过实例来学习知识点,既能避免学习知识点的枯燥无味,又能让学生记住相关知识点及掌握实际问题的解决方法。
在实践教学过程中,寻找有趣、容易理解且能引出相关知识点的趣味实例是教学过程中较难的地方,也是教师在备课过程中重点要考虑的教学设计。如在学习循环语句的使用时,讲解while语句的基本格式后,就要求学生考虑猜数字实例:使用rand函数随机生成一个1至100之间的整数,然后最多给10次机会输入整数,判断所输入的整数是否等于随机生成的整数,如果猜对了就提示“正确”,否则提示“大了”或者“小了”,接着继续猜。这样的实例既有趣,又能把循环中涉及的循环初值、循环条件、重复事件与循环增值内容理清,还能复习if语句嵌套的使用,更能够引出新知识:当猜对时需要使用break提前结束循环。因此通过实践巩固所学知识时,趣味实例是一种很好的运用,更能促使教师在上课前需认真备课。
4 重视上机实践,提高编程能力
C语言教学过程中经常碰到的问题就是学生编程能力差,遇到问题不懂如何解决,害怕教师布置作业,害怕编程,编程过程中遇到错误不懂解决等[5]。这些问题如果不能得到较好的解决,将影响学生学习C语言的兴趣,进而影响后续课程的学习。
C语言是一门实践性很强的课程,只掌握理论知识就好比纸上谈兵,必须要通过上机实践来理解并巩固课堂所学知识,因此上机实践是C语言教学的一个重要环节,只有强化、重视上机,才能切实提高学生的编程能力。
错误容易吸引学生的注意力,在上机实践前,进行与知识点相关实例讲解的过程中经常故意设置一些错误地方。这种故意错误分为两种,一种是语法错误,程序编译通不过,跟学生一起解读错误提示来解决语法错误,以提高学生语法错误的修改能力;另一种错误是逻辑错误,程序能正常执行,但得不到正确结果,如讲解1+[]+……+[110]的累加实例中,以a表示分子,b表示分母,在求和时故意写成sum=sum+b/a,这样的错误让学生对变量的起名要引起注意,要能够见名知意,否则在编程过程中容易误用变量。
在上机过程中,有目的的引导学生,既能够锻炼学生纠错编程问题的能力,还能够锻炼学生分析问题的能力。在上机过程中,先让学生完成课堂上讲解的实例,在完成课堂实例程序编写的过程中,如果遇到语法错误学生提问时暂不予以解决,先让学生之间商量解决,实在无法解决的再提示学生如何解决。在完成课堂实例后,布置新的且未讲解过的实例,让学生自己寻找解决问题的方法,自己测试结果是否正确。如学生完成在1+[]+……+[110]的累加实例后,布置学生求[1-23+55-107+179+……]数列前20项之和,让学生自己寻找分子分母的规律。由于没有提醒学生,学生找到各种各样的规律,让学生自行发现规律能充分锻炼学生的编程能力和思维能力,如第一种规律:下一项的分母是上一项的分母加2,下一项的分子是上一项分子与分母之和;第二种规律:i从1开始,分母是2*i-1,分子是(i-1)2+1等等。在让学生做上述练习时,也不告诉学生最终结果,让学生2项、3项、4项、……的测试,这样能锻炼学生测试程序的习惯,依赖教师则会越来越少。在完成课堂实例及新实例后,让学生在课后自行考虑自己需要解决的问题,将问题及程序在课后发给教师,教师根据这些问题及程序,结合上课及上机情况,综合确定学生的平时分。
5 布置综合作业,锻炼解决实际问题的能力
学生学习完每章内容之后,通过相关的作业能巩固本章所学知识,学生也能感觉到相关知识已经掌握。但当本课程的所有内容讲解完之后,学生就会放松了,认为所有知识都已经学习并掌握了。其实不然,学生经过每章学习掌握的是零散的知识,如何将这些知识综合起来使用,则是检验所学知识能否灵活运用所学知识,这时就需要综合作业来进行检验,通过这样的检验能很好地锻炼学生实际问题解决的能力及协作能力。
在根据教学大纲要求讲解完所有章节内容之后,分2至3人一组,布置一些综合练习题,学生完成这些练习之后,既复习了旧知识,又巩固了本章的重点内容,还锻炼了学生解决实际的问题能力及小组协作能力。如布置学生完成并实现学生成绩管理系统,该系统要求能够将学生的成绩信息录入后保存在文件中,并能够对成绩实现增加、删除、修改、按学号查询以及按总分排序等功能。这样一个简单功能的小项目,就能综合检验学生一学期所学的知识,如在保存数据时能检验结构体和文件的使用,实现增加、删除、修改等独立功能时能检验循环、分支以及函数的使用,在排序时能检验排序算法的掌握能力,在录入数据时能让检验格式化输入输出的使用等。
6 总结
提高学生的编程能力和解决实际问题的能力是每个C语言授课教师在授课时需要解决的实际问题,不同的教师有不同的解决方法。本文从上好第一次课、强化实践、重视上机、布置综合作业等方面来实现来解决上述问题。经过实践,证明这些方法是可行的,即笔者经过认真的备课及实例准备后,在2014级、2015级计算机科学与技术专业实施上述教学方法,在期末考试时,平均分能达到78分,考试试题中编程题占35分,80%的学生都能30分及以上,但选择题考得较细,学生的得分率不高;而2012、2013级的学生考试成绩平均分仅有65分。上述提高学生编程能力的方法需要授课教师课前认真准备实例,这将花费大量的时间和精力。在确保学生的编程能力和解决实际问题能力不降低的情况下,如何能够提高教师的备课效率,并能兼顾学生细节方面知识的学习,这将是以后教学改革的研究方向。
参考文献:
[1] 谢竞博.C 语言程序设计教学中的问题及改革建议[J].重庆邮电大学学报:社会科学版,2008,20(2):137-140.
[2] 姚利民,段文彧.高校教学方法改革探讨[J].中国大学教学,2013(8):60-64.
[3] 高云.计算机编程思想的发展研究[J].软件导刊,2012,11(11):5-6.
[4] 乔良. C语言教学中的常见问题和解决方案[J].华北科技学院学报,2014,11(3):86-89.
[5] 吴元斌.提高C语言初学者编程能力的几点措施[J].现代计算机,2015(1):13-15.