C++程序

2024-06-04

C++程序(精选十篇)

C++程序 篇1

同C程序一样, 每个C++程序都包含一个或多个函数, 而且必须有一个函数命名为main, 并且每个函数都由具有一定功能的语句序列组成。操作系统将main作为程序入口, 调用main函数执行程序;main函数执行其语句序列, 并返回一个值给操作系统。在大多数系统中, main函数的返回值用于说明程序的退出状态。如果返回0, 则代表main函数成功执行完毕, 程序正常退出, 否则代表程序异常退出。

然而在编写C++程序入口函数main的时候, 很多程序员, 特别是一些具有C基础的C++程序员时经常会写出如下格式的main函数:

上述代码在VC++中是可以正确编译、链接、执行的。编译信息如下所示:

1.1>------已启动生成:项目:MainCpp, 配置:Debug Win32------

2.1>main.cpp

3.1>MainCpp.vcxproj->G:MainCppDebugMainCpp.exe

==========生成:成功1个, 失败0个, 最新0个, 跳过0个==========

但是当你将代码放在Linux环境下, 采用GCC编译器进行编译时, 你会吃惊地发现编译器抛出了如下错误信息:

1.[develop@localhost~]g++main.cpp

main.cpp:2:错误:′::main′必须返回′int′

为什么同样的代码会出现两种不同的结果呢?这还是跨平台的C/C++语言吗?不要对C/C++的跨平台性产生质疑, 之所以会这样, 在很大程度上要归咎于市面上一些书的“误导”, 以及微软对VC++编译器main返回值问题的纵容。在C和C++中, 不接收任何参数也不返回任何信息的函数原型为“void f (void) ;”, 所以很多人认为, 不需要程序返回值时可以把main函数定义成void main (void) , 然而这种想法是非常错误的。有一点必须明确:C/C++标准从来没有定义过void main () 这样的代码形式。C++之父Bjarne Stroustrup在他的主页FAQ中明确地写着这样一句话:“在C++中绝对没有出现过void main () {/*...*/}这样的函数定义, 在C语言中也是。”

main函数的返回值应该定义为int类型, 在C和C++标准中都是这样规定的。在C99标准中规定, 只有以下两种定义方式是正确的:

1.int main (void)

2.int main (int argc, char*argv[])

在C++03中也给出了如下两种main函数的定义方式:

1.int main ( )

2.int main (int argc, char*argv[])

虽然C和C++标准并不支持void main () , 但在部分编译器中void main () 依旧是可以通过编译并执行的, 比如微软的VC++。由于微软产品的市场占有率与影响力很大, 因此在某种程度上加剧了这种不良习惯的蔓延。不过, 并非所有的编译器都支持void main () , gcc就站在了VC++的对立面, 它是这一不良习气的坚定抵制者, 它会在编译时就明确地给出一个错误。

如果你坚持在某些编译器中使用void main () 这种非标准形式的代码, 那么当你把程序从一个编译器移植到另一个编译器时, 你就要对可能出现的错误负责。除了有void main () 这样的不规范格式外, 在C语言程序中, 尤其是一些老版本的C代码中, 你还会经常看到main () 这样的代码形式。

一些老的C标准 (诸如C90) 是支持main () 这样的形式的。之所以支持, 是因为在第一版的C语言中只有int一种数据类型, 并不存在char、long、float、double等这些内置数据类型。既然只有int一种类型, 也就不必显式地为main函数标明返回类型了。在Brian W.Kernighan和Dennis M.Ritchie的经典巨著The C Programming Language, Second Edition中用的就是main () 。后来, 在C语言的改进版中数据类型得到了扩充, 为了能兼容以前的代码, 标准委员会就做出了如下规定:不明确标明返回值的, 默认返回值为int。在C99标准中, 则要求编译器对于main () 这种用法至少要抛出一个警告。

main函数返回值的作用, 可以采用下面的方法加以验证。

首先, 编写main.cpp文件, 文件内容如下所示:

在Linux环境下, 采用命令:g++main.cpp

生成可执行文件a.out。然后, 执行命令:./a.out&&ehco“success”

结果输出success。

修改上述程序:

做同样测试, 无输出。

命令A&&B中的&&类似于C++中的并操作 (&&) , 如果A命令正确执行, 接着就会执行命令B;如果A出现异常, 则B不执行。通过以上分析可知, 当main () 返回0时, a.out正确执行并返回;但是如果返回-1, 程序就不能正常返回了。

最后, 还要说明C++标准中一个“好坏难定”的规定:在main函数中, return语句的作用在于离开main函数 (析构掉所有具有动态生存时间的对象) , 并将其返回值作为参数调用exit函数。如果函数执行到结尾而没有遇到return语句, 则其效果等同于执行了return 0。

也就是说, 如果函数执行到main结束处时没有遇到return语句, 编译器就会隐式地为你加上return 0;, 效果与返回0相同。之所以说这条规定“好坏难定”, 一方面是因为它让你省去了多敲几个字的麻烦, 另一方面是因为这种便捷会让某些程序员忽视编译器代替他做的工作, 而在思维中形成一种错误的认识:此函数可以无返回。

在应用这一规则时, 需要注意以下两点:

(1) main函数的返回类型是int, 不是void或其他类型。

(2) 该规则仅仅对main函数适用。

c++程序实习报告 篇2

第二天上机的时候也很快完成了第一步,觉得还行,慢慢来五天完全可以完成。后来也就没怎么好好思考,没想到第二天遇到麻烦了,编不出第二步了。第三天下午也没调试好,第一步输入的数据在第二步统计的时候怎么也数不出来,我从头至尾研究了多次,没发现一点问题,请舍友帮我检查也说没错,到了傍晚还是看不出来。哎!又找一个人给我看了看,竟然错得那么幼稚,类外定义了全局对象,在数据输入put()函数里又重新定义了对象,这样在put()输入的数据无法用到其他函数中,自然统计的时候都是默认值了。

就这么一个小小的错误整得我一天一晚上寝食难安。

编程序时深深感受到要不得半点马虎,有时少一个“}”或“<”都会导致程序语法错误;由于编程序经常要变换输入法,很容易输进中文字符,这也会导致语法错误;调用类里重名函数时要注明属于哪个类的。

第三天的时候第二步基本都编出来了,傍晚那时我没检查出错误来的时候,实在是把我急坏了,借了台电脑,在那安静专心的研究程序,舍友帮我检查出错误来之后,编程序有了感觉,那时已经22:00多了,竟然没有一丝睡意。

后来舍友们陆续睡觉了,可我就是不愿睡。可能是出于自尊心需要,别人都编出来了,自己编不出来,让我无法接受;也可能是第二步出来了急于尽快搞定。从19:00到凌晨4:00一直在那儿编程序了,一次次地听到铃声响竟然没有上床睡觉的冲动,满脑袋只有一个想法:认真编程序,争取晚上搞定。后来差不多了,只有备份不怎么完善,当时电脑已经用了好长时间了,实在不忍心一直用人家的电脑,只好关机睡觉了。

这几天可以说是两耳不闻窗外事,一心只顾编程序了,电话都懒得打,只想尽快把程序搞定,晚上没有电脑用,我们三个女生就去网吧,只是那儿没有vusual-c++,只好作罢。

虽然我们一直在编程序,觉得挺累的,其实还有比我们更累的——我们的老师。我们是每天只有半天的实习时间,可是老师却整天在机房里,看得出来,老师连坐下休息的时间都没有,刚要喝点水,立马就被一个同学叫去了,实习完那天下午看见老师都不想走路了。太累了,一天站7小时,还一直给别人检查程序,太忙了。想想老师这么认真,我们还有什么理由不认真呢?

只有五天的实习,却让我受益匪浅:这不仅是一次对我们的c++掌握和运用的熟练程度的检查,更是一次磨练我们耐性、培养认真态度的机会。这次实习让我深刻体会到“细节决定成败,态度决定一切”;更让我 从 老师身上学到了很多在以后工作中需要的优秀品质。相信这会在我今后的学习和以后的工作很有帮助。

