发布时间:2022-03-17 13:31:36
序言:写作是分享个人见解和探索未知领域的桥梁,我们为您精选了8篇的c语言程序设计样本,期待这些样本能够为您提供丰富的参考和启发,请尽情阅读。
关键词:教学内容;教学手段;教学方法;考核方式
C语言是早期最经典、最强大的面向过程的程序设计语言之一。虽然现在面向过程已经全面转向面向对象,但是C本身的中级语言的设计理念以及对现有VC/C#等语言的深刻影响,使其至今仍是程序设计入门的首选语言,也是工科院校计算机专业学生接触的第一门程序设计语言。对于计算机类专业学生来说,一旦掌握了C语言,就可以较为轻松地学习其他任何一种程序设计语言,为后续的面向对象程序设计以及Java程序设计等语言的学习打下基础;对于其他非计算机专业的工科学生来说,比如电子、机电专业来说,该课程为学生用计算机编程解决实际问题提供了方法,是学习单片机技术教学的基础和重要工具。
一、C语言教学中面临的问题
C语言程序设计是一门基于dos操作系统下的面向过程的程序设计语言,随着面向对象语言的开发,C语言在界面交互性上逊色不少,作品上也不如Flash、三维动画效果吸引眼球,难学、难懂、难以应用的课程,对学生越来越缺乏吸引力。针对这种状况笔者认为,更新教育观念、探索新的教学模式才是根本出路。笔者根据多年的教学经验,对C语言程序设计课程从教学内容、教学手段、教学方法、考核方法方面进行了一系列的创新改革。教学内容主要解决如何调动学生积极性,激发学生创新能力,如何提高学生的创新能力、实践能力、研究能力、发现问题和解决问题能力等综合素质;教学方法主要解决如何实现“以人为本”,分层次教育,如何通过引导、启发等方法,激发学生的发散性思维。同时要利用目前课堂和实验教学在培养学生创新能力和实践能力方面的优点,利用大学生实训基地,为学生的创新和实践能力的锻炼和培养提供一个良好的平台。
二、教学内容的创新
课程内容的选取与组织是课程教学改革的基础。人才培养方案对C语言程序设计教学内容进行重新整合,把课程学习划分成培养学生的基本程序设计能力和培养学生的专业程序设计能力两个阶段。
第一阶段安排在大一第一学期,主要针对没有程序设计经验的大一新生,重点讲授C语言的基本知识,包括三种基本结构、数组、函数的概念。在第一阶段教学中,笔者采用案例教学方法结合具体的程序实例,创设情境,引导学生自己总结掌握C语言的基本语法和程序设计的基本方法。第一阶段的学习结束的时候,学生可以具备基本的程序设计能力,独立编写具有初等难度、几十行的程序,并且能够较顺利地完成程序调试与测试。第二阶段教学放在大一第二学期初,针对具备基础程序设计能力的学生,重点培养学生的专业程序设计能力。在第二阶段的教学中,以学生为主体、以教师为引导,采用国家火炬计划河北省软件人才工程实训课程,使学生融会贯通所学知识,完成一个具体的项目,以达到提高学生程序开发能力的目的。迄今为止,学生完成的项目包括“银行储蓄管理系统”“彩票信息查询系统”。教学实践证明,这种理论和实践技能并行的教学模式,更加有助于学生的创新能力的提高,使学生在不断实践中掌握技能,在技能学习中提高基础理论。
三、教学手段的创新
在学习过程中除了发挥教师的引导作用,还需要充分调动学生的参与主动性。在授课期间灵活采用多种教学手段,如:自学、演示、对比、课堂提问、学生演练和讨论等,通过不同方法,寻找创意思维“契机”,安排创意铺垫内容,培育学生的创意萌芽,营造创意环境,引发学生争鸣,为学生提供更多的思维空间,诱发学生的思维灵感。例如,在教学中讲解“循环结构的循环嵌套”的时候,提出马克思手稿中的数学题的案例:伟大的思想家马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人、女人和小孩。他们在一家饭馆中吃饭,共花费50先令。如果每个男人吃饭要花3先令,女人要花2先令,每个小孩要花1先令,问男人、女人、小孩各多少人?先提出问题,引导学生分析、讨论案例,提问学生运用数学知识完成案例提出的问题需要进行哪些操作,这样学生就会比较有兴趣,课堂气氛就活跃起来。然后帮助学生从案例分析中理解并掌握什么是多重循环,并且如何使用双重循环解决问题,最终完成程序的编写。
在学习的第二阶段采用开放式训练教育方式,利用专题设计和课外指导方式,鼓励学生课外自主进行训练。如:完成的项目“彩票信息查询系统”,教师提出设计方案,学生完成基本功能以后,自己可以对其他功能进行完善。
四、教学方法的创新
课程每个章节内容结构主要由三部分组成:
知识点:介绍本章需要掌握的知识或技术。
应用案例:介绍本章知识应用的案例。
创新训练:针对具体的问题,应用本章技术来完成知识点的应用。
在整个教学过程中,教师采用框架式教学,像建筑工程师修建筑一样,先采用精讲的方式,让学生建立整门课程的知识框架;接着通过案例教学、项目式教学等多种教学方式,让学生逐步去进行细节知识点的填充;最后通过综合训练方式,完成整门课程的学习。
例如,在讲解C语言程序设计中的函数时,搭建出例如综合排序等程序的框架,给学生留出函数,让学生自由开拓思想,独立完成一些小型实例的编程,经过具体知识点的训练后,还要重点进行综合知识的应用训练,开展一系列的创新应用,以达到知识综合运用和培养创新能力的目的。
五、考核方式的创新
传统的C语言程序设计考核模式一般以标准化的笔试题为主,这种考核方式侧重语法知识的考核,忽视编程实践能力的培养。为此,笔者改革传统的考核方式,将考核分为平时实验和期末考核两部分。平时实验成绩考核的是学生每一章知识,实训作业就是在每一章节结束的时候,布置相关的习题,学生利用业余时间编程,并且在实训期间进行调试,调试成功后上传到服务器上。期末考核成绩采用的是教研室开发的上机考试系统。上机考试系统模拟C语言二级考试建立了知识面齐全、题量充足、难易度合理的试题库,采取随机抽题的形式重点考查学生的程序设计能力和程序调试能力。这种考核方式督促学生在平时学习中加强对编程举一反三的实践环节。实践证明,这样不仅能有效培养学生的实践编程能力,还激发了学生动手实践解决问题的兴趣。
总之,经过不断的摸索与实践,通过以上的教学方法与教学手段的改革和实践,不仅提高了学生的学习兴趣,让学生从枯燥无味的语言学习中解放出来,从被动学习走向主动学习,同时也培养了学生分析问题、解决实际问题的能力,充分发掘了学生的创造潜能,锻炼了创新和协作精神。
参考文献:
[1]郭芹.对高职高专计算机专业程序设计教学的思考[J].中国科技信息,2008(1).
1.1教学只注重课程的讲解,不注重教学过程的质量控制
传统的教学以课程内容的讲解为主,通过讲解变量、循环、数组、指针等内容,并结合一定的教学案例来推进教学过程的实施。这种传统的教学方法没有考虑到本阶段学生的特点,往往造成教学效果差,教学质量难以控制。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道题,则学生通过上机测试,否则,学生没有通过上机测试。为了减轻学生的压力,上机考试可以分两次进行,如果第一次没有通过上机考试,还可以组织学生进行第二次考试,取这两次考试的较高分作为学生成绩。
3结束语
关键词:C语言;实验教学;实践能力
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
(School of Computer Science and Technology, Harbin Institute of Technology, Harbin 150090, China)
本文结合本校情况,分析了目前高职电子信息类专业学生在C语言程序设计教学上存在的主要问题,提出采用点面结合,分级教学目标,精选程序案例,突出高职认知规律,以提高学生的学习兴趣为基础,强化学生上机练习及指导为突破口,最终实现高职计算机专业C语言程序设计的教学目标。
关键词:
高职院校;C程序设计;分级教学目标
一、引言
现在,我们学校和许多高校一样,选择C语言作为电子信息类专业的高级语言程序设计的入门教学课程,C#语言和Java语言程序设计与开发作为计算机专业后续岗位能力延展课程。C语言程序设计是一门专业基础课,强调语法和基础,而C#语言和Java语言程序设计则着重于岗位应用能力。本人多年从事《C/C++语言程序设计》、《C#语言程序设计》、《数据库编程技术》和《ASP.NET》课程教学,发现我校高职电子信息类专业相当一部分学生语言不过关,给后续课程带来很大麻烦,造成教学被动。为此,很有必要对高职电子信息类专业C语言程序设计教学进行反思,提出相应对策。本文以C程序设计课程为例,分析目前高职电子信息类专业学生C语言教学上存在的主要问题,就如何确定并有效实现教学目标做一个切实的探讨。
二、高职电子信息类专业C语言教学的特点
1C语言的教学特点:具有逻辑性、理论性、创构性和理论性是计算机程序设计课程的四大主要特征。想要掌握计算机语言,需要学生有一定的主动创造力和罗辑思维力。而C语言更是计算机程序设计课程之中的难点,很多首次接触到C语言的同学很难入门。根据这一特性,对高职院校在C语言的教材编写上和教学上带来了很大的困难。计算机语言的学习不仅仅是看教材,听课更重要的是在于应用。学会使用C语言编写程序,最重要的环节是做习题和上机实训。如果学得不扎实,对后续专业课程影响很大。所以一定要强化实训教学。高职院校的学生普遍存在着文化水平较低,认知度不足,综合素质不高等特点。很多学生对学习没有热情,思维理解能力也较差。有的学生上课,仅仅是为了应付家长和学校,自己没有主动学习的欲望导致学习没有纪律。因此,高职院校的学生上课处于一个积极性不足,学习习惯不好,没有学习计划规划,不主动思考这一环境之中。他们往往是被动的接受学校的教育,仅仅是为了完成目标而学习,一版不会主动进行相关课程的深入思考和练习。由于这些不好的学习因素吗,导致相关的学习课程学习起来更加困难,也不知道如何求助如何进行解决。目前,相当大一部分学生对学习计算机课程存在两个误区:一方面是在现在软件领域这个大环境下,C语言基本无用,另一方面是学习这门课程如果今后不从事相关工作也无用武之地。还有相当一部分学生学习中产生畏难情绪,严重挫伤他们学习计算机语言的积极性,甚至影响他们学习本专业的信心。但同时也要看到,有一部分高职生来自于高职院校的学生,他们在学习C语言的过程中实践和动手能力都得到了很大的加强,逻辑思维能力和创新能力也有明显提升,还有一部分有自己兴趣十足的爱好。这应当充分肯定并予以高度重视,并加以正确的引导。在教学中注意扬长避短,充分发挥他们的优势。
三、高职C语言教学的思考与对策
(一)要遵循计算机语言学习的认知与教学规律计算机语言程序设计学习都有自身的认知与教学规律。计算机程序就是用某种计算机语言把计算机的执行过程描述出来。学习计算机语言,就是学习语法规则以及掌握这些语法规则的应用。众所周知,要学好一门语言,关键是不停地进行读写训练,活学活用。多看、多读、多写、多模仿练习是学好任何一门语言的诀窍,那么学习计算机语言也是如此。所以,C语言程序设计教学首先是引导学生多阅读C语言程序,然后是学会调试C语言程序,接着是模仿编写C语言程序,最后才是设计C语言程序。
(二)分级制定教学目标我们的教学对象是这样现状的高职学生,还存在计算机水平差异、思维发展差异。这就要求我们根据高职教育的根本要求和专业人才培养方案,结合本课程的内容特点,在教学大纲中应制定多级教学目标。多角度分层次分阶段从低到高设计的教学目标如下:1、掌握C语言程序设计的基本知识、基本方法和技巧2、具有程序设计初步应用能力3、理解结构化程序设计的基本思想4、培养程序设计逻辑思维方式,提高学生自主探索学习和分析解决实际问题的意识在教学实施过程中,要根据学生所表现出来的差异进行分层,设计不同层次的学生模型,分层次制定教学内容和教学目标。有条件分班教学的,可按不同层次的学生在教学活动中要达到不同的学习目标,分班级安排不同的学习内容。比如:把C语言程序设计课分为两个层次,一个基础层次,一个提高层次。
(三)选择或自编适合高职学生的C语言实训教材高职的培养目标,教学模式、教学内容有其鲜明特色,这就要求高职《C语言程序设计》教材也应当独具特点,不能照搬普通高校教材,更不能借用中职教材。但现有教材很多是介绍语句的格式和功能,不适合高职学生,因此必须调整教材结构和内容来应对现在高职教育。2008年我们曾编写《C++程序设计实训指导书》,可满足6个专业方向的学生使用。本书是在编写组各老师多年从事C++语言程序设计教学的基础上编写的,书中根据多年的教学经验,针对海南高职学生实训中遇到的问题,精心挑选训练题目,进行强化训练,以提高学生分析问题和解决问题的能力。力求将复杂的问题和概念用简洁的语言描述出来,力争让学生当时看得懂、学后用得上。
(四)围绕最大限度提高与保护学生对C语言的学习兴趣,优化教学方法,以求全面教学实效大量的调研证明,学生在如下情况下其学习效果才会是非常有效的:感觉到自己备受别人的关注;对他们现在学习的知识充满兴趣;自己是学习的主导和参与者;在任务完成后得到适当的反馈;看到了成功的机会;对正在学习的东西感兴趣并觉得富有挑战性;感觉到他们正在做有意义的事情。要促进学生的自主发展,就必须最大可能地创设让学生参与到自主学习中来的情境与氛围。因此,教师要因势利导,采取多种教学方法,最大限度提高与保护学生对C语言的学习兴趣,以求取得真正教学实效。1.做到每一堂上机课都能让学生通过自己上机程序练习获得成就感。2.提倡学生朗读程序。比如,语句intx;x=5;,可读成“声明一个整型变量x,然后将整型常量5赋值给整型变量x”。通过朗读程序,能够使一些原本很模糊的概念得到不断地巩固,逐渐地变得清晰。3.养成良好的编程习惯,将枯燥难记的语法融入范例程序的上机调试过程中。在整合课程内容的基础上,改变过去先给出定义和规则的讲授办法,而是从具体问题入手,精选范例,努力把枯燥的“语言”讲得生动、活泼。在程序范例中,将语法知识点同实际编程结合。讲授时避免纠缠于语法细节,应始终明确一点:计算机语言是用来描述需要解决的问题和问题的解决方法的,任何语法规定都是为这个目的服务的。4.点面结合,少讲多练,确保创造自主学习的情境与氛围学习计算机语言主要在于应用,仅仅通过听课和阅读教材是不可能掌握的。学会使用C语言编写程序,最重要的环节是做习题和上机实训。要区分学生层次,精选上机练习题,既要满足少数提高训练,又要满足大多数基础练习,做到点面结合,符合学生实际。5.及时帮助学生化解难点,共克难关应事先分析C语言学习的难点,做到胸中有数。在C中,变量与数据类型概念是第一个难点,它与内存概念紧密相关。这个难点,将影响全局。循环控制语句是第二个难点,它改变程序执行流程,难在如何构造,关键是抓住循环初值、终值和增值三要素。教学中要及时发现学生在学习C时的难点,厘清难点的根源,逐个击破,不留隐患。6.结合专业,学以致用根据教学不同阶段,教师应适时收集一些与其授课学生专业方向结合的程序案例,让学生能够切实体会到C程序设计在解决本专业中的问题中所发挥的作用。7.发挥计算机网络与多媒体的优势,增加教学互动及时开发C课程网站,提供学生在线多媒体学习与答疑平台。在C语言程序设计学习上,把复杂的计算机语言、专业化的技术变成了轻松自如、随心所欲的人机对话。因此,使学生不至于掉入C语言知识的细节里,避免出现既费时、又费力,而学习收效不理想现象,使枯燥无味的内容变得简单,从而有趣,激发了学生浓厚的学习兴趣。学生在课堂内外的学习中,遇到不能解决的问题时,既及时可上Internet网查询,又可与同学老师交流。这样,既增进了师生之间交流的机会,又达到共同提高的目的。
四、结束语
总之,对于高职电子信息类专业学生来说,学好C语言既是专业素质的需要,也是未来岗位能力的要求。对于教师来说,如何因材施教,因人而异,充分激发学生的内在积极性与潜能教学模式也成为迫在眉睫的重任。针对目前高职电子信息类专业学生在C语言程序设计教学上存在的主要问题,我们提出采用点面结合,分级教学目标,精选程序案例,突出高职认知规律,以提高学生的学习兴趣为基础,强化学生上机练习及指导为突破口,最终实现高职C语言程序设计的教学目标。
参考文献:
[1]全国高等院校计算机基础教育研究会高职院校计算机教育经验汇编第二集[M].中国铁道出版社,2008.
关键词:C语言程序设计;运算符;优先级;二维数组
中图分类号:G642 文献标识码:B
1引言
“C语言程序设计”课程对理工科专业学生来说,是一门非常重要的基础课程,但初学起来十分困难。其主要原因是:(1) C语言的数据类型和运算符多、表达式复杂;(2) 初学者在学习过程中必须暂时保留人的思维形式,使用计算机的程序模式工作。为了使学生学习好“C语言程序设计”这门课程,许多教育工作者对教学方法进行了深入的探索,积累了丰富的教学经验。例如:文献[1]介绍了C语言程序设计的案例教学方法,文献[2]讨论了C语言程序设计中关于自增和自减运算符的理解和编程要点。尽管如此,如何使学生能更好地掌握C语言程序设计仍然值得教育工作者进一步探索。本文将自增和自减运算符分为优先级不同的前缀++(前缀--)与后缀++(后缀--)两种运算符,给出若干程序设计和调试的技巧,使学生更好地掌握C语言程序设计。
2关于自增和自减运算符
如果C语言表达式存在自增或自减运算符,则其值的计算和表达式中变量值的改变很容易弄错。文献[3~5]规定前缀自增(自减)和后缀自增(自减)运算符的优先级相同,都大于算术运算符,结合方向是自右向左。它们的区别是:前缀自增(自减)是在使用前增加或自减少1,而后缀自增(自减)是在使用后增加或自减少1。作者在教学实践中发现:学生按上述规则并不容易读懂程序和编写程序。本文把前缀自增(自减)和后缀自增(自减)运算符看成两种运算符,且规定前缀自增(自减)运算符的优先级大于算术运算符,后缀自增(自减)运算符的优先级低于赋值运算符,仅高于逗号运算符。本文的这一规则比较适合我们常常使用的Turbo C编译系统,也容易被学生理解和掌握。
例1:若i=3,则执行赋值语句j=++i;时是将i的值先变为4,再赋值给j,j的值变为4;而执行赋值语句j=i++;时是先将i的值赋给j,j的值为3,然后i的值先变为4。
例2:若i=3,则执行赋值语句j=(i++)+(i++)+(i++);时是将三个i的值先加得12赋给j,j的值变12,然后i的值再三次增1变为6;而执行赋值语句j=(++i)+(++i)+(++i);时是先将i的值再三次增1变为6,然后将三个i的值相加得18赋给j,j的值为18。
例3:若i=3,则执行赋值语句printf(“%d”, -i++);时是将先输出i的相反数-3,然后i的值再增1变为4;而执行赋值语句printf(“%d”, -++i);时根据优先级相同的负号与前缀自增运算符为自右向左的结合方向,则是先将i的值增1变为4,然后再输出i的相反数-4。
值得注意的两个问题:
(1) 当一个变量出现在一个函数的多个参数中时,不能将自增或自减运算符作用于该变量,否则用本文规则不能正确计算表达式的值和输出结果。例如:若i=3,则执行赋值语句printf(“%d, %d”, i,i*i++);时其输出结果为(4,12);而执行赋值语句printf(“%d ,%d”, i*i++,i);时其输出结果为(12,3)。
(2) 当自增或自减运算符出现在逻辑表达式中时,自增或自减运算可能不被计算。例如:
若i=1,j=1,k=1,在计算表达式++i||++j&&++k时,因++i非0,不再计算++j&&++k部分,直接得到整个表达式的值为1,因此,计算表达式后,变量i的值为2,而j和k没有执行自增加运算,其值都为1。
基金项目:2006年湘潭大学校级精品课程基金(湘大教发[2007]20)。
作者简介:黎自强(1963-),男,教授,博士,研究方向为计算机图形学,计算机视觉,智能计算。罗翠英(1966-),女,湖南益阳人,湖南工业大学讲师,研究方向为计算机图形学。
3关于scanf()函数和实型二维数组
在C语言程序设计中,常常利用scanf()函数对二维实型数组赋值,例如:下面的程序段是从键盘输入10个数到二维实型数组x中。
voidmain()
{ int i,j;
float x[5][2];
for(i=1;i
for(j=1;j
scanf(“%f”,&x[i][j]);
for(i=1;i
for(j=1;j
printf(“%f”,x[i][j]);
}
上述程序在Turbo C2.0集成开发环境下编译和连接是没有错误的,但运行时出现如下错误信息:
scanf:floating point formats not linked
Abnormal program termination
解决的方法有两种,方法一:
(1) float x[10][2]―>float x[10][2], t;
(2) scanf(“%f”,&x[i][j]);―>{scanf (“%f ”, &t);x[i][j]=t;}
方法二:在scanf()函数的%f前面保留一个空格,即:scanf(“_%f”,&x[i][j]);
4关于getch()的妙用
4.1查看显示结果
一般,在Turbo C2.0集成开发环境下,运行C程序后即刻返回到编辑状态。如果想看到程序执行的结果,就必须按Alt+F5键。如果在程序的结束行前加一个语句getch();则程序运行暂停在显示结果的界面,按任意键才返回编辑状态。这样能让程序员更简捷地查看结果。
4.2调试程序
一个能够编译、连接和运行的C程序,只有在没有结构上的错误的前提下才能保证其结果正确。这一步是靠调试程序来完成。对于初学C语言程序设计的学生来说,迅速找出程序结构上的错误是一个至关重要的问题。一个简单、可行方法就是利用printf()和getch()的组合语句在关键点跟踪程序的执行。
例如:程序段1-14是求1+2+3+…+n的和(正整数n由文件输入)。
1#include
2main()
3{
4int i=0,n=0;
5long sum=0;
6FILE *fp=NULL;
7fp=fopen("in2.txt","r");
8if(fp!=NULL)
9 fscanf(fp,"%d",&n);
10 for(i=1;i
11 sum=sum+i;
12printf("%ld\n",sum);
13fclose(fp);
14}
当文件in2.txt中的数据为10时,运行程序得到的结果为11,不正确。为了迅速找到错误所在,在9行与10行之间插入两行语句:
printf("n=%d\n",n);
getch();
再次运行程序,若屏幕上没有显示n=10,则就检查1-9行程序,直到屏幕上显示n=10为止;否则程序的错误是在10-13行,这时去掉在9行与10行之间插入的两行语句并将11行语句改成:
{ sum=sum+i;
printf("%ld\n",sum);
getch();
}
再次运行程序,结果发现只要击一次键就会返回编辑状态,这就说明循环语句没有起到循环作用。检查出第10行末尾多了个“;”,去掉“;”并运行程序得正确值55。
4.3用于菜单选择
getchar()和getch()都可以从键盘接收字符,它们的区别是:(1)前者是一个函数,后者是一个宏名;(2)前者接收字符时,会将键入的字符回显到屏幕上;后者则不会将键入的字符回显,很适合于在菜单中进行选择。下面的程序段引自文献[2],它是判断某年是否为润年,但在标号语句处有一个结构错误,文献[2]是将标号为error 的语句改为getchar(),ch=getchar();,本文给出一种不同的修改方法:将标号为error 的语句改为getch()。
# include
main( )
{
int ch;
int year;
do {
printf("please input year:\n");
scanf("%d", &year);
if(year%4 ==0 && year% 100!=0||year%400== 0)
printf("YES %d\n",year);
else
printf("NO%d\n", year);
printf("Y--continue, any key--exit\ ");
error: ch=getchar ( ) ;
} while (ch = = ‘Y’ || ch = = ‘y’);
}
4结束语
C语言程序的编写和调试是初学者学习“C语言程序设计”课程中遇到的难点中的两个。掌握C语言运算符的优先级和结合方向是初学者正确编写C语言程序代码的前
提。本文通过把前缀++(前缀--)与后缀++(后缀--)运算符理解为优先级不同的两个运算符,能使初学者,尤其是非计算机专业的学生,更好地掌握其表达式的计算,进而正确设计出高效的C程序。同时,介绍的几点C程序调试技巧能在一定程度上提高初学者的程序调试能力。
参考文献:
[1] 徐萍,宫丽华. “C语言程序设计”课程教学改革的实践和探讨[J]. 电脑知识与技术,2008,4(1):160-162.
[2] 陈仲民. 关于C语言教学方法和程序设计的探讨[J]. 计算机教育[J]. 2007(6):3-6.
[3] Kernighan B W, Ritchie D M. The C Programming Language[M]. 2nd ed. Pearson Educatin,2006.8.
一、知识点的金字塔结构
通常,C语言是学生接触的第一门程序设计语言,它所包含的基础知识繁多,这样精选课程内容就成了一项非常重要的工作,它是教学内容的核心部分,《C语言程序设计》的核心内容包括C语言基本语法、程序设计思想和程序调试方法。语法是任何一门语言的基础,同时,各种程序设计语言在基本知识点上是相同的,学生对基础知识的正确理解和准确运用,其意义是深远的。笔者经过对C语言教学内容的分析,归纳出了一个类似于金字塔的知识点结构。
处于最低层的标识符是“基石”,无论是常量、变量、数据类型还是函数,都必须用标识符来描述,表达其含义,在使用是遵守“见名识义”的原则;常量、变量、数据类型和运用符是“骨架”;表达式和语句是“上层建筑”,各种类型的常量、变量经运算符的连接构成相应的表达式,语句则由一个个的表达式构成;函数是“金顶”,程序由一个个函数组成,C语言程序设计,无论问题多么复杂,其任务只有一个,就是编写一个main()主函数,同时,编写具有各种功能的其他函数。执行程序时,从mian()的第一个“{”,开始直到最后一个“}”结束,其他函数只有在执行的过程中被调用才执行。
二、教学重点和难点
在C语言中,数值型数据和字符型数据是可以混合运算的,以及数据型的自动转换、强制转换、学生在学习时容易出错,不易理解。我们可以从数据在计算机内存中的存储长度和二进制表示形式着手,讲述他们之间的内在联系,这样容易理解问题的本质。
自加和自减运算既是重点又是难点。如果它们单独作为语句使用,如:I=j++,应该不难理解,学生能准确把握其值的变化;若作为表达式的一部分参加运算,此时,显著地增加了运算的难度,要求准确的理解运算符的结合方向、运算对象的个数、运算符的优先级等运算规则,如:int I=3;printf("%d",-I++);问输出结果是多少?这个难度就非常大了。学生应少使用组合运算,避免产生错误。
运算符的优先级也是教学的重点和难点,但是有规律可循:单目运算的优先级最高(括号除外),逗号运算符的优先级最低,赋值运算和复合赋值运算的优先级仅比逗号的高;算术算的优先级比关系运算的高,关系运算的比逻辑运算的高(逻辑非运算除外)。
数组和指针是C语言的灵魂。“没有学好指针,就算没有学过C语言。”从这句话可见指针在C语言中的地位,而且指针在后续课程中的作用也是相当重要的。但是,指针的理解和运用难度是很大的,特别是初学者。
我们可以从下面几个方面来加深理解、加强教学:
①简单指针和基础知识。简单指针是指基本数据类型的指针和一维数组。指针在使用前应具有确定的值(即指向确定的变量);指针的类型应与其指向的变量类型完全一致;指针只能进行加减、辅值运算。
②杂指针的说明、含义和应用。具体指指针作为函数的参数、函数指针、文件指针、指针数组、多级指针。对于这些指针要正确理解它们的含义。
③构体指针。它也是,《数据结构》的重要内容。主要用来构成链表,在学习这部分知识时,可以用图式的方式来帮助理解。
在实际教学中要注意的是教学的重点不一定是教学的难点,反之亦然。同时,要针对不同专业的学生进行教学内容的恰当取舍,且注重知识的实用性。譬如:对非专业的学生,重点讲述语法,对于难度比较大的部分可以少讲甚至不讲。对专业学生,侧重于讲述算法的思想、数组的应用、函数的参数、结构体和指针的运用,为后续课程的学习做必要的铺垫。
三、教学方法和教学改革
在实际教学中把基本语法、程序设计思想、程序调试方法作为教学的三个核心内容。针对非计算机专业的学生,多讲语法和程序调试方法、技巧;对专业学生来说,不同的程序设计语言在语法上,程序调试方法和技巧上大同小异,学生应该准确把握,熟练运用它,把教学的重点放在算法的设计上和程序的效率上,为后续课程的学习打下理论基础。
在教学中可以使用下面的一些方法,提高教学效果,培养学生的逻辑思维能力和动手能力。
1.理论联系实际
在教学过程中避免照本宣科、枯燥乏味,尽量与实际生活和相关课程进行联系。如可以将数学中的积分、微分、求梯形面积、求最大公约数和最小公倍数等引入程序设计中。不但能使学生在知识的相互联系和比较中发现新的内涵,起到温故知新融会贯通的作用,还能锻炼、发展学生的思维能力和辨别能力,使他们学会从多方位、多层次、多角度去考虑问题。使学生认识到学有所用、学以致用,自然地产生学习的愿望和动力。
2.掌握典型算法,加强程序设计思维训练
《C语言程序设计》课程不仅仅是一般意义上的知识传授,让学生掌握程序设计的基本方法,是C语言课程的重点,是对学生进行逻辑思维能力的培养。在实际的教学过程中,我们发现有些学生平时学得很认真,对语法、语句等细节也很熟悉,但碰到稍微复杂一点的编程则无从下手,教师在教学过程中要树立正确的教学思想,即注重算法设计,加强学生的程序设计思维训练,帮助学生顺利地实现思维方式的转变,而不能只单纯地讲授语言的语法、语义、语用,应该将复杂枯燥的语法知识分解到一个个生动实用的程序实例中,也就是在教学过程中以程序设计为主线,有意识淡化计算机语言本身语句的介绍,而重点介绍程序设计,在分析程序和程序设计中熟悉语法、应用语句,掌握程序设计和解决问题的思路(算法),并把软件工程学的思想贯穿于算法分析和程序设计的过程中。一定要避免陷入这样的误区:教师一味地给学生讲解语句的功能和语法规则,使学生陷入冗繁的语法规则之中,形成以语言为中心的思维模式。这样教出来的学生语法背得滚瓜烂熟,但实际编程能力很差,所以教师应注重培养学生形成以算法为中心的思维模式。对于从未受过算法设计训练的初学者来说,可能会感到无从下手,对此,教师应该有意识地加强这种思维方式的训练,通过讲授一些常用算法、典型算法,如记数、累加、连乘、两数交换、求最大(小)值、迭代、排序、分类等为以后编写程序、软件设计奠定基础,同时典型算法熟练的掌握,也可增加学生学习的信心并提高学习的兴趣,同时培养学生的思维能力。
3.如何提高程序的执行效率
由于C语言已成为被广泛使用的教学语言,笔者在c语言教学过程中对学生编写的程序进行分析时发现很多学生对程序的执行效率不能很好的把握,造成编写的程序执行效率较低。对于程序来说,效率应包括程序的执行速度和对计算机系统资源的利用,我们只能根据具体情况作出判断,然后进行分析。但是优化这一方面可能又会损坏另一方面。例如:采用程序的直接编写而不调用函数的话,这样可以省去调用函数的时间,以提高速度,但是程序又被拉长了,占用较多的磁盘空间;如果一味的压缩数据以充分利用磁盘空间的话,则会降低存取速度或使程序不易理解。所以在程序设计中常常将一些常用的功能模块编写成函数,放在函数库中供公共选用。编程时要善于利用函数以缩短程序长度和减少重复编写程序段的工作量。
实验教学是对理论教学的重要补充和检验。在实际教学中发现,学生对书本知识看得清楚,听得明白,遇到实际问题则无从下手,显得很被动,究其原因主要有三点:一是对实验重视不够;二是课前准备不足;三是缺乏程序调试能力和技巧,在出现编译错误时,往往是去查看书本上的源代码,而不是根据错误的提示信息,在错误行号的附近查找错误,以至浪费了实验时间,没有达到实验的要求和目的。
关键词:教学方法;教学模式;思维训练;自学能力
中图分类号:G642文献标识码:A文章编号:1009-3044(2008)21-30486-03
The Research of Teaching Methods in "C Programming Language"
LIU Jian-you
(Zhaoqing Science and Technology Polytechnic,Zhaoqing 526020,China)
Abstract: C is a typical structural programming language, many colleges and universities use it as basic programming language. Students often complain about C language difficult to learn, to use, to build the application software, lack of programming and debugging capabilities. How to better carry out the C language courses teaching?Author on the problems that exist in teaching, with his personal experience in teaching and experience, talk about their own views, to promote the C language teaching.
Key words: teaching methods; teaching mode; thinking training; self-learning ability
1 引言
程序设计语言的种类多得难以计算,为什么要以C语言作为编程入门语言呢?还有人说为什么一定要学习C语言,干嘛不直接从C++学起?而且学C++不一定要有C语言基础,有了反而会有些内容混淆。还有人说C语言都已经过时了,怎么还要浪费时间去学?C语言在教学过程中,抱怨C语言难学,难懂,难用,在解决实际问题编制应用软件时往往无以下手,缺乏编程和调试的能力。。久而久之,学生对学习此门课程就会产生厌倦的心理,不但影响本课程的学习,还会影响以后相关课程的学习。本文针对以上问题,指出了如下措施:
2 学习《C语言程序设计》的意义
我认为在学习C语言之前有必要弄清学习的意义所在,这样才能让学生对其产生兴趣。兴趣是人类最好的老师,只有对其产生了兴趣,我们才能学好这门语言。
将C语言作为入门语言具有重要的意义。C语言是一门典型的结构化程序设计语言,它具有语言简洁、严谨,用途广泛等特点,能够体现结构化程序设计的优良控制结构,非常适合初学者。通过这门课程的学习,能够使学生掌握一门结构化程序设计语言,更为最重要的是能让学生树立用程序解决现实问题的思路和方法。为今后的学习打良好的基础。再学其他程序设计语言,就能够在短时间内迅速的掌握。
3 改革课程教学内容,重视算法的编程思想,培养创造性思维
精选课程内容是一项非常重要的工作,它是教学内容的核心部分,《C语言程序设计》的核心内容包括C语言基本语法、程序设计思想和程序调试方法。语法是任何一门语言的基础,同时,各种程序设计语言在基本知识点上是相同的,学生对基础知识的正确理解和准确运用,其意义是深远的。
C语言程序是由函数组成的,无论问题多么复杂,我们都可以将其看成是一个大任务,这个大任务又可化分成若干个小任务,将这些小任务解决了,那么大任务也就完成了。也就是说其任务只有一个,就是编写函数(一个main()主函数和其他函数)。执行程序时,从mian()的第一个“{”,开始直到最后一个“}”结束,其他函数只有在执行的过程中被调用才执行。
学习C语言程序设计不仅是为了掌握一种开发工具,更重要的是用计算机解决问题。而算法是解题的方法和步骤,算法就是对操作的具体描述,是计算机的解题过程。编制程序,就是根据算法,用具体的语言依据某种规则编写计算机执行的命令序列。因此学习语言的重点是锻炼分析、分解,最终归纳整理出算法的能力。在教学过程中,学生能否理解算法,并掌握算法,成为教学的关键。
在C语言的教学过程中,改革传统的语法学习内容,将算法教学融入到语言教学中。由于C语言语法的逻辑性较强、结构性要求较高,初学者刚接触的时候容易考虑不全。因此算法教学可以通过实例进行, 从最简单的例子入手,使学生在解决具体问题的过程中学习C语言的基本逻辑结构和语句。生活中到处都存在着算法。而对于同一个问题可以有不同的解题方法和步骤,可以让学生根据同一个问题提出不同的算法,并比较这些算法之间的优劣,并让学生根据分析对算法进行优化。通过对算法的优化练习,可以在无形中提高学生写算法的水平。
4 改革课堂教学模式,培养学生自学能力
在教学中可以使用下面的一些方法,提高教学效果,培养学生的逻辑思维能力和动手能力。
4.1 改变传统的教学方式
虽然这个话题是老生常谈了,但是现在部分老师还没有认识到这个问题的重要性,仍然是“教师单向灌输”的教学模式。教师首先要在教学过程中树立以学生为主体,老师为主导的教学思想,正确处理传授知识与培养能力、提高素质之间的关系;其次改变教学模式,偿试采用以下教学方式。
4.1.1 任务驱动教学方式
在教学过程中避免照本宣科、枯燥乏味,“任务驱动”是建构主义理论中的一种教学模式,是将所要学习的新知识隐含在一个或几个任务之中,学生通过对所提的任务进行分析、讨论,明确它大体涉及哪些知识,在老师的指导、帮助下找出解决问题的方法,最后通过任务的完成对学生知识的传授。事实上它并不是简单的给出任务就了事,重要的是要让学生学会学习,使他们学会从多方位、多层次、多角度去考虑问题。使学生认识到学有所用、学以致用,自然地产生学习的愿望和动力。
可以先给出一个比较典型的C语言编写的例子。给学生具体的演示,通过这个效果激发学生的积极性。要求学生在期末的时候编写出相应的程序。有了这个任务,在讲课的时候逐步的告诉学生每一章可以具体的实现例子的那个部分,让学生逐步的去实现相应的功能。他们实现了相应的效果,就会极大地增强学习的兴趣和热情。这样可以让学生在愉悦的过程中学好这门课程。
4.1.2 启发式教学
为培养学生逻辑思维和创新能力,在教学过程中,教师遵循启发式教学原则,通过各种教学方式和手段激发学生的学习欲望,积极投入到学习活动中,积极思维,发现问题,提出问题,并逐步解决问题。例如,在讲解程序设计举例时,不是简单地给出程序清单,而是从分析问题入手,继而找出解决问题的方法,再给出算法,最后编写出完整的程序,而在这一全过程,最关键的是每一步都采用与学生一起探讨的方式,让学生在启发下思考,在思考中解决问题,从而掌握独立分析问题、解决问题的方法。
4.1.3 互动式教学
互动式教学是教师驾驭讲台能力的具体体现。一个教师站在讲台上,要不断地扫视下面的学生,观察学生的表情,了解学生的接受程度,并能及时地调整教学的进度和步骤,必要时到达到学生与教师在课堂上互相之间的交流。允许学生在不明白的时候随时提出问题,教师根据实际情况决定是当场解答,还是课后解答。真正实现课堂上的互动,其教学的效果就会显著地提高。教师在教学过程中,还应当注意设置疑难问题,引导学生思考和探索,让他们的思想活跃起来。
4.1.4 项目分析式教学
为培养学生综合应用知识的能力,通过对完整的项目的系统分析,培养学生良好的编程习惯,善于获取他人经验的能力以及掌握综合运用所学知识的能力,从而真正提高编程水平。
4.2 激励个性化学习
在微观课堂上采用项目递进驱动教学法,改变满堂灌的做法,将学生的眼手脑全部调动起来。精心设计实例,给学生一个比较实际的切入点,通过老师的演示使学生感觉能够入手,然后再通过将此实例不断修改、扩充,引导学生参与到程序的编制过程中,在这个过程中,再将学生所作的程序展示,让学生来评判优劣,吸收优点,修改错误,引导学生进行优化。在这样的实例教学中,因为有提出问题、解决问题、扩展问题、再解决问题、对解决问题的方法评价、优化设计等几个环节,实际上是一个螺旋式滚动向前的过程,在这个螺旋式不断向前的过程中,能够非常自然地调动学生的参与,而且通过问题的不断扩展,通过一个问题的多种解决方法,有效开阔学生的思维,使得学生在课堂上真正地成为 “ 主体 ” ,教师扮演 “ 主导 ” 角色。 这种通过一个程序的层层推进,引入课程内容,使得学生的每一步学习都有基础,是循序渐进,螺旋式上升的过程,使学生的学习是在“走台阶”,而不是“三级跳”,效果很好。
4.3 加强对学生程序设计思维训练
《C语言程序设计》课程不仅仅是一般意义上的知识传授,要让学生掌握程序设计的基本方法,对学生进行逻辑思维能力的培养。在实际的教学过程中,我们发现有些学生平时学得很认真,对语法、语句等细节也很熟悉,但碰到稍微复杂一点的编程则无从下手,教师在教学过程中要树立正确的教学思想,即注重算法设计,加强学生的程序设计思维训练,帮助学生顺利地实现思维方式的转变,而不能只单纯地讲授语言的语法、语义、语用,应该将复杂枯燥的语法知识分解到一个个生动实用的程序实例中,也就是在教学过程中以程序设计为主线,有意识淡化计算机语言本身语句的介绍,而重点介绍程序设计,在分析程序和程序设计中熟悉语法、应用语句,掌握程序设计和解决问题的思路(算法),并把软件工程学的思想贯穿于算法分析和程序设计的过程中。一定要避免陷入这样的误区:教师一味地给学生讲解语句的功能和语法规则,使学生陷入冗繁的语法规则之中,形成以语言为中心的思维模式。这样教出来的学生语法背得滚瓜烂熟,只会生搬硬套,缺乏实际编程能力,所以教师应注重培养学生形成以算法为中心的思维模式。对于从未受过算法设计训练的初学者来说,可能会感到无从下手,对此,教师应该有意识地加强这种思维方式的训练,通过讲授一些常用算法、典型算法,如记数、累加、连乘、两数交换、求最大(小)值、迭代、排序、分类等为以后编写程序、软件设计奠定基础,同时典型算法熟练的掌握,也可增加学生学习的信心并提高学习的兴趣,同时培养学生的思维能力。
5 强化实践教学,培养学生动手能力
实行实践教学形式多样化,上机操作,老师通常让照着书本的例子进行验证,这样无法增加学生的成就感,使学生觉得很无聊,在《C语言程序设计》上机实验教学中,除传统的课堂实验外,还开展课程设计、典型程序分析与设计等实践环节,还可以教师组织C程序设计兴趣小组,组织C程序设计大赛,组织学生参与科研开发等,将每一阶段的学习进行小结性的贯穿与能力提高。将 C 的知识点都溶化到一个个实训项目的程序编写中。整个过程以学生独立完成为主,教师只提供必要的辅导。经过实践训练,尤其经过综合训练中模拟实际软件开发的演练,使学生得到了锻炼,进一步激发了学习兴趣,培养了问题求解和编程能力,还有利于培养探索和创新能力。
6 改革考核方式,全面实行考教分离
C语言课程所有考试均实行考教分离,这不仅促进了任课教师对教学的精益求精,而且也给了教师充分发挥、施展个人教学才能的空间。在考核方法上,考虑到高职院校是培养应用性的实用人才的这一特点,该课程除采用传统的笔试外,大胆采用更能反映学生知识应用能力的上机考试,这一考试形式非常受学生的欢迎。可以采用多种形式考核学生,重点考核学生的实践动手能力。
7 结束语
以上是作者近几年关于C语言教学经验的总结,在实际的教学过程中取得了良好的教学效果。笔者认为在教学过程中除了要使学生掌握C语言程序设计这门语言外,最重要的是要让学生树立用程序解决现实问题的思路和方法(算法)。学生能否理解算法,并掌握算法,成为教学的关键,这是也学习C语言程序设计的重中之重。
参考文献:
[1] 谭浩强.C程序设计[M].2版.北京:清华出版社,2001.
[关键词]教学方法 案例教学 教学效果
《C语言程序设计》作为计算机专业的基础课,已经成为一门必修的课程,在整个课程体系中占有重要地位。在C语言教学过程中,从客观上讲,教师的教法和学生的学法的差异,对教学效果都会产生直接的影响。针对学生学习语言类课程的一般思维规律和思维模式,笔者结合多年来的教学经验和教学体会,把一些经验和方法总结出来,希望能对C语言教学有所帮助。
一、教学中存在的问题
《C语言程序设计》是一个逻辑性很强的课程。学生在毕业设计时会面临具体的设计要求的问题,它与任何一本教材中的内容相距甚远,这使大多数同学感到无从下手。这其中的原因可以分成两类:一方面目前高校使用的教材中,绝大多数结构都基本相同。在每一章介绍完了概念之后,提供一些例题解释相关概念的使用方法,并在章节结束后针对本章中出现的内容提供一些练习题。考试普遍采用单选、判断及简答等方式测试学生对于教材内容的掌握程度。从实际效果分析,实际上是测试学生对各章节中的基本概念记忆程度而不是理解程度。另一方面是在考试压力下,特别是目前的应试考试方式中,学生更多注意的是教材中的典型例题与老师指定的重点内容,对于程序的系统概念没有真正理解,特别是没有整体设计的概念。通过对各类考试结果的分析,可以注意到一个现象,在考试中涉及的综合编程部分,学生的得分率很低。为了确保学生的课程通过率,在考试时尽可能将综合测试部分的比例压低或提供学生统一复习提纲,这样做的结果就是学生在学习时一切围绕任课老师讲课的内容,特别是老师讲授的例题。学生在学习的过程中,没有注意如何综合运用相关内容解决具体问题,导致学生在学完程序设计课程进入应用阶段时,面对具体的专业设计要求无从下手。
二、提高程序设计课程教学效果的途径
1.明确课程目标
通过学习,学生应能正确理解语言的基本概念、语法、语义并得到充分的程序设计训练。C语言课程一般是为应用性教学而设置的,因此,强调实践性是计算机语言课程教学别要注意的问题。对于计算机语言课程的教授不应仅仅是传授知识,应该以培训能力为主。过分强调该语言的系统性和完整性可能会转移学生对课程重点的注意力。C语言的内容繁多,在有限的课时内不可能也不必要面面俱到,所以必须突出重点,突出实用性,关键在于教会学生正确运用C语言编写程序,一些细节、具体规则和进一步的知识可以让学生在今后的应用中查阅有关书籍。教师应始终坚持以应用为中心,以算法为基础,以培养学生的实践能力为核心,突出技术实用性和再学习能力的培养。
2.进行教学改革
(1)教学内容改革
程序设计课程具有很强的实践性,要以社会对编程能力的需求和技术发展为依据,调整教学大纲和教学内容,以适应技术岗位能力要求,设计模块化课程体系。在课程设置与建设中,要充分体现教学内容在训练和提高学生培养学生实践能力方面的要求。适当增加实训教学内容,以强化学生的实际开发和应用能力,实现“零距离就业”。
(2)改变教学思想
①由整体到具体,培养学生对C语言的兴趣及正确的思维模式。《C语言程序设计》注重由设计算法到书写程序并进行调试的整个过程,显得抽象、复杂,这也是大多数学生抱怨程序设计太难、太深奥、不好学的主要原因。在教学过程中,应该先介绍一个较完整的程序例子,该例子包含了该语言中的主要语句,目的是使学生先对程序有个初步的印象,再简单介绍该例子中用到的语句,让学生对该语言的学习有一个大概的了解,避免学生对学习语言望而生畏。整个教学过程中应该把“解题思路、方法和步骤”当作授课的重点,从而让学生明白如何分析、解决实际问题,逐渐培养学生进行程序设计的正确思维模式。
②一题多解,注重算法是程序设计的灵魂,是教学重点,也是教学难点,而语言只是表示形式。没有正确的算法,计算机将解决不了任何问题。对于C语言所涉及到的算法,应进行部分精讲多练。
(3)教学方法改革
①案例分析教学。通过案例分析,重点讲解程序设计的思想和方法,辅以语言知识的介绍,将课程内容分为若干个主题,以程序设计做为贯穿各主题的主线。每个主题的教学过程由“要点讲解”、“练习/上机实践”和“疑难解答”三个阶段组成。
②基于问题的教学。提出问题,以学生独立完成为主,教师只提供必要的辅导,培养学生探索问题和解决问题的能力,更有利于创新能力的培养。
③“项目驱动”教学。在理论教学中采用“项目驱动”教学法,整个课程教学围绕一个“工程项目”进行,通过逐步拓展的实训项目和设计,将每一阶段的学习进行小结性的贯穿与能力提高。将C 的知识点都溶化到一个个实训项目的程序编写中。在课程初期,主要是进行单项的编程练习,重在掌握C 语言的基本语句、数据类型与程序结构等。在进入数组、函数、结构、指针和文件内容教学时,开始实训项目的编程实践,逐步组建“教师管理系统”,并且添加文本菜单,整合扩展记录添加、排序、查询、统计和记录浏览等内容形成课程设计。
(4)课程考核方式改革
①平时上机训练时给学生留一些编程习题,每次根据学生编写情况进行测评并占据期末总成绩30%。
②期末前,给学生留一个综合实训题考核学生综合解决问题的能力,要求同学们在一周内完成,占据期末总成绩30%。
③期末进行理论考试,占期末总成绩的40%。
3.展示学生作品,激发学生的学习欲望
计算机软件课程具有多样性、复杂性和求异性特点,我们要针对每个学生任务完成的情况,让同学们展示自己的劳动成果,及时肯定学生的成绩,这样会有利于激发学生们的学习热情,保持浓厚的学习兴趣,对学生的后续学习将产生强大的动力和自信心,也可以对每次任务的完成情况进行积分制度,算入期末成绩中,以激发学生们的兴趣。
4.自始至终培养学生的自学能力
学生学习软件的最终目的是编写满足需求的程序,所以我们在教学中教授的不仅仅是具体语言的语法知识,更重要的是通过这门语言学习,培养学生遇到实际问题自己分析问题、解决问题的能力。我们可以通过给学生布置作业的形式让同学们自学,初始阶段往往会遇到因为学生自学能力差而带来的困难,所以在学生完成任务时,老师既要要求学生独立思考、自主学习,又要鼓励学生间进行协作学习。教师可以分配一些比较复杂的问题,由几个学生组成一个小组合作解决,这样同学们可以互相探讨学习方法,协作解决一些遇到的问题,通过解决问题,锻炼学生综合应用知识的能力、培养其创造性和合作精神。
参考文献: