论文部分内容阅读
摘要:针对“C++程序设计”这门课程的特点,本文介绍了一些教学方法和体会。通过五年的教学实践,证明这些方法收到了良好的教学效果。
关键词:C++语言;教学方法;面向对象;程序设计
作者简介:刘灵丽(1977-),女,湖南郴州人,湘南学院计算机系,讲师,工学硕士,主要研究方向:图像处理、模式识别;曹菊英(1975-),女,湖南郴州人,湘南学院物理与电子信息工程系,副教授,工学硕士,主要研究方向:信息安全和计算机网络。(湖南 郴州 423000)
基金项目:本文系湖南省自然科学基金(项目编号:07JJ6107)、湘南学院2009年院级教改课题青年项目(项目编号:09Q002)的研究成果。
随着面向对象技术的广泛推广,“C++程序设计”课程被越来越多地选为高校计算机及相关专业的基础课程。[1]但由于一些原因使教学效果并不理想。如何在有限的学时内使学生尽快地掌握C++,是每位任课教师都面对的难题。笔者在实际教学过程中,经过不断探索,积累了一定的教学方法与体会,希望能起到抛砖引玉的作用。
一、灵活运用多种教学方法,提高课堂教学质量
1.实例演示,激发学习兴趣
C++语言概念较多,语法比较复杂,如果只是就理论讲理论、照本宣科只能使学生厌倦疲劳,昏昏欲睡,学生不但记不住知识点,还会产生厌学情绪。因此,不妨在讲解本次课的内容之前,先演示一些实例,让学生先在感性上得到认识,[2]接着让学生带着问题去听讲,这样可以调动学生学习的积极性和主动性,活跃课堂气氛,激发学习兴趣。
比如在介绍嵌套的if-else分支语句时,如果只是单纯地讲解该语句的语法和执行过程,学生听起来就觉得比较枯燥,但是如果先向学生演示一个通过输入成绩来决定输出等级是“优秀”、“良好”、“及格”还是“不及格”的程序,学生们的好奇心和学习的欲望就会被调动起来。然后借助演示程序,第一步,给学生们分析该程序的功能,提出实现该功能所需要使用的语句;第二步,在程序中讲解新语句的使用方法和注意事项。采取这种方法会使学生很快了解嵌套的if-else分支语句的功能和使用方法,并有一定的成就感,从而对程序设计产生浓厚的兴趣。
根据需要,教师演示实例时,有时可以故意设置教学陷阱让学生的思想活跃起来,引导他们积极思考和探索,以达到教学目的。比如讲循环语句时,演示忘记修改循环变量的值,使出现死循环的现象。
2.循序渐进的启发式教学
C++知识系统性较强,新旧知识间环环相扣,联系紧密。教学过程中应注意通过复习旧知识来讲授新课程,分析它们之间的内部联系,比较它们的本质特点,发现它们之间的异同,对学生进行循序渐进的启发诱导,激发学生的学习兴趣,使学生易于接受新知识。
比如关于拷贝构造函数,主要的知识点包括:[3](1)什么是拷贝构造函数?它的功能是什么?(2)什么是缺省的拷贝构造函数,它的功能是什么?(3)拷贝构造函数在什么时候被调用?(4)什么是浅拷贝和深拷贝?它们的作用分别是什么?我们如何引出这些知识点并让学生一一理解呢?
首先通过例题复习“构造函数”的教学内容。接着修改例题,提出问题:如果要用一个已经存在的对象来初始化一个新对象,还是调用以前的构造函数吗?如果不是,它又调用了什么函数呢?引出拷贝构造函数这个新概念。接着通过例题讲解拷贝构造函数的定义和功能,并说明每个类中如果不显式定义拷贝构造函数,都会有一个缺省的拷贝构造函数。继续提问:拷贝构造函数是不是只在用已有对象初始化新对象时被调用,其它情况就用不着了呢?为了验证这个问题,提醒学生在拷贝构造函数中增加输出信息来判断何时被调用。接着增加一个重载运算符“+”的函数,完成两对象相加的运算,让学生通过分析输出结果,得出结论:当对象作为形参和返回值时也调用了拷贝构造函数。
讲完了前三个知识点,教师总结两点:1)例题中的拷贝构造函数都是实现对象数据成员之间的逐域拷贝;2)如果没有定义拷贝构造函数,缺省的拷贝构造函数仍然能够实现逐域拷贝。那么是不是就不需要显式定义拷贝构造函数呢?由此引出第四个知识点。
3.理论联系实际,用事例来解释抽象概念
C++中很多概念比较抽象,难以理解。教师在教学中应尽量使用一些形象、直观、学生熟悉并且最能反映概念本质的例子来解释看似深奥的概念,这样不仅可以让学生快速理解概念,还能活跃课堂气氛,使教学摆脱枯燥的概念讲解,获得良好的教学效果。
比如在讲友元关系是“不传递”时,可以举例,张三是李四的朋友,李四是王五的朋友,但张三不一定是王五的朋友。再比如由于众多的成员函数使C++的原代码通常比较庞大,学生认为自己面对的是一个庞然大物,通常不敢也不愿意下笔编写程序。教师可以借助庖丁解牛的故事,告诉学生成员函数是一个个相对独立的操作,每一个成员函数都是比较简单的,编程时可以先目无全牛,鼓励学生一个一个成员函数地来编。还比如在讲解数组时,告诉学生以前定义的单个、独立的变量是“散兵游勇”,势单力薄,无法或不方便解决复杂的问题,比如存储并计算一万名学生的平均成绩。而定义数组,一次得到的就是一个“兵团”,可以用来存放、处理许多相同类型的数据。“兵团”中的成员共用同样的名字,通过编号来对它们加以区分,这样通过循环语句可以方便地实现对各个成员的访问操作,使得本来需要几千行代码才能实现的功能,现在只需要几行代码即可实现。通过这种生动形象的事例,学生不仅掌握了数组的概念和使用方法,还能体会到数组巨大的威力,激发出浓厚的学习兴趣,提高学习语言的主观能动性。
二、 加强上机实践,重视学生的实际操作能力
“C++程序设计”课程,由于操作性很强,不能只讲理论,这好比学习滑冰,如果教练只是告诉我们每个动作怎么去做,但是自己从不实践,不亲自到冰上去试一试,是不可能学会滑冰的。因此,教学过程中,应该加强学生的上机实践,提高学生的实际操作能力。对于如何培养学生的动手实践能力,笔者的体会主要如下。
1.精心准备上机操作内容
对于上机实验的选题,提倡采用“小题目大任务”的方法。即每个实验的“小题目”看似是孤立的,但实际上是相互联系的,它们都是一个较大型较复杂程序的一个组成部分。比如,讲解了switch语句后,布置学生编写一个简单的菜单选择程序。讲解了循环语句后,布置学生编写一个输入密码进行身份验证的的程序,允许给用户三次机会。讲解数组后,布置学生编写一个对全班学生成绩进行处理的程序,如实现求总分、求平均分、排名、查找等功能。讲解了文件操作函数后,布置学生编写对文件进行读、写操作的函数。这一个个“小题目”似乎各自独立,但当学期结束时,如果要求学生把平时完成的一个个小程序改写成独立函数,并把这些函数通过组装便可得到一个通过菜单选择进行学生成绩管理的系统。这样一学期下来,学生会对C++这门语言产生一个整体概念,并有一定的成就感,增强对后续课程学习的信心。
2.加强培养学生程序调试能力
程序的出错原因有两类:一类是程序编译错误;一类是程序逻辑错误。对于第一类错误,教师告诉学生如何根据 output窗口提示的出错位置和出错原因进行改正。对于第二类错误,指导学生怎样利用Debug 窗口中提供的工具,实现重新开始、中止程序、中断执行、应用更改进入下一语句、跳入、跳过、跳出、执行到光标处、快速观察变量、寄存器、内存、堆栈和汇编等功能。
授之以鱼,不如授之以渔。帮学生调通一个程序,不如教会学生怎样调试程序。教师在教学初期应多做控制台应用程序设计全过程演示,加强学生程序调试能力的培养。
三、结束语
教无定法,教学有法,以上这些方法可以激发学生的学习兴趣,使学生参与到教学活动中来,变被动的听课为积极的思考、参与,有利于学生掌握程序设计的基本思想,培养分析问题、解决问题的能力。从学院连续五年学生的平时表现和成绩来看,实践证明“C++程序设计”课程教学收效良好。
参考文献:
[1]张锦祥.高级程序设计语言课程教学改革与实践[J].浙江教育学院学报,2007(7):71-76.
[2]贾振华,李瑛.《C++程序设计》课程教学方法探析[J].华北航天工业学院学报,2006(4):47-49.
[3]谭浩强.C++程序设计[M].北京:清华大学出版社,2004.
(责任编辑:苏宇嵬)
关键词:C++语言;教学方法;面向对象;程序设计
作者简介:刘灵丽(1977-),女,湖南郴州人,湘南学院计算机系,讲师,工学硕士,主要研究方向:图像处理、模式识别;曹菊英(1975-),女,湖南郴州人,湘南学院物理与电子信息工程系,副教授,工学硕士,主要研究方向:信息安全和计算机网络。(湖南 郴州 423000)
基金项目:本文系湖南省自然科学基金(项目编号:07JJ6107)、湘南学院2009年院级教改课题青年项目(项目编号:09Q002)的研究成果。
随着面向对象技术的广泛推广,“C++程序设计”课程被越来越多地选为高校计算机及相关专业的基础课程。[1]但由于一些原因使教学效果并不理想。如何在有限的学时内使学生尽快地掌握C++,是每位任课教师都面对的难题。笔者在实际教学过程中,经过不断探索,积累了一定的教学方法与体会,希望能起到抛砖引玉的作用。
一、灵活运用多种教学方法,提高课堂教学质量
1.实例演示,激发学习兴趣
C++语言概念较多,语法比较复杂,如果只是就理论讲理论、照本宣科只能使学生厌倦疲劳,昏昏欲睡,学生不但记不住知识点,还会产生厌学情绪。因此,不妨在讲解本次课的内容之前,先演示一些实例,让学生先在感性上得到认识,[2]接着让学生带着问题去听讲,这样可以调动学生学习的积极性和主动性,活跃课堂气氛,激发学习兴趣。
比如在介绍嵌套的if-else分支语句时,如果只是单纯地讲解该语句的语法和执行过程,学生听起来就觉得比较枯燥,但是如果先向学生演示一个通过输入成绩来决定输出等级是“优秀”、“良好”、“及格”还是“不及格”的程序,学生们的好奇心和学习的欲望就会被调动起来。然后借助演示程序,第一步,给学生们分析该程序的功能,提出实现该功能所需要使用的语句;第二步,在程序中讲解新语句的使用方法和注意事项。采取这种方法会使学生很快了解嵌套的if-else分支语句的功能和使用方法,并有一定的成就感,从而对程序设计产生浓厚的兴趣。
根据需要,教师演示实例时,有时可以故意设置教学陷阱让学生的思想活跃起来,引导他们积极思考和探索,以达到教学目的。比如讲循环语句时,演示忘记修改循环变量的值,使出现死循环的现象。
2.循序渐进的启发式教学
C++知识系统性较强,新旧知识间环环相扣,联系紧密。教学过程中应注意通过复习旧知识来讲授新课程,分析它们之间的内部联系,比较它们的本质特点,发现它们之间的异同,对学生进行循序渐进的启发诱导,激发学生的学习兴趣,使学生易于接受新知识。
比如关于拷贝构造函数,主要的知识点包括:[3](1)什么是拷贝构造函数?它的功能是什么?(2)什么是缺省的拷贝构造函数,它的功能是什么?(3)拷贝构造函数在什么时候被调用?(4)什么是浅拷贝和深拷贝?它们的作用分别是什么?我们如何引出这些知识点并让学生一一理解呢?
首先通过例题复习“构造函数”的教学内容。接着修改例题,提出问题:如果要用一个已经存在的对象来初始化一个新对象,还是调用以前的构造函数吗?如果不是,它又调用了什么函数呢?引出拷贝构造函数这个新概念。接着通过例题讲解拷贝构造函数的定义和功能,并说明每个类中如果不显式定义拷贝构造函数,都会有一个缺省的拷贝构造函数。继续提问:拷贝构造函数是不是只在用已有对象初始化新对象时被调用,其它情况就用不着了呢?为了验证这个问题,提醒学生在拷贝构造函数中增加输出信息来判断何时被调用。接着增加一个重载运算符“+”的函数,完成两对象相加的运算,让学生通过分析输出结果,得出结论:当对象作为形参和返回值时也调用了拷贝构造函数。
讲完了前三个知识点,教师总结两点:1)例题中的拷贝构造函数都是实现对象数据成员之间的逐域拷贝;2)如果没有定义拷贝构造函数,缺省的拷贝构造函数仍然能够实现逐域拷贝。那么是不是就不需要显式定义拷贝构造函数呢?由此引出第四个知识点。
3.理论联系实际,用事例来解释抽象概念
C++中很多概念比较抽象,难以理解。教师在教学中应尽量使用一些形象、直观、学生熟悉并且最能反映概念本质的例子来解释看似深奥的概念,这样不仅可以让学生快速理解概念,还能活跃课堂气氛,使教学摆脱枯燥的概念讲解,获得良好的教学效果。
比如在讲友元关系是“不传递”时,可以举例,张三是李四的朋友,李四是王五的朋友,但张三不一定是王五的朋友。再比如由于众多的成员函数使C++的原代码通常比较庞大,学生认为自己面对的是一个庞然大物,通常不敢也不愿意下笔编写程序。教师可以借助庖丁解牛的故事,告诉学生成员函数是一个个相对独立的操作,每一个成员函数都是比较简单的,编程时可以先目无全牛,鼓励学生一个一个成员函数地来编。还比如在讲解数组时,告诉学生以前定义的单个、独立的变量是“散兵游勇”,势单力薄,无法或不方便解决复杂的问题,比如存储并计算一万名学生的平均成绩。而定义数组,一次得到的就是一个“兵团”,可以用来存放、处理许多相同类型的数据。“兵团”中的成员共用同样的名字,通过编号来对它们加以区分,这样通过循环语句可以方便地实现对各个成员的访问操作,使得本来需要几千行代码才能实现的功能,现在只需要几行代码即可实现。通过这种生动形象的事例,学生不仅掌握了数组的概念和使用方法,还能体会到数组巨大的威力,激发出浓厚的学习兴趣,提高学习语言的主观能动性。
二、 加强上机实践,重视学生的实际操作能力
“C++程序设计”课程,由于操作性很强,不能只讲理论,这好比学习滑冰,如果教练只是告诉我们每个动作怎么去做,但是自己从不实践,不亲自到冰上去试一试,是不可能学会滑冰的。因此,教学过程中,应该加强学生的上机实践,提高学生的实际操作能力。对于如何培养学生的动手实践能力,笔者的体会主要如下。
1.精心准备上机操作内容
对于上机实验的选题,提倡采用“小题目大任务”的方法。即每个实验的“小题目”看似是孤立的,但实际上是相互联系的,它们都是一个较大型较复杂程序的一个组成部分。比如,讲解了switch语句后,布置学生编写一个简单的菜单选择程序。讲解了循环语句后,布置学生编写一个输入密码进行身份验证的的程序,允许给用户三次机会。讲解数组后,布置学生编写一个对全班学生成绩进行处理的程序,如实现求总分、求平均分、排名、查找等功能。讲解了文件操作函数后,布置学生编写对文件进行读、写操作的函数。这一个个“小题目”似乎各自独立,但当学期结束时,如果要求学生把平时完成的一个个小程序改写成独立函数,并把这些函数通过组装便可得到一个通过菜单选择进行学生成绩管理的系统。这样一学期下来,学生会对C++这门语言产生一个整体概念,并有一定的成就感,增强对后续课程学习的信心。
2.加强培养学生程序调试能力
程序的出错原因有两类:一类是程序编译错误;一类是程序逻辑错误。对于第一类错误,教师告诉学生如何根据 output窗口提示的出错位置和出错原因进行改正。对于第二类错误,指导学生怎样利用Debug 窗口中提供的工具,实现重新开始、中止程序、中断执行、应用更改进入下一语句、跳入、跳过、跳出、执行到光标处、快速观察变量、寄存器、内存、堆栈和汇编等功能。
授之以鱼,不如授之以渔。帮学生调通一个程序,不如教会学生怎样调试程序。教师在教学初期应多做控制台应用程序设计全过程演示,加强学生程序调试能力的培养。
三、结束语
教无定法,教学有法,以上这些方法可以激发学生的学习兴趣,使学生参与到教学活动中来,变被动的听课为积极的思考、参与,有利于学生掌握程序设计的基本思想,培养分析问题、解决问题的能力。从学院连续五年学生的平时表现和成绩来看,实践证明“C++程序设计”课程教学收效良好。
参考文献:
[1]张锦祥.高级程序设计语言课程教学改革与实践[J].浙江教育学院学报,2007(7):71-76.
[2]贾振华,李瑛.《C++程序设计》课程教学方法探析[J].华北航天工业学院学报,2006(4):47-49.
[3]谭浩强.C++程序设计[M].北京:清华大学出版社,2004.
(责任编辑:苏宇嵬)