通过完成本次面向对象程序设计的任务,使我熟练和掌握了上学期所学的有关visual c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。

第一天上课时候听老师讲,第一反应是这可怎么做了。当时有些迷茫。但是事在人为,下午回去之后在宿舍苦心研究,终于在整体上有了一定的把握。我们可以先定义一个基类,再派生三个子类,然后在类外定义函数。有人数规定,我们就定义相应长度的对象数组,最后在实现程序功能时,用函数调用就行。

于是当晚很快就完成了第二天的预习报告,上机调试时也没什么大问题,就这样第二天顺利通过。

虽说接下来的统计没那么容易,但就顺着数据顺利输入的喜悦心情,我还是较好的完成了这个任务。在类外定义一个函数用来输出雇员的基本情况,表头,表尾直接在统计函数中输出,也就是在统计函数中调用函数。打印与统计有异曲同工之妙,所以在统计做出之后,打印自然而然的也就很快完成了。

接下来的数据备份中,遇到了一个小问题,一开始以为也是函数中调用打印函数中用的那函数。其实不然,如若那样,又变成了打印。那我们就直接输出,但详细资料是受保护的,不能直接输出,那还得调用函数。于是在每个类中的公共成员中定义了直接返回的函数,接下来顺利完成了备份。调用头文件

里的exit(int)函数,可以用if()语句进行判断是否确定退出。程序顺利完成。

面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。

此次,应用程序的设计和创建,经历了平时在课堂中和考试中,决不会有的重重难题和问题。而这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。

C++程序 篇3

【关键词】C++程序设计 教学改革 能力培养

1 引言

目前高校的非计算机理工科专业基本上都开设了计算机程序设计这门公共基础课程,各种专业院系根据本身的特点和需要该门课程所讲授的程序设计语言也有所不同,但由于其功能的强大和运用的广泛性,绝大多数专业还是选择了C++程序设计语言作为该课程所讲授的内容,因此搞好C++程序设计语言课程的教学改革对提高本课程的教学质量具有十分重要的现实意义。

2 C++程序设计课程教学中存在的问题

笔者从近些年的教学实践及教学效果来看,感到C++程序设计课程教学主要存在以下几个方面的问题:

2.1教学内容繁多而教学课时有限

C++程序设计课程教学内容从知识体系上应该使学生全面了解并掌握面向的对象的控制台编程、界面模式的API编程、基于微软的MFC的编程三个方面的知识,否则学生的编程能力和水平难以达到满足现代工程实践应用软件开发的基本要求。由于目前高校教学改革普遍精减本课程的教学课时约为48个学时(其中16学时为实验,32学时为理论教学),另外再加两个星期的课程综合实践。熟悉C++程序设计课程教学的人都知道:如此繁多的教学内容如何保证在这有限的学时内圆满地完成教学任务的确是一个令人棘手的问题。

2.2部分学生对本课程学习思想上缺乏应有的重视

由于部分学生认为本课程不是非计算机专业学生核心专业基础课程,不了解工程应用软件开发的必要性,产生了学好本课程与否不重要的错误想法。一旦有这种错误思想的产生,再加上本课程本来内容就难学,随着教学过程的深入,学生会遇到一些抽象的概念和理论难以及时地理解和消化,从而影响到后续内容的学习,而且随着这些未理解消化的问题的越积越多,不可避免地会影响学习效果。

2.3 部分学生编程实践能力不强

目前大部分C++程序的设计开发环境都采用VC++的集成开发环境,该环境集成了C++程序的编辑、编译、调试等各个环节,功能十分丰富。部分同学由于上机编程练习的机会比较少,在那有限的实验课时里,只能照搬书中的实例做些基础与验证型实验,难以有效地运用VC++集成开发环境完成一些设计与开发型实验。这主要是由于他们自主编程的实践能力不强,还需要加大力气加强培养。

上述问题的形成原因是多方面的,要想解决这些问题有必要在教学理念、教学方法及手段、教学内容、实验教学及课程考核方式等方面对现有的教学方案进行改革。

3 教学改革的措施

3.1明确教学目标,变革课堂教学理念、模式和方法

高校C++程序设计课程的教学目标应定位于培养基础知识扎实,应用程序设计编程能力强,在应用程序设计方面具有一定创新精神的高素质人才为目标。要实现这一目标,必须突破传统的以培养“知识型”人才为目标的观念和模式,采取“主导—主体”双主式的教学模式,即强化以学生为主体,以教师为主导的教学理念,不要片面强调教师或学生单方面的作用,这样既有利于发挥教师的主导作用,又能充分发挥学生的认知主体作用,从而达到培养“应用型”人才的目标。

根据构建主义的学习理论我们可以知道:学生(学习的主体) 是在与客观环境(所学内容)的交互过程中构建自己的知识体系结构的。目前高校C++程序设计课程教学的客观现实条件就是教学课时少,教学内容繁多,如果片面强调教师讲授的作用,教学内容面面俱到的话,一是时间上做不到,二是教学内容重点不突出,学生会从思想上产生依赖性,认为老师上课反正都会讲解,从而不主动去自学和思考,放弃了自主与所学内容不断交互的机会,这样教学效果未必会好。基于上述原因,在教学方法上,我们强化多元化方法教学,主要采用多媒体教学方式和互动式教学方式与传统教学方式相融合,精讲多练。多媒体教学方式能够在有限的时间里丰富教学内容,并将有些难以理解的内容配以动画,使学生便于理解内容的同时,激发出一定的学习兴趣;这样既突破了教学中的重点和难点,又能让学生对所学的内容留下比较深刻的印象。互动式教学方式要求教师从主讲者转变为学生学习活动的设计者和指导者,教师把以教为主转变为学生以学为主。 通过给学生布置课后自学内容,在讲解过程中为学生设置问题,检查自学效果,引导学生与教师课堂讲授时面对面的交流,启发学生思考,然后让学生及时理解与消化所学内容,最后教师对自学内容进行归纳总结,进一步强化学生的学习效果。另外在课堂上教师还可以通过现场编程,使学生能够参与到程序的编辑和调试过程中,能够跟随教师共同解决问题,获得正确的结果。这种教学方式增强了学生的参与意识和兴趣,同时也能顺便让学生学会利用VC++集成开发环境进行程序的编辑、编译与调试过程,使学生由被动学习转变为主动学习。

3.2优化教学内容和教学课时的配置

优化教学内容的首要环节就是要精选一套优秀的教材。笔者认为作为优秀教材应该要内容完整,组织合理,简明扼要,实例经典,实验编程配置的练习题既要能验证学生所学的知识内容,又要能使学生举一反三,进行一些应用开发方面的训练。在充分利用好现有精选教材的同时,可以组织编写更为适合自己专业特色的新教材。

此外由于C++知识体系复杂,内容繁多,但教学时数相当有限,所以为了更好地提高教学质量,教师在理论讲授时必须要做到教学内容系统连贯,一般内容点到即可(如C++的基本数据类型、程序的三种基本结构等等),留给学生自学练习,重点难点内容要多讲(如指针概念的应用、虚函数与多态性、重载与模板的应用等等),而且还要注意精讲多练,这样一方面可以有效地解决教学课时少内容多的矛盾,另一方面也可以充分调动学生自学的积极性,培养学生的自学能力。endprint

针对教学计划所规定的教学内容科学合理地分配教学课时也是至关重要的问题,为了有效地提高教学质量,我们把教学内容传授分为两个阶段:第一阶段就是在前面48个基本学时内把C++的基本内容全部传授完毕;第二阶段就是在另外两周的课程综合实践的时间里,利用学习时间相对集中的优势,结合以前学过的内容,简练地介绍一下界面模式的API编程,系统而精练地重点讲授基于微软的MFC编程。

