绪论:写作既是个人情感的抒发,也是对学术真理的探索,欢迎阅读由发表云整理的11篇c语言程序设计范文,希望它们能为您的写作提供参考和启发。
(江西科技学院)
[摘 要]C语言程序设计课程是计算机专业教育的重要组成部分。将探究教学引入C语言程序设计教学中,不仅可以提高学生学习的兴趣,调动教师教学的
热情,也丰富了探究教学的理论与实践。具体分析并探讨了C语言程序设计探究教学的实施目标、实施条件、教学情境的创设、探究形式、教学评价等问题。
[关键词]C语言程序设计 探究教学 实施目标
一、 C语言程序设计探究教学实施的目标:情感目标、能力目标和认知目
标
1、体验C语言程序设计的编程思想,激发和保持对C语言程序设计课程的
求知欲,形成积极主动地学习和参与C语言程序设计课程探究活动的态度。
2、能辩证地认识C语言程序设计对社会发展、科技进步和日常生活学习的
影响。
3、获得亲自参与研究探索的积极体验、培养严谨的科学态度。
4、能从日常生活、学习中发现或归纳可以利用C语言程序设计解决的问题,
通过问题分析确定程序功能。
5、能根据任务的要求,确定所需信息的类型和来源,并鉴别信息的真实性、
准确性和相关性。
6、掌握计算机程序的基本概念,理解并掌握C语言程序设计语言的基本知
识,包括语句、数据类型、变量、常量、表达式、函数等,熟悉语言的语法规则,熟
悉计算机程序执行的基本过程。
7、了解C语言程序设计语言,掌握编写程序、编译程序、连接程序以及程序
开发环境等基本知识,掌握调试、运行程序的基本方法与技巧。
二、C语言程序设计探究教学实施的条件
1、掌握一定的计算机操作基础
C语言程序设计课程由于其学科自身的特点,需要在计算机上调试程序,
所以要求学生具有一定的计算机操作知识,如:开关机、键盘和鼠标的使用、文
件的建立与查找、常用软件的使用等。
2、良好的C语言程序设计认知结构
认知结构就是学生头脑里的知识结构,是学习者观念的全部内容和组织。
奥苏伯尔的认知结构理论是针对新学习内容的影响(即迁移)提出的,良好的认
知结构有利于知识的提取和正向迁移。C语言程序设计探究教学强调在已有知
识经验上的主动建构,面对新的问题和任务,需要学生及时从头脑中提取信息,
建立新旧知识间的联系,在已有C语言程序设计知识的基础上思考解决新问题
的办法,并试图将新知识纳入自己的认知结构中。
3 、良好的探究环境
良好的探究环境是学生顺利进行探究的保证,至少包含两方面的内容:(1)
要有充足的探究时间和灵活的探究条件。探究时间应该根据学习任务进行合理
安排,应该考虑到学生假设错误时所耽误的时间以及讨论交流所需要的时间。
探究教学中可能需要查阅大量的资料,教师还应该准备书籍、网络等辅助资源。
(2)学生在探究学习的时候不能有太多压力,不同的学生由于其自身的因素不可
能以相同的速度学习,所以教师在进行评价的时候也应该因人而异,应该为每
个学生提供充分的思考机会和时间,让每个学生都能以自己的进度进行探索,
并在此过程中感受到乐趣。
三、C语言程序设计探究教学情境的创设
心理学研究表明,恰当、适宜的环境能有效激发人的热烈情绪,提高活动的
质量和效果。教学情境是指教师人为创造的“典型场景”,创设目的在于引出教
学任务,将学生的注意力吸引到学习任务中来。教师把将要学习的C语言程序
设计知识通过一定的情境呈现给学生,使得学生认知结构与周围环境不平衡,
引起他们对学习目标的注意和兴趣,并通过探究活动把学生过去的活动和将来
的活动联系在心理学研究表明,恰当、适宜的环境能有效激发人的热烈情绪,提
高活动的质量和效果。教学情境是指教师人为创造的“典型场景”,创设目的在
于引出教学任务,将学生的注意力吸引到学习任务中来。教师把将要学习的C
语言程序设计知识通过一定的情境呈现给学生,使得学生认知结构与周围环境
不平衡,引起他们对学习目标的注意和兴趣,并通过探究活动把学生过去的活
动和将来的活动联系在一体。探究教学情境的创设应做到:(1)创设的情境是为
C语言程序设计教学服务的,要以C语言程序设计探究教学目标为依据。(2)探究
情境要接近学生的真实生活经验,能够吸引学生的注意力,激发他们的认知冲
突和求知欲。(3)学生在情境中能够感觉到问题的存在,自然地将新旧知识联系
起来。(4)情境中必须包含学生未知的新内容,而且是能够通过探究掌握的。
四、C语言程序设计课程中的探究形式
C语言程序设计课程中开展探究教学主要有4种形式:探究性提问、探究性
讨论、探究性演示和探究性实验。这4种形式是相辅相承的,而不是孤立存在的,
在C语言程序设计探究教学中,需要用到多种形式来构成一个完整的探究教学
过程。C语言程序设计探究教学通常都是由探究性提问开始,然后进行探究性
讨论、探究性演示或探究性实验;也可能从探究性演示或探究性实验开始,在演
示或实验的过程中发现问题,再进行探究性讨论。在实际教学过程中,要根据学
习内容和课堂情况灵活地选用这些形式。
五、C语言程序设计探究教学评价
教学评价指依据一定的标准,通过各种策略和相关资料的收集,对教学活
动及其效果进行客观衡量和科学判定的系统过程。C语言程序设计探究教学评
价是对C语言程序设计探究教学过程及其影响的测量、分析和评定,评价中我
们更关注学生学习和成长的过程,寻找适合学生发展的学习方式,满足学生知
识和能力发展的需要。评价对探究教学的积极作用是很明显的,但是如果评价
指标制定不合理,或者评价方法的选用、评价结果的表述不当,不仅不能达到预
期效果,还会对学生的C语言程序设计学习产生消极影响。
参考文献
[1] 《基础教育课程改革纲要(试行)》教育部文件,教基[2001]17号.
[2] 保罗 朗格朗.终身教育引论瞰[M].北京:中国对外翻译出版公司,1985,
p15~31.
[3] 联合国教科文组织.学会生存——教育世界的今天和明天[M].上海:
上海译文出.
版社,1979,p2.
[4] 张大均。教育心理学[M].北京:人民教育出版社,2005,p68--71.
[5] 靳玉乐.探究教学论[M].重庆:西南师范大学出版社,200l.
作者简介
参考文献:
[1] 谭浩强. C程序设计[M]. 3版. 北京:清华大学出版社,2005:1-3.
[2] 王平,朱艳辉. 计算机程序设计教学中的教学方法研究[J]. 电脑知识与技术,2005(21):93-95.
[3] 杨其宇,张霞.“C语言程序设计”课程教学探讨[J]. 广东工业大学学报:社会科学版,2006(增刊1):94-95.
[4]Merseth, K. K. The early history of case-based instruction: Insights for teacher education today[J]. Journal of Teacher Education,1991,42(4):2433-2439.
[5] 王平. 利用概念图拓展思维空间[J]. 科学课,2006(8):13-14.
[6] 湖南工业大学. 课程录像[EB/OL]. [2011-03-01]. 218.75.216.182/VC/850839.
One Lesson’s Content Design of C Programming Language
WANG Ping, LIU Qiang, ZHANG Amin
C语言是早期最经典、最强大的面向过程的程序设计语言之一。虽然现在面向过程已经全面转向面向对象,但是C本身的中级语言的设计理念以及对现有VC/C#等语言的深刻影响,使其至今仍是程序设计入门的首选语言,也是工科院校计算机专业学生接触的第一门程序设计语言。对于计算机类专业学生来说,一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言,为后续的面向对象程序设计以及Java程序设计等语言的学习打下基础;对于其他非计算机专业的工科学生来说,比如电子、机电专业来说,该课程为学生用计算机编程解决实际问题提供了方法,是学习单片机技术教学的基础和重要工具。
一、C语言教学中面临的问题
C语言程序设计是一门基于dos操作系统下的面向过程的程序设计语言,随着面向对象语言的开发,C语言在界面交互性上逊色不少,作品上也不如Flash、三维动画效果吸引眼球,难学、难懂、难以应用的课程,对学生越来越缺乏吸引力。针对这种状况笔者认为,更新教育观念、探索新的教学模式才是根本出路。笔者根据多年的教学经验,对C语言程序设计课程从教学内容、教学手段、教学方法、考核方法方面进行了一系列的创新改革。教学内容主要解决如何调动学生积极性,激发学生创新能力,如何提高学生的创新能力、实践能力、研究能力、发现问题和解决问题能力等综合素质;教学方法主要解决如何实现“以人为本”,分层次教育,如何通过引导、启发等方法,激发学生的发散性思维。同时要利用目前课堂和实验教学在培养学生创新能力和实践能力方面的优点,利用大学生实训基地,为学生的创新和实践能力的锻炼和培养提供一个良好的平台。
二、教学内容的创新
课程内容的选取与组织是课程教学改革的基础。人才培养方案对C语言程序设计教学内容进行重新整合,把课程学习划分成培养学生的基本程序设计能力和培养学生的专业程序设计能力两个阶段。
第一阶段安排在大一第一学期,主要针对没有程序设计经验的大一新生,重点讲授C语言的基本知识,包括三种基本结构、数组、函数的概念。在第一阶段教学中,笔者采用案例教学方法结合具体的程序实例,创设情境,引导学生自己总结掌握C语言的基本语法和程序设计的基本方法。第一阶段的学习结束的时候,学生可以具备基本的程序设计能力,独立编写具有初等难度、几十行的程序,并且能够较顺利地完成程序调试与测试。第二阶段教学放在大一第二学期初,针对具备基础程序设计能力的学生,重点培养学生的专业程序设计能力。在第二阶段的教学中,以学生为主体、以教师为引导,采用国家火炬计划河北省软件人才工程实训课程,使学生融会贯通所学知识,完成一个具体的项目,以达到提高学生程序开发能力的目的。迄今为止,学生完成的项目包括“银行储蓄管理系统”“彩票信息查询系统”。教学实践证明,这种理论和实践技能并行的教学模式,更加有助于学生的创新能力的提高,使学生在不断实践中掌握技能,在技能学习中提高基础理论。
三、教学手段的创新
在学习过程中除了发挥教师的引导作用,还需要充分调动学生的参与主动性。在授课期间灵活采用多种教学手段,如:自学、演示、对比、课堂提问、学生演练和讨论等,通过不同方法,寻找创意思维“契机”,安排创意铺垫内容,培育学生的创意萌芽,营造创意环境,引发学生争鸣,为学生提供更多的思维空间,诱发学生的思维灵感。例如,在教学中讲解“循环结构的循环嵌套”的时候,提出马克思手稿中的数学题的案例:伟大的思想家马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人、女人和小孩。他们在一家饭馆中吃饭,共花费50先令。如果每个男人吃饭要花3先令,女人要花2先令,每个小孩要花1先令,问男人、女人、小孩各多少人?先提出问题,引导学生分析、讨论案例,提问学生运用数学知识完成案例提出的问题需要进行哪些操作,这样学生就会比较有兴趣,课堂气氛就活跃起来。然后帮助学生从案例分析中理解并掌握什么是多重循环,并且如何使用双重循环解决问题,最终完成程序的编写。
在学习的第二阶段采用开放式训练教育方式,利用专题设计和课外指导方式,鼓励学生课外自主进行训练。如:完成的项目“彩票信息查询系统”,教师提出设计方案,学生完成基本功能以后,自己可以对其他功能进行完善。
四、教学方法的创新
课程每个章节内容结构主要由三部分组成:
知识点:介绍本章需要掌握的知识或技术。
应用案例:介绍本章知识应用的案例。
创新训练:针对具体的问题,应用本章技术来完成知识点的应用。
在整个教学过程中,教师采用框架式教学,像建筑工程师修建筑一样,先采用精讲的方式,让学生建立整门课程的知识框架;接着通过案例教学、项目式教学等多种教学方式,让学生逐步去进行细节知识点的填充;最后通过综合训练方式,完成整门课程的学习。
例如,在讲解C语言程序设计中的函数时,搭建出例如综合排序等程序的框架,给学生留出函数,让学生自由开拓思想,独立完成一些小型实例的编程,经过具体知识点的训练后,还要重点进行综合知识的应用训练,开展一系列的创新应用,以达到知识综合运用和培养创新能力的目的。
五、考核方式的创新
传统的C语言程序设计考核模式一般以标准化的笔试题为主,这种考核方式侧重语法知识的考核,忽视编程实践能力的培养。为此,笔者改革传统的考核方式,将考核分为平时实验和期末考核两部分。平时实验成绩考核的是学生每一章知识,实训作业就是在每一章节结束的时候,布置相关的习题,学生利用业余时间编程,并且在实训期间进行调试,调试成功后上传到服务器上。期末考核成绩采用的是教研室开发的上机考试系统。上机考试系统模拟C语言二级考试建立了知识面齐全、题量充足、难易度合理的试题库,采取随机抽题的形式重点考查学生的程序设计能力和程序调试能力。这种考核方式督促学生在平时学习中加强对编程举一反三的实践环节。实践证明,这样不仅能有效培养学生的实践编程能力,还激发了学生动手实践解决问题的兴趣。
总之,经过不断的摸索与实践,通过以上的教学方法与教学手段的改革和实践,不仅提高了学生的学习兴趣,让学生从枯燥无味的语言学习中解放出来,从被动学习走向主动学习,同时也培养了学生分析问题、解决实际问题的能力,充分发掘了学生的创造潜能,锻炼了创新和协作精神。
参考文献:
中图分类号TP39 文献标识码A 文章编号 1674-6708(2010)25-0198-02
C语言程序设计课程是我校理工类各专业必修的计算机程序设计基础课,是一门实践性很强的课程,学习者必须通过大量的编程练习,在实践中掌握语言知识,培养程序设计的基本能力,并逐步理解和掌握程序设计的思想和方法,培养学生编程兴趣和编程能力是我们教师的责任,也是该课程的目标。
现行的教学中存在一些问题:一是按照从基础知识讲起,然后讲解语句语法,最后应用举例;二是教材内容安排不尽合理,语法规则编写过细[1];三是教学理念、教学方法和考核方法比较老套,不适应当今教学的发展。为了让学生学好这门课程,提高动手能力,必须进行教学改革,探索改革的思路和方法。
1 转变教学理念
传统的“盖房子”教学理念,强调必须先打好地基再砌墙,即强调先打好基础,然后再进行实际编程。这种教学理念教师往往先介绍概念和定义,再举例进行讲解,这种教学方法死板而枯燥,由于课程的教学重点往往放在了语言语法知识点上,而语言的语法是相当烦琐而复杂的,这种教学方法缺少应用型、趣味性的案例,使学生一步步地陷入到纷多繁杂而索然乏味的语法学习当中,很难充分调动学生的积极性和启发学生思维。
研究自然界中“树”的生长规律可以发现,“树”并不是先长成发达的根系,再长树干和枝叶,树的根系、树干和枝叶是同步生长的。“树”的生长过程应用到教学上,就是基础语法和编程的教学同步进行,甚至先教编程技能再教理论,在不断地实践中掌握技能,在技能学习中提高基础理论。
2 教材编写思路
从课程的教学目标出发制定教材的编写思路,采用实例引导法、归纳教学法和任务教学法编写教材,在编写内容上抛弃过多的语法细节和非通用的或实际用途很少的语言特性,算法描述力求通俗易懂。理论教材以实例引导法思想为主导,介绍概念、语句格式、语句用法和算法描述。用归纳教学法思想编写多个函数中相同参数的使用问题。实验教材以任务教学法思想,确定每一个实验的任务、内容、要求和思考题。
3 教学方法探索
3.1实例引导法[2]
一切从实际例子出发,引导学生理解程序中的概念和算法,例如:在讲解变量、运算符和表达式时,先通过一个具体实例程序介绍,如:求圆面积和周长,指出程序中临时存放数据的单元和公式中的运算符号,然后再引出变量、运算符和表达式进一步讲解。又如:在讲解指针的概念时,变量的“间接访问”,可以通过“办公桌抽屉”实例讲解:一个办公桌有A,B两个抽屉,每个抽屉有一把钥匙,可以把B抽屉的钥匙放在A抽屉中,若要打开B抽屉,就需要先打开A抽屉,取出B钥匙,再打开B抽屉,取出B抽屉中的物品,引出“间接访问”。这样学生很快就能理解变量、运算符、表达式和指针的概念并掌握它们的用法。
3.2归纳教学法[3]
C语言的定义、概念、语法规则有许多相似的地方,在讲解C语言函数库中函数时,有些函数参数的类型格式符是一样的,在讲解一个函数中类型格式符后,对其它函数的类型格式符可以进行归纳,不讲或简单的提一下即可,例如:printf()和scanf()函数中的类型格式符“%d、%f、%c”等,它们的语法规则是一样的。通过归纳教学,学生只要掌握其中一个,另一个自然就会使用了,免去了重复讲授,提高了教学效率。
3.3任务教学法
C语言程序设计课程必须采用实验教学环节才能把理论算法加以验证。采用任务教学法思想编写实验教材,适度增加实用性和自主性实验任务内容。每章有具体任务实例讲解,可引导学生完成每章设置的实验任务题目。让学生自主选择实验时间,每次实验课前要布置实验任务,学生根据任务,自学和实验任务有关的知识,完成实验任务的编程。这种教学方法能够有效地培养学生的自学能力, 激发学生学习的积极性、主动性和创造性, 锻炼他们利用所学的知识解决实际问题的能力。
3.4网络教学法
依托先进完备的校园网络环境,建立C语言程序设计网络教学平台。可以把课程教学大纲、教案、多媒体课件、教学录像、综合实例库、习题库、学习参考资料、模拟考试系统等教学资源全部上网,通过这个网络教学平台,学生可以浏览、下载学习资料,也可以提交电子作业,在线提问题,老师在线辅导和答疑等,为学生自主学习提供强大的网络支持。
4 师资队伍建设
成立C语言程序设计课程组,建立结构合理的教师梯队。由具有丰富教学经验和科研能力的教授任组长,激励教师努力钻研教学内容和教学方法,拓宽知识结构。同时,针对组内教师的不同特点,课程组制定了切实可行的目标,并定期进行集体备课,相互探讨,号召组内教师积极参与教学研究和科研开发,为提高教学水平打下良好的基础。建立主讲教师之间互相听课和评课制度,定期召开学生座谈会和课程质量分析会,并针对反馈意见提出改进教学的具体措施,从而规范教学的各个环节,为更好地提高教学质量奠定良好的基础。
5 考核评价体系
对课程考核评价体系进行改革,突出过程考核和编程能力考核,促进学生实际动手能力和创新能力的提高。例如:总评成绩=理论课出勤成绩+作业成绩+实验出勤成绩+实验完成成绩+期末考试成绩。期末考试采用《C语言程序设计机考系统》,机考系统为每个考生随机出题,体现了公平考试的原则。改革后的考核评价体系主要体现了考核形式多样化、考核标准合理化以及考核试卷个性化三大特征。
6 结论
鉴于目前C语言程序设计课程教学中存在的一些问题,文章通过改革探索,一切从培养学生编程能力的角度出发,按着新的教学理念对教材编写思路和教学方法进行了探索,提出了教学改革的具体措施。希望对C语言程序设计课程的教学改革有所借鉴。
参考文献
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)34-8225-02
《C语言程序设计》课程的授课对象是计算机专业本科学生,为专业基础(必修)课,是学好后续各软件课程必要的基础。有别于已经掌握的汉语、英语语言,作为人与计算机交流的语言,C语言不但概念多、符号多、语法多、规则多,而且抽象、难懂,再加上需要有一定的理解力以及解决问题的清晰思路,有些学生在学习过程中会感觉到枯燥、繁杂、无趣。因此培养学生的学习兴趣、加强对课程的重视、提高实际编程能力、将理论与实际相结合,是教师必须解决的问题。
为了提高学习质量,从2010年秋季学期开始对《C语言程序设计》课程的教学过程、成绩考核进行了改革,由原来的纸质试卷考试变成全程上机考试。改革实施多年来,大部分学生增加了学习兴趣,有了编写程序的主动性和积极性,增加了专业学习的信心,提升了程序设计的能力。
考虑到学生在基础知识、智力因素、学习能力上的差异,为了更有效地实施“因材施教”,从2013年秋季学期开始实施分层教学。在讲完C语言基础知识、程序基本设计方法之后进行分层。通过考核,外加自愿的原则,将原来的教学班打乱,重新组合成两种班型――高层次、低层次班。分层之后,每个学生个体获取的知识趋于最大化,极大地提高了课堂学习效率。
1 传统教学与纸质考试存在的问题
传统的教学是按照指定教材,在课上将重点内容进行讲解,典型的问题、方法在TC/VC环境中进行演示,课后留给学生一定的纸质作业和上机编程作业。同样的讲授,理解力强的学生一听就懂;理解力弱的学生,老师需要讲多遍才有可能懂。传统的教学中,老师只能顾及大多数中等学生,照顾不到特殊的学生。降低了课堂效率,也可以说浪费了某一部分学生的时间。
由于期末考核采用的是纸质考试,只是从纸面上考核学生对C语言理论、编程方法的理解、掌握程度,更对学生的学习产生误导。部分学生也只重视理论,不重视实际动手编程。他们只满足于“纸上谈兵”,不考虑结果。因此,实际应用时,对上机环境不熟悉、编写的程序不能顺利通过,导致很多学生高分低能,在解决实际问题时,茫然无措。
2 机考及分层教学改革的探索
计算机专业课程的特点是实践性强,学生在掌握了基本语法后重点是上机实践,即在计算机上解决实际问题,这里包括问题的分析与抽象、程序的编写与调试。
常言道:“实践是检验真理的标准”。在学习C语言过程中,上机实践是巩固理论知识、增加理解力、提升编程能力的重要途径。为了提高教学质量,让学生真正打好专业基础,授课教师在教学内容、教学方法、教学组织、考试方式等多方面上进行了调整。
2.1 教学方法以及教学组织上的改革
为了使教学效果更好,将两个自然班作为一个授课班,教学内容统一要求。讲授时,由浅入深、循序渐进。在语言的基础上,重点放在程序设计的思想、方法、技巧的讲解,结合典型例题,培养学生分析、设计、解决问题的能力。通过精心设计实验题目、课后作业、调整考核比例、增加课后上机机时、多方位提供答疑指导等环节培养学生学习兴趣,使学生重视上机编程。
对学生作业题目进行精心设计,既覆盖知识点,又有趣味性,每个题目都像在讲一个故事,把要解决的问题融在故事中,学生在读故事的同时,不自觉地就会去想解决办法,增加了兴趣,提高了自主性,也锻炼了思维。
调整平时考核内容。平时考核的环节包括:上机小测试、期中机考、上机作业、考勤,每一个环节的成绩都会反映到平时成绩中。平时成绩的取得完全依赖自己的学习态度。
增加课后上机机时。由于考核重点是对实际动手能力的考核,光靠课内安排的上机时间显然不够,所以需增加学生课外自主上机实验时间,并配有指定人员辅导。
多方位提供答疑指导。所有任课教师把答疑时间错开,这样每周学生可以有多次答疑时间,对比原来教师只给自己学生答疑的做法,学生增加了学习解疑的机会。
2.2加强上机实验过程控制,促进考试改革
借助于“课程自动评测与抄袭检测系统”,老师和学生有了C语言作业部署、学习、检测的平台。通过这个平台,老师可以布置上机实验、安排考试、检查学生提交的作业。根据知识点,每章布置4-5道题,限定学生在规定时间内独立提交。老师可以随时查看学生提交的程序,及时与学生沟通、反馈。学生可以随时把自己编写的程序提交,系统对提交到服务器的程序自动判断对错,学生可以及时了解自己程序存在的问题,不断进行修改,直到能够顺利通过所有测试。
这一环节起到了巩固课本知识、增加独立思考、加强动手能力的作用。期末就是利用这个平台进行全程两个小时的考试,要求学生既有编程的能力,又有时间的紧迫感。
加强过程考核,增加平时机考次数。为了缓解期末机考时的紧张情绪,之前会安排1-2次的上机考试,成绩记入期评,其中期中考试的考试形式与期末一样,为全程两个小时的机考,随机组卷。学生可以尽早了解考试模式,并更加重视对本门课程实际动手能力的训练,学会调整心态。
为了满足不同层次学生的要求,在平台上配备了大量不同难度的习题,不受提交时间的限制。学生可以根据自身需求,随时编程测试。
2.3分层教学,提升学习效率
分层教学是根据学生不同基础、不同学习需求而实施教学的一种手段。是在承认学生差异、考虑学生兴趣的前提下,以发展的眼光看待学生,给每个学生提供符合他们发展的教学目标与方法,是同时提高所有学生能力的理想状态。经过调研,从三个方面进行分层教学。
1)学生分层。对学生能力考核的一个重要标准就是学生的学习成绩,但是在学习这门课之初,没有可依据的成绩。分层安排在讲完两周课,即学完了简单程序设计之后进行。学生根据自己当前对C语言的理解和接受程度,选择不同层次。在分层教学的实施过程中,这样的分层是暂时的、动态的。过一段时间,视学生的后期学习成绩、学生的具体情况,可递进或降层。这样更有利于学生个性化发展。
2)讲课分层。对不同层次的学生,采取不同课堂。在讲授编程思想、必备知识基础上,对高层次学生,拓宽和加深问题的难度,做到拔尖提高;对普通学生,在达到大纲要求的同时,考虑他们的接受能力,适度增加和加深知识,做到稳步推进。
3)实验分层。练习是对所学知识的巩固和消化。按照作业、实验题目的难易,对不同层次的学生提出不同要求。对普通学生布置基础题,进行强化训练;对高层次学生,以综合运用知识进行练习。要求学生多编程解决问题,以提高应用知识的能力。这样使得不同层次的学生得到不同程度的提高。
3 教学改革实践效果
实行考试改革后,学生的学习积极性有了明显提高。由于考试时间的有限性,增加了学生的紧迫感、主动性,在程序编写、调试程序的实际动手能力方面得到了重视并有所提高,为后续课程学习奠定了良好的基础。经过分层教学,满足了不同层次学生学习的需要,激励了各层次学生朝着有利于自己的方向努力,有利于学生个性能力的张扬,有利于学生综合素质的提高,更有利于优秀学生综合能力的发挥、较低层次学生潜在能力的开发。
3.1带动学风,促进后续课程的学习
大部分学生能够按时到课,勤于思考,互相研究,答疑的同学增多了。改变了不良学风,营造了良好学习氛围。由于课程期间比较重视学生结构化程序设计的方法,要求编写程序之前理清解题思路、做好算法设计,经过训练后,在后续的“程序设计专题训练”中,面对稍难一些的问题,学生也能逐步找到解决办法,编出程序,顺利通过测试。在小学期“学术工程实践”课程中,要求完成一个小型管理系统,有一定的难度。大部分学生能够顺利编写由多个结构体、多个文件、几十个函数组成的、2000-4000行代码的程序,并调试成功,完成管理。
3.2提升学生的程序设计能力和创新能力
竞赛是考核学生全面素质的一个平台,它要求学生具有扎实的理论基础、清晰的算法设计能力、娴熟的编程能力、良好的心理素质和快速的临场应变能力。
随着知识的积累,学生的能力和自信心不断增强。学生们更加渴求知识,渴望展示自己,参加竞赛的积极性提高了,人数也不断增多。在大二阶段,报名参加全国软件设计大赛的人数由09级的16人次(占09级学生人数14.04%)、10级的33人次(占10级学生人数26.19%),增加到11级的66人次(占11级学生人数51.56%)。全国获奖人数由09级的1人次(占09级学生人数0.88%),到10级的12人次(占10级学生人数9.52%),再到11级的17人次(占11级学生人数13.28%),获奖人数同比增多。
4 结论
总之,学习“高级程序设计语言”不仅要使得学生在程序表达和设计上得到培养,更重要的是在掌握解决问题的思想、方法和手段的同时,实际动手编程能力有所提高,从而增长设计程序的能力。因而,将“C程序设计”课程的考试改为上机考试是很有益的,可以改变不良的学风,营造良好学习氛围;可以加强学生对课程的重视,提高学生程序编写、调试等实际动手能力,提升学生的程序设计能力和创新能力,为后续课程学习、为培养合格的专业人才奠定良好的基础。
对“C程序设计”课程实施分层次教学也是必要的,可以针对不同层次学生的需求给予相应的学习指导,以达到学生全面发展的教学目标;可以激发不同层次学生学习的欲望,向着更高更深的知识海洋探索;可以鞭策任课教师积极思考、合理取舍,做到充分了解学生、合理安排进度,能够极大地提升老师的组织与应变能力。
参考文献:
传统的教学以课程内容的讲解为主,通过讲解变量、循环、数组、指针等内容,并结合一定的教学案例来推进教学过程的实施。这种传统的教学方法没有考虑到本阶段学生的特点,往往造成教学效果差,教学质量难以控制。C语言程序设计课程在大一新生中开设,许多学生缺乏程序的思维和一定的动手能力,学生难以跟上教学进度,造成一定数量的学生对学习语言失去兴趣,从而影响整个专业课程的学习。
1.2教学过程缺乏有效的互动
C语言程序设计的教学过程中主要使用PPT来讲解,案例程序也通过PPT展示,甚至包括程序运行结果也以截图的形式在PPT中显示。虽然在PPT中可以添加很多的动作,动态地标注、显示程序的运行过程,但这种方法以投影为中心,缺少与学生交流的环节,加上程序类课程相对枯燥,以致学生难以集中精力做到全程听课。
1.3代码编写规范强调不够
编码规范是软件专业学生必须要牢记并遵守的,良好的编码规范不仅能体现软件从业人员的素质,而且使代码有更好的可读性,更容易被别人所理解和交流。该课程的讲解主要以编写简单逻辑来解决一些日常问题、数学问题,编程的环节侧重于算法的实现,往往忽略了编码规范
。1.4考试以笔试为主,难以检验学生的动手能力
传统的C语言程序设计课程考试以笔试为主,考查学生对C语言基本的语法、简单逻辑编写的掌握情况。这种考试机制脱离了程序语言的实现介质,即计算机。虽然在试卷中也可以用编程题目来考查学生的编程能力,但在纸上写程序与在计算机上写程序有本质的不同。在纸上写程序只需要写出大致的逻辑即可,而在计算机上写程序不仅要写出正确的代码,而且需要调试和跟踪代码,最终保证程序的正确执行。因此,笔试并不能很好地检验学生的动手实践能力。
2教学改革措施
2.1加强教学过程的质量控制
C语言程序设计课程是一门实践性强的课程,仅通过做一些常规练习无法达到教学质量监控的目的。为了更好地控制教学质量,需要从学生语法规则的掌握到动手编程这一系列环节进行掌握和跟踪。为此,我们开发了一套在线作业系统用于教学质量的控制。⑴作业题库的建设C语言程序设计的任课教师根据自己的经验和理解来搜集和设计C语言题目,包括基础知识的题目和编程实践的题目。基础知识的题目主要用于C语言知识点的训练,包括填空题、选择题、判断题和程序阅读题;编程实践的题目主要用于编程能力的训练,这类题目需要学生对问题进行正确分析、设计算法、编程并运行,最终得到结果。教师在给出题目时,需要提供测试数据和对应的结果。⑵作业的布置与批改教师可以根据每次课的教学大纲、课程内容,从作业题库中选择一些填空题、选择题、程序阅读题、编程题来建立课程作业供学生在课外完成。学生在规定的时间之内完成作业后提交作业,系统根据教师预先设定的答案进行自动批改,形成每个学生的作业记录。如果学生在规定的时间之内没有完成作业并提交则失去本次作业的记录。教师通过查阅部分学生的解答来掌握学生对相关知识的掌握情况,特别是需要整理学生所犯的共性问题,并有针对性的开设习题课进行解答。⑶配套政策为了使学生重视平时作业的完成,课程的期末成绩将考查平时作业的情况。如果学生没有提交作业的次数在30%以上,则平时成绩计0分,其他情况按照提交作业次数和作业得分根据一定的公式进行计算得到学生的平时成绩。这种策略的主要目的在于督促学生跟着教学进度进行学习和训练,不至于严重滞后于教学进度而失去学习的兴趣,可有力地保证教学质量。
2.2加强教学过程中的互动
课堂教学应该在一定程度上脱离PPT的教学,这样才可以调动学生的积极性。加强师生之间的互动可以结合本课程特点进行。在讲解课程知识点后,配以适合的案例进行教学,这些案例都是需要编写C语言程序来实现的。此时,编程实现的环节不要通过PPT展示,而要在教师的计算机上动手编写并运行得到结果,这样可以改变教学节奏,吸引学生的注意力。C语言课程案例程序的一大特点是代码量少,一般在20~30行之间,适宜在课堂上完成。教师在编写程序的过程中,可以向学生展示编程中需要注意的问题,同时,进一步讲解C语言的语法和基本知识点。教师在编写程序的过程中难免会犯小错误,或者是有针对性的故意犯一些学生经常犯的错误,在编程后的编译运行时会有错误报出,这时对于提高师生交互是很好的机会。从学生的角度来说,他们的编程往往会有很多错误,编译时会出现大量的错误提示。此时,学生可能就比较迷茫,不知道如何定位并解决错误。因此,当老师也出现错误,而且是学生经常遇到的错误时,学生往往是比较兴奋的,希望能知道老师是如何处理错误的。从老师的角度来说,真实地反映程序编写、编译的过程,展示程序错误的发现、定位、解决的方法,能够更快地提高学生的动手实践能力。面对错误,教师还可以引导学生参与程序错误的解决,消除学生对程序错误的恐惧感。在解决程序错误时可以参考以下步骤。首先,教师要把所有错误信息读出来给学生听,因为一般编译出来的错误是用英文写的,而且有些单词学生不熟悉,因此,老师需要指出错误是变量重定义、变量没有定义、还是其他错误;然后,指出核心错误的位置,教师要告诉学生程序报出很多错误信息往往是由一个小错误导致的,因此,老师要指导学生学会确定引起其他错误的核心错误;最后,在源程序中找到错误的位置,修改错误并重新编译,得出运算结果。这个错误处理过程是针对简单语法错误的处理方法,如果程序中出现了逻辑错误,即程序编译正确,但运行结果不是预期结果,此时,错误的处理方法更为复杂,可能需要重新检查程序逻辑,并使用编译环境进行程序中可疑变量的监视,通过观察变量中的数值在程序运行过程的变化来确定错误。通过实地编写程序并调试,发现和解决程序错误,最终得到正确的计算结果,不仅能使同学更好地掌握程序编写的方法,而且还能更好地与学生进行互动,提高教学效果。
2.3强调代码规范
有些老师在教学的过程别是演示程序时,注重于解决问题而忽视代码规范,甚至是自己写程序也是这样,没有代码规范。虽然遵守代码规范并不能改善程序的性能,但遵守代码规范能够使程序具有更好的可读性、可维护性,是软件代码实施过程中软件从业人员良好素质的重要体现。改善代码规范可以从以下几个方面进行。⑴适当的缩进每一行代码不要顶格书写,而要根据情况缩进。具有良好缩进格式的代码不仅能少犯语法错误,还能够使阅读者快速掌握程序内容。⑵适当的空行函数与函数之间增加必要的空行,使得程序构成一目了然。⑶适当增加代码注释程序中函数的开头最好加上注释说明该函数的作用、参数的意义,在函数中重要逻辑的部分加入注释说明该逻辑的主要思路、算法。⑷代码块要用花括号界定代码块尽量使用花括号来界定代码范围,即使代码块里只有一行代码,这样可以提高代码的可阅读性,防止阅读者误解程序。⑸变量和函数的命名尽量使用多个字母来命名变量和函数,使得程序阅读者通过名称即可大致了解变量的意义、函数的作用,提高程序的可读性。通过编码规范的强调和实施,使学生认识到软件开发的专业素质,对于提高学生的专业素养具有潜移默化的作用。
2.4上机考试
上机考试采用在线考试的方式进行,考试环节包括如下几个部分。⑴试题库的建设C语言程序设计的任课教师负责组建上机试题库,试题库中的题目都是编程的题目,用于考核学生的编程能力。教师在组建试题库时,标明每个试题的知识点和大致难度,并提供测试案例和对应的答案。题库负责人负责查看、重新编辑每个题目,从题库整体的角度更新每个试题的难度。⑵上机考试的实施为单次考试准备7个知识点和1个综合知识点的题目,教师在考试之前为每个知识点选定难度相当的5个题目。每个学生登录系统后,系统自动建立考卷,具体策略是从为每个知识点准备的5个题目中随机选择1题组成一个考卷,因此,该考卷包含8个题目,这8个考题要求学生在4小时内完成编程。考试时间一般定为上午8:00至中午12:00点。学生根据随机组成的考卷题目进行解答,为每道题目编程求解,并在学生机上利用示例测试用例检验代码的正确性。如果在本地没有通过检测,则进行逻辑检查,修改程序;如果本地通过测试,学生需要将代码提交到服务器。服务器接收到代码后,自动调用教师提供的更多的测试用例来检测程序运行结果是否与预先设置的结果匹配,进行代码逻辑黑盒测试。如果全部通过,则说明学生的编程逻辑是正确的,此时将学生成绩记录中对应的题目标为通过,并回显“通过”给学生,学生继续做下一道题目;如果其中有的用例运行结果不正确,则返回“错误”给学生,学生可以接着做本道题目,也可以选做另外一道题目,同时,在学生成绩记录中对应的题目标为错误。教师在考试现场调取并查看所有学生成绩记录信息,如果发现异常信息,如在很短的时间内完成了过多的题目,则可能学生在作弊。此时,根据异常学生信息中的IP地址找到该学生,进行现场查证,如果确认为作弊则立即处理。如果学生正确完成了8道题中的5道题,则学生通过上机测试,否则,学生没有通过上机测试。为了减轻学生的压力,上机考试可以分两次进行,如果第一次没有通过上机考试,还可以组织学生进行第二次考试,取这两次考试的较高分作为学生成绩。
中图分类号:TP312 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.05.044
The C Programming Language Teaching Reform and Practice
waNG Zhong-ying
(Computer science department of Shangluo College, Shangluo 726000, China)
【Abstract】C language as human-computer interaction is an important tool, in the IT field is play a decisive role; at the same time, c language is normally It students high-level programming languages, their master degree directly affects the student program literacy and learning interest improve. according to the long term c language program design course teaching experience, combined with the new teaching environment, the paper points out that in the course of the reform in the teaching of some misunderstanding, in view of these problems and how to improve the effect of teaching put forward many suggestions.
【Key words】c language programming design; teaching reform; algorithm
0 引 言
C语言程序设计课程是计算机科学与技术和软件工程等IT类专业的专业必修课程,也是《数据结构》、《算法设计与分析》等其专业核心课程的先修课程。C语言程序设计的水平在很大程度上决定了学生专业基础知识的掌握是否扎实,直接影响到后续课程的学习效果和专业兴趣的培养。为了提高学生的程序设计素质,为后续专业课程的学习打下基础,笔者结合自己长期C语言程序设计课程教学的体会,结合新的教学环境,指出了该门课程教学改革中的一些误区,并对如何提高教学效果提出了许多可行的建议。
1 C语言程序设计教学中的几个误区
1.1 对C语言程序教学的重视程度降低
许多人认为,JAVA、C#等目前行业内普遍采用的高级程序设计语言,相对来说简单易学,源程序可读性强,又有功能强大的集成编辑环境的支持,有利于让学生迅速开发项目,而C语言程序语法复杂,调试困难,开发较大规模的应用程序比较麻烦,所以在人才培养的课程体系中,采用JAVA、C#等高级语言来代替传统的C语言程序。笔者认为,这是一种急功近利的表现。首先是C语言程序的功能同样强大,在较大规模的应用程序尤其是系统程序的开发中有出色的表现,具有易编写程序操纵系统底层的优势,在嵌入式编程中具有不可替代的地位。TIOBE近日公布的2012年4月份的编程语言排行榜中,C语言再次超越JAVA语言重新回到了编程语言的王者地位,这说明具有30多年历史的C语言依然是历久弥新[1]。
1.1 教学学时过度精减
在近几年的高校专业教学改革中,许多院校对课程课时进行了精减。在这个过程中,我们发现有的学校缺乏科学规划,存在许多不合理的地方,如对C语言程序设计课程的学时过分减少就是一个例子。这种现象不仅对提高学生能力的没有起到积极作用,反而影响了学生专业基础能力的培养。C语言程序设计是IT专业学生的第一门程序设计课程,不仅培养学生的对C语言本身的掌握,同时还需要培养学生的程序设计思维以及培养学生对IT行业的兴趣。在这一阶段,没有老师充分的指导往往是不够的。如果学个一知半解,会影响到后续课程如数据结构、操作系统等学习,进而失去IT行业的兴趣。
中图分类号:G642文献标识码:A文章编号:1009-3044(2011)15-3610-02
《C语言程序设计》是目前世界上十分流行、使用最为广泛的高级程序设计语言,也是计算机软、硬件相关专业的基础课程;并且学生《C语言程序设计》能力的强弱,直接影响他们后续专业基础课和专业课的学习。该课程在计算机教学中的重要性是不言而喻的。
1 高职院校《C语言程序设计》课程教与学的现状
在从事计算机及相关专业基础课的教学过程中,发现语言课是学生学得最差、老师教得最辛苦的一门课程。根据专业教学计划,计算机应用、计算机网络、应用电子等专业开设了《C语言程序设计》课程,一般设置在二年级。从课程设置的角度来说,经过知识的积累和思维的锻炼,学生在这个阶段应该具备了学习一门基础语言课的能力。按正常教学规律来讲,在教师与学生的共同努力下是可以学好这门课程的,但实际情况确不尽人意。从多年实际教学经历来看,制约因素主要有两点:一是学生的数学基础差,而教材编排和例题分析与数学知识联系过于紧密,导致学生觉得难学;二是因为计算机编程使用英文,一些学生因英语学习的失败心理,觉得计算机语言是门高深莫测的课程,还没有上课就认为难学,而职业院校的部分学生学习不刻苦的现象,进一步导致教学过程中存在更多的障碍。针对这些情况,我认为要学好《C语言程序设计》课程,克服这两个障碍势在必然。
2 教师如何上好《C语言程序设计》课程
2.1 仔细领会教学大纲,全面深入教材改革
教师深入分析教学大纲,在全面了解学生的数学基础知识状况的前提下,根据大纲制定好教学计划。将教材中涉及到学生未掌握的数学知识方面的例题进行更换,避免因数学知识问题形成教学障碍。例如在讲多分支条件语句的应用中,教材普遍采用一元二次方程求解为例来说明,但一元二次方程的求解对于有些学生来说,虚数是一个知识障碍,可以想象得到,他们会学得一头雾水,教学效果自然就差。还有“输入三角形的三条边长,求三角形的面积。”的例题中,先要判断三条边是否能够组成三角形,再利用海轮公式计算面积,但海轮公式大部分学生都不清楚。这些例题就形成一个本末倒置的结果,为什么不选择其它的例题来分析呢?在后续的例题中,“根据成绩分数,输出等级。”,问题适当地简化,效果就很不错,还可以和后续的SWITCH语句结合起来教学。选取的例题除了有代表性外,涉及到的知识点也不可忽视,要记住,我们是在学习《C语言程序设计》,不是在学习数学,主次要分明。
2.2 精心准备,加强师生互动
课前要充分备课,准备好教学的内容和学生的练习,做到有的放矢。例如在讲到“自加++”与“自减--”运算符时,我们着重讲自加。例题为:int a,b=5;分析:a=++b;a=b++;a=++b++;运算后a,b的值。经过分析后,让学生掌握其规律:运算符在变量前是先做自加操作,再取其值完成后续运算;而运算符在变量后面则是先取其值进行运算,再完成自加操作。得出这个结论后,提示学生自减的运算也是相似的,要求学生分析将上述例题的自加改为自减后a,b的值,这样学生学习起来针对性就比较强。为什么要设置上面三个例题呢,上过《C语言程序设计》课程的教师自然知道每道题的代表性。最后可以用综合题加强这两个运算符的运用,采用如下练习:int a=4,b=5;分析a=++a-b;b=--a++-b++;运算后a,b的值。学生完成这道综合题后,对自加与自减的运算及使用自然清晰明了。
2.3 充分利用学生的成功心理,培养学习兴趣
我们曾经训练一些学生参加全市编程比赛(用Visual FoxPro编写),开始学生也是基本一无所知,我们只好从基本函数、语句开始上课。经历了一个多月时间,他们没有独立地完成任何一个程序的编写。后来不再给他们任何提示,而是让他们自己思考,有时几天后才给他们分析。其中有3名同学,经过了一周时间的查资料、上机调试,终于完成了一个图书管理系统的基本模块,并找到了成功感。自从那以后,他们能非常深入的分析我们布置的练习并经过反复地调试,找到答案,训练效果得到很大地提高。从中我们看到创造一个成功的心理,学生学习的兴趣就会自然提高,学习起来就会积极主动,效果当然比填鸭式教学好得多。
在平时的教学中,我们也应重视这一点,特别是对学习积极性较高的学生更是如此,今年的《C语言程序设计》课程实习中,这一点得到了充分体现。很多练习我都不先分析,而是让他们自己独立分析、调试,最后才小结。大部分学生两周实习完成后,总结说:“在这两周的实习中,所学到的知识比前半学期学到的知识还多”。其实,我想并不是他们在这个过程中学到了很多知识,关键是他们经过独立地思考分析,完成了程序的编写,获得了充分的成功感!有了成功感,就有了学习兴趣,兴趣是最好的老师。学生在学习中能获得快乐,学习过程自然就会轻松很多。
2.4 让学生学以致用,转变学习动机
在我初次上《C语言程序设计》这门课程时,有一名学生问:学了这门课有什么用?当时问得我张目结舌、哑口无言,不知如何回答他才好。后来想:我们的学生是职教性质的,所以对他们说学了这门课你可以去当程序员,同时为以后学习其他语言课打下基础等,这些对学生来说有点和实际不符。教他们这门课,应该让学生掌握一些解决实际问题的能力,才会促进他们努力学习,毫无目的地学习自然没动力。认识到这个问题的严重性后,在后面的教学中,我把平时遇到的一些问题结合起来进行教学,让他们知道掌握某些知识就能解决相关的一些问题,让他们在学习过程中觉得学习与实际生活很近,这样对《C语言程序设计》课程的认识就没那么抽象了。如在讲数组时,就以统计期中成绩情况为例,让他们完成:每个学生的总分、平均分的计算、排名情况;及每门课程的总分、平均分、最高分、最低分、合格率、优秀率的计算和成绩段分析,这既学好了数组的知识,还充分运用了前面章节的一些相关内容,同时,学习该课程的积极性也调动起来了。
2.5 让学生克服畏难心理,理性认识计算机编程语言
我们的学生大多在学习前就有畏难的情绪,觉得《C语言程序设计》课程难学、学不会,造成这种情况主要是对计算机编程语言不了解。另外就是有些学生英语学得差,看到计算机编程使用英文,就未学先弃了。其实学习语言并没有他们想象的那么难,英语差对学习计算机语言影响不大。比如学习该课程,真正要记的关键字只有32个,语法也不复杂,只要大家不带着畏难的心理,一定能学好的。作为《C语言程序设计》任课教师,在上课前,做好学生的畏难心理工作,会在今后的教学工作中起到事半功倍的效果。
2.6 从例题中提取精华,让学生掌握一些代表性的编程方法
这一点其实和学习数学一样,不管是教材中的例题还是教师另外安排的练习,一般来说都比较具有代表性,代表了某类问题的解决办法。因此,学生在学习中不要仅仅满足于理解或掌握这些题目的解决方法,还要进一步将这些具有代表性的解决办法提炼出来,为解决相似问题提供参考。比如说在讲数组排序方法的应用时,常会讲“冒泡法”和“选择法”两种排序方法,其实,作为一般的应用,不管是哪种排序方法都比较好,只要是排序的问题,使用其中的一种(或加以变换)都能解决问题的。
3 教师如何引导学生学好《C语言程序设计》课程
教学是一个相互配合的过程,涉及到教师如何教、学生如何学的问题,这两个环节相辅相成、缺一不可。学生如何学也起着举足轻重的作用,而学生如何学与教师的正确引导是密不可分的,下面就如何引导的问题谈几点看法。
3.1 强调该课程前四章的重要性,要打好扎实的基础
计算机语言的学习,真正要记住的知识不多。如该课程,只要学好前四章:标识符、运算符与表达式、顺序结构程序设计、程序调试方法等,并打下扎实的基础,后面的学习就会轻松得多。我们在教学中经常遇到这种情况,学到后面,有些学生连printf()、scanf()、putchar()、getchar()等常用函数的使用都忘了,这些最基本的知识都不能熟练掌握,又如何学习后面的内容呢?
3.2 让学生改变学习方式,为学生多动脑、多分析、多练习提供条件
据了解,有些学生在初中或高中的学习过程中,都存在着较多填鸭式的教学模式,造成学生在学习过程中不灵活、不动脑、不善于分析问题,只会生搬硬套、死记硬背的方法学习,这种情况对于学习计算机来说是一个最大的障碍。说实在的,如果想要学好、用好计算机,没有一定的悟性,并且不能融会贯通、举一反三是不行的。因此,在学习中不要满足于教师教了多少,而应该多动脑筋,对遇到的问题多分析、多思考,在计算机上多练习、多操作,还可以适当的看些相关的课外书,开阔视野,这样才会学好、运用好计算机语言。就像前面说到的那些学生,开始他们总是满足于教师教了他们多少;后来布置的练习,如果是经过教师分析后他们才做出来的,他们总是觉得没有成就感。因为填鸭式的教学,学生在学习中尝试不到学习的成功与快乐,自然就学不好。为此,在讲到具体程序设计后,每堂课上完后要布置两三道课后习题没有的题目,给学生多写、多编、多读、多看程序提供机会。
3.3 引导学生加强数学的学习,努力拓宽数学知识面
当然,如果要学得更深入一些,要求再高一些,扎实的数学基础知识对于学习编程无疑是必要的。在后续的编程学习中,对算法等知识的理解与掌握要求有相当的数学知识。因此,要求同学们要努力学好数学。比如在讲二维数组的应用时,如果学生提前了解线性代数中行列式和矩阵的相关知识,教学效果肯定显著。
C语言程序设计课程是计算机和软件专业学生接触的第一门专业基础课,也是许多高等院校非计算机专业学生的一门必修公共基础课,是高等院校的重点课程之一。它的应用领域非常广泛,既可以编写系统软件,又可以根据用户需要编写应用软件。C语言具有较强的逻辑性,处理问题周密、严谨。学生一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言。因此,C语言成为学生学习程序设计的入门课程,而C语言程序设计是一门实践性很强的课程,实验教学是该课程不可缺少的重要组成部分。
C语言的数据类型较多、表达式丰富、语法结构复杂,它也是教师难教、学生难学的课程之一。由于种种原因,传统的实验教学多是学生按实验教材和教师指导的程序一步一步完成,学生虽然有一定收获,但是也束缚了手脚。学生完全是被动的接受者,没有充分发挥主体作用[1]。因此,我们需要更新理念,在实验教学环节中不断探索,用实验教学拓广课堂教学,使学生真正领会并掌握程序设计的基本思想和基本要领。实践教学是大学本科教学的重要组成部分,应不断探索其新的教学模式和教学方法,以提高大学生的综合素质和创新能力[2]。
1加大实验教学管理力度
为了培养学生应用所学知识解决实际问题的能力,树立学生的团队合作精神,锻炼学生的逻辑思维能力和创新思维能力,我们加大了实验教学的管理力度,组建了一支由6名教师和2名博士生组成的结构完整的实验指导梯队,由4名主讲过C语言程序设计课程的老师主要负责解答专业方面的问题,并对学生加以引导,重点培养学生的自主学习能力和创新意识;两名实验室的指导教师在开发环境的应用方面给学生提供强有力的支撑;两名博士生发挥其编程能力强、掌握新技术等特长,在算法的程序实现上,给予学生更多的指导。
实验教师的水平与修养对学生的影响是巨大的,所以实验教师应不断提高自身理论与实践水平,钻研业务。在每次实验课开始前,我院担任实验指导的老师们都集中到一起,从实验内容的具体安排到实验中学生会遇到的问题等,都会进行讨论。在管理上,我们更加强调了分工责任制,每个老师负责哪个班的哪些同学,都做了明确规定,从答疑到验收,都由这个老师主要负责。有了这样一支实验指导梯队和相应的管理策略,就为完成实验教学任务、达到良好的实验效果提供了必要的保证。
2探索实验教学方法
C语言程序设计实践性非常强,学生只有通过实践才能真正理解其含义,真正掌握其本质并学会编程。尽管学生学习C语言有不少困难,但兴趣是最好的老师,要最大限度地激发学生的学习兴趣。有了兴趣,学生就能积极地思考,大胆地探索,变被动接受为主动思考。因此,实验教学总的思路就是要以激发学生兴趣为主线,充分发挥学生的积极性和创造性。
2.1抓好实验预习工作,培养学生良好的学习习惯
每次上机实验之前,就要布置好上机任务,要求每位同学做好预习,写出上机实验的内容、编好程序、准备好调试所需的数据,并进行初步的结果分析,对每个题目做到心中有数,避免学生上机实验时现看教材、现编程序的现象。长期如此,便可养成良好的学习习惯,学习效果自然就有很大的提高。
例如,在选择结构编程练习实验前,我们给学生布置了这样一个实验题目,编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1运算符op操作数2
来计算表达式的值。指定的运算符为加(+)、减(-)、乘(*)、除(/)[3]。这道题学生拿过来一看非常简单,只是简单的输入与输出与条件判断。
有的同学定义了两个float型变量a、b来分别代表两个操作数,两个char型变量c、answer来分别代表运算符和答案。用scanf函数读入数据:
scanf("%f%c%f",&a,&c,&b);
学生在程序编译通过后发现并没有得到预想的结果,程序好象“提前”结束了,而且编译没有问题,错误不易被检查出来。学生这时就会产生好奇,得不到正确结果的原因是什么?为什么有的同学的程序看起来与自己的完全相同却能得到正确结果?
经过启发研究,通过跟踪变量发现,发现是scanf函数读取缓冲区中数据的问题。学生在输入运算符时为了与两个操作数相隔,两侧都用了空格。所有的scanf语句都执行了,并没有提前结束。只不过有的scanf读取到了空格符而已。学生恍然大悟:原来看似简单的问题实际上并不一定那么简单。这样在实验课中,学生带着问题去修改自己所编写的程序,观察修改后的结果,实际上就是了解改动部分在整个程序中所起的作用,这种作用的认识和理解不是通过说教得来的,而是他们亲身体验的,学生对它的理解、记忆就要深刻得多,同时还体会到实验预习的重要性。
2.2锻炼学生发现问题、解决问题的能力
在每次实验课开始时,实验教师对上一次主讲教师讲课的内容作简要回顾,对本次实验的重点、难点以及一些基本算法、编程思路、解题技巧进行必要的分析和讲解,让学生对本次实验的大致思路和目的心中有数。教师主要起引导的作用,实验前的讲解以重点、难点和注意事项为主,不应面面俱到,可以先给出一些问题,让学生带着问题去做、去观察、去思考。实验中,应以学生为主体,使学生成为真正的主人。
有些问题看似简单,实则包含着很多内容,再简单的程序都要结合语言的自身特点,以一种最优化的结构去表达,不能忽视任何小问题。比如有这样一个程序:用近似公式
e=1+1/1!+1/2!+1/3!+……+1/n!
求自然对数的底e的值,取n为10(n的值越大越接近e的真值)[4]。
#include
main()
{
int n;
float e,p;
for (n=1;n
{
p=p*n;
e=e+1.0/p;
}
printf ("e=%10.7f\n",e);
}
对于初学者来说,写出这样的程序还是不错的,无论从语法上还是语义上都没有错,可是上机运行时就会发现结果为2.919978×1039!很明显这是错误的,大家都知道e的近似值是2.718。
通过上机调试,学生会发现:只是因为变量未初始化,就会给结果带来这么大的偏差,从而深刻体会到使用未初始化的变量有多么危险。这类细节问题还有很多,只看书是体会不到的,只有通过自己动手动脑,才能积累实践经验,真正提高。因为编译通过,不等于程序正确;一种输入正确,不等于所有的输入都正确;一次运行正确,不等于次次运行都正确。程序总会出一些莫名其妙的错误,想解决这些错误,唯一的手段就是动手调试(Debug)[5]。同学们多动手,不仅可以发现程序中存在的问题,同时也可以充分地感受到自己分析问题、解决问题的乐趣。
2.3培养学生创新精神,向研究型、个性化方向发展
在具体指导实验的时候,教师要由以往扮演的主导者、支配者转向指导者、欣赏者,由台前退向幕后,由显性的中心地位退向一个隐性的指导地位,实现指导方式的转变,培养学生的创新精神、研究能力。对大部分学生,应避免直接回答他们提出的问题,而是作出必要的提示,引导他们去查阅教材和笔记,认真思考与分析,找出错误的原因,自己解决问题。提倡创新、个性化,同一问题可让学生寻找不同的解决方案。如在讲到循环时的猴子吃桃问题,猴子第一天摘下若干只桃子,当即吃了一半零一个,第二天又吃了剩余桃子的一半零一个,以后每天都吃前一天剩余桃子的一半零一个,到第十天想吃时,发现只剩下一个桃子了,求第一天猴子共摘了多少桃子[6]。有的同学用循环来解决此问题,而有的同学用递归的方法解决,让学生比较各个方案的优劣,好的解决方案向更多的学生推广,从而使每位同学的创新思维大大加强。
创新人才的培养,重在创新能力的培养。这种实验教学方式,给了同学更大的创造空间。
3改革课程考核方式
网络的应用给我们的实验教学提供了很好的平台。比如我院有课程网站,包含全校的计算机类教学。以C语言程序设计网站为例,其中包含讲义、实验指导书、教学课件,还包含自学需要的素材库、试题库以及考试系统等丰富的教学资源和软件[7-8],学生还可以在上面提交作业、讨论问题。它们自成体系又相互关联,学生对课程的高层次需求在课程网站上得到极大的补充,满足了各专业不同层次学生的需求。
目前很多高等院校C语言程序设计课程学习成绩的评定,仅以期末一张考试卷的好坏而定,这使得很多学生不重视实验课,认为实验课上的好与不好对成绩影响不大,很多学生重理论、轻实验。我院对考试进行大胆的改革,采用自主研发的“机考系统”来考核学生,所有的考试都在计算机上进行,学生答完试卷,马上能看到自己的考试成绩,并能看到细节部分:即在哪个位置丢分了。教师从最初上课时就明确告诉学生这种考核方式,使学生从思想上重视实验;每次上机实验也让学生在机考系统的环境下提交程序,作为平时实验的成绩,训练学生的编程速度,锻炼学生在指定时间内完成实验题的能力,培养、提高学生学习的自觉性、实践意识及编程能力。
4结语
几年来,为上好C语言上机实验课,很多教师不断探索,想方设法让学生从枯燥的语言学习中解放出来。学生通过实验进一步理解了知识,更加直接简便地掌握了课程的重点、难点,实验教学质量得到很大提高。
参考文献:
[1] 周国安. 改革实验教学 加强科学实验能力培养[J]. 实验室科学,2006(1):28-29.
[2] 叶枫. 深化实验教学改革,不断培养创新人才[J]. 实验室研究与探索,2008,27(10):103-105.
[3] 苏晓红,孙志岗. C语言大学实用教程学习指导[M]. 北京:电子工业出版社,2007:168-168.
[4] 段兴. C语言实用程序设计100例[M]. 北京:人民邮电出版社,2002:267-268.
[5] 苏晓红,陈惠鹏,孙志岗,等. C语言大学实用教程[M]. 北京:电子工业出版社,2004:174-174.
[6] 谭浩强. C程序设计[M]. 2版. 北京:清华大学出版社,2002:120-120.
[7]国家级精品课程,教育部-微软精品课程,黑龙江省精品课程,国家教育部双语教学示范课程网站[EB/OL]. [2010-06-12] //elite/.
[8] 乐学网C语言程序设计[EB/OL]. [2010-06-12]. /course/view.php?id=8.
C Programming Language Experimental Teaching and Practice
HAO Hui-xin, LI Xiu-kun, XIA Qing-quan
关键词:C语言;程序设计;教学内容;教学角度
中图分类号:G64 文献标识码:A
1教学现状
在高等学校的本科教育中,“C语言程序设计”几乎成了所有专业的必开课程,从计算机科学与技术、软件工程、网络工程等相关专业,到电子信息类理工科各专业,乃至理工科院校的所有非计算机专业,有的是专业基础课,有的是公共必修基础课,有的是“非计算机专业的计算机基础课”。只是课程名稍有差异,常见的有“C语言程序设计”、“高级语言程序设计”、“C语言”、“C程序设计”、“结构化程序设计”等。无论叫什么样的课程名,也无论是哪类专业,其课程的教学要求和教材选用却无太大差别,只是课时分配差异较大。
从网络调查的16所不同类型高校的“C语言程序设计”教学大纲看,普遍都包含“通过本课程的学习,使学生了解有关程序设计的基本概念、术语及C语言的特点,掌握C语言基本数据类型、语法规则、程序控制结构、常用的标准库函数,培养学生的程序设计技能,初步积累编程经验”的教学基本要求;约百分之八十左右的“C语言程序设计”课程都选用由谭浩强主编、清华大学出版社出版的“C程序设计”作为主教材;课时分配从30~108课时不等,其中80课时以上的多为应用型本科院校的计算机相关专业以及综合性大学的非计算机专业,理论课时与实验课时的比例一般为1:1到1:1.2。与此同时,其他专业基础课(如计算机组成原理、操作系统、数据结构等)的课时一般为54课时,最多不超过72学时。相比之下,“C语言程序设计”所占课时是其他专业基础课的1.5倍至2倍。
从教学目的看,非计算机专业的“C语言程序设计”课程主要目的是“掌握语法规则和程序结构,具备一定的程序设计能力”,而计算机相关专业的“C语言程序设计”课的教学目的则要分为三个层次,一是使学生全面理解计算机程序设计语言的基本内容和结构;二是通过算法掌握程序设计的基本方法和步骤,并具备一定的程序设计能力;三是为后续课程的算法描述和其他程序设计语言的学习奠定基础。
2教学误区
从以上的教学现状(特别是课时分配)看,长期以来,“C语言程序设计”的课程教学存在“教学内容背离教学要求和教学目的”的误区,主要表现在教材误区、讲授误区和考核误区三个方面。
2.1教材误区
国内高校的“C语言程序设计”课大多选用谭浩强主编、清华大学出版社出版的“C程序设计”[1]为主教材,目前使用的是2005年7月修订出版的第三版,教材共363页,主体内容分为14章,其中,第3章的数据类型与表达式占用30页,第4章的格式输入输出占用12页,前9章共占用218页,后5章共占用145页。占用如此大篇幅的原因是教材中除了介绍相关语法格式外,还增加了相当多“特殊格式”和“特殊情况”的解释和说明,因此,该教材的最大优点就是“内容详尽、解释清晰”。然而,对于初学者来说,学习计算机程序设计语言就是为了“为计算机描述求解问题的过程”,过于详细但又远离现实问题的“特殊格式”和“特殊情况”的解释,使得学习内容复杂化,增加了程序设计语言学习的难度,误导了学习者的学习重点,由此也赋予了该教材无法掩饰的缺点,那就是教材编写的指导思想和教材内容的组织脱离了高校各专业“C语言程序设计”课程的教学目标,过分强调语法细节而忽略了程序设计语言的“正向表达能力”的应用,过分强调“语言的灵活性”而导致教材主体内容的“复杂化”,从而误导“C语言程序设计”课程的教学内容朝着“重语法学习、轻算法描述”的“语言研究”方向发展。
2.2讲授误区
由于教材内容的“复杂”,课堂讲授自然需要较多课时,教学重点当然也放在了“语法研究”上。从网上下载的“C程序设计(第三版)”的配套教学课件以及有关院校的“C语言程序设计”教学课件的内容组织上可以清楚的给出以上判断。“语法研究”型的课堂讲授,更加放大了教材对“C语言程序设计”课程内容的“扭曲”程度,给学生提供了错误的程序设计语言学习方法,把简单问题复杂化,更为严重的是,挫伤了学生学习计算机程序设计语言的兴趣和积极性,把本应“主动学习”的课程成引入了“被动学习”的歧途,直接导致“懂语法、会做题,但不会编程序”的教学后果。
2.3考核误区
多年来,“C语言程序设计”的主体考试内容就是“语法”,无论是选择题、填空题还是程序阅读题,大多都无法逃脱“语法”的束缚。考试方式以笔试为主。这在某种程度上肯定了“语言研究”的教学角度,促使“C语言程序设计”的教学重点更向“语法研究”的方向倾斜,最终误入“增加课时,强化语法,还是不会编程序”的怪圈。
3应有的教学角度
按照网上调查的各专业教学大纲中“培养具有一定程序设计能力”的教学目的,“C语言程序设计”课程的教学落脚点应该更确切的理解为培养“能用程序设计语言描述求解问题过程”的一般程序设计者,而不是造就“全面掌握程序设计语言语法、能设计高效、难懂程序”的程序设计语言方面的“作家”。因此,“C语言程序设计”课程教学相当于自然语言中的“基本语言能力”教学,而不是“语言研究”或“高级写作”能力培养。
3.1自然语言与计算机程序设计语言
计算机程序设计语言是用人和计算机都能识别的方式描述计算机求解问题过程的过程描述语言,它具有和人所使用的自然语言相同或相似的组成和结构特点,对于已经掌握了至少一门自然语言(比如汉语或英语)并具备一定文化程度的人来说,学习一种计算机程序设计语言并非难事。自然语言的基本组成包括符号集合、字、词、句、数据及其运算规则等基本要素,学习过程包括认识符号、发音、识字、组词、学语法并造句、学文法并写短文、练习写文章等基本阶段,在具备了基本的语言能力之后,扩充词汇量和提高写作能力将成为终身学习的基本内容。按照自然语言的基本组成和学习过程,也可将计算机程序设计语言的基本组成归纳为字符集、标识符(常量、变量、保留字等)、数据类型、运算符、表达式、语句、程序格式等基本要素,其中,字符集和数据类型是定义程序设计语言的基础,字符按一定规则组成标识符,用来充当常量名、变量名或其他标识,在自然语言中被人们公认的特殊标识符被赋予特定的语言含义,专门为语言系统所用(用户不得再次定义其意义),称为保留字;字符集中的特殊符号(如+、-、*、/)被赋予特定的运算意义(如加、减、乘、除)称为运算符;不同数据类型的常量、变量用运算符按一定规则连接起来组成的式子就构成表达式;将特定的保留字与表达式等语言要素按照语法规则组合起来就形成相应的语句;将语句按照要描述的求解问题的逻辑顺序排列起来,就构成了某种程序设计语言求解特定问题的一段程序。
3.2C语言的特殊性
一方面,C语言是程序设计语言的一种,具备一般程序设计语言的基本组成要素和结构特点。另一方面,C语言能成为面向过程的结构化程序设计语言的代表,也有其自身的特殊性。首先,C语言的数据类型极为丰富。除了基本数据类型外,还有构造类型、指针类型、空类型和用户自定义类型,其中,构造类型包括数组、结构体(struct)、共用体(union)和枚举类型(enum)等四种数据结构。其次,C语言具有位操作能力。除了能够对各类变量进行操作外,C语言还具备“按位”进行逻辑“与”、“或”、“非”、“异或”运算和“左”、“右”移位运算,这使得C语言具备了更强的系统开发能力。第三,C语言具有显著的结构化程序设计能力,并通过完整的函数定义来实现。第四,C语言的最大特点就是“语法限制不严,解释灵活”。第五,C语言允许直接访问物理地址,可直接对硬件端口进行操作。第六,C语言没有输入/输出语句,信息输入/输出功能由标准函数库中相应的I/O函数来完成。
C语言的这些特殊性,决定了C语言的教、学过程不同于其他程序设计语言的教学过程。
3.3C语言的教学角度
根据一般程序设计语言的基本组成与结构特点,结合C语言的特殊性,“C语言程序设计”课程的教学角度应该是:从介绍程序设计语言的基本概念入手,重点介绍语言的“正
向”设计功能而非“特殊格式”或“特殊语法”说明,侧重学生的程序阅读和程序设计能力培养,从教学内容的广度和深度两个方面,恰当把握教学角度。
“C语言程序设计”课程的内容可分为三个基本模块,教学过程从第一个模块切入,逐渐扩展到第二和第三个模块。第一个模块可称为“程序设计语言公共模块”,主要包括程序设计语言的基本概念、程序设计语言的基本要素(字符集、标识符、常量变量以及保留字、基本数据类型、运算符、表达式、语句与控制结构、程序结构以及程序书写规范等)以及输入/输出格式等内容;第二个模块是C语言的主体,主要包括函数、数组、指针、文件等;第三个模块是高级编程内容,主要包括结构体(struct)、共用体(union)、枚举类型(enum)以及用户自定义类型等。
在教学深度方面,各模块的教学重点应放在“规范的语法描述和直观易懂而且正确的语义表述上”,避免涉及各种过细的“不符合人类阅读习惯”的语义描述,暂时避开“特殊格式”或“特殊情况”的纠缠,摆脱“研究语法”的错误向导。在此基础上,第一模块的教学可与自然语言相比对,通过学生已有的自然语言学习经验和语言要素,使学生快速建立程序设计语言的基本概念,正确理解程序设计语言的基本要素及其关系,掌握基本语法和程序基本控制结构(顺序、选择、循环),并通过算法归纳求解问题的过程,正确理解算法不同描述方式(自然语言、传统流程图、N-S流程图、伪代码、程序设计语言)的作用和差异,特别是从“问题”到“程序”的渐进转化过程,从而培养学生的基本程序设计能力。通过第二模块的教学,使学生明确函数、数组、指针、文件等概念和作用,掌握它们的定义和引用方法,能进行相应数据类型的编程,进而掌握用函数定义的结构化模块程序设计的方法;通过第三个模块的教学,将程序的数据处理能力扩展到结构体、共用体、枚举类型以及用户自定义类型等复杂数据类型的处理上来,通过恰当的例子应用这些数据类型,向学生展示C语言强有力的数据表示和处理能力。
另外,可以将C语言中的“语法灵活性”和不同部分的各种“特殊情况”分类总结,归纳整理成“语言参考手册”等形式,以附录的形式提供给学生,以便需要时“备查”。这样既可节省教学课时,又可向学生提供学习语言的主动权。
3.4教学策略和方法
“C语言程序设计”属语言类课程,教学过程充满了逐步完善和熟练的基本特点,因此,从教学安排的策略上要分重点、分阶段逐步进行,每个阶段的教学方法应该采用建立在一定基础上的有重点的“部分教学法”,以核心内容为基础,向外逐渐延伸,部分学习,渐进掌握。尽可能避免不分主次、不论难易、不顾急缓,盲目一次性扫清各类知识点的“地毯式”教授方法或学习方法,同时强调自学和上机验证,强化在特定环境下(如Turbo C++ 3.0)的程序设计训练,做到“精讲多练[2]”,从小程序练起,逐渐过渡到求解较大或实际问题的程序设计上来。
4结束语
从目前的教学现状看,无论是计算机相关专业,还是理工科的电子信息类专业,乃至综合性大学的非计算机专业,“C语言程序设计”的课程教学均占有重要的教学地位,在全面提高教学质量和教学效率的今天,不同类型专业结合自身优势和程序设计语言类课程的特点,选择合适的角度组织和实施“C语言程序设计”课程的教学活动非常重要,而且很有必要。笔者的教学实践证明,避开“语法研究”的程序设计教学不仅可减少课时,更可提高学生利用程序设计语言“表述求解问题过程”的能力。
中图分类号:G434 文献标识码:A 文章编号:16727800(2012)011016703
作者简介:温菊屏(1979-),女,硕士,佛山科学技术学院电子与信息工程学院讲师,研究方向为数据挖掘、信息安全。
0 引言
《C语言程序设计》课程是大学计算机专业及理工类非计算机专业一门重要的公共基础课程,它不仅是其它高级编程语言的基础,而且通过这门课的学习可以掌握程序设计的思想。该门课程具有较强的理论性和实践性,学好这门课程将为后续专业课程的学习打下扎实的理论和实践基础。学生普遍反应,C语言课程内容繁多,虽然感觉课堂上基本听懂教学内容,但上机实验也常常显得力不从心,课堂和上机严重脱节。值得一线教师思考的是程序设计类课程上机实验的重要性丝毫不亚于课堂教学,这是巩固和发展课堂知识十分重要的一环,在抓课堂教学质量的同时,要切实重视实验教学环节。因此,必须认真思考这门课程实验环节存在的种种问题,找到解决问题的办法,切实提高实验教学的效果。
1 实验教学存在的问题
1.1 实验课效率低下
在以往上机实验课上,有相当一部分学生事先没有预习实验内容,坐在电脑前看教材、看实验指导书,而不是打开电脑动手编写程序,导致上机实验课效率十分低下,根本无法完成实验任务。
1.2 过度依赖老师解决问题
很大一部分学生在上机调试程序时,不会根据提示的编译错误找到错误所在,一味依赖教师把错误指出加以改正,造成学生发现、解决问题的能力没有得到锻炼与提高。
1.3 实验素材有待完善
通过上机实验环节,可以加深学生对讲授内容的理解,尤其是一些繁琐、枯燥的语法知识,可以通过上机实验加以巩固。因此,上机实验的素材和实验内容安排是否合理显得尤为重要。以往使用的实验教材是和教材配套的实验指导书,实验项目基本上是教材每章后面的程序编写题,每个程序代码都可以在实验指导书中找到答案,学生只需要把书中的源程序代码输入计算机,进行一些简单的调试工作。这样一来,学生只能依葫芦画瓢,无法很好地掌握所学知识点,学生丧失独立思考和创新的能力。
1.4 学生自我检测和老师测评环节缺失
学好C语言这门课程,仅靠课堂和上机实验的有限时间是不够的,需要学生课后花很多时间上机实践。以往学生课后只能依靠教材、实验指导书和课件复习所学知识点,学习资源匮乏,并且学生无法对自己知识点的掌握情况做评估,不能很好地补缺补漏。教师也没有提供阶段测评环节及时掌握学生各阶段的学习情况。
2 实验教学探索
2.1 抓好实验预习工作,培养学生良好的预习习惯
上机实验是程序设计课程一个非常重要的环节,通过上机实验编写程序,可以进一步巩固对理论知识的理解。在以往的实际教学中,教师往往容易忽视实验课前预习工作,学生事先不做准备,到机房才开始看题目思考如何编写程序,很难在有限的课堂时间内完成作业。因此,近几年的教学中,教师要求学生事先将要完成的实验程序代码在预习本上写出,在上机实验时将代码输入计算机进行调试。教师做到每次上机课检查学生的预习本,实施“没有完成预习工作的学生不能进机房”的惩罚措施,经过严格的督促,所有学生养成了事先预习的好习惯,保证了上机实验的效率。
2.2 养成良好程序书写规范,掌握程序调试工具,培养学生发现问题、解决问题的能力 以往在批改学生作业时,发现大部分学生的程序代码虽然没有语法错误,但程序书写很不规范,给查错、日后阅读带来很大的不便。程序书写应该清晰,便于阅读、理解、维护,遵循以下规则:①一个语句占一行;②使用{}时,两个花括号单独占一行,并且在同一列的位置;③低一层次的语句比高一层次的语句右缩进几个字符;④在必要的地方加上注释语句。
其实在VC 6.0编译环境中,系统有自动右缩进的功能,代码书写每次换行,系统会根据层级关系自动右缩进几个字符;并且对于没有正确采取右缩进对齐的代码,可以通过按ALT+F8组合键进行自动对齐。
由于C语言内容比较复杂,对初学者而言,很容易在编写程序时遇到各种各样问题,加上学生的英语水平有限,对于调试出现的错误和警告信息看不明白,出现问题就会有畏难情绪和依赖思想。
程序调试能力是程序设计能力一个非常重要的方面,在以往的教学中,学生调试错误能力的培养往往被忽视。很多教师在辅导上机时,只要学生出现调试错误,教师直接把错误指出,学生发现问题、解决问题的能力没有得到锻炼。
程序错误包括两类:一类是语法错误,一类是逻辑错误。语法错误是学生比较容易犯的错误,对于这类错误,教师要告诉学生找错方法。对于逻辑错误教师应该在课堂上教会学生使用调试工具,强调调试工具使用的重要性,在上机实验时,鼓励学生经常使用调试工具,特别对于循环结构的程序,通过调试工具,可以很好地观察一些重要变量的变化情况。
2.3 完善实验教材,合理安排实验内容
以往教学中,使用的实验教材是谭浩强版的《C语言程序设计题解与上机指导》,这门书的实验内容基本上是程序编写题,并且已经附有答案,学生使用该教材实验效果很不理想。
2009年10月,在广东省教育厅下达的课题“C语言程序设计立体教材开发”的资助和要求下,课题组集中精力编写了一本有助于从多个层次培养学生读程序、分析程序、修改程序以及编写程序能力的实验教材——《C语言实训教程》。该实验教材共有12个实验,其中1个验证性实验、9个设计性实验、2个综合性实验。验证性实验立足于语法规则,目的在于巩固C语言的基础语法知识。设计性实验是在给定实验目的和要求的条件下,由学生结合所学知识,自行设计实验方案并加以实现的实验,目的在于培养学生充分运用所学知识,去发现问题、解决问题。设计性实验突破以往只有编写程序题的模式,每个实验的实验任务都设置了3个层次:
(1)程序改错题:读程序找出其中的错误,通过改错训练,可以让学生掌握调试工具的使用,并且避免以后编写程序时犯类似常见错误。
(2)程序扩展题:培养学生在分析、理解原始程序的基础上,对程序进行扩充修改,为独立编写程序打下基础。
(3)程序编写题:训练学生独立编写程序能力以及解决实际问题的能力。
经过“读程序—模仿改写程序—编写程序”实验环节,让学生在由浅入深的逐步引导中理解和掌握程序设计的思想、方法和技巧。
综合性实验是学生经过一个阶段的学习之后,运用所学知识点,对实验技能和方法进行综合训练的实验。综合性实验是学生反映最难,也是收获最大的一个部分。在以往教学中,综合性实验在课程快结束的时候布置,学生面对如此综合性的实验任务,要一步到位,从无到有写出一个完整的程序,显得思绪混乱、手忙脚乱、无从下手。教师应该在学习初期就把综合性实验要求提出,演示程序,让学生直观感受课程最后要完成一个怎样的任务。在这样一个大任务的驱使下,激发学生的学习兴趣,随着知识点的不断学习,将一个简单的小程序逐步完善成一个复杂的程序。以《C语言实训教程》为例,综合性实验具体实验任务是编写一个学生信息管理系统,每个学生信息包括学号、姓名、性别、班级、3门课成绩,主要功能包括数据输入、数据输出、数据修改、按照某字段排序、查询学生信息、统计平均分及不及格科目等功能模块,通过选择不同的菜单项来实现各功能模块。此综合性实验涉及到知识点有选择结构、循环结构、函数、结构体数组等内容,基本上涵盖了C语言中所有知识点。
综合性实验不是一步到位的,而是分步骤实施,逐步完善程序代码,具体步骤如下:①在选择结构实验环节中,要求学生编写程序1.cpp:使用switch语句完成“学生信息管理系统”菜单的输出显示;②在循环结构实验环节中,要求学生修改程序1.cpp:在1.cpp基础上,使用while或do while语句实现菜单的循环显示,修改后的文件名为2.cpp;③在函数实验环节中,要求学生修改程序2.cpp:在2.cpp基础上,对每个菜单项对应设计一个空函数(只有函数名,函数体内是空语句,留待以后加以完善),选择不同菜单项则调用不同的函数,此时管理信息系统最初的程序框架已经修改,建立修改后的文件名为3.cpp;④在数组和结构体的实验环节中,要求学生把综合性实验中的每个功能模块分别用一个独立的cpp文件编写调试成功,假设有n个模块,此时程序名分别为41.cpp,42.cpp,…,4n.cpp;⑤新建一个新的cpp文件——5.cpp,在该文件中写入所有功能模块对应的函数定义,函数定义部分代码提炼于步骤4所有独立的cpp程序文件(41.cpp,42.cpp,…,4n.cpp),main( )函数里顺序调用各函数,顺序执行各功能模块;⑥要求学生修改程序3.cpp:将5.cpp程序中所有函数定义的代码,填入到3.cpp程序中对应的空函数的函数体内部,经过调试修改,最终完成综合性实验程序。
通过以上循序渐进的步骤,学生能够深刻体会如何将一个复杂的问题分解成一个个小任务加以解决,从而使得学生编写复杂程序的能力得到很好的锻炼。
2.4 借助立体化资源,培养学生自主学习能力
《C语言程序设计》课程具有信息量大的特点,仅仅依靠64学时课堂教学和上机实验无法达到良好的教学效果。因此,如何把课堂进行延伸为学生搭建一个课堂外的课堂,为学生自主学习提供一个平台是值得教师思考的一个问题。
本课题组除了编写实验教材之外,还制作了实验教材配套的辅导学习光碟,光碟中提供了每个实验项目问题分析及解决方法的讲解视频、流程图及参考程序;搭建Blackboard网络教学管理平台,BB平台除了提供学生自主学习的课程资源之外,还提供了学生进行自我测评的“在线测试”,测试题目以章节为单位,涉及单选、填空、阅读程序及编程题,此环节允许学生反复练习,点击“提交”按钮之后,客观题会自动评分并提供正确的参考答案,让学生对自己所学知识的掌握情况有个全面了解。通过“实验教材+辅导光碟+网络平台”三位一立体化的资源,使得本课程的实验教学模式由原来单一的依赖实验指导书资源学习,转变为学生依托立体化资源进行自主学习的模式。
2.5 增加阶段性测试,及时了解学生学习情况
以往教师只能通过学生提交的实验程序来了解学生知识掌握情况,而大部分实验作业是学生通过翻看教材和共同讨论完成的,教师无法了解学生掌握知识的真实情况,无法及时对掌握不好的知识点加以强化学习。针对这一问题,本课题组利用计算机技能自动测评系统对学生进行阶段性测试,通过2~3次的小测试,了解各阶段学生知识点掌握情况,及时补缺补漏。测试成绩也作为平时成绩的一部分,从而督促学生及时复习所学知识点,不至于边学边忘。
3 结语
针对多年来C语言实验教学中存在的若干问题,本课题组经过一系列教学实验改革和实践,取得了较好的效果,学生对课程和教师的满意率也显著提高。在学生对26名任课教师的教学质量评价中,有5位《C语言程序设计》任课老师排名前7名,是历年来教学评价最好的一次。由此可见,对于C语言实验教学环节,改进方法在实际教学实施过程中取得了良好教学效果。今后要在实践教学中勤于思考、时时总结、不断改进,争取在教学实践中取得更好的成绩。
参考文献:
[1]侯建花,杨长青.《C语言程序设计》实验教学的改革与实践——以淮海工学院为例[J].计算机教育,2010(1).