前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的c程序设计语言主题范文,仅供参考,欢迎阅读并收藏。
关键词:c++;多媒体教学;教育改革
中图分类号:G642 文献标识码:A
一、引言
基于Visual c++6.0可视化开发平台的c++程序设计语言,以其强大的开发功能受到IT业界的一致认同,是众多理工科院校开设的计算机基础必修课。该课程具有很强的可操作性,其实践教学是培养学生编程能力的重要手段。笔者在担任该课程的多年实践教学中发现,在现在多媒体教学方式下,机械的教学虽然可以节省时间、增加教学信息量,但是缺乏传统教学中可以采用的灵活机动的授课策略。因此,出现了学生普遍学习成绩无法提高、厌学的情况,针对这些情况,笔者不断分析教学中存在的问题,并提出了相应的改革措施,改进教学方法。通过长期实践和总结,形成了较系统的适用于该课程特点的教学方法,在教学工作中取得了较好的效果。
二、教学中的问题
(一)内容多,课时少;上机实验学生多,指导老师少
在我校,c++程序设计语言一直以来是作为非计算机专业一年级新生学习计算机语言最普遍的一门计算机高级程序设计语言。新生从中学来到大学普遍没有接触过计算机高级语言更没有系统的接受过计算机方面的实践学习。由于c++课程本身逻辑性强、概念多、结构复杂等特点,导致学生学习兴趣下降,进而反映出学生最终难以学好该门课程。
学生普遍感觉C++语言难学,一个很大的原因是教学内容多而课时少。C++程序设计语言从知识体系来说主要分为两部分,一为结构化编程概念,一为类编程概念。每个章节的新概念多,知识点多。另一方面,程序设计语言的学习必须要实践,总课时的减少导致实验时数减少。同时,在实验过程中,每个主讲教师要面对整个教学班级的几十个学生,必然在上课中无法顾及所有学生。
由于课程内容庞大而课时有限,为了让学生对该课程有全面的了解,教师必须充分利用有限的课时完成必要的知识的讲授。
(二)学生学习兴趣不浓、学习态度不端正
学生在学习过程中,会遇到很多抽象的概念和理论,这些概念和理论较难被学生及时的吸收消化,从而影响后续的学习,恶性循环后,产生的唯一结果就是学生的学习积极主动性消失,学习兴趣就下降,最终的结果就是教学效果始终无法提高。
另一方面,学生普遍对c++程序设计语言的学习抱有不认同感。大部分同学不明白自己明明不是计算机专业的学生,为何要学一门计算机编程语言。因此,学习态度、积极性普遍不高。
(三)重书本,轻实践
所有的课程学习,最终的考核方式大部分都是以书面的形式来进行的。学生在学习的过程中,大部分仅注重书本上概念和理论的记忆以及习题的死记硬背,而轻视上机实验的重要性。因为,计算机语言本身就是一门实践性课程,只有在掌握概念的基础上不断的实践,才能真正掌握该门语言。学生重书本,轻实践的最终结果恰好适得其反,反而导致了学生的实践能力无法提高,程序的阅读能力差。
针对以上的问题我们在教学过程中逐步摸索,尝试了以下的方式以提高教学效果。
三、优化教学改革
(一)明确学习目的,提高学生学习兴趣。端正学生学习态度
为了培养学生的学习兴趣,在教学伊始演示由C++开发的一些有趣实用的应用软件,以增强学生对c++课程的喜爱。同时,端正学生的学习态度,让非计算机专业的学生明确学习计算机程序设计语言,不仅仅是为了通过期末考试或计算机等级考试,更重要的是通过深入学习c++程序设计语言,开阔学生用c++语言解决实际问题的思路,掌握相关领域中的计算机应用开发能力、利用计算机分析问题、解决问题的能力,以及培养学生自身的抽象思维和逻辑思维能力。
(二)采用新的教学材料
在已有的教学课时内,如何完成教学任务,提高教学效果,成为了每个教师的一个难题。在这几年的教学过程中,我们不断摸索、总结,在已有的教材基础上,进行吸收创新,重组教学知识点,编制了体系结构合理、内容完整、学生容易接受、前后铺垫的新教材――《Visual c++程序设计》(中国铁道出版社)。对每个示例程序给出了解释说明,还给出了调试结果,同时在学生掌握该问题的基础上,提出疑问引导学生进一步思考同类问题。使学生在经过学习后,不仅能知其然,还能知其所以然。
(三)改革考试模式,注重培养学生独立编程能力
1、改革考试模式,加大实践环节的比重
考试是检验教学效果的一个重要手段,考试模式则是引导学生学习的指挥棒。程序设计课程的教学要求和目标是培养学生的编程能力,所以要通过实际的编程实验来检验学生是否掌握了所学内容和方法。为此我们采取了“笔试+机试+平时”相结合的考试模式,通过笔试来考查学生对基本概念和基本理论的掌握情况,通过上机考试考查学生的基本编程能力,再加上学生平时的表现,最终给出学生考核成绩。通过加大实践环节所占比重来引导学生对实际编程能力的重视,达到对学生实际编程能力的培养。
2、注重基本语法调试技术
程序调试是程序设计中一个很重要的环节,程序调试水平的高低与编程经验密切相关,也决定了学生的编程能力。在上机过程中主要是注重学生程序调试能力的培养,让学生尽可能通过编译器给出的错误提示信息去分析存在的问题,必要时通过设置断点和单步跟踪调试来解决问题。
(四)采用PBL教学法,改革教学模式
基于问题式学习(PBL)是以问题为基础,以学生为中心的讨论式教学,特点是培养学习者运用知识、扩展知识并获取新知识,锻炼解决问题的能力为教学目标。
CH程序设计语言课程是一种演绎思维方法的训练,实践性很强,非常适用教学法通过“提出问题一算法分析一程序示例一语法解释一总结扩展”这一过程设计教学环节。突破传统教学模式,从根本上提高学生分析、解决实际问题的能力,提高程序设计课程的教学质量。
在教学过程中,逐步的从“知识”教学向“能力”教学转变,有针对性的采用新的教学模式――PBL教学模式。对于有特色、典型的知识点的教学,笔者就采用PBL教学模式进行教学。笔者在最近两年的教学过程中,试用了PBL教学模式,收到了较好的效果。
以循环结构的教学为例。第一,提出问题,要求学生解决某个数的阶乘,使用循环语句实现;第二,在讲解时,以累加问题为例,分析算法,然后逐步给出程序代码并分析;第三,要求学生进行配对组合进行讨论;第四,在围绕问题展开讨论学习后,要求在上机课上进行程序编写以验证程序的可行性。最后,在下一次理论教学课上进行总结、反思。
从学生的反应来看,大部分学生赞同PBL的教学模式,认为该方法能够启发思维,变被动学习为主动学习,形成了从理论到实践,逐步掌握知识的过程。表1是不同时期学生在笔者不同的教学模式授课下学习VC++程序设计课程并参加江苏省计算机等级考试的成绩统计。从统计结果来看,虽然学时数的调整对教学效果有一定的作用,但影响最大的因素还是教学模式。PBL教学模式取得了显著的效果。
摘要:本文在分析了C语言程序设计课程的教学现状和教学困境的基础上,对比自然语言和程序设计语言的共性以及C语言的特殊性,提出了“从概念入手,侧重程序阅读和程序设计能力培养”而非“语法研究”的教学角度。
关键词: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语言程序设计”课程的教学活动非常重要,而且很有必要。笔者的教学实践证明,避开“语法研究”的程序设计教学不仅可减少课时,更可提高学生利用程序设计语言“表述求解问题过程”的能力。
参 考 文 献
关键词: C语言;常见错误;程序调试;实例
中图分类号:TP312文献标识码:A文章编号:1009-3044(2009)35-9969-02
Analysis of Common Error Based on C Programming Language
GAO Ya-xia1, ZOU Hai-rong2
(1.Shaanxi Commercial School, Hanzhong 723000, China; 2.Shaanxi Institute Of Technology, Hanzhong 723000, China)
Abstract: In recent years, not only the computer professionals use C language, but also the majority of staff computer applications favorite and use. In the use of C language application development, due to C language has a flexible programming style, grammar constraints are less stringent and program design large degree of freedom and so on. This C language to a number of beginner and causing a number of difficulties, in order to be able to quickly identify and correct errors in the program; this paper, the C language program design issues common mistakes analysis and research. Gives some examples and reference solutions, in order to learn C language program designed users to provide with convenient.
Key words: C Language; common errors; debugging program; example
C语言是在国内外广泛流行、使用的一种计算机高级程序设计语言。它的主要特点是:概念简洁、数据类型丰富、表达能力强,运算符多且使用方便灵活。与其它程序设计语言相比较,具有灵活的编程风格,语法限制不太严格,程序设计自由度大(例如:一个语句可以采用多种方式,分多行撰写;对数组下标越界不做检查;整型、字符型和逻辑型的数据可以通用等)。这就给程序设计人员留下“灵活的余地”,但是由于这个灵活往往给程序调试,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的实例。看着有错的程序,不知该如何进行修改。通过在C语言的教学与研究过程中,分析了一些关于C语言程序设计时容易犯的错误实例,提供给学习C语言的同学及相关人员参考。
1 C语言常见错误实例与分析
实例1.Printf语句中“控制字符串”部分分写在不同的行。
例如:main()
{ printf(“* * * * *”\n
Very good!\n
* * * * * \n);}
该程序的目的是为了显示这样的结果: * * * * *
Very good!
* * * * *
但程序运行后却出现错误信息:“Unterminated string or character constant in function main”,对上述错误,只要在程序第二行、第三行的最后分别加上“\” 即可得到正确的结果,也就是说printf语句中的“控制字符串”部分分写在不同的行时加“\”连接。
实例2. 忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写if (m=10) then …,但C语言中,“=”是赋值运算符,“==”是关系运算符。
例如:if (m==10) m=n;
前者是进行比较,m是否和10相等,后者表示如果m和10相等,把n值赋给m。由于习惯问题,初学者往往很容易犯这样的错误。
实例3.定义变量的位置不正确。
例如:#include
main()
{ char ch,filename[10];
scanf(“%s”,filename);
FILE *fp;
fp=fopen(filename,“w”);
ch=getchar();
while(ch!=‘#’)
{ fputc(ch,fp);putchar(ch);ch=getchar();}
fclose(fp);}
程序运行后出现错信息“Improper use of a typedef symbol in function main”,只要把第六行:FILE *fp;放到第四行前,程序通过。原因是:说明部分要放在其他语句之前。
实例4.将字符常量与字符串常量混淆。
char ch;
ch="M";
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,而字符串常量是一对双引号括起来的字符序列。C规定以‘\0’作字符串结束标志,它是由系统自动加上的,所以字符串“M”实际上包含两个字符:‘M'和‘\0',而把它赋给一个字符变量是不正确的。
实例5.输入变量时忘记加地址运算符“&”。
int a,b;
scanf("%d%d",a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。“&b”指b在内存中的地址。
实例6.输入数据的方式与要求不符。
1) scanf("%d%d",&x,&y);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
1,5
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
2) scanf("%d,%d",&x,&y);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
1,5
此时不用逗号而用空格或其它字符是不对的。如下面输入不合法:
1 5 1:5
又如:scanf("a=%d,b=%d",&a,&b);输入应如以下形式:
a=1,b=5
实例7.输入字符的要求与格式不一致。
在用“%c”格式输入字符时,“转义字符”和“空格字符”都作为有效字符输入。
scanf("%c%c%c",&c1,&c2,&c3);
例如:输入O K !
则字符“O”送给c1,空格字符“ ”送给c2,字符“K”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
实例8. 同时定义了形参与函数中的局部变量。
int max(x,y)
int x,y,z;
形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
int x,y;
{int z;
z=x>y?x:y;
return(z);}
实例9. 误用变量定义数组。
int n;
scanf("%d",&n);
int a[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
实例10. 被调用的函数未在主函数中进行声明。
例如:main()
{ int a,b,*p1,*p2;
Scanf(“%d,%d”,&a,&b);
p1=&a;p2=&b;
if(a
printf(“5d,%d\n”,*p1,*p2); }
void swap(int *p1,int *p2)
{ int *p;
P=*p1;*p1=*p2;*p2=p; }
程序运行后出现错误信息:“Type mismatch in redeclaration of ‘swap’”,只要在程序的第二句int a,b;前加一句:void swap();程序运行通过。也就是说:被调用函数的定义出现在主调函数之后(除了函数的值是整型或字符型的),要在main()函数中对被调用函数进行说明,void型函数也不例外。
2 结论
通过上面这些实例的分析,可以看出,由于C语言的开放式编程风格,让C语言初学者,在进行C语言程序设计时往往会出现一些微妙的、不易觉察的错误。C语言作为一门完善的编程语言,具有它的科学性与严谨性。因此,只有在充分掌握和熟练运用C语言的基本概念、语法规范及结构的基础上,才能真正享受到C语言灵活自如的编程风格的魅力,这也是学习一切科学知识的基本方法。
参考文献:
[1] 谭浩强.C程序设计[M].北京:清华大学出版社,2008:37-242.
关键词:C/C++语言程序设计;教学改革;国家精品课程;教学方法
文章编号:1672-5913(2013)07-0095-04
中图分类号:G642
1 课程教学现状及存在问题
“C/C++语言程序设计”是理工科非计算机专业本科学生的第二门计算机课程,也是大学计算机基础系列课程的核心课程。“C/C++语言程序设计”课程的内容抽象,概念和语法规则较多,特别讲究适用技巧。长期以来,高校都在不断地探索和实践关于“C/C++语言程序设计”课程的教学改革,但仍然存在很多问题。例如,教学依然以传统教学方式为主,不能将实验环节与课堂教学环节很好地相互连贯,相互印证,使得理论教学和实践教学脱节;某些教师忽视学生的实践能力和创新能力的培养,使学生在分析问题和解决问题时无从下手,缺乏编程和调试的能力;实验教学中的多数实验内容是验证性的,学生机械式的运行程序,对知识的理解只停留在表面上;理论和实验课时数较少,上课信息量大,学生接受知识的进度不一样,这就导致教师和学生的学习步调不一致。
针对上述问题,许多高校对“C/C++语言程序设计”课程的教学作出了有益的探索,如文献[1]提出“通、实、新、联”的教学理念;文献[2]提出教学设计原理;文献[3]提出项目教学法;文献[4]提出案例教学法;文献[5]提出“机房授课+自主学习”的授课模式;文献[6]提出将“以应用为背景,以知识为主线,以提高能力和兴趣为目的,变应试为应用”的教学理念应用于该课程的教学中。这些方法均在一定程度上激发了学生的学习兴趣,增强了学生的动手能力,取得了较为明显的教学效果。
为了探究出适合成都理工大学人才培养的课程特点,“C/C++语言程序设计”课程组经过多年的课程建设和对教学环节的研究与探索,提出了“以应用为前提,学生为主体,知识为主线,培养学生的实践动手能力为着力点”的教学理念,构建了一套教材体系完善、教学资源丰富、教学手段先进、教学评价合理、考核方式差异化、精品课程网站新颖的教学体系。下面分别从教学设计、教学方法、教学手段、考核方式以及教学资源等方面进行阐述。
2 教学设计及课程内容组织
2.1教学设计
成都理工大学每年有4000名以上的学生参加“C/C++语言程序设计”课程学习。为实施因材施教,我们重视研究性学习、探究性学习、协作学习等现代教育理念在教学中的应用,根据课程内容和学生特征,对教学方法和教学评价进行设计,并在教学理念与教学设计上实施了多种改革举措。
1)以学生为中心的教学模式。
以学生为中心的教学模式让教师从传统的教学方式中解脱出来,变“教学”为“导学”。教师充分利用多种教学媒体和提示学习资源,讲重点、解难点、释疑点,讲评作业,指导学习方法,辅助小组学习,发挥学生的主体作用,引导学生自主学习,帮助学生培养自学能力。
教师要在理论课前了解学生是否掌握了与课程有关的基础知识和基本技能,根据学生在实验课的表现来了解学生是否掌握了教学目标中要求学会的知识和技能,以及掌握的程度等信息,从而确定后续教学中应重点讲解和辅导的知识,根据学生的实际情况设计教学环节。对于部分优秀学生和已经学习了程序设计的学生,我们要加快他们的学习进度,增加学习难度和深度,使他们可以很快在自己的专业中使用程序设计来解决相关问题。
2)精心准备每一节课,激发学生学习积极性。
激发学生对程序设计课程的学习兴趣,是本课程任务执行的重要目标。学生是主动学习还是被动学习会让教学效果产生明显的差别,因此每位教师都应精心准备每一节课。引领学生跨入程序设计大门的第一节课是极其重要的。学生所关心的是所学课程对自己的专业和今后的工作有什么作用,教师可从不同的专业角度,结合当前最热门的IT话题和实际应用为学生介绍学习本课程的意义和作用,同时介绍一些往届学生将所学程序设计知识用于数学建模、程序设计竞赛、专业课程学习等方面的生动实例,这些都是教师第一节课的良好素材。
3)培养学生系统化的程序设计思维。
程序设计课程长期存在着注重语句、语法和细节的特点,基本上是以程序设计语言自身的体系为脉络展开的。许多学生在学习程序设计语言课程时会觉得枯燥难学,学过后又不能用来解决实际问题。所以学生虽然学了一定的程序设计知识,但编程能力较差。‘部分学生在遇到实际问题依旧无从下手。而系统化程序设计思维培养模式是从本科生的认知特点出发,让教师在教授学生程序设计课程、提高学生编程能力的同时,培养学生的系统化程序设计思维。
程序设计课程不仅教学生如何进行计算机编程,而且教学生如何像程序员一样思考问题。系统化的程序设计思维的培养过程就是让学生自己动手解决实际问题的过程。这个过程充满了学生对未知问题的探索、研究与创新,不仅可以教会学生解决在程序设计中遇到的问题,而且可以锻炼思维,使学生的逻辑思维更加严密,这对一个理工科的大学生来说是至关重要的,对学生整体素质的提高、程序设计课程整体教学水平的提高都有现实意义。
4)互换角色思考与提问。
在教学过程中我们发现,很多学生不提问,有时是学生提不出问题,有时是不知该如何提问。这时,教师需要站在学生位置上,思考学生可能会有什么问题,然后由教师提出问题,让学生来回答。如果学生不能回答,教师再为学生解答。教师备课时不再只是准备我要讲什么,而是思考学生会遇到什么难点,需要向学生提什么问题、解答什么问题。基于此目的,教师需准备大量经典案例,提出问题,分析问题,并在问题中设置一些错误,让学生思考原因,并进一步思考如何修改错误,在这样的学习过程中潜移默化地掌握基本的语法知识和解决问题的方法。这种模式转变了学生的学习方式,激励学生积极思考问题、分析和解决问题。
2.2理论课程设计
由于科学技术的快速发展,计算机科学与其他学科间的交叉、融合日益增强。大多数非计算机专业的培养目标已将学生的计算机程序设计能力作为了一项重要内容。
本课程主要是针对非计算机专业的理工科一年级大学生开设的。与计算机专业不同的是,非计算机专业学生一般只学一门语言课程。因此,该课程的教学就担负起培养学生编程能力的重要责任,成为了学习其他程序设计语言的基础。
根据非计算机专业各学科的培养目标,“C/C++语言程序设计”课程在理论课程内容设计上注意知识结构的合理,强调基本能力的培养,注重基础理论与实际应用的融合。课程内容体系结构重点突出学以致用。课程内容知识结构由C语言简单程序的编写和调试、C语言程序设计基础、控制结构、数组、指针、函数、编译预处理与变量的存储类型、文件、结构体与共用体、图形程序设计基础、C++程序设计基础、查找和排序12部分组成。
根据学以致用的原则,在实际应用中,函数是程序设计的重要内容之一,也是学生学习的难点之一,因此在理论课程设计中,我们将函数的使用提前讲解,让学生尽早接触函数,理解模块化的设计方法,掌握函数的基本设计和操作。在讲授第2章有关输入/输出库函数时,可同时结合第8章文件的知识,使学生掌握实际问题中涉及不同数据的不同输入/输出方式,较好地解决了学生学习C语言后不能熟练掌握文件操作的问题。
教材在内容编排上注重易用性。每章的开头设置本章学习目标,之后设置本章学习指导,包含“课前思考”“本章难点”和“本章编程中容易出现的错误”。每章后的练习题涵盖了程序设计中的常见算法,涉及简单程序设计、较复杂程序设计、易于举一反三的程序设计问题等内容,使学生能够通过练习,大大地提高编程能力。
2.3实验课程设计
“C/C++语言程序设计”是一门实践性很强的课程。在近几年的课程建设与教学改革中,实验课程注重理论课程内容与实验内容的有机结合,强调学生创新能力和实际动手能力的培养。C/C++程序设计实验教学内容改变了以往验证性实验为主的现象,使设计性实验内容占了70%以上。通过实验,培养学生分析问题和解决问题的能力,以及动手能力和程序设计能力,从而加深对理论课程内容的理解。
实验课程配有实验指导书,共设计了11个实验项目和一个综合程序设计,其基本出发点是帮助学生理解和消化课堂教学的内容,培养学生自主学习能力,加强其实践能力和团队协作精神,让学生掌握程序设计的基本思想和方法。具体实验内容包括:C/C++简单程序的编写和调试、C语言程序设计基础、控制结构、数组、指针、函数、编译预处理、文件、结构体与共用体、图形程序设计、C++程序设计基础。
3 教学方法和手段
3.1教学方法
为了实现程序设计课程的教学目标,使学生不但掌握高级编程语言的知识、编程技术和基本算法,更要掌握程序设计的思想和方法,培养学生进行问题求解和编程的能力,以及探索和创新能力,我们采用了多种教学方法,主要做了以下改革。
1)课内与课外训练相结合,注重学生综合能力的培养。
课内教师根据教材进行引导学习,加强典型例题的启发式讲解。在分析常见错误案例的过程中,教师讲解程序设计的基本方法、程序测试方法以及程序调试和排错方法,帮助学生理解错误发生的原因和实质,掌握纠错的方法和解决的对策。在实验教学中,我们为每堂实验课设计相应的实验项目。实验项目的设计注重实用性和综合性。实践教学强调大量程序设计的训练。教师在网上为学生一些经典、实用、有一定挑战性的作业,鼓励学生课外多训练,倡导学生课后以寝室为单位,组成学习小组,进行讨论、分析和解决问题。
为了激励学生参与程序设计的实践,进一步提高学生程序设计的兴趣,提升他们的软件技术水平,成都理工大学每年举行一次全校范围的程序设计大赛。大赛采用初赛和决赛制,要求学生在2~4小时内完成一个综合性较强的程序设计题目,或在一段时间内完成一个综合程序设计题目,然后进行答辩。
2)重视实践教学环节、注重学生创新意识与应用能力的培养。
为了培养学生的实践动手能力,我们加强了实践教学环节的管理。教师要积极使用多媒体实验室的教学设备,进行启发、引导式的实验指导,将平时测试与期末测试结合,测试学生在1个小时内调试和正确编写程序的能力,引导和督促学生重视实践教学。开放性实验注重培养学生的创新意识与应用能力。
3)网站互动学习。
课程组建立的教学网站、精品课程网站、课程资源平台等为学生提供了网络课程、网上答疑、作业提交、理论试题及答案、上机试题及答案、教学录像、视频节目、精品课程网站链接、相关学习网站链接等资源,扩充了课堂教学区域。学生可以在任何时候、任何地点进行互动学习。这种方法及时地解决了学生在学习中遇到的疑难问题。
4)改革考核方式,采用多元评价方式考核实验成绩。
为了提高学生的学习兴趣,培养学生问题求解和编程能力,以及探索和创新能力,我们采用了开卷和闭卷相结合的考试方式,鼓励基础好的学生开卷考试,完成一个综合编程题目。经过实践,参加开卷考试的学生在独立分析问题、解决问题和编程能力上得到了很大提高。
3.2教学手段
多年以来,成都理工大学“C/C++语言程序设计”课程最大限度地、多方位地应用了以下现代教育技术手段。
1)课堂多媒体理论教学。
本课程的理论教学将传统教学手段和现代教育技术手段相结合,在应用现代教育技术手段的同时,继续发挥传统教学的优势。课堂上多媒体课件的播放效果直接影响到学生的听课效果,因此我们不仅制作了幻灯片,还利用Autherware、Flash等工具,制作了具有较强动画效果的多媒体课件,将程序的执行过程利用动画演示,生动、形象地模拟了计算机执行程序的真实情况。
2)建立计算机基础教学网站。
我们开发课程网上教学平台,为学生提供电子教案、多媒体课件、视频等丰富的网上教学资源,同时提供讨论和在线答疑,构建以学生为中心的自主学习环境。
3)网上考试系统。
网上考试系统为学生提供了模拟和考试环境,实现了系统自动组卷和评分功能,为学生课后自学和自测、提高教学效果搭建了一个有效的平台。
4 考核方式
课程考核可以采用开卷和闭卷2种形式。
1)闭卷考试由笔试和机试组成。
(1)笔试(占总成绩的50%)主要考核语言基础、基本的阅读和编写程序的能力。题型包括选择题、填空题、程序阅读题和程序填空题。
(2)机试(占总成绩50%)主要考核程序设计能力,包括上机考试(占总成绩的30%)和平时出勤及作业完成情况(占总成绩的20%)。
2)开卷考试主要考核学生综合程序设计的能力,独立分析问题和解决问题的能力,难度较大。通常只有学习优秀的学生可以参加开卷考试。这些学生必须是按时完成了每一次的实验项目,且中期考试合格。开卷考试要求学生提供源程序、开卷考试报告并参加面试。
5 结语
通过对各种教学方法和教学手段的研究和探索,我们改变了传统的知识传授理念,从而更加注重学生解决实际问题的能力,并提出“以学生为主体,教师为引导,网络教学为辅助”的全新理念,极大地激发了学生的学习兴趣,挖掘了学生的创造潜能,又培养了他们自主研究、协作学习的能力。实践证明,通过上述教学改革措施,教学效果取得了显著提高。在计算机二级c语言考试中,学生通过率较往年大大提升。当然,实际教学过程是一个相当复杂的系统,也还存在着一些需要解决的问题,还需要我们在今后的实践中继续开拓,不断探索。
参考文献:
[1]赵珊,贾宗璞,“C语言程序设计”课程教学模式改革方案探讨[J],科技资讯,2011(35):185-187。
[2]黄群,C语言程序设计课程教学设计探讨[J],计算机教育,2010(5):78-81。
[3]陈洪超,项目教学法在“C语言程序设计”课程中的应用[J],重庆电力高等专科学校学报,2012,17(3):29-30,36。
[4]左永文,案例教学法在“C语言程序设计”课程中的应用[J],科技创新导报,2012(18):175-175。
关键词关键词:C++;程序设计; 教学方法;教学改革
中图分类号:G433
文献标识码:A 文章编号:16727800(2014)002018902
0引言
C++语言广泛应用于基础软件、桌面系统、网络通信、音频视频、游戏娱乐等诸多领域,是世界上使用最广泛的编程语言之一。随着物联网技术的发展,C/C++技术在3G网络通信、多媒体处理、智能识别等领域得到了进一步的推动和发展。但人才短缺依然制约着行业的发展,很多高校都认识到这一点,相继开设《C++语言程序设计》课程,目的在于让计算机专业的学生多学会一门编程语言,进一步培养学生独立思考、分析和解决问题的能力,增加就业砝码。然而《C++语言程序设计》这门课程学起来并不容易,不仅有很强的理论性,更具有实用性,课堂理论教学和代码编写缺一不可。在传统教学过程中,由于教学目标不清晰,部分学生会质疑开设这门课程的必要性,并且教学内容或教学方法上的不足,也使得学生学起来枯燥,逐渐产生畏难心理。因此,高校《C++语言程序设计课程》的教学改革势在必行。本文根据多年来的实际教学情况和C++培训市场调研分析,从该课程的教学目标、教学内容以及教学实施方法等方面进行探索性的改革。
1教学中存在的普遍问题
1.1学生无法明确教学目标
以武汉东湖学院的《计算机语言程序设计》课程为例,4年的时间依次开设了《高级语言程序设计——C》、《面向对象程序设计——Java》、《C++语言程序设计》《.net 程序设计》4门课程。学校的出发点是全面培养学生的软件开发编程能力,不断提高学生独立思考、分析和解决问题的能力,从而增加学生就业砝码。4门课程跨越不同的教学学期,由不同的教师授课,教师如果只关注自己所授课程,没能从全局比较分析,学生很可能无法明确教学目标。
C++语言比较难学,课程教学中牵涉到的概念比较复杂、规则繁多;C++使用灵活、容易出错,不少学生感到学习困难;同时C++是面向对象程序设计语言,但又不是纯面向对象语言,它在过程语言中增加了面向对象的结构。这种特性使得C++语言能够保持与C语言的兼容。在教学初期,学生会觉得C++很亲切,许多C语言代码不经修改就可以为C++语言使用[1]。此时如果不让学生明确学习的目标和意义,学生很容易误解甚至会置疑:学了C为什么还要学C++,既然不是纯面向对象语言,用Java替代C++不就可以了吗?这样,C++语言教学自然不会有良好的教学效果。
1.2教学内容注重语法,课后延伸不多
教学内容更多关注语法。C++语言同所有算法语言一样都由自己特定语句组成,每条语句又有自己的一些特定使用规则[2]。在传统的《C++语言程序设计》课程教学中,无论是教材还是教师授课,都是先介绍概念,再介绍规则,最后讲解例子。有关概念规则的内容相对来说较为枯燥难记,在讲授过程中,难以引起学生的兴趣。虽然最后有例子讲解,但通常都是彼此孤立的、按章节对应教学内容的一些小数学问题[2],学生还是很难从中感受到实际应用价值。
受课程学时所限,课程教学内容大多也只能以基本的语法、规则、小案例形式来呈现。如果课后不加以延伸或适当学习,学生对C++的学习就只能停留在皮毛。
1.3教学方法与企业实际脱节
学生在学习《C++语言程序设计》课程时,往往有种“只见树木,不见森林”的感觉。因为传统教学往往都是简单地按照教材顺序循序渐进地进行,每节课都会让学生学习并记住许多概念和规则,但他们并不知如何综合起来解决问题[3]。即使安排大量实验课,也多是围绕每个章节分散地进行相关概念或者规则的实践。一段时间后学生往往对这门课感到厌倦,学到的知识也不足以驾驭实际项目开发。
2教学改革策略
针对上述现象,本文从以下几方面探讨了对课程的教学改革,实际运用中也取得了良好的教学效果。
2.1明确学习目的,激发学生的内在动力
教育心理学指出,学习动机是学习活动得以发生、维持进行,直到完成的内在动力。现代大学生对自己的学习活动、学习内容以及其对未来的就业和发展十分关注,如能在课堂教学初期讲清课程的开设目标以及相关就业前景,充分重视学生的这种学习动机,学习效果自然会提高。例如,在讲授《C++语言程序设计》课程前,可以收集一些招聘C++语言编程人员的就业信息及毕业生从事C++语言编程工作的收入、工作岗位发展趋势等学生十分关注的重要信息。到了教学初期,在讲授“什么是C++”时,可穿插着介绍这些信息,并让学生知道“C++语言广泛应用于基础软件、桌面系统、网络通信、音频视频、游戏娱乐等诸多领域。目前,企业招牌C++软件开发工程的数量占软件开发工程师总量的1/3左右,薪水居高不下。要尽快使每个学生明确即将学习的知识与社会的关系,因人而异地帮助学生找到各自的学习目标,激发学生的内在动力。
2.2教学内容注重从整体到具体,再从具体到整体
虽然教材的编排大都按照先概念、再规则、最后举例这一顺序,但由于其间知识的分散性,彼此缺乏联系,使学生不能体会一个完整的编程过程。在教学中,应注重教学内容从整体到具体,再从具体到整体,使学生通过一个完整案例先快速了解C++语言程序设计的全过程,然后增添程序设计的教学内容,具体分析实现步骤中的各个知识点,学习更高标准和要求的程序,最后学生在学完所有知识点后完成一个完整的设计。这种思路特别适合程序设计类的其它课程。
2.3教学方法注重同中求异、异中求同
这样可使学生学会抓住事物的本质特点,加深对事物的理解,有利于培养学生的创造性思维。为了能使学生的学习更深入,采用对比的方法进行教学,可以达到很好的教学效果。例如,学生在学习C++语言时可以拿它与C语言作比较,C++程序语言与C语言在程序设计思路上存在着不同:一个是面向对象的程序设计语言,将数据与数据方法捆绑在一起;一个是面向过程的程序设计语言,由上至下,采用分模块方式。但两者之间的共同之处也比较多,C++语言是对C语言的改进与扩充,是C语言的一个超集,它保持了对C语言的兼容,也即在C语言中使用的命令,可以直接在C++中使用。通过比较,学生更能体会到教学的目的性。
2.4校企联合,模拟职前培训
计算机专业的毕业生为了快速就业,有时会选择到培训机构进行职前培训。培训并不意味着一定就业或高薪,关键还是看学生。高校进行《C++语言程序设计》课程教学时,如能实现校企联合,在后期的实践环节注入培训机构的授课法,即通过多个项目让学生掌握C++的软件开发技能,将大量的开发经验融入教学;并且,每学完一个专题就配一个项目实战,最后完成一个即时通信或多媒体音/视频项目,积累开发经验,模拟职前培训,对学生能力的提高大有益处。
3结语
本文提出了《C++语言程序设计》课程的教学改革思路,即通过改善教学方法,调整教学内容,真正以激发学生学习兴趣为导向,校企联合或者注入培训机构的授课法模拟职前培训,让学生积累开发经验。教学实践证明,这些教学改革举措在一定程度上能够提高教学效果,同时其非常适用于其它编程语言课程的学习。
参考文献:
[1]杨庚.面向对象程序设计与C++语言[M].北京:人民邮电出版社,2006.
关键词:C++;课程研究;教材建设;负反馈教学
1C++教材建设现状
C++语言是兼容C语言的面向对象程序设计语言,随着软件工程技术和面向对象程序设计技术的发展,迅速成为主流的面向过程和面向对象的程序设计语言,是编写系统软件和应用软件的通用语言,也是各类高校,尤其是理工类和综合性高校开设高级语言程序设计课程的首选教学语言之一,同时也是非计算机专业计算机等级考试和计算机专业程序员水平与资格考试指定语种之一,其影响广泛而深远。C++程序设计课程(以下简称C++课程)也因此成为国内外高校普遍开设的计算机基础课程。它不仅是一门程序设计课程,而且是许多专业课程(如数据结构、操作系统、微机原理,单片机及应用)的重要基础,更是这些专业开展计算机研究、应用和综合运用本专业知识的重要表达工具和开发工具。它的基础性、普遍性和重要性逐步为人认识和重视。国外高校比较重视该课程建设,从原版影印教材可见一斑。国内高校讲授该课程较晚,课程建设也较晚,现有教材状况可分下列几类。
1) 英文影印版。主要用于高校图书馆馆藏、教学参考和高校双语教学试点,如高等教育出版社影印出版的《The C++ Programming Language》(BjarneStroustrup著)和《Programming in C++》(Nell Dale,Chip Weems和Mark Headington著)。由于国外高校课程体系与国内高校有较大差别,且国外高校的教学课程通常只指定教学参考书而不指定教材,因此,若把这些教学参考书当教材使用,必然使主讲教师所讲内容与所选教材吻合度较差,很难发挥教材应有的作用。
2) 英文编著版。这类教材是指由高校主讲教师依据本校双语教学试点要求和/或合作办学要求自编,目前尚处于探索阶段。
3) 编译版。这类教材是指引进国外经典C++教材,翻译成中文,在国内销售的教材,如Harvey M.Deitel, Paul James Deitel编著的《C++ How to Program》分别由清华大学出版社出版(名为《C++程序设计教程》,施平安译)及电子工业出版社出版(名为《C++大学教程》,邱仲潘等译)。由于翻译质量、阅读习惯、价格、教材配套、课程体系等方面的问题,通常用作教学参考和图书馆馆藏,很少用作教材。
4) 中文编著版。这类教材量大面广,通常由高校主讲教师(如南京理工大学张岳新,浙江工业大学钱能,清华大学郑莉,西安交通大学罗建军,华南理工大学周霭如,北京大学吕凤翥等)结合本校实际编写。编写思路多,如有的以算法为主、有的以语法为主、有的先讲面向过程程序设计后讲面向对象程序设计、有的自始至终贯彻面向对象程序设计思想,还有的参照国外教材的编排体系等。但上述教材或多或少存在一些不足,如起点高、跨度大、系统性不强、急于阐述C++的新进展等,对实验、学习、课程设计指导等重视不够,不一定满足其他学校的教学要求。
2C++教材建设思路
C++课程是各类高校普遍开设的计算机核心基础课程,应用广、影响大。与欧美发达国家高校相比,我国高校生平均教学资源占有率严重偏低,尤其是可用的C++课程教学参考资料较少,因此,教材在我国既是知识的载体,又是教学的工具,对保障教学质量显得格外重要。与传统教材相比,C++课程教材的内容广,理论性、实践性和综合性强,更新速度快,成熟意味着过时,教材作者新人辈出,教材种类多、更新快、问题也多。因此,C++课程教材改革与建设有其自身的显著特点。
C++课程理论教学和实验教学并重,学以致用,以通过编程解决实际问题为目标;课程内容涉及基本语法、基本算法、基本数据结构、编程思想、编程技巧和程序调试技术等,综合性、实践性强,理论与实践结合紧密;实验编程环境极其严格,结果要求百分之百正确,对培养大学生编程能力、创新能力和严谨的科学作风有非常重要的作用。
好的C++程序设计教材首先应以长期持续的课程建设为依托,以坚实的教学研究和教学实践为基础,体现课程建设成果;其次应结合自身实际,分析研究C++课程的目标、特点、内容、结构及与其他课程的关系,在教材的编写思路、框架结构和教学内容的组织、取舍、阐述、更新、难点处理等诸多方面有所改进和创新,注重学生实际编程能力培养和创新能力培养;再次应符合读者的认识规律和编程能力的形成规律,既便于自学和教学,又利于教学效果的巩固和教学质量的提高;最后还应有必要的优质的配套教学资源。
3C++课程建设历程
我校于1998年在计算机专业首先开设C++课程,2000年扩展到电子信息工程、电子科学与技术、通信工程、电气工程、自动化、信息计算、信息系统与信息管理等非计算机专业。目前课程规模年均近2000人。
基于C++课程的基础性和重要性,2000年在校教务部门和院领导的指导和支持下,专门成立了以具有丰富教学经验和实际编程经验的教师为主体的C++教学研究小组(以下简称教研组),并设立课程负责人,使课程的教学、研究、建设和管理步入持续不断的良性发展轨道。
十多年来,教研组结合我校实际,对C++课程的特点、内容、结构、方法及与其他课程的关系等方面做了大量研究工作,以提高教学质量为首要目标,改进教学方法,形成了一整套针对该课程实际的教学理论和教学方法,即C++课程负反馈教学法,并编写了大量具有负反馈教学法特色的教学材料,采取了一系列的教改措施,使该课程的教学质量得到明显的提高,为本课程的精品化建设奠定了坚实基础。
3.1积极稳妥推进教学方法改革,形成颇具特色的负反馈教学法[1-3]
课题组根据多年教学研究与实践,在教育学和心理学的基础上,用现代过程控制理论分析传统教学过程,于2002年建立负反馈教学模型(如图1所示)。由于模型引入了负反馈环节,从理论上可以确保教学质量的稳定。在负反馈教学模型基础上,吸收单元教学法、布鲁纳的“发现教学法”和瓦根舍因的“范例教学法”的合理成分,形成负反馈教学法,在我校C++课程教学实践中,取得了较好的教学效果。
负反馈教学法的原理是从教学过程中反馈(作业、实验、答疑、单元测验等)的问题入手,通过及时讲评,解决学生学习中存在的各种问题,以达到预期的教学目标。由于反馈的是教学过程中存在的问题,故称此方法为负反馈教学法。负反馈教学法包括以下4个主要方面。
1) 教学内容单元化组织。
按程序设计方法演进发展的自然顺序及C++实际编程能力形成的3个关键期,即结构化程序设计模块程序设计面向对象程序设计,将C++教学内容组织为3个单元,有利于教学的组织、实施、考核,有利于教学效果的巩固和教学质量的提高。
2) 用“范例”组织课堂教学,贯彻“发现式”教学思想,注重学生创新素质和优秀人才的培养。
范例教学法由教育学家瓦根舍因(M.Wagenshein)提出,教师通过范例辅助学生理解、掌握知识和原理,其目的是让学生能够独立地获得判断能力、推理能力、认识能力和继续学习的能力。以往,程序设计课程教学通常以一门具体语言为主线,围绕语法知识展开。而实质上,设计程序是为了解决实际问题,是一种缜密思维方式、创新素质和综合能力的培养,要使学生对程序设计有兴趣,必须使他们亲自感受并体验程序设计的无限魅力。为此,我们改用范例组织本课程的课堂教学。在多媒体教学设备和真实编程环境的支持下,课堂教学以程序(范例)为主线。所选范例程序具有典型性、综合性和可扩展性,涉及基本语法、基本算法和基本调试技术。范例程序的讲解首先符合“现象发现问题分析问题解决问题验证”的探索过程,使学生掌握基本语法、算法及应用;其次,通过对范例程序的启发式扩展,揭示程序由小到大、由简单到复杂直到实用的过程,激发学生的探索热情和兴趣,使学生掌握知识间的联系和编程的工程化思想,获得实际编程能力。
3) 采集教学负反馈信息,做好分类、分析和讲评,注重学生整体水平。
按负反馈教学法要求,任课教师做好作业和实验报告抽样批改、单元测验的全样批改,重视实验指导和答疑。在获取足够的负反馈信息后,任课教师及时做好问题的分类、分析和讲评,以保证学生整体水平的提高。
4) 根据大班教学特点,推进强同步教学策略,确保整体效果。
大班教学成功的关键在于保持教学的师生同步状态。负反馈教学法的师生同步措施有:授课、作业、实验、讲评和测验。其中,作业与实验报告同步效果欠佳,其原因是大班教学学生抄袭现象较为普遍,因此,作业与实验报告为弱同步措施;授课、讲评与测验同步效果较好,为强同步措施。为使大班教学取得较好的效果,采用强同步措施是必要的。我们在每个单元结束时安排一次测验,以实现师生的强同步,及时取得真实的负反馈信息。
由于采用负反馈教学法,所以课堂教学可以突出重点和难点,而将易于自学的内容只做要求不做讲解,这样,一方面解决了课时少与内容多、难点多的矛盾,另一方面也提高了学生的自学能力和自我解决问题的能力。
3.2强化实践教学,注重培养学生的实际编程能力和创新能力[1-3]
C++课程难点多、综合性,主要涉及基本语法、基本算法、基本操作及综合应用等方面内容。
实验是本课程至关重要的环节,学生只有通过实验才能检验自己是否真正掌握和运用该语言:通过上机调试程序,会发现很多想不到的问题;通过解决这些问题,可以加深对语言和算法的理解、提高程序调试能力、实际编程能力和创新能力。为此,本课程设有课内实验和课程设计实践教学环节。
1) 课内实验注重培养学生基本调试能力和基本编程能力。
基本调试能力是学生通过深入学习取得实际编程能力的前提,常被人忽视。因此,我们根据教学内容编写了一套以调试技术、基本语法、基本算法、综合编程为核心内容的同步实验指导,共拟定了17个实验,每个实验通常包括调试题、编程题和选做题,可供不同层次的学生选用。
2) 课程设计注重培养学生综合编程能力。
C++课程设计以综合性程序设计训练为主,选题具有典型性、综合性和示范性,突出难点及其实用价值,使学生体会到难点不难,而且感到难点在实际编程中非常有用。学生通过训练进一步巩固和掌握基本语法、基本算法和基本调试技术,养成良好程序设计风格(模块化、结构化)和严谨的科学作风,初步形成软件工程化思想,并具有一定的程序组织能力。
C++课程设计的内容包括基本算法和数据结构的综合运用。其中,基本算法涉及穷举、迭代、递推、递归、排序和查找等,数据结构涉及数组、结构、指针、动态内存分配、单向链表、类、文件等。
3) 强化实践教学辅导和考核,确保实践教学质量。
实践环节实行教师辅导、答疑和考核。课内实验实践环节主要涉及预习情况检查、辅导情况记录、实验报告批阅和典型问题讲评,课程设计实践环节主要涉及预习情况检查、辅导情况记录、联机考核和课程设计报告批阅。对于课程设计考核,每位学生的联机考核时间约5~10分钟,考核内容包括讲解和演示自编程序,回答老师提问(3~5个)。通过采取上述措施,实践教学质量得到充分保障。
4) 及时总结和推广实践教学经验。
根据教师多年的实际编程经验和教学经验,编印典型问题和综合问题编程专题,供学生课外阅读参考,便于学生突破难点,融会贯通,体验综合编程的乐趣,培养他们分析和解决问题的能力。
3.3积极开展教学内容研究,及时更新教学内容
根据程序设计课程本身发展快、更新快、综合性强、存在问题多的特点,针对同类教材中普遍存在的问题和不足,积极开展教学内容的研究,确保教学内容的正确性和系统性,确保将重点难点内容讲清讲透,先后发表教学内容研究论文20多篇。代表性论文有:C++运算符重载教学和编程中易被忽视的问题、C++语言引用型变量的实现机制浅析、C/C++语言可变参数函数的参数传递机制剖析、C/C++中数组与指针的关系、C++中二维数组与指针关系的深入剖析、C++迭代器机制剖析、C++标准模板库与代码重用。
4C++教材建设成果
教研组根据对国内外流行C++教材的研究分析和试用,结合我校非计算机专业计算机基础教学改革、计算机专业教学改革和课程建设的实际,积极稳妥地开展体现负反馈教学特色的系列教材的编写和出版工作。
2005年2月,教研组自编教材《Visual C++程序设计习题、实验与编程实践》由华东理工大学出版社出版,同年12月第二次印刷,累计印刷3次,得到了社会读者的认同。2005年10月,我校C++课程获江苏省高等学校精品教材立项建设,在清华大学出版社的支持下,于2007年2月主编出版教材《C++程序设计实践教程》(含教学课件),累计印刷3次;在高等教育出版社的支持下,于2007年11月主编出版教材《C++程序设计教程》(含教学课件)和《C++程序设计实验与编程实践》。
教材的配套建设充分发挥了教材的作用,满足了我校教学需要。其中,《C++程序设计教程》和《C++程序设计实验与编程实践》主要用于我校计算机专业教学,《C++程序设计实践教程》和《Visual C++程序设计习题、实验与编程实践》主要用于我校非计算机专业教学。
下面简要介绍教研组近年主编出版的C++课程系列教材的特点。
4.1 《C++程序设计教程》及其配套教材[4-5]
1) 内容组织结构合理,层次分明。教材按程序设计方法演进发展的自然顺序及C++实际编程能力形成的三个关键期,将C++教学内容分为三大单元,即结构化程序设计(1~4章)模块化程序设计(5~9章)面向对象程序设计(10~14章)。内容组织由浅入深,循序渐进,符合读者的认识规律和编程能力的形成规律,便于教学的组织、实施和考核,利于教学效果的巩固和教学质量的提高。
2) 紧跟标准,内容求新。本书介绍的是标准C++,符合ANSI/ISO C++标准(包括1998第一版和2003第二版),引导读者按C++标准编写程序。本书对以往教材中带有一定普遍性的问题如“指针就是地址,地址就是指针”等进行了澄清和纠正。
3) 不避难点,力求突破。许多有一定基础的读者学习程序设计半途而废的重要原因之一是未能突破实际编程中的难点问题,这与不少主流教材以各种理由极力回避难点有密切的关系。本书针对教学和实际编程中的难点(如递归、指针、动态内存分配、虚函数等),精挑多选范例程序,想方设法讲清讲透,力求使读者突破难点,学以致用,不致半途而废。
4) 范例程序,精心设计。程序是语法、算法、思想和方法有机结合的载体,是计算机解决实际问题的钥匙,学习程序设计离不开程序。书中大量的范例程序是经过作者精心挑选和精心设计的,表达准确、简练,书写规范,示范性强。
配套教材《C++程序设计实验与编程实践》分三部分:
1) 实验指导。实验与课堂教学同步进行,是本课程至关重要的环节。共20个实验,每个实验通常包括调试题、编程题和选做题,供不同层次读者选用。
2) 典型问题和综合问题编程。列举实际编程中提炼的典型和综合问题的编程范例,突出难点及其实用价值,使读者体会到难点不难,难点在实际编程中非常有用。所列范例程序涉及程序的结构化书写格式、程序由小到大、由简单到复杂直到实用的过程。
3)Visual C++ 6.0程序调试技术。这部分内容帮助读者熟练掌握主流的C++开发环境Visual C++ 6.0的程序调试技术,使他们具备主动上机调试程序的能力。
4.3 《C++程序设计实践教程》[6]
1) 内容组织原则与4.2一致。
2) 内容取舍上,根据阅读对象为高校理工类专业的一年级新生的实际,注重基础和系统,兼顾提高。内容包括:结构化程序设计基础(C++概述、数据类型、运算符、表达式、简单的输入输出、算法及其表示、流程控制)、模块化程序设计(函数、编译预处理、数组、结构体、共用体、枚举类型、指针和引用)和面向对象程序设计(类、对象、继承、派生、友元、虚函数、运算符重载、I/O流类库、模板、异常处理、命名空间等)。
3) 编写思路上,通过以基本语法和基本算法为主线的典型、综合范例程序,适时阐述有关程序设计的思想、方法和技巧,将C++语法、基本算法和程序设计方法有机结合起来,理论联系实际,注重学生实际编程能力培养。
4) 内容阐述上,注重概念准确、由浅入深、循序渐进、图文并茂、简明扼要、举一反三、用例精练,便于教学和自学。范例程序表达简洁,书写规范,示范性强。
5) 难点处理上,不回避教学和实际编程中的难点,并适时提出扩展性问题,激发学生的探索热情和兴趣,利于创新人才培养。
6) 内容的更新上,及时反映C++程序设计课程的教学研究成果,对以往教材中带有一定普遍性的问题如“引用型变量不占内存”等进行了澄清和纠正。
7) 配套的教学资源上,丰富、实用,包括实验与编程指导、学习指导、课程设计指导、电子教案、试卷库和课程网站等。
8) 教学的试点上,校内试用多年,几经调整,起点低,教学效果好。
4.4 《Visual C++程序设计习题、实验与编程实践》[7]
1) 学习指导。根据非计算机专业计算机等级考试要求,按章编排了相应具有较强启发性的典型例题和习题。为取得较好学习效果,按C++实际编程能力形成的三个关键期,共设置了三个单元测验。单元测验的内容突出重点和难点以及综合运用,目的是及时发现并解决教学中存在的问题。
2) 实验指导。共有17个实验,每个实验包含调试技术介绍、程序调试题、程序设计题和选做题,注重培养学生的编程能力和调试能力,强化其实际编程能力训练,激发其编程兴趣。
3) 典型问题和综合问题编程。共8个专题,便于学生突破难点,融会贯通,体验综合编程的乐趣,培养他们分析和解决问题的能力。
4) 二级考试模拟试卷。
5)VC++ 6.0程序调试技术,包括使用VC++ 6.0 IDE编写和调试程序的方法和技巧。
5结语
十多年来,教研组围绕C++课程,潜心教学、研究、建设和积累,形成了颇具特色的负反馈教学法,发表相关教学论文20多篇,出版教材4部,建成1门省级精品课程(《Visual C++程序设计》)、1部省级精品教材(《C++程序设计教程》)和1个校级优秀教学团队,取得中国交通教育研究会2007-2009年度优秀成果一等奖(《C++程序设计实践教程》)1项,获得第十届“挑战杯”全国大学生课外科技作品竞赛全国二等奖等5项省级以上奖励。
精品教材建设是一个长期过程,我们将继续沿着自底向上的建设路径,及时总结C++教材建设的经验,认真做好特色系列教材的编写、重印、修订、再版和配套建设,进一步提升教材建设的层次,不断扩大C++教材在校内、省内和国内的受益面。
参考文献:
[1] 陈建平,刘维富,王春明,等. Visual C++程序设计课程建设研究与实践[J]. 计算机教育,2007(12):18-20.
[2] 刘维富,陈建平,王春明,等. 浅谈“C++程序设计”课程的建设与实践[C]//大学计算机课程报告论坛组委会. 大学计算机课程报告论坛论文集2006. 北京:高等教育出版社,2007:92-97.
[3] 顾晖,刘维富,管致锦,等. 负反馈教学法的原理与实践[J]. 电气电子教学学报,2004(4):102-104.
[4] 陈建平,刘维富,葛建芳. C++程序设计教程[M]. 北京:高等教育出版社,2007:前言.
[5] 刘维富,葛建芳. C++程序设计实验与编程实践[M]. 北京:高等教育出版社,2007:前言
[6] 刘维富,陈建平,葛建芳,等. C++程序设计实践教程[M]. 北京:清华大学出版社,2007:前言.
[7] 刘维富,丁卫平,沈学华,等. Visual C++程序设计习题、实验与编程实践[M]. 上海:华东理工大学出版社,2005:前言.
C++ Programming Course Research and Textbook Construction
LIU Wei-fu, CHEN Jian-ping, WANG Chun-ming, GE Jian-fang, QIU Jian-lin, GU Hui
(Computer School of Science and Technology, Nantong University, Nantong 226019, China )
关键词:《C语言程序设计》;教材建设;教学改革;教学模式
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)04-11170-02
1 引言
程序设计作为计算机等有关专业必修的一门重要的专业技术课程,是信息系统学科的一门核心课程,是一门理论性和实践性都很强的课程。C语言程序设计是理工科各专业计算机应用能力培养的重要技术基础。C语言既具有低级语言可直接访问内存地址、能进行位操作、程序运行效率高的优点,又具有高级语言运算符和数据类型丰富、结构化控制语句功能强、可移植性好的优点,成为程序设计语言的常青树。C语言课程是数据结构、C++面向对象程序设计、操作系统和软件工程等课程的基础,并可为这些课程提供实践工具。
C语言是一门实用性的语言。其实验教学环节作为C语言程序设计课程教学中一个十分重要的教学环节,对于实现课程教学的目标起着重要的作用,是理论联系实际的必需的手段,对于理工科大学接受系统的实验方法和实践技能训练,培养科学实验能力是很好的锻炼,学生经过C语言程序设计实验教学环节后对于C语言程序设计理论知识的“三基”(基本理论、基本方法、基本手段)才会有更为深刻地理解。
传统的教学方法中,程序实验环节只是配合每一章所学的内容进行在计算机上的实践,这样的方法让学生只是孤立的了解了某些C语言程序设计知识,所涉及的知识面较窄,缺少学科的综合性,而且动手能力很差,无法将实际的具体问题和C语言程序设计知识联系起来。学生的学习兴趣不高,教学效果较差。为了改变这一现状,我们对C语言程序设计实验教学的实验教学观念、实验教学内容、实验教学的组织方式和实验教学的手段进行改革性的探索和实践,将教学的目的变为理论和实践并重,以提高学生的实用的掌握这门语言的能力。
2 教学改革方法
针对这些问题,我们在教学中进行了大胆的探索和尝试,主要从以下几个方面进行的:
2.1 加强教材建设
在教学工作中,我们主张讲授要少而精,而选择教材则应在广度和深度上留有较大的余地。在高等学校中应该提倡老师讲授的内容和课时不要太多,为学生提供的教材和学习材料则应该尽量多,并且有一定的深度。这样,才可能让学生有充分的主动学习的空间,使学生在花费精力学习不同课程时有较大的选择余地,同时,学生学习这门课程的能力和兴趣往往差别很大,对于水平高有兴趣的同学,应该为他们创造深入学习的条件。教材应该是一个学习园地,而不是讲稿,老师的讲课好像是导游,为学生的游览(学习)提供指导。讲授的内容不可能与教材的内容相一致,正是这种不一致性,使得学生获得了较大的独立学习的空间,这样培养出来的人才,才可能有较强的学习和创新能力。我们将“少课时,大教材”作为教学改革的一项措施,认为教材应该为学生留有主动学习的空间,这样有利于加强素质教育,从而提高教学质量。
另外,我们针对当前市场上课本的鱼龙混杂的情况,常常在语言的细节上浪费笔墨,这样不但容易使得初学者迷失在这些复杂而庞大的细枝末节上,而且不能很好的掌握C语言程序设计的实质。我们根据自己多年来从事C语言程序设计语言教学的经验和实际开发软件项目所积累的丰富的软件开发经验编写教材。强调程序设计方法和技巧的掌握比对语言细节的理解重要得多,而对语言细节的透彻理解只有通过大量的时间和长期的编程实践才能获得。我们编写《C语言程序设计》教材使学生能在较短的时间内理解C语言程序设计的基本概念并掌握C语言程序设计的方法,初步培养学生按C语言的思想方式分析和解决问题的思维习惯。
2.2 编程实践环节驱动的教学模式
上机编程实践是学好C程序设计语言的关键。“精讲多练”式教学方法的基本特点是上机时数较多。上机实践是掌握Visual C++的一种有效途径,我们在教学中采用1.5:1的模式,即每上3课时的理论课,安排2课时的上机实践。在讲授理论课时,还要针对自学部分和调试技术等内容进行简短的指导, 然后学生在教师指导下上机练习。
2.2.1 重视C语言的上机编译环境的运用
C 语言的理论知识是以实践作为依据的,一个程序的执行过程涵盖该程序所有知识点。我们机房提供了TurboC 2.0、WinTC、Visual C++6.0三种C语言的编译和运行环境。我们认为WinTC虽然基于windows环境,操作简单,但调试功能不强。我们采用Visual C++6.0集成开发环境,强调利用调试工具帮助编程者去思考程序,我们强调单步执行功能(step in、step out、step over)、设置断点(breakpoint)、添加变量监视框(Add Watch)的运用,这样可以对程序执行过程进行跟踪监视,可以帮助学生更好的理解程序中的分支结构、循环结构和函数的虚参实参调用等C语言的知识点,从而弥补课堂教学的距离感和枯燥感,使学生学的更有兴趣,更为主动,掌握的知识也更全面。
2.2.2 重视对警告信息的改正
学生通过课堂和书本的学习,编出来的C语言程序,在实际上机运行时可能会不断出现麻烦,特别在编译程序时计算机会检测出许多错误,这时的错误可大致分为语法错误和语义错误,我们认为学习C语言就是一个发现错误和改正错误的过程,强调学生自己的去发现和改正错误。Visual C++6.0集成开发环境会提示两种信息,一种信息为错误信息,另一种信息为警告信息。一般情况下只要将错误信息改正过来,程序就能通过运行给出结果,这样警告信息往往会被忽略。我们在实践教学中要求学生将警告信息与错误信息一样重视,在调试过程中遇到警告信息必须改正,因为警告信息的出现说明了学生对知识点理解的偏差,让学生通过改正警告信息来正确的理解理论知识,会给学生留下深刻印象,在进一步理解理论知识的同时培养学生严肃、认真的科学态度。
2.3 综合性“大作业”的引入
我们在实验教学的开始就引入软件工程的理念,强调学生们从一开始了解到养成良好的软件设计规范的重要性。我们在实验内容上引入面向对象的软件思想和软件工程的理念,将C语言课程和软件工程紧密的有机联系起来,要求学生按照软件工程的思想去分析设计实现一个具体的MIS系统。
具体说来,我们的实践教学分为以下几个环节:
第一阶段,学习C语言的各个理论知识点和熟悉VisualC++6.0的开发环境。
第二阶段,我们在第一段学习的基础上,引入综合性“大作业”。先由教师给出实验题目,提出具体要求,而后学生根据要求查阅相关的书籍资料,写出实验原理、实验方法步骤交给教师批阅;师生一起讨论,确定实验方案;然后在限定的时间内进行实验,并写出相关的系统的分析、设计、实现等实验报告,然后分组讨论,最后进行集体的总结交流,初步掌握C语言软件系统的设计方法和步骤,锻炼学生灵活运用C语言开发语言进行软件开发的初步能力。
大作业的具体内容如下:
Step 1:教师给学生讲解大作业的题目要求,要求学生在选好题目的基础上,认真研究题目要求,自行查阅有关资料,实行系统的需求分析,总体框架设计;
Step 2:完成C语言的设计,建立C语言;
Step 3:编写界面,要求完成各个功能单元的实现和调试;
Step 4:联编调试,要求把各个功能块联编起来进行调试;
Step 5:上机检查;
Step 6:实验报告软件文档。
第三阶段,继续完善实际系统的开发。本阶段主要让学生在注重基本功能的实现的基础上,对其所完成的软件进行正确性的测试和进行必要的包装设计。
在实验教学中,我们突出以项目训练为主的教学实践。我们使用项目驱动的教学方法,针对学习目标设计问题与任务,将所要学习的概念技巧蕴含在所要解决的问题之中,通过解决问题,从中发现知识点和实践技巧。我们通过实例讲解,系统开发与调试的基本方法的讲解,使得学生从实际中学习。
2.3 采用教学网站作为教学的辅助方法
目前,计算机和互联网已渗透到各个领域。我们可以充分利用互联网的优势,设计网络课件来提高学生的自学与复习的积极性,开辟新的教学与复习手段,使学生学习和巩固知识的渠道多样化,进而提高我们的教学质量。网络课件主要具有两方面的功能:留言板和网络题库。学生可在网络课件留言板中提出问题,教师可在短时间内在留言板中给予答复,实现老师与学生的相互留言,发表通知公告或进行解惑。特别是学生都会遇到的共性问题,教师一旦在留言板上留言,就不需再为每个人分别解答了。网络题库是检验学生每章或每节课阶段性成果的有力工具,它可使学生尽快知道自己哪一方面不足,还有待加强。通过网络课件这样的辅助教学方法,既提高了学生的学习兴趣,又提高了教师的工作效率和教学效果。
2.4 考核方式的改革
考核在教学过程中起着重要的作用。对教师来说,它是教师了解学生学习状况、因材施教的基本依据;对学生来说,它是学生自我评价的依据。
我们认为,在实验教学中加强基本实验方法基本技能和实验过程的规范训练要比掌握一些具体的实验操作更为重要。因此,我们从实验教学的特点和培养学生实践能力的角度出发,重视学生基本实验方法和实验过程的规范操作,突出实验能力的培养,弱化实验结果的评审。
3 结束语
通过我们不断改进教学方法,完善教学手段,学生学习的自觉性、主动性有了很大的提高。上机实验和机考的程序调试通过率也有明显提高。这些表明我们的探索得到大部分学生的认可,受到了老师的普遍欢迎,通过对学生的调查中,大多数学生认为是他们对于课本知识理解更加深入了,他们的主动思考问题的能力也得到了提高 。教师们也普遍反映《C语言程序设计》的教学质量和教学效果得到极大的提高。
参考文献:
[1] 王曙燕. C语言程序设计[M]. 北京:科学出版社,2005.
[2] 房鼎益,等. 计算机科学与技术专业面向21世纪教学改革与新教学计划[J]. 计算机科学,1999,6(2):153-155.
[3] 沈天晴,刘维富等. VC程序设计基础课程实践教学方法的探讨[J]. 南通大学学报(教学科学版),2005,21(3):88-91.
关键词: C语言程序设计; break语句; switch语句; 循环结构
中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2013)12-48-02
Analysis on “break” in course of C language programming
Li Xinran, Zhao Shanlin
(North University of China, College of Computer and Control Engineering, Taiyuan, Shanxi 030051, China)
Abstract: In the course of C language programming, the break statement has two functions. First, it is used in the switch statement, which can end Select Case. Second, it is applied to a loop structure, which can end this layer circulation. By analyzing the examples, the application conditions and functions of the break statement are revealed as well as things to note, and its application methods are clarified.
Key words: C language programming; break statement; switch statement; loop structure
0 引言
在C语言程序设计课程中,break语句的功能非常容易理解,在switch语句中可以利用break语句结束switch结构;在循环结构中可以利用break语句结束循环。但是,很多人并不清楚在什么条件下使用break语句,本文着重分析break语句的使用条件,以及break语句的常见用法。
1 break语句在switch语句中的应用
switch语句是多分支选择语句,一般形式[1]:
switch(表达式)
{
case 常量表达式1: 语句1; [break;]
case 常量表达式2: 语句2; [break;]
…
case 常量表达式n: 语句n; [break;]
default : 语句n+1; [break;]
}
switch语句执行过程是[2]:
⑴ 计算switch语句表达式的值;
⑵ 依次与1-n个常量做比较,当表达式的值与常量相等时,执行case后的语句;
⑶ 当执行break语句时,结束switch语句;
⑷ 如无break,则从匹配的case语句起,一直执行到break或switch语句末尾为止;
⑸ 如无匹配的case值时,则执行default相应语句。
switch语句说明:
⑴ switch后括号内的表达式可以是任意类型,会自动转化为整型;
⑵ 每个常量表达式的值必须互不相同;
⑶ 执行完一个case后边的语句后,转到下一个case继续执行,可以用break强制程序在执行完一个case后跳出switch结构。如果所有case中的常量表达式都不符合,则执行default后面的语句;
⑷ case后的多条语句不必用{}括起来。
由此可见,对于break语句的使用,当执行完某个case常量表达式后面的语句,想要结束switch语句,此时应该在相应语句的后面执行break语句。例如:
main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0: a++; break;
case 1: b++; break;
}
case 2: a++; b++; break;
case 3: a++; b++;
}
printf(“\na=%d,b=%d”,a,b);
}
/*运行结果为:a=2,b=1。*/
分析运行结果,由于case 1:语句中是switch语句的嵌套,而且嵌套的switch语句后面没有执行break语句。如果在内嵌的switch语句后面执行break语句,则运行结果为:a=1,b=0,此时执行了break语句,就从switch结构中结束了。
2 break语句在循环结构中的应用
在循环结构中使用break语句的形式是“break;”,break语句的功能是强行结束循环,转向执行循环语句的下一条语句[3]。break执行流程如图1所示。
[表达式] [表达式] [语句][语句] [break;][yes][no]
图1 break语句执行流程图
如图1所示,当循环中执行了break语句,循环将提前结束。那么在什么样的条件下,循环结构中需要使用break语句,对此我们通过一个例题,来分析使用break语句的条件。
例题:判断某一个一位数n是否在一个不高于四位的整数m中出现。判断n是否在m中出现,需要将n与m中的每一位数进行比较,分离m中的每一位数,可以借助于算数运算符的求余和除,如果n==m%10,说明n在m中出现了,此时需要提前结束循环,这时要使用break语句。如果n!=m%10,那么就需要不断求新的m,利用m=m/10求得新的m;重复n与m%10的比较过程。通过分析得知,循环结束有两种可能,一种是n在m中出现了提前结束循环;另一种是n在m中没出现,当m的值变为0时结束的循环。由于此时不能判断是什么原因结束的循环,所以我们必须借助于标示变量来区别这两种情况。先将标示变量flag的值置为1,如果n在m中出现,则标示标量flag的值置为0。如果n没在m中出现标示变量的值不变,这样结束循环后,可以通过标示变量的值来判断n在m中是否出现。
通过上述分析得到循环中使用break语句的条件:当存在着两个独立的条件都可以使循环结束时,提前结束循环的条件就是使用break语句的条件;另外一个结束循环的条件作为控制循环的变量。此种用法通常借助标示变量来区别结束循环的原因。使用break语句时候,还需注意break语句只能结束本层循环,不能影响外层循环。
判断某一个一位数n是否在一个不高于四位的整数m中出现的算法实现如下:
main()
{ int m,n,flag=1;
scanf("%d%d",&m,&n);
while(m!=0)
{ if(n==m%10)
{ flag=0;
break;
}
m=m/10;
}
if(flag) printf("no\n");
else printf("yes\n");
}
3 结束语
本文分析了C语言程序设计课程中break语句的使用方法。在switch语句中,可以结束多分支选择结构;在循环结构中,可以结束本层循环。同时分析出在两种结构中使用break语句的条件,并举例说明break语句的用法和需注意的要点。通过本文对break语句用法的分析,能让学习C语言程序设计课程的学生更准确地掌握break语句的用法,为学好结构化程序设计语言的选择结构和循环结构程序设计打好基础。
参考文献:
[1] 谭浩强.C程序设计[M].清华大学出版社,2001.
[2] 赵山林.C语言程序设计[M].人民邮电出版社,2012.
[3] 赵山林.C语言程序设计[M].高等教育出版社,2010.
【关键字】程序设计 实验教学 ACM
一、引言
近来年,随着信息技术在社会各个应用领域的渗透和普及,程序设计类课程已经发展为高校计算机教育的重点课程。理论教学与实验教学是程序设计类课程的重要组成部分,其中,实验教学是完整教学过程中的不可或缺的实践性教学环节。实验的目的不仅仅是为了验证所编程序的正确与否,也是为了加深对程序设计语言知识的充分理解,更重要的是培养学生的实际操作能力和积累丰富的编程经验,从而引导他们利用程序设计语言编程来解决实际问题。基于此,本文对如何更好的进行程序设计类课程的实验教学作一些探讨。
二、现状分析
目前,我校计算机学院开设了高级语言如C、C++等多门程序设计类课程,这些课程的共同目标就是让学生通过上机实验和课程设计来巩固课堂上讲解的语法规则和算法技巧,锻炼编程能力。但是现有的程序设计类课程实验教学存在着很多问题,导致整个教学效果得不到提高,与教学目标的要求不相符。本节将主要从三个方面对其存在的问题进行总结:
2.1 实验教学安排
我院程序设计类课程的上机实验课时是有限的,一般都是每周安排两个课时,或者最多四个课时,通常会在连续的几周内结束。由于一般程序的编写和调试比较费时间,要是学生不事先做好充分的准备,仅仅靠在两个课时内去完成一个完整的程序编写是不太可能的,对所学内容也没能充分理解,很难在课堂上培养学生的实际编程能力。
2.2 实验教学内容
我院专业实验中心的机房环境是一个内部的局域网,不能连接到互联网,教师都是通过课件投影或屏幕广播教学软件来完成主要的实验教学过程。实验内容基本卜^都是对课堂理论教学内容进行验证和实现,学生按照教材或课件来完成实验。整个的实验教学环节中,教师根据实际的情况来选择是否进行案例教学,而当前多数实验教学过程中的案例所覆盖的知识点范围不够理想,不能将新旧知识点都包含进来。案例陈旧,缺少更新,实用性和趣味性也不强,因此不能很好的激发学生的学习热情,不利于培养学生的独立思考和动手操作能力,未能达到教学目标的要求。
2.3 实验教学考核
实验课程主要是通过实验报告中的程序编写情况来考核的。由于时间有限,实验报告的批改都是教师在课后另找时间检查,教师往往只能通过纸质的实验报告来分析学生的程序,要求程序能正常通过,看到运行结果就可以了,而忽略了程序中的调试环节,而这些环节中通常都是学生未掌握的知识点。这种考核方式不利于教师对学生学习情况的掌握,也不利于培养学生的创新能力。
三、ACM学习模式的特点
现在,随着ACM国际大学生程序设计竞赛(简称ACM)在高校中的推广,越来越多的学生参与进来了。在迎接ACM竞赛的学习过程中,形成了一种具有ACM竞赛特点的学习模式,这种学习模式的特点如下:
l、ACM竞赛所涉及的知识面十分广泛,算法电极具复杂性。通常在平时的训练过程中为了能深刻而透彻的理解各个知识点,教师会引入大量的案例教学。运用典型案例可以将学生带人特定的问题进行案例分析,通过学生的独立思考或团队合作,进一步提高其解决具体问题的能力。
2、ACM竞赛是通过在线测评系统上实时提交程序代码,给出评判结果的竞赛形式。ACM测评系统能够实时的给出参赛队的排名情况和每道题的通过率以及通过人数,教师可根据题目的通过率来掌握学生对知识点的学习情况,也可以反思其教学方法和教学内容中存在的问题。
四、基于ACM模式的程序设计类课程实验教学的做法
将ACM学习模式应用到我院现有的程序设计类课程实验教学过程中,具体措施运用如下:
4.1 实验课程的开设
我院高级语言(C、C++)程序设计实验课程都是在大一这一学年开设的,大一第一学期是面向过程的C语言编程学习,大一第二学期是面向对象的C++语言编程学习。这样开课的结果就使得大多数学生连面向过程的编程都还没有完全搞清楚,就直接跳到了面向对象的编程,可以说整个大一学期都是处于混沌的编程状态。因为对程序设计语言的思想和语法还没完全掌握,所以很多学生不具备基本的编程能力,甚至对编程有恐惧感。为了解决这些问题,我们结合ACM的竞赛模式来调整开课计划,把原计划2个学期的高级语言程序设计实验课程的教学时间调整为5个学期,这样可以贯穿整个计算机专业课的学习过程,从而将程序设计语言和其他计算机专业课的学习更好的结合起来,让学生有时间去深刻地理解程序设计语言的思想和方法,不断地锻炼实践操作能力和积累编程经验。
4.2 实验内容的选取和实验课程的考核
对实验环境来说,要求将我院专业实验中心机房连接到我校的源程序在线测评(Onlinejudge,简称OJ)平台上。根据程序设计类课程的实验内容和具体要求,每次实验前,教师可以从我校或者其他高校的OJ平台上的ACM竞赛题库中挑选或改造2-3个相关题目作为实验内容挂到我校的OJ上。在实验课阶段,由学生独立完成或者自由组队来编写程序,调试程序,解决问题,编写好的程序提交给OJ来判断正确与否。通过每次实验在OJ上完成的做题数量,教师可以由此掌握到学生对知识点的学习情况,对欠缺的知识点再给与重点讲解。同时教师可以根据OJ上的排名很轻松的完成实验课程的考核。学生也可以通过每次实验的做题和排名情况,来检查自己的学习方法和学习内容,从而达到熟练掌握所学内容的实验教学目的。