3.3改革实践教学

C++程序设计是一门实践性很强的课程,实践训练环节相当重要,实践能力的培养也是该课程的核心任务,而且学生也只有通过大量的上机实验才能真正理解和消化教材上的理论知识。实践教学包括课程实验和课程综合实践两个环节。

课程实验主要是检查学生对基本知识点的理解和掌握情况,侧重单元知识点的强化培训。采取的主要措施有: 根据课堂讲授的实例,恰当设置实验,注意使学生学习编程逐步从模仿转向设计,要求学生事先编好程序填写实验报告再进实验室,提高实验课的效率,学生在自己成功地编制、调试、运行实验程序后,及时将经过整理后的实验结果通过实验室的局域网提交至服务器,同时要求学生自己也要及时用移动硬盘把自己的实验程序保留下来,以便将来进一步的复习参考。要求学生这样做的目的,一方面可以督促学生按时按量地完成要求的实验作业,另一方面让学生保留下自己的程序,能让学生有种成就感,从而激发学生的学习兴趣。实验过程中指导教师要注意两个方面的问题,第一就是从一开始就注意培养学生编程的规范化及标准化素质,因为一个高质量的程序需要规范的命名、科学的编码风格及必要的注释;第二就是要使学生能学会及时发现问题及时地利用调试工具、手段等解决程序中出现的问题。实验课后教师必须做些归纳总结,对于一些共性的问题,教师必需提出来进行重点总结讲解,以利于学生全面掌握。

课程综合实践这个环节有两周时间集中进行学习,在这两周的时间里,除了要对MFC编程理论知识进行重点介绍,强化训练外,更为重要的是要对已学过的程序设计内容进行综合性的运用来编制一个功能比较复杂的应用程序。为了更好地提高综合实践的教学质量,我们强调学生要按软件工程的思想对一个应用程序要首先进行需求分析,明确应用程序要实现的各项功能;接下来采用面向对象的程序设计思想对应用程序进行总体设计和详细设计,即设计出应用程序中所需要的各种类及类与类之间的关系,并完成每个类的属性和方法设计;然后再进行编码调试运行开发。在这个环节的代码编写过程中我们要求学生充分利用MFC强化训练中学习的内容进行可视化编程,即学即用,发现问题指导教师要教会学生充分利用VC++集成开发环境的调试工具进行调试,及时地解决程序设计中出现的各种问题,这样既可以充分调动学生学习MFC编程的学习兴趣,又能充分保证学生综合编程练习的顺利完成。

3.4改革考核环节

怎么考核对学生的学习有着十分重要的导向作用。以往的考核中以笔试为主,忽略了对学生编程能力的考核,这不能全面反映出学生学习的真实水平和教师的教学效果。为了更好地运用考核指挥捧作用,我们对考核环节作了如下改革:

1)改革考试方式,注重提高学生动手能力。为了改革C++程序设计课程的考试方式,我们制定了详细的课程考核计划,注重加强教学过程考核,且考核形式也注重多样化、强化教学过程中学生能力培养。

2) 改革考试内容,注重提高学生综合能力。在检验学生基本知识掌握情况的同时,注重学生思维能力、实践能力、创新精神的培养和综合运用知识分析问题、解决问题的能力考核。

3) 赛考结合,注重提高学生创新能力。课程考试与课程竞赛相结合,制订将比赛成绩与考试成绩挂钩的相关管理办法,激励学生奋发学习,提高学生创新能力。

为了搞好该课程的考试改革,任课教师须将考核方式、要求等提前告知学生,并使学生充分了解成绩评定方案(如课堂表现、回答问题、各种测验、作业、竞赛等实施计划以及在课程最终成绩中所占比例等)。实施过程中,任课教师须认真做好过程成绩记载,对每一学生的每一项评定结果及时记录在案,在课程结束后、期末考试前向学生公布。同时将过程考核标准、结论等资料进行归档。通过上述考核环节的改革,基本能有效地发挥考核指挥棒的作用,激发学生对本课程学习的主观能动性,引导学生将更多的精力投入到实际编程能力的培养.从而达到这门课程的教学目的。

4 结束语

高校C++程序设计课程改革的思路、方法多种多样,但不管怎么变化,其宗旨都是为了不断提高教学质量,培养学生应用C++程序设计语言编写各种实际应用程序的编程能力。在这个教学过程中,教师和学生都要充分发挥“主导—主体”作用,即教师和学生都必须充分发挥各自的主观能动性才能收到良好的教学效果,近些年来,笔者在教师如何教学,学生如何才能学好C++程序设计课程两个方面进行了不断的探索和努力,积累了一些经验,通过后续跨学年的追踪观察发现:将这些教学改革中所取得的成功经验运用于该课程教学过程中后,学生在后续的学年中应用C++程序设计语言解决其他学科中的应用编程问题能力有显著的提高。

【参考文献】

[1]齐新军,宗明魁. C + + 程序设计课程教改与学生实践能力培养[J]. 中国新技术新产品,2009(19).

[2]吕智林,龚文英. VC++程序设计课程教学改革的探索[J]. 广西大学学报(自然科学版),2004(9).

C++程序设计教学探讨 篇4

1 合理安排教学内容

C++是多重范型编程语言,同时支持过程形式、面向对象形式、泛型形式、元编程形式的语言。可以将其看作由C、面向对象C++、模板C++、标准模板库(STL)四种次语言构成。结合课程教学要求,围绕上述内容如何安排教学至关重要。

以介绍如何使用C++进行面向对象程序设计为主线,突出封装性、继承性和多态性等面向对象程序设计的特点,通过概念讲解、源代码分析和编程实践等方式让学生逐步掌握面向对象程序设计的方法。学生具备一定的运用C++进行面向对象程序设计的能力后,再引入模板的概念并适当介绍诸如泛型编程、STL等内容,拓宽学生的视野。采用上述组织方式,既兼顾了面向过程程序设计的基本知识,同时突出了面向对象程序设计的核心地位,并且使学生对使用C++进行软件开发的方式有了较为全面的了解,为其今后深入学习C++相关内容指明方向。

2 强调算法、淡化语法

注重介绍有关算法概念,即突出程序设计而不是语法。在掌握了基本而常用的语法之后,可以根据学习进度和程序设计的需要学习相关语法。学习新的程序设计语言的最佳途径是编写程序,不是知道的语法越多,程序编得越好,而是自己动手编程越多,编程水平才越有可能得到提高。突出算法,进而带动基本语法的学习,可以更加合理地安排学习时间。需要注意的是,这里强调的算法主要是指常用算法,在熟练掌握面向对象程序设计基本概念和方法之前,不宜过多地采用以数据结构课程中复杂算法的C++实现作为例子的方式来介绍面向对象程序设计的有关知识点,那样会增加学生的学习难度,适得其反。

3 明确教学重点

将面向对象C++的关键技术作为重点实施教学,可以达到事半功倍的效果。

封装、继承和派生。提倡完善的类对象封装,不仅封装数据和对数据的操作,而且封装资源(尤其是内存)的动态分配与释放,形成一个完备的子系统。介绍继承和派生的概念,派生类的定义方式,派生类的构成,类的继承方式与派生类成员的访问权限,单继承下的构造函数与析构函数,什么是多重继承,多重继承下的二义性问题,虚基类等内容。

多态性。多态性包括编译时的多态和运行时的多态。编译时的多态是由函数的重载和运算符的重载实现的,运行时的多态则是通过继承关系和虚函数实现的。两类多态性的目的都是要建立通用的程序。

模板。模板的作用在于定制函数和类。只要将数据类型传递给函数模板和类模板,就可生成特定数据类型下的函数和类,实现了数据类型不同、程序逻辑完全相同的代码的重用,减轻了编程的工作量,并可使大量常用的功能代码完整而简洁地纳入到标准库中,极大的提高了C++编程效率。

避免宽泛介绍C++的语法和框架,而是突出实用技术,包括完善的封装、派生、多态和模板,在构造函数中动态分配资源、在析构函数中释放资源和异常处理,这些是面向对象的C++程序设计的精髓。

4 灵活运用教学手段

在教学过程中,对不同的教学内容运用不同的教学手段,力争取得最佳的教学效果。对知识性强的内容采用多媒体,例如以Power Point幻灯片展现知识点,以Flash动画演示程序的动态执行过程,使学生对所学知识的理性认识和感性认识有机的结合起来,有助于学生更好地理解和掌握所学内容。对某些简单的章节可以在课上提出要点,然后安排学生课外自学。对需要掌握的重点和难点,如指针、继承、多态等概念以及一些涉及复杂逻辑推理的算法和例题等,可以用板书的形式进行详细的讲解。通过对教学手段的灵活运用达到合理分配学时,难易兼顾的效果。

5 注意知识点的分类比较、归纳总结

C++程序设计课程中很多内容是具有可比性的,在教学过程中要把握这方面的特点,充分挖掘出内容相关的知识点进行分类对比。例如关于重载的学习,重载包括了函数重载和运算符重载。学生对于运算符重载的学习往往存在畏难情绪,在教学过程中如果能够对这两种重载的异同点进行详细的比较,让学生首先认识到运算符重载仅仅是一种特殊的函数重载形式,进而研究其特殊性,编写出合理地函数代码,学习效果必然会有所改善。

C++程序设计课程中涵盖了许多面向对象的要素,这些要素具有较强的抽象性,在向学生介绍这些知识点的同时,要注意及时归纳总结,指出每种要素适用的场合,避免滥用、错用。例如学习了类的继承后,学生在进行程序设计时,往往会频繁地使用这一机制,甚至于在某些原本应该使用分层机制的场合也使用继承,为了避免这类情况发生,需要在教学过程中对这些容易误用的知识点及时进行强调和总结。

6 强化上机实验环节

C++程序设计是一门实践性很强的课程,上机也是整个教学的重要组成部分,人们学习程序设计语言的最终目的也正是为了编写程序和开发软件,因此必须抓好实验教学环节。

在实验教学大纲的指导下,根据所学知识点选择有代表性的、综合的问题让学生进行编程、调试。以往上机实验过程中,学生常常仅限于将理论教材和实验教材中的例题原样输入计算机,运行并验证结果。这一过程可以在一定程度上加深对所学知识点的理解,但没有丝毫编程创新可言。可以布置与所学知识点相关的上机题,如编写一个C++的类,在其中添加一些成员函数,然后提供给学生完整的类和需添加的成员函数的声明,以及检测它的主函数代码,同时给出需添加的成员函数的思路或提示,仅让学生编写需添加的成员函数,在每次实验结束时,进行验收。这样既降低了难度又突出了重点,便于学生调通程序,同时提高了学生的信心和学习的效率。

注重培养学生调试程序的能力。对于简单问题,直接编写出正确的代码是完全可能的,但是大多数问题的解决方案往往都是比较复杂的,其实现代码需要不断修改完善,此时调试程序的能力是至关重要的。上机辅导过程中,主要指导学生怎样跟踪程序的运行,怎样设置被监视的变量,怎样设置断点,怎样单步执行,怎样使用Debug工具。授人以鱼不如授人以渔,帮学生调通一个程序,不如教会学生怎样去调试。应注重引导学生自己去调试具体代码,通过大量实践逐步提高其调试程序的能力。

7 结束语

C++程序设计课程的教学涉及到诸多方面的因素,这就要求我们在教学中针对具体情况及时加以调整,激发学生的学习兴趣,以达到较好的教学效果。

参考文献

[1]吴乃陵,况迎辉.C++程序设计[M].2版.北京:高等教育出版社,2006.

C++复习题 程序填空 篇5

程序填空(10分)

1.使执行结果为100 #include class Test {

public:

Test(int aa){(○1)}

int Getx(){

(○2)

} private:int x;};

void main(){

Test xx(100);

cout<

答案:○1 X=aa ○return X 2.下面程序是应用C++多态性,计算矩形面积。在横线上填写适当语句使程序正确进行并得到给定程序结果.运行结果: 长:10 宽:20 矩形面积:200 半径:3 圆面积:28.26 # include classShape {public:

virtualvoidshow_area()=0;};class Rectangle :public Shape{ pulic:

Rectangle(double ll,double ww){L=ll;W=ww;}

voidshow_area()(○3)

private: float L,W;};

class Circle:public Shape{ Public:

Circle(double rr){○}

void show_area()

cout<<”半径:”<

积:”<<3.14*R*R<

doubleR;};voidmain(){Shape *p;Rectangle

○;CircleC(3);

P&r;

p->show_area();P=&c;

p->show_area();} }

答案:

C++程序 篇6

【关键词】C++教学方法;案例引入;任务驱动;项目开发;课外延伸

计算机专业是我国高等教育最为普及的专业之一,在三本院校中也广泛开设,而C++面向对象程序设计课程在三本院校的计算机专业中属于基础必修课程。该课程的主要任务是引导学生从面向过程的程序设计思维向面向对象的程序设计思维进行转变,培养学生利用面向对象的方法分析问题和解决实际问题的能力,并为以后进一步学习和应用高级语言程序设计打下良好基础,因此,学好该课程对于三本院校计算机专业培养优秀的高水平人才起着举足轻重的作用。

一、三本院校C++课程教学的背景

三本院校计算机专业传统的C++面向对象程序设计课程在教学过程中存在着严重的问题:

1.沿袭一本二本院校的教学方法,教学内容面面俱到,课堂教学就是罗列知识点,偏重基础语法知识的学习。2.采纳高职高专计算机专业的机械式教学方法,轻视语法,套用现有的程序案例,反复上机练习,直到熟练为止,以技术熟练为宗旨不求深入理解。

这两种“拿来主义”的教学方法,在三本院校中广为流行,但是这种不结合三本院校学生实际状况的教学方法,使三本院校在计算机专业培养人才方面存在着严重的劣势。对于三本院校计算机专业的学生,要想学生很好地学习和掌握C++面向对象的程序设计方法,需要根据他们的实际状况制定一个科学合理地教学思路。

二、C++面向对象程序设计教学方法的改进

1.课堂教学,以“案例引入、任务驱动”的方式进行教学。“案例引入、任务驱动”的教学方式主要应用在理论教学中,通过设计实际的案例要与课程相关知识进行对应;案例设计好之后,使用任务驱动的方式,发动学生运用课程内容,一起完成案例的每个功能。

案例引入主要在于案例的设计,不能过于简单或复杂。首先,学生在学习C语言的过程中已经接触过很多简单的解决数学问题的案例(数字排序等),而C++面向对象程序设计中主要是解决现实应用问题的,数学案例不太适合。其次,对于三本院校计算机专业的学生来说数学案例过于枯燥无味,很难引起学生兴趣。而且,复杂案例在教学过程中教师不容易分解知识点。那么如何设计适中的案例呢?以实际应用为目标去设计案例是一个很好的方法。比如:销售管理系统、信用卡管理系统等。这些系统基本功能并不多,在日常生活中经常会应用,学生很容易产生兴趣。当然,教师也比较容易分解案例,与C++课程中的知识相对应。

引起了学生兴趣之后,教师要以“任务驱动”的方式对学生进行相关知识与技能的学习与训练。以信用卡系统应用在课堂教学中为例:首先,设计信用卡用户类的信息,这个任务中,驱动学生掌握课程中的类与对象方面的知识;其次,进行存款、取款、查询等功能的实现,在这个任务中,驱动学生掌握对象函数方面的知识;然后,设计贵宾信用卡等,在这个任务中,驱动学生学会继承与派生方面的知识等。每个小任务将知识点融入其中,学生在学习知识的时候就乐在其中,自然提高了理论课堂学习效果。

2.实践教学,以“项目开发、课外延伸”的方式进行教学。“项目开发、课外延伸”的教学方式主要应用在实践教学方面,在课程实习中要求学生进行实际项目的开发,并鼓励学生课外时间为项目的需求到社会中进行实际的调研。

实践教学目的是提高学生的实践动手能力。如果在实践教学过程中使用项目开发的方式,能够使学生从低年级的学习就融入软件工程的思想,学习和掌握软件开发的流程,对于后续课程的学习有很大帮助。比如:给学生一个综合设计性的项目题目(模拟学生成绩管理系统),这个项目涉及到C++数据类型、程序控制语句、函数、数组、类与对象等知识,能够使学生在项目开发的过程中巩固和加深知识的理解。

“课外延伸”就是在实践教学中,鼓励学生进行实际需求调研,自主学习和设计项目,并通过模拟实际工作场景达到培养学生进入社会前的职业素养,如在项目开发中将学生3-5人分组,每组中选知识技能掌握较好者为项目经理,每个学生独立完成功能模块。这样,学生通过分工合作、互相交流和帮助,能够促进共同提高,也能达到培养学生职业素养的目的。

三、 小结

三本院校C++面向对象程序设计的教学方法的改革是势在必行,本文从理论教学和实践教学两个方面进行了探索和研究,也进行了实际的尝试,实践证明能够提高学生学习的兴趣和积极性,增加低年级学生学习语言课程后的成就感,为后续课程的学习打下良好的基础。

参考文献:

[1]陈帼鸾.项目驱动教学法在C++教学中的应用[J].中国科技信息,2009(7):200-201.

[2]王世东.C/C++教学改革的探索研究[J].福建电脑,2011(2):48-49.

[3]谭浩强.C++面向对象程序设计[M].清华大学出版社,2006-1等.

《C++程序设计》教学的探讨 篇7

C++是当前理工类专业程序设计课程的主流教学语言, 其机制丰富, 应用广泛而灵活, 在没有任何程序设计基础的前提下直接学习这门语言, 多数初学者感觉难以入门。为了使学生易于接受并掌握好“C++程序设计”课程的内容, 并真正具有面向对象程序设计的实践能力, 从教学内容的组织、教学方法的应用及实践教学方面进行了一系列的研究和探讨, 在实际的教学应用中也取得了良好的教学效果。

1 教学内容

C++语言是在C语言基础上扩充了面向对象机制而形成的一种高级程序设计语言, 它除了继承了C语言的全部优点和功能外, 还支持面向对象程序设计。因此, C++语言的内容非常丰富, 机制灵活, 这也给学习和教学带来了一定的难度。在课堂教学中如何使学生得到一个系统的知识体系, 而不是形成一个个独立的知识点, 我们就有必要在教学内容上做适当的安排, 讲求前后衔接、由易到难、循序渐进地展开教学, 并要有详有略, 课堂教学与课后自学相呼应。

1.1 教学思路

我们学习C++的目的是掌握面向对象的程序设计, 但作为初学的程序设计语言, C++的教学内容中要包含结构化程序设计即C语言的相关内容, 而且这一部分是整个C++语言的基础。在实际授课中结合学生的接受能力, 并参照了国内计算机名师的教材内容, 我们安排了从面向过程到面向对象的授课思路, 以面向过程为基础过渡到面向对象, 并以面向对象为主, 合理安排课时与教学计划。

1.2 教学主线

C++程序设计课程包括的章节比较多, 涵盖的内容非常丰富。但对初学者来说, C++中的重点体现在函数的相关应用, 这也是教学中的一条主线。在C++语言中, 函数即是实现模块化程序设计的重要机制, 也是实现类的封装和信息隐蔽的重要方法。从最早的只有一个main函数的简单程序, 到多个函数用不同组织方式形成的不同程序设计方法, 是函数构建了整个C++程序。函数的学习和使用, 贯穿了从结构化到面向对象的程序设计。因此, 函数是C++程序设计课程的重点和难点。

1.3 教学要求

在C++课程中涉及到多种函数形式的应用, 概括起来形成了从一般函数到成员函数, 到函数模板的应用过程。而一般函数是实现C++支持结构化程序设计的重要机制, 学生要理解函数机制, 熟悉系统函数和自定义函数的应用。以此为基础学习面向对象中类的成员函数, 成员函数的具体应用更加灵活, 但这些具体形式最终实现了面向对象的三大特征:封装和隐蔽性、继承性、多态性。围绕封装性学生重点学习几个特殊的成员函数:构造 (拷贝) 函数、析构函数、常成员函数、静态成员函数、友元函数等。围绕继承性与多态性, 学生要重点把握虚函数、纯虚函数的应用。最后通过函数模板与类模板的应用, 了解泛型编程相关知识。

2 教学方法

目前的大多数教材是以传授语言机制为中心, 辅以相关的案例, 这样的教学设计虽然能够较系统地讲解知识, 但是各个案例的设计主要是为了说明某一机制, 而相互间没有连贯性, 这就造成了学生虽然学习了语言机制, 却不知道如何有机地应用到具体的开发中, 使得学习有些盲目性, 容易造成一些学生从积极学习转为消极学习。因此改变传统教学方法, 激发学生自主学习的兴趣是课堂教学中的关键。

2.1“任务驱动”与“案例教学”结合

在教学过程中, 可以把每一章设计成一个任务, 该任务可分为若干小任务, 而小任务对应着一个知识点。授课过程应结合具体案例程序讲解知识点, 课后则要求学生自己完成相应的小任务。每章学习前应提出要完成的任务, 每章结束后由学生完成大任务。例如, 在“函数”一章的教学过程中, 要求每一位同学编写一个简单的学生信息管理程序, 要求此程序能够完成若干学生信息的输入、排序、查找、输出等功能, 每个功能用一个自定义函数实现。在此任务中既隐含着该章的几个知识点:函数的定义, 函数的参数, 函数的返回值, 函数的调用, 数组作为函数参数等;又包括了学生必须掌握的重要算法:排序、查找等。

2.2“项目设计”与“任务驱动”结合

所谓“项目”就是能够结合大部分知识点, 并具有实用性的综合项目, 它是学生在学习完所有课程内容之后, 必须完成的项目, 可作为最后课程设计阶段的主要目标。在整个教学过程中, “任务”是完成“项目设计”的前提准备, “项目设计”是“任务”的综合应用。在学期授课的开始, 教师即可将“项目”布置给学生, 使学生带着明确的目的去学习和查找相关资料;随着教学内容的展开, 教师要依据所给的综合项目来安排各子项目的设计;最后, 在进行综合项目设计的时候, 指导学生以小组的形式把实现的子项目进行扩展和链接, 生成一个综合项目。

例如, C++语言的关键技术包括类与对象、继承与多态、输入输出流及异常处理技术, 而指针与动态内存分配又是C++语言的精华。这就要求我们选取的项目必须能够渗透这些语言机制, 达到传统教学的知识系统化的目的。为此, 我们选择了“图书馆流通管理系统”作为C++课程教学的项目。根据课程的教学内容和目的, 要求将项目分解5个任务, 即对象与类的识别、改进类的封装、链表类的应用、继承与多态的应用、输入输出流的应用、异常处理技术的应用。

3 实践教学

有了适当的教学内容的组织, 加上好的教学方法, 可以使学生更易于接受所学内容并能保持积极的学习兴趣。但同时“C++程序设计”又是一门实践性很强的课程, 课程的主要目标就是提高学生的实践和动手能力, 培养学生利用程序设计解决实际应用问题的思维。因此实践课的教学安排是非常重要的环节。

3.1 强化实践教学

实践教学是伴随着理论教学展开的, 是帮助学生理解和运用理论知识, 培养利用计算机解决实际问题的能力。在上机实验时, 要积极使用实验室的多媒体教学设备, 进行启发式、引导式的实验指导。为了确保学生有效利用上机时间, 每一次上机实验都要围绕当前教学内容确定实验题目, 明确实验目标并能总结出实验报告。

为了体现实践操作的重要性, 学生的期末总评成绩也应由单一的笔试模式, 改为由实验和笔试两部分分别考核的模式, 实验成绩主要测试学生在规定的时间内正确编写和调试程序的能力, 进一步引导和督促学生重视实践操作。

3.2 重视调试能力

上机实践的操作过程是动态的、因人而异的, 经常会出现意想不到的语法和语义的错误, 这往往会影响到学生学习的积极性。因此, 尽快提高学生上机调试程序的能力, 成为程序设计课程实践教学的关键环节。特别是在初学阶段, 有目的地分析和指导学生了解易出现的一些语法错误, 熟练使用操作环境是提高上机调试能力的关键。

在熟悉了基本操作的基础上, 进一步运用开发环境提供的调试技术可有效提高学生的调试能力。国内的C++初学者大多选用VC6.0为上机环境, 而VC中提供的调试技术可帮助初学者分析和理解程序运行过程。例如:一种有效的方法就是在实验中贯穿单步运行调试技术, 以比较直观地显示整个程序的组织结构与调用顺序。这样不仅使知识点比较容易理解, 还培养了学生的调试能力。单步运行能让学生理解其程序结构和程序中变量的情况。调试程序的能力需要慢慢积累和提高, 教师在辅导上机时主要指导学生怎样跟踪程序的运行, 怎样设置被监视的变量, 怎样设置断点, 怎样单步运行, 怎样使用工具。

教学质量的提高是一个长期过程, 我们应把握好教学中的每一个环节, 并在教学实践中不断深入与完善, 以不断提高《C++程序设计》课程的教学质量。

参考文献

[1]钱能.《C++程序设计教程》 (第二版) [M].北京:清华大学出版社, 2007.

[2]谭浩强.《C++程序设计》[M].北京:清华大学出版社, 2004.

[3]孙庚.项目教学法在“C++程序设计课程”教学中的实践[J].计算机教育, 2008 (2) .

基于C++的企业电费统计程序 篇8

众所周知, 伴随着经济的快速发展用电需求的不断攀升, 分时电价作为电力需求管理的重要手段之一, 而峰谷电价可有效地降低企业电能成本。北京首钢京顺轧辊有限公司使用智能型峰谷电表计量电度, 电度表上下载的可以是.CSV格式的数据, 能够记录峰谷平各个时段电量信息, 但不能随时统计峰谷平各时段用电量及电费, 使用户感觉很不方便。计算机技术处理和保存数据已经是信息科学的重要应用。现在的数据保存早已离不开信息科学。信息科学保存数据具有方便, 快速, 可靠, 保存时间长等特点。于是人们用c语言编写电量电费实时统计程序。

要实现的是从原始数据中提取数据并做处理。

客户会提供电表数据。数据记录了电表在各个时段电量 (包括电流、电压、有功功率无功功率等) 的实时数据。而客户最关心的是工厂在特定时间段所消耗的电能和花费的电费。一天中, 电费的计费分峰时, 谷时, 平时3个时间段, 谷时段电价只有峰时段电价的1/3, 因此及时方便的统计出各个时段的用电量及电费是企业降低生产成本的重要依据。

客户提供的是一个采样时间间隔最小5分钟, 每天24小时, 累计时间30天之内的记录了电压、电流、电度、功率等含有大量数据的CSV文本文件, 工人的下载时间是随机的, 意味着.CSV文件中的数据量是不定的。其中数据是字符的形式, 每一条目以逗号隔开, 每一条记录以换行符隔开。其中有大家关心的数据, 也有大家不关心的数据。由于数据量很大, 要从文件中选择所需要的数据。很多时候记录数据并不可靠。可能会出现记录缺失, 乱码。对于记录缺失的情况, 还要进行容错处理, 可以浏览前后的数据给出补救, 对于后面情况, 要中断工作, 告知用户数据有问题。

用户有8台大用电量设备, 每个设备有一个峰谷平智能电度表, 每台设备以1-8标示。文件名的启用规则以年月日时间命名并含有与设备编号一致的标号信息, 便于统计时归纳。

企业员工文化水平较低, 操作者甚至不能做计算机基本操作。做的页面要尽量友好、方便。

2 设计

本程序由C++设计算法逻辑。

C++是著名的高级程序设计语言, 支持广泛的多种程序风格, 也无需复杂的编程环境, 因此具有十分广泛的用途。同时C++效率高, 保持了C语言接近汇编语言而得来的简洁高效, 又对C语言的系统进行了改革和扩充, 因此比C语言的编译更严格, 也更安全。

程序的受众文化程度低, 不熟悉计算机操作, 本程序又采用命令行界面, 要尽量使说明和操作方式友好, 让用户容易上手。

客户交给我们CSV文件, 我们也用CSV文件输出。这种逗号分隔的文本格式可以直接用EXCEL打开, 方便用户使用。

3 流程设计

3.1 CSV源文件定位

笔者提供给了用户两种方式来定位目标文件, 一个是输入文件名时从根目录开始输入文件目录的方式。这个方式灵活, 可以找到磁盘任何位置的文件。但要求目录不能输错, 否则找不到文件无法进行下一步, 考虑到用户文化水平较低, 正确的输入目录可能要费一番功夫。所以改用光标条选择, 实现了遍历文件系统, 让用户从列表里选择的功能。

第二种方式是遍历程序当前目录, 这样只要用户把文件和程序放到一起, 所有的.CSV文件都会以有数字编号的形式列出, 用户输入文件名时只需输入数字编号就可以, 很方便的找到文件又便于操作者操作而不会出错。

例如1.20150301-0302, 只需输入1就是要选的文件。

找到文件后, 会回显文件名让用户确认。如果有错返回重新输入。

3.2 文件纠错

由于电表数据并不完全可靠, 可能会出现以下错误:

第一, 可能会出现大片乱码情况。对于这种情况, 我们检测文件开始的一些字符, 如果正常, 则可排除大部分情况, 如果不正常, 中断工作。

第二, 可能出现数据缺失。由于数据条目是累计电量, 一般情况下只要用再下一条数据减去上一条数据即可。但是如果分割时间段的那条数据缺失, 由于单价不同的影响, 可能会影响价格的计算。这时错误不至于太大, 程序照常执行, 但会提醒用户可能会发生错误。

3.3 数据采集

每条数据中, 数据项按照给定序列排列, 每项数据用逗号隔开, 每条数据用换行符隔开。只要简单的循环算法, 就可以提取出数据。数据存在自定义的一个数据结构中。这个数据结构构成一个线性表用来管理大量数据。数据结构全部自行实现。

可是由于数据较多且不可靠, 长度也不定, 这里的算法是程序的核心。

由于用户给的数据条目里不仅有人们关心的数据, 还有人们不关心的, 要自行设计算法筛选需要的数据。

3.4 数据分析和输出

采用一边分析一边输出的模式, 遍历线性表, 同时累加数据, 到了时间段分割点就输出。这个算法比较简单。

4 实现

4.1 界面设计

界面设计以简洁明了为宜, 采用了控制台方式。

4.2 CSV文件定位

通过Win API实现。主要是遍历文件系统, 方便用户选择文件。当用户确定一个路径后, 就会列出这个路径下的所有文件, 每一个文件对应一个索引号, 用户可以输入多个索引号来实现多个文件的批次处理。主要通过Find First File方法和Find Next File用循环实现。这里给出关键的代码。

这次遍历用来向用户展示文件, 之后还将遍历一次, 用来存储文件名。

4.3 数据采集

得到文件名后, 通过C++的函数打开文件, 得到的会是流式的文本文件。处理这些文件是程序的重点。

首先电表数据不一定可靠。可能会出现大片乱码的情况。这时检测每条数据的前七个字符, 应该都是数字。如果符合这个条件, 则可排除这种情况。

数据还可能缺少条目。这可能会损失结果的准确性。这种情况不中断工作, 只提示用户可能出现错误。

之后就可以开始采集数据了。数据有如下特点:

(1) 每条数据第一项是日期, 固定八位。

(2) 第二项是时间, 固定五位。

(3) 第三项是累计电量。位数不定, 以逗号结束。

(4) 后面有若干不关心的数据项, 整条数据以换行结束。

经过分析容易知道, 只要设置两个变量, 一个计算当前条目已得到数据的数量, 另一个计算当前数据项的字符数, 就能从原始文件中提取符合容易做进一步处理的字符。这里给出关键代码。

现在已经得到了容易处理的字符型数据, 只要通过简单的循环算法把它转换为浮点型, 在存到线性表里就行了。这里的代码不再赘述。

4.4 数据分析输出

最后只要逐条数据减去上一条, 乘以单价然后输出到文件就可以了。

由于有8台设备, 每台设备都要统计, 最终要在一张电子表格中显示出8台设备各个时段的用电量及电费情况, 便于决策者统计管理, 降低成本。设备号在客户给出的源文件名中有标示, 在读取时本程序已经保存。输出时单列出各个条目输出即可。

5 结语

此程序基于纯C++开发, 使用方便, 效率高, 用户反馈良好。

摘要:近年来, 随着信息技术的不断普及, 越来越多的生产单位需要用计算机来自动统计各种生产数据。这种方法不需要过多人为干涉, 具有精确度高, 速度快, 保存质量好, 统计方便等优秀特性。为生产生活提供了极大便利, 为决策制定提供了有力依据。文章将从一个实际钢铁企业的实际需求出发, 说明如何实现一个基础的电力数据统计程序。它将读取电表提供的流式数据, 加以纠错和处理, 最终生成方便统计人员处理查看的档案数据文档。该程序已经通过该企业的立项, 正在实际使用中。

关键词:数据统计,C++

参考文献

[1]齐幼菊.C语言程序设计例题与习题[M].北京:科学出版社, 2003.

C++程序设计教学方法探析 篇9

案例一:在讲授第一节课的时候, 首先让学生对这门课程产生深厚的学习兴趣, 并树立学好这门课程的信心。课堂上首先给学生讲解为什么要学这门课程, 学了有什么用以及怎么样学好这门课程, 让学生带着这三个问题来听课。然后演示几个常用软件和几个游戏, 让学生明白软件是计算机的灵魂, 是指挥计算机为我们服务的指令, 而软件的编制都是通过程序设计语言来实现的, 程序设计语言就是人类与计算机打交道的语言, 是人与计算机交流的工具, 就像我们平时说的普通话一样, 由字、词和语法规则构成。接着讲述C++的来源以及高级程序设计语言的特性。高级程序语言比较接近人类的自然语言, 程序员只需要专注于问题的求解, 不必关心机器内部结构和实现, 因些, 学习这门课程就像我们学习一门新的语言, 不会很难, 这让学生树立学习的信心。现场编写一个程序, 功能是输入圆的半径, 得到圆的周长和面积。我们可以编写程序如下:

程序通过编译运行后, 屏幕显示:Please input radius:, 用户输入:12, 程序继续执行, 输出结果:

通过这个简单的程序, 解释每一条语句每个单词的含意, 让学生对编程有个大致的了解, 破除对编程语言的神秘感, 并有个感性的认识。然后向学生延伸说明, 一种高级程序设计语言一般有一百几十条词汇、若干条规则组成。程序设计是根据特定的问题, 设计出计算机执行的指令序列。根据任务主要完成两方面的工作:一个是数据描述, 数据描述是把被处理的信息描述成计算机可以接受的数据形式, 如整数、实数、字符、数组等。另一个是数据处理, 数据处理是指对数据进行输入、输出、整理、计算、存储、维护等一系列活动。然后对应刚才编写的那个简单程序, 让学生指出数据描述有哪些, 学生很容易指出半径、周长、面积是数据描述, 均用实型数表示, 同时让学生指出数据处理有哪些。

案例二:在讲解if语句和switch语句的时候, 首先让学生思考一个问题。给定三条边a、b、c, 判断能否构成三角形。若能构成三角形, 则求其面积;否则, 就显示“不能构成三角形”的信息, 我们要用计算机编写一个程序实现这个功能怎么办?我们都知道三条边能否构成三角形的条件是:任意两条边之和都大于第三边。三角形的面积公式我们也知道, area=sqrt (s (s-a) (s-b) (s-c) ) , 其中s= (a+b+c) /2。那么这时就需要对给定的条件进行判断, 并根据判断的结果选择不同的操作, 这就需要有一个选择的语句, 那么顺势就引出if语句, 并把刚才那个问题用程序写出来, 让学生明白if语句怎么样用。给出参考程序如下。

在讲解switch语句之前, 让学生思考, 假如碰上有多种选择的情况, 怎么办?比如输入年份和月份, 让计算机输出该月的天数。根据天文知识, 每年的1、3、5、7、8、10和12月, 每月都有31天;每年的4、6、9和11月, 每月有30天;若是闰年, 2月份为29天;若为平年, 2月份为28天。年份能被4整除, 但不能被100整除或者能被400整除的年份为闰年;否则为平年。这时如果用if语句作多次判断, 虽然可行, 但会显得很麻烦。这时可以顺势引出switch语句, switch语句正好可以解决上述问题, 同时详细讲解switch语句的用法, 学生就印象很深刻的记住了switch语句的意义以及用法。

案例三:在讲解循环语句的时候, 先举一些循环的例子, 比如电视节目上的猜价格游戏, 其实就是一种循环, 预先设定好一个价格, 让观众来猜, 猜高了给出猜高的提示信息, 猜低了, 给出猜低的提示信息, 反复猜测, 只到猜中为止。再比如计算1至100间所有数字的和, 如果按照最笨的方法, 就是用顺序语句, 一个个的数字相加, 这需要一百条语句。假如计算1至10000间所有数字的和, 这种方法基本上不可行, 那么怎么办呢?这就是为什么要用循环语句, 这时侯循环语句的作用就体现出来了。然后给出具体的实例, 讲解循环语句的用法。猜价格的程序示例如下。

结语:C++程序设计课程在教学中会遇到很多问题, 在短短的一个学期时间内让学生去消化整本教材也有些困难。这就要求我们教师能深入浅出的讲解这门课程, 提高学生的学习兴趣, 树立学习的信心。在讲解的时候, 不拘泥于某些具体的条条框框, 而是从事物的本质去把握, 以为什么学这个知识点、学了这个知识点有什么用、怎么样用为主线, 由浅入深, 结合生动具体的案例, 帮助学生理解课程内容, 达到较好的教学目的。

摘要:C++是目前非常流行的面向对象的编程语言, 应用非常广泛。C++也是计算机专业的基础课程, 刚接触这门课的学生一般缺乏计算机基础知识, 觉得C++很神秘很难学, 通过为什么学、有什么用、怎么样用这三个问题为主线, 让教学回归问题本质。并与实例教学相结合来讲授每个知识点, 能够帮助学生清晰地理解课程, 达到较好的教学效果。

关键词:C++,教学方法,主线,回归

参考文献

[1]赵英红:“陷阱式”教学法在C语言程序设计课程教学中的应用, 滨州职业学院学报, 2008, 5 (4) :12-14。

C++面向对象程序设计教学探讨 篇10

1 课程内容

1.1计算机语言间的关系

在地方院校的计算机类专业的教学计划中,一般是先讲授过程化的C语言,主要包括基本的语法规则、算法和程序调试技巧; 再讲述面向对象的C++语言;最后讲述高度集成和封装的C#或Java语言。显然,C++语言在其中承担了承上启下的角色,承担了巩固基础、培养计算思维、熟练调试技能的角色,承担了由过程化的程序设计思想向面向对象程序设计思想转换的角色。每个角色的主要作用虽不相同,但都是主角,都是不可缺少的。

1.2教学内容间的关系

《C++面向对象程序设计》课程在教学中不仅地位和作用重要,而且其涉及的教学内容广泛。其教学内容概括起来包括三个部分:一是C++语言的基本语法,二是面向对象的四大特征及基本理论,三是使用C++语言来实现面向对象的特征[1]。对于学习过C语言的来说,第一部分内容只需关注与C语言不同的地方,第二部分是“死板”的理论知识,第三部分既是重点也是难点,也是当前教学改革、研究的重点。

图2是《C++面向对象程序设计》中第三部分的主要教学内容及相互关系。

2教学改革

2.1改革教学内容

由于大学教育的大众化,对该课程的教学目标、教学内容当然应该“因校而异”。

1)教学目标存在差异

我校对该课程的主要教学目标是以C++语言为工具载体,向同学们讲述面向对象的特性及其实现,为后续的面向对象的程序设计语言、对象的分析、面向对象的设计、测试等学习做必要的理论铺垫。

2) C++语言的特异性

由于C++是一种诞生较早的语言,是一种半面向对象的语言[2],因而存在一些“人为的缺陷”。

个人认为“为了达到使用某种功能的目的,创造了一些关键词、概念、表示方法、理论等”,这种特异性使得学习、使用C++变得困难、容易产生混淆。

譬如:Const修饰一个常指针,使用1个或2个Const的差别(Const的位置不同);使用构造函数来定义对象,在定义对象的格式上存在巨大差异(使用默认构造函数定义对象不能带括号,使用全是缺省值的构造函数定义对象不能带括号,使用其它构造函数定义对象必须带括号);静态数据成员必须在类外初始化;常数据成员只能通过构造函数的初始化列表进行初始化;常对象和常函数的访问限制;拷贝构造函数的功能、调用时机及缺陷性(含有指针型的成员变量时);在多重继承时,为了保留祖先特征的一个副本,避免二义性,提出了虚基类的概念;虚函数与纯虚函数在函数首部上的细小差别;运算符重载;友元等。这些死板的规则大大增加了学习的难度,并且离开了C++,不能照搬到其他语言之上。

面向对象的主要特征包括抽象、封装、继承、多态。虽然不同的面向对象语言在这几个特征上理论是相同的,但是在实现上存在差异。

譬如:C++是一种半面向对象的程序设计语言,但Java是一种完全面向对象的语言;C++中有friend关键词,标示了友元函数或友元类,Java中没有这个关键词,也不会允许外部的函数访问另一个类的私有成员;C++中存在命名空间的概念、Java中存在包的概念,二者之间具有一定的相似性,但在实现继承时,继承的权限上有很大的不同;C++允许类的多继承,Java不存在类的多继承;都具有多态性,但在多态性的体现上存在着差距;内存管理上存在差异……。

正因为不同的程序设计语言存在差异,我们在教学时,求同存异,着重抓住共性,坚持“理论够用,重在实践”的原则,对于C++的特异性不渲染,不深究。

3) 编程风格存在差别

教师在编写函数时,各自的风格不同。譬如:在定义成员函数的首部时,函数的参数可以是普通的值类型、可以是指针类型、可以是引用型、可以是const型,不同的教师或者著书者可能钟情于某种表达方式、或者这几种方式的结合体。定义方式不同导致功能不同,而学生不能立即领会其中的差异,给学习、理解增加了难度。因此,在组织教学时,尽可能使用相对固定的、简洁的参数形式。

4)教学内容的取舍

各校的层次不同、选用的教材不同、教学目标不同、教学内容当然可以不同。

根据我校实际,对“C++实现面向对象特征”这部分的教学内容进行了取舍,其中,粗体部分的知识点为重点内容,斜体部分为略讲内容。如图2所示。

对该课程的教学内容进行适当的取舍,对知识点的讲授注意与其它语言的异同性,紧紧把握“重在共性、去粗取精”的原则。

2.2重视算法

绝大多数程序设计语言,在语法上大同小异,在算法上总是高度一致的。

虽然C++语言在类的抽象、封装上是面向对象的,但是在成员函数的实现上仍然是面向过程的。因此,可以将数据结构中的部分算法搬到C++来实现、练习,特别是线性结构的知识。譬如:集合的并交差运算、多项式的表示、2个多项式相加等。既用C语言实现,又用C++来实现,这样做,既让学生感受到了面向过程与面向对象的差别,也让学生领会到了算法的一致性。领悟到语言只是工具,算法才是灵魂。

2.3 教学方法

任何一种教学方法都不是孤立的,总是与其他教学方法配合使用、取长补短,力求发挥最大的效力、达到最好的教学效果[3]。

案例式教学

正由于C++所特有的性质和使用限制,教学中单纯的理论说教只能是让学生枯燥乏味、昏昏入睡,只有通过活生生的实例才能引人入胜,寓教于乐、“寓理于例”之中,因为它既有强烈的示范作用也给了学生思考的空间和时间[4]。通过“理论——案例——演示——总结”的方式来组织教学,起到“照葫芦画瓢、照猫画虎”的效果,真正做到了有理、有例、有结,也符合知识的“记忆、模仿、应用”的认知规律。

2) 框架式教学

类的定义具有相对固定的框架,体现在两个方面:

一是成员变量的声明在前、且是私有的,成员函数的声明在后、且是公共的;

二是成员函数的种类和格式是固定的。成员函数包括构造函数、拷贝构造函数、析构函数、输出函数、其它处理函数。在定义这些函数时,遵循一定的次序和原则,譬如:所有的类都必须显式地拥有缺省参数的构造函数、拷贝构造函数、数据成员的get、set函数、输出数据成员值的函数等。一个类遵循这样的框架来组织和定义,在创建对象、使用成员时可以避免一些错误,而且是一种良好的编程习惯。

3) 渐进式教学

知识点之间是相互联系的,讲授时遵循由易到难的次序讲授。如讲述构造函数时,从系统提供的默认构造函数到自定义默认构造函数,到带参数的构造函数,到带默认值的构造函数,到构造函数的重载、歧义,到带子对象的构造函数;从函数模板到类模板;从单继承到多继承,从多继承到虚基类的引出等,存在明显的渐进关系。

以虚基类的引出为例。在三层结构的继承中,存在多重继承,(图3重复继承)出现了孙类中存在祖先的2个副本,如何访问呢?只能通过作用域来区分(对象名.类名::成员名),但这种访问格式上总显得特别别扭、不伦不类,怎么实现只保留一份副本呢? 因此,引入了虚基类的概念。这种“提出问题、解决问题”的方式也是一种渐进的思想。

2.4考核方式

改变单一的考核方式为多样的考核方式[5,6]。譬如:取消统一的卷面考试,取而代之的是课程设计,按照软件工程的流程完成一个小型项目,且以答辩验收的方式来评价学习效果,考核学生的综合应用能力;取消集中统一的考核,取而代之的是以题库为基础的机考,随到随考,直到通过为止。

3 学习方法

对于程序设计语言的学习,始终把握“三动”的方法,即动眼、动脑、动手(阅读、思考、上机实践)。

C++程序的代码一般都较长,阅读时先从主函数开始,看看定义了哪些对象,使用了哪些函数,再有目的地去阅读相应的函数代码。这样才能目标明确、抓住重点、理清思路、理解题意。

在课外,看着教材的目录,回忆课堂上讲述的知识点、例子,是否能清晰的再现。否则,赶紧翻开书阅读、理解、思考。

“三动”学习法中最重要的就是“动手”。上机实践是检验学习效果最准确的方式。这一点是不言而喻的。

4 结束语

上一篇:家蚕农药中毒下一篇:作品表现