C++语言程序设计(精选11篇)
C++语言程序设计 篇1
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.
[2]杨杰, 陈雪兆.《C++程序设计》教学中存在的问题及改进建议[J].湖南科技学院学报, 2005, 11 (26) :190-191.
[3]李宇翔, 李端明, 王大志.提高《C++语言程序设计》教学效果的思考[J].福建电脑, 2006 (1) :197.
C++语言程序设计 篇2
专业 班级 学号 姓名
一、实践目的
通过本课程设计教学,为学生提供一个综合运用所学知识,解决实际问题的机会,增强其实践动手能力和工程实践能力,锻炼和培养学生的自学能力,使学生能利用C++语言设计功能较全的一个应用程序,得到程序设计方法、文献资料查询、设计报告写作的综合训练。同时加深对<
二、实践任务与要求
1、编写一个简单的基于MFC的应用程序(5学时)
《C++程序设计实践教程》P218-P226综合设计题中任选一题。
2、参照《C++程序设计实践教程》中P64-74的实例,从以下各题中任选一题,在vc++环境下编写一个基于控制台方式的应用程序(Win32 Console Application,25学时)1).教学管理系统。学生信息包括学生的班级代号、学号和姓名,选课信息包括每个学生该学期所选课程,成绩包括每个学生所选的课程的考核成绩。系统功能要求如下:
(1)能输入学生信息、选课信息和成绩。
(2)能输出各班的某门课程不及格的名单(含学号、姓名和成绩)。(3)能输出某门课程全年级前5名的学号、姓名和成绩。(4)能输出某门课程每个班的总平均分(从高到低排列)。(5)能输出某门课程某班的成绩单(按学号排列)。
2).通讯录管理程序。通讯录要求存储姓名、性别、工作单位、住宅电话、移动电话、办公电话、E-mail地址等内容。系统功能要求如下:
(1)通讯录记录按姓名排序存放,显示时每屏不超过20个记录,超过时分屏显示。(2)增加某人的通讯录。(3)修改某人的通讯录。(4)删除某人的通讯录。
(5)按多种方式查询符合条件的信息。(6)用文件存储数据。
3).图书室管理系统。该系统存储以下信息:
(1)对于同一作者同一书名的书,存储书名、书目编号、作者名、库存册数(不包括已借出的)、已借出册数。
(2)对于每一本书还要存储一个登录号(这是区别每一本书的唯一标志)、当前借阅该书的读者姓名与借书证号、借阅日期。
系统功能要求如下:(1)创建存储系统。(2)增加新书。
(3)删去无使用价值的旧书。
(4)处理借书。要求读者提供书目号与登录号,一位读者限借2册。检查库中有无读者要求借阅的图书,检查该读者已借阅图书数量。
(5)处理还书。
(6)查询某登录号的书是谁借了。
4).工资管理系统。该系统在磁盘上存储了某单位上月全体职工的工资信息。对于每一位职工存储以下信息:月份,职工编号,基本工资,津贴,岗贴,补贴,房贴,交通费,应发数,房租,储蓄,会费,个人所得税,应扣数,实发数。个人所得税计算方法设为:工资少于800元的部分为0,800~2000元的部分为5%,2000~5000元的部分为10%,5000元以上的部分为20%。
系统功能要求如下:
(1)创建存储职工工资信息的存储系统。(2)添加某职工的工资信息。(3)删除某职工的工资信息。
(4)修改某职工的部分工资信息(当月开始增加或减少某些项工资或扣款数变化)。(5)输出指定编号职工的工资信息(借查询用)。(6)输出当月全体职工的工资信息(发工资用)。
5).车票管理系统。一车站每天有n个发车班次,每个班次都有一班次号(1,2,3,…,n),固定的发车时间固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。例如:
班次
发车时间
起点站
终点站
行车时间
额定载量
已订票人数 1
8:30
长沙
广州
2
9:30
长沙
南昌
1.5
3
8:00
长沙
南宁
4.5
4
10:00
长沙
武汉
3.5
……(1)录入班次信息(信息用文件保存),可不定时地增加班次数据。
(2)浏览班次信息,可显示出所有班次当前状况。如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息。
(3)查询路线:可按班次号查询,也可按终点站查询。
(4)售票和退票功能。当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数。退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
三、实习纪律
1、独立思考、完成程序设计的所有内容,严禁抄袭。2、按时上、下机,不得无故缺课
四、设计报告要求
设计报告要求简洁、严谨(3000-4000字,4页),应包括以下几方面的内容: 1、系统功能概述
2、主要的数据结构概述 3、系统结构框架
4、各主要功能模块的实现算法(画出流程图或自然语言描述)
5、调试过程中遇到的主要问题及解决的方法;对设计和编码的回顾讨论和分析;改进思想;收获和体会等
6、主要程序模块的清单
五、时间安排
上机时间:18-19周
最后一次实验检查程序运行情况并交设计报告。
六、成绩评定规则
1、程序调试结果分优、良、中、及格、不及格五等,占总课程成绩的60%
2、实验过程评价:在上机操作过程中学生的上机能力按优、良、中三档评定,占课程总成绩的20%
3、实验报告评价占课程总成绩的20%
指导教师 李利明
中南大学
计算机基础教学实验中心
C++语言程序设计 篇3
关键词:C++语言;集雨池;经济容积;日光温室;蔬菜
中图分类号: S126文献标志码: A文章编号:1002-1302(2015)02-0384-03
收稿日期:2014-09-25
基金项目:国家级星火计划(编号:2013GA650007);农业部重点实验室建设项目(编号:FBSC2012002);辽宁省农业综合开发省级重点科技推广项目。
作者简介:刘文合(1971—),男,辽宁建昌人,博士,副教授,从事水土工程建筑研究。E-mail:wenhel@126.com。 随着科学的进步与发展,计算机应用范围不断扩大。随着各国对农业技术的重视,计算机与农业之间的关系日益密切,尤其是利用计算机C++语言自身灵活的机制简化集雨池经济容积的复杂计算过程,操作方便,有很高的可推广性。
1程序设计
1.1程序语言
设计软件运用的计算机语言为C++语言,C++语言是一种集物件编程、泛型编程、过程化编程于一体的编程语言。C++语言根本优势在于高级系统程序设计、3D游戏开发、数值科学计算、通用程序设计以及混合系统设计等[1]。
1.2软件计算限定条件及逻辑流程图
软件编制过程受资料所限,只选取以下几个限定条件计算集雨池经济容积:作物类型,果菜、叶菜;作物名称,番茄、甜椒、芹菜、菠菜;地区,沈阳市、长春市、哈尔滨市;温室类型,辽沈Ⅰ型、辽沈Ⅱ型7.0 m 跨、辽沈Ⅱ型7.5 m跨、辽沈Ⅱ型8.0 m跨、辽沈Ⅲ型、辽沈Ⅳ型10.0 m跨、辽沈Ⅳ型12.0 m跨;种植时间,1—12月;灌溉方式,沟灌、滴灌。如需计算其他条件下集雨池经济容积,只需添加各项新参数,输入配置文件即可。以种植地区的月降雨量以及气象因素、作物类型、温室类型、灌溉方式4个变量为参数设计软件,根据水量平衡原理计算得到集雨池的经济容积。月降雨量值决定月集雨池收集雨水量值;种植作物不同反映了作物系数不同;不同温室类型集雨面积与种植区域面积互不相同;滴灌、沟灌决定灌溉参数不同。根据不同地区降雨量、温室塑料棚膜集流系数计算各月收集到的雨水量,并运用修正后的P-M方程[2-3]结合作物系数计算作物生长期各月的需水量W,将二者作差得到各月集雨池的水量值,选出各种植期集雨池水量最大值,这些最大值中的最小值并且大于最大降雨月集雨池收集的雨量值即为种植该作物时集雨池的经济容积V[4]。将集雨池容积计算的各种农作物的全部信息以及辽沈系列7种类型温室集雨面积与需水面积汇总至xml配置文件中,程序根据配置文件收集到的农作物信息值进行集雨容积计算。图1为逻辑流程图。
2.3程序编制
2.3.1程序的总体结构本程序文件总体结构包括:(1)可执行文件,集雨池容积计算.exe;(2)配置文件,configure.xml。
2.3.2xml配置文件xml配置文件的作用是将程序中用到的各个数据添加到另外一个文本文件中,并且可根据具体情况制定相适应的数据结构,方便程序存取操作,同时该配置文件采用树形结构,可以很快定位到某数据模块,在视图上也能很直观地描述数据在程序中的用途,几乎所有的应用程序都能够很好地处理xml文件,各种平台都支持,可移植性比较强,便于进行功能扩展与维护。xml配置文件结构如下所示:
根节点volume是配置文件的总节点,其下有五大类别的分支节点:(1)节点。记载的是种植地区,包含沈阳市、长春市、哈尔滨市。(2)
2.4软件的运行
以种植番茄、芹菜为例,运用设计的软件,计算集雨池的经济容积(图2)。图3为种植菠菜时的计算结果。软件界面包含作物、种植地区、温室类型、种植开始日期、灌溉方式5个变量参数。当变量选择完毕后,点击“计算”按钮,出示计算结果。软件中作物种植时间可自行调整,不同的种植时间得到不同的容积值。根据经济容积的取值原则:6月种植番茄,8月的雨水量剩余值为集雨池的理论经济容积值。5月种植菠菜,7月的雨水量剩余值为集雨池理论经济容积。软件中记载了东北三省省会城市哈尔滨市、长春市、沈阳市3地的气象数据。利用软件求得以上3地不同类型辽沈系列日光温室种植上述4种作物时的集雨池经济容积理论值(表1)。选取最大值,并考虑到特殊情况,将理论经济容积扩大20%作为集雨池经济容积的设计值(表2)。
3结论
本研究设计的软件能够准确快速计算出集雨池的经济容积,软件中已经存储了沈阳地区的降雨量数据以及温室参考作物蒸腾量数据,其中温室作物蒸腾量资料是根据修正的P-M方程计算得到的。若将软件推广到其他地区,需要人为在配置文件中对应代码输入当地月平均降雨量以及温室参考作物蒸腾量。软件中只存贮了辽沈系列日光温室类型,若计算其他类型温室集雨池容积,同样需要人为在配置文件对应代码对温室进行命名,并输入集雨面积Sc、种植面积Sn。软件中存储了番茄、甜椒、芹菜、菠菜等常见温室蔬菜,若要添加其他蔬菜,同样需要在配置文件对应代码处对蔬菜进行命名,并输入联合国粮农组织推荐的作物系数。该软件主要特点是操作方便,添加各项新参数简单。
参考文献:
[1]Hook B.跨平台软件开发——C&C++[M]. 北京:清华大学出版社,2006.
[2]陈新明,蔡焕杰,李红星,等. 温室大棚内作物蒸发蒸腾量计算[J]. 应用生态学报,2007,18(2):317-321.
[3]王健,蔡焕杰,陈新明,等. 日光温室蒸发蒸腾量的计算方法研究及其评价[J]. 灌溉排水,2006,25(6):11-14.
[4]刘文合,杨闯,管慧旭. 日光温室集雨设施研究[J]. 江苏农业科学,2014,42(5):341-344.余东满,户燕会,郭成献,等. 棉花移栽机的结构设计与运动轨迹分析[J]. 江苏农業科学,2015,43(2):387-388.
C++语言程序设计 篇4
实验教学是理工农医类教学课程的重要环节, 是高等教育教学改革的重要内容, 尤其是对于要求具有较高动手能力的计算机类专业学生来说, 实验教学在培养学生综合应用与创新能力等方面有举足轻重的地位。教育部在制定的《关于加强高等学校本科教学工作提高教学质量的若干意见》中明确强调要进一步加强实践教学, 注重学生创新精神和实践能力的培养。
《C++语言程序设计》是我院计算机学科的一门重要的专业基础课, 其目的是通过对C++语言的语法规则、程序结构、系统开发等的学习, 让学生掌握正确的程序设计思路和方法, 具备初步的应用程序开发能力, 为后续课程的学习及各种实用程序的开发奠定一个良好的基础。如何培养和提高学生的动手能力和自主学习的能力, 是C++语言程序设计实验教学需要解决的核心问题。
二、教学中存在的问题
目前, 大多数高等学校的实验教学体系主要存在以下几个方面的问题[1]:
2.1 实验内容系统不完善
目前该课程实验教学内容的组织基本上是以语法知识为主线。教学内容更新较慢, 而且主要是验证课堂讲授内容, 以单一的基础型、知识型、验证型实验为主;而综合型、设计型的实验很少[2]。而我们的教学目的不仅要使学生掌握C++语言的语法知识, 更重要的是使学生掌握计算机编程思想及程序设计的初步能力, 使学生能够利用计算机编程解决本专业的相关应用问题。因此, 改革目前的偏重验证型实验项目的教学内容, 完善实验内容体系是实现以上教学目的的关键一步。
2.2 对学生个性化的需求关注不够
由于学生刚从中学进入大学学习, 一是对学习环境不够熟悉, 二是学习方法还没有及时转变, 三是学生的基础知识和能力存在很大的差异。在教学中往往只照顾了一些学习成绩中等及以上的学生, 认为他们听懂了, 学会了, 我们的课也就达到了目的, 而这也导致了基础薄弱、学习有困难的学生和学习优秀的学生在实验课上都得不到满足的现象。
2.3 实验成绩评价制度评价单一
目前的实验成绩评价方法是将每次实验报告的成绩进行综合后成为该生的最终实验成绩。我院在安排考核时, 按照传统的"7+3"的模式, 即期末笔试考试成绩70%, 平时成绩30%, 导致大多数同学只注重最终考试的卷面成绩[3]。同时, 由于学生都是在课下书写实验报告的, 在这个过程中存在着抄袭现象, 并且部分同学在做实验时未将一些现象、解决方法等记录下来, 导致实验报告不能真实地反映学生的实验成绩。由于笔试的限制, 理论概念知识所占比重比较大, 结果学生只注重理论知识的学习, 对平时上机实验关注较少, 学生上机实验少, 达不到培养学生编程能力的目的。
三、教学改革及教学方法探讨
针对以上这些教学中的问题, 在平时的实验课教学中, 努力提高对学生实验教学的效果, 因此从以下几个方面进行探索、改革。
3.1 完善实验内容
在实验内容的设计中, 既重视理论知识的重现, 又注重学生解决实际问题能力的培养;既考虑学生的总体基础又考虑学生的个体差异;既要考虑知识性, 又要考虑趣味性。因此, 我们首先设置了大量的验证性实验题目, 以确保学生具有基本的动手能力, 这些题目简单易懂, 主要是学生做准备、打基础的阶段, 要求学生熟悉VC++的编程环境, 熟练使用MSDN文档, 巩固C语言中的基本语法结构, 练习C++中的新的语法知识, 为后面的实验打下坚实的基础。
另外, 我们引入了综合型设计类实验, 设计若干个主题实训作业, 力求将主题作业按教学进度主线设置, 使得学生不必等到学期末才能开始做这些题目;同时按照难度差异将主题作业分成三组 (难度高、中和低) , 以适应不同层次学生的需求。学生可以根据自己学习的情况来决定自己的主题作业, 既可以从低到高逐步提高, 也可以从难度高的直接进行实验, 如果较高一层没有很好解决, 学生可以自主决定降低其实验项目的难度, 以满足自己实验需求。
为了充分发挥学生的主观能动性, 综合设计型题目允许学生自己拟定, 但是这些自拟题目需经过老师审核后才能确定使用。
3.2 强化实验过程管理
每个实验项目开始前, 列出学生要完成该实验项目应该具备的知识点, 让学生有目的的进行资料的查找和学习。同时学生在进入实验室之前, 要列出程序的流程图, 能够编写出程序源代码或部分模块的源代码。
在实验进行过程中, 对实验现场进行严格评测, 在学生的整个实验现场进行不断地巡视, 加强机房随机检查, 检查实验完成的实效, 抓两头, 促中间。不但要做到有问题及时问, 还要根据学生的实验情况不断给予鼓励和表扬。同时, 对于学有余力的同学鼓励他们帮助别的同学解决问题。对于这些实验过程中的情况要及时进行记录, 并作为学生最终实验成绩的一部分。
实验课后及时反馈, 学生做完实验后, 应认真完成实验报告, 尝试改革实验报告进行网上递交, 提高学生上机的效率;教师应该对学生的每个项目作出具有指导性或建设性的反馈意见, 也可召集部分学生做一些有益的师生互动。
3.3 多方位立体实验成绩评价
建立一套适合实验教学特点的实验考核制度和对学生成绩的评价方法, 其核心是突出"加强素质提高和能力培养、循序渐进、因材施教"的宗旨, 真实地反映出学生达到的实际实验的水平和层次。
评价体系包括学习过程的评价 (在实验中的学习能力、分析解决问题的能力、探究能力都会得到不同程度的发展) ;注重激励性的评价 (及时肯定学生的成绩, 使其体验到 (下转第57页) 成功的乐趣, 从而激发学生的参与热情) ;创新作品加分, 培养创新意识。
验证性实验根据要求提交实验成果软件, 设计性实验提交实验报告和实验成果软件。提倡并鼓励与同学讨论作业, 但最终必须独立完成, 抄袭或复制其他同学作业者, 该次作业成绩以0分计, 被抄袭或复制者当次作业成绩酌情扣分。
四、结束语
本文针对《C++语言程序设计》实验教学中存在的问题, 提出了提高实验教学效果的具体要求措施, 通过实践表明这种通过实验内容的完善、对实验过程的强化以及建立多方位实验成绩的评价体系的综合应用有效地提高了教学质量, 改善了教学效果。
参考文献
[1]周江《面向对象程序设计》课程实验教学改革探讨[J]实验科学与技术2008年第2期
[2]宣善立吴国凤C/C++程序设计实验指导与题解[M]高等教育出版社2006年8月
C++语言程序设计 篇5
16、要想共享初始化的过程,可以先定义一个共享成员函数,然后每个构造函数都调用之。
17、C++提供的默认构造函数是个无参构造函数,它仅负责创建对象,而不做任何初始化工作。只要一个类定义了一个构造函数,C++就不再提供默认的构造函数。(如果此时还想要无参构造函数,则需要自己定义)
与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则对象值是随机的。创建对象的唯一途径是调用构造函数。
静态对象只被构造一次,所有全局对象都在主函数main()之前被构造。
18、面向对象程序设计主要是两方面:面向对象应用程序设计,类库的设计。面向对象程序设计的关键是如何抽象和分类。
19、全局变量、静态变量、常量存放在全局数据区,所有类成员函数和非类成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区。
void* malloc(size_t);和void free(void*);在头文件malloc.h中声明。而操作符new和delete是C++的一部分,无须包含头文件,它们都是从堆中分配和释放内存块,但是具体操作上两者有很大的区别。
操作堆内存时,如果分配了内存,就有责任回收它,否则运行的程序将会造成内存泄露,这与函数中栈区分配局部变量有本质的区别。
从C++来说,不使用malloc()函数一个原因是,它在分配空间的时候不能调用构造函数。
类对象的建立是分配空间,构造结构及初始化的三位一体,它们统一由构造函数来完成。而new和delete在创建对象和删除对象时,便同时调用构造函数和析构函数。
定义对象数组,在生成对象时,依次调用构造函数(如依次生成ps[0],ps[1],ps[2]......),由于分配数组时,new的格式是类型后面跟[元素个数](student* ps=new student[10]),不能再跟构造函数参数,所以从堆上分配对象数组,只能调用默认的构造函数,不能调用其它任何构造函数,如果该类没有默认的构造函数,则分配对象数组失败。Delete[] ps告诉C++将要该指针指向的是一个数组,如果在[]中填上了长度信息,C++将忽略。20、拷贝构造函数
当构造函数的参数为自身类的引用时,这个构造函数称为拷贝构造函数。拷贝构造函数的功能是用一个已有对象初始化一个正在建立的同类对象。拷贝构造函数定义形式如下: Student(student& s)
27、C++基础笔记(一)墨涵天地
Person p1;
p2=p1;
27、C++基础笔记(一)墨涵天地
27、C++基础笔记(一)墨涵天地
在创建对象p2时,对象p1被复制给了p2,同时资源也作了复制,此时p1和p2指向不同的资源,这称为深拷贝。
27、C++基础笔记(一)墨涵天地
如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。C++提供的默认函
数只是对对象进行浅拷贝复制。如果对象的数据成员包括指向堆空间的指针,就不能使用这种拷贝方式,要自己定义拷贝构造函数,为创建的对象分配堆空间。
21、静态成员
这种属于类的一部分,但既不适用于普通成员函数,也不适用于全局变量表示的数据,我们用静态成员来表示。
一般情况下,我们在类的内部实现中对静态数据成员进行定义(在类的内部实现中分配空间和初始化)。
Int student::noOfstudent=0;静态数据成员一般用于:
标志一个事件的发生与否,某个特定的指针,变化的对象等。
静态成员函数定义是类的内部实现,属于类的一部分,定义位置同一般成员函数。与静态数据成员一样,静态成员函数与类相联系,不与类的对象相联系,所以访问静态成员函数时,不需要对象。如果用对象去引用静态成员函数,只是用其类型。
#include
} protected: char name[40];static int noOfStudents;};int Student::noOfStudents=1;int main(){ Student s;cout< ********************************* class Sc { public: void nsfn(int a);//类同声明成Sc::nsfn(Sc* this,int a) static void sfn(int a);//无this指针 //...};void f(Sc& s){ s.nsfn(10);//C++编译成Sc::nsfn(&s,10)s.sfn(10);//C++编译成Sc::sfn(10)} 关键词: Windows程序设计; Visual C++; 教学改革; 实例教学 中图分类号:G642 文献标志码:A 文章编号:1006-8228(2012)09-57-03 “Windows Programming—Visual C++” course Liu Zhi, Zhang Jinrong, Wang Sen (College of Computer Science and Engineering, Chongqing University of Technology, Chongqing 400054, China) Abstract: Aiming at the characteristic of widely involved knowledge, strong practice and high complexity of the course "Windows Programming—Visual C++", the difficult essence of this course is analyzed and existing problems of traditional teaching process are summarized. Some reformation and measurements are taken from aspects of teaching content, teaching methods and teaching patterns. It proves in real teaching process that students'' active studying capability is improved and their programming interests are invoked. As a result, students have put their attention on this course more quickly and the teaching effects have risen obviously. 近年, 随着现代编程技术的广泛应用与发展, C++语言程序设计越来越普及, 学习C++语言已成为现代软件开发人员的必备知识之一, 因此各大高校计算机科学与技术专业都把学习C++语言作为一门专业必修课, 而且在一些非计算机专业中也不同程度地开设该课程。“C++语言程序设计”课程具有很强的操作性, 其实践教学是培养学生程序设计能力的重要手段。 目前, 大部分学生在学习完该课程后, 虽然掌握了不少语法知识, 但是动手能力差, 在面对实际问题时, 不知如何编程, 不会处理解决实际问题。由于该课程的抽象性、复杂性, 如何能在有限的课时内, 使学生掌握C++的语法结构及面向对象的程序设计思想, 并且具有一定的编程能力, 是C++语言程序设计教学实践中所面临的一个问题。 2 实践教学过程中存在的问题 2.1 实验环节重视不足 “C++语言程序设计”是一门实践性很强的课程, 课程的主要目标之一就是提高学生的实践动手能力, 培养学生利用面向对象的程序设计解决实际应用问题的思维方式。但目前的实践课教学中存在着很多问题。上机实验的目的不明确, 实验的内容不清楚, 针对性不强, 多数是验证性实验, 设计性、综合性实验少, 多数学生照抄照搬程序代码, 根本没有真正掌握面向对象的编程语言的思想, 真正理解程序的意义。 2.2 学生缺乏学习兴趣 C++繁杂的语法, 类、对象、继承与派生、多态性等众多抽象的内容, 学生普遍感到难以掌握, 对面向对象的思想更不易理解, 初学时也很难认可它的价值, 不知学为何用, 学习缺乏目的性, 从而无法激起学生学习的兴趣。另外, C++编程的源代码通常比较庞大, 原因是数据与数据的操作封装在一起, 编程时也容易出错, 不易调试, 众多的成员函数使学生望而生畏, 从而削弱了学生的学习积极性, 降低了学习C++语言的兴趣和信心。 2.3 学生程序设计能力弱 面向对象的C++语言语法较复杂、规则繁多、涉及的概念抽象, 教学中往往注重于语言本身的讲解, 削弱了更为重要的算法的教学和解决实际问题的能力。另外, 有很多学生没有意识到应该经常自己尝试编程去实现某一功能, 从编写源代码到得出运行结果这个环节中, 来逐渐提高程序设计的能力。针对以上的问题, 我们在教学过程中逐步对实践教学进行探索, 尝试了以下的方式以提高实践教学效果。 3 实践教学方法的探讨 3.1 改革实验教学内容 为了培养学生实践动手, 综合应用的能力, 实验教学中应该合理的安排好实验内容。过去课堂教学偏重于传授理论知识, 而实验教学只作为验证理论的一种手段。因此, 实验教学中往往并不能真正达到预期的目的。作为拓宽学生知识面, 培养学生观察问题、分析问题、解决问题的重要环节, 教师应该认真准备实验教学, 明确实验目的, 教学中提出实验注意事项及编程难点, 采用示例法、讨论法、演示法、启发式教学方法, 增加设计性、综合性的实验内容, 实验学时与理论学时的比例基本达到1:1, 加大实验室开放的力度, 为学生创造良好的实验环境。 C++是当今世界上最流行的软件开发语言之一, 其中“面向对象”是最重要的编程方法, 在教学中发现学生往往把握不住“面向对象”中提出的对象、类的本质, 也弄不太清楚类的继承性与多态性实现的原理。因此在学习过程中只好死记硬背语法法则, 生搬硬套。针对这些问题, 教师应精心设计相应的实验内容, 为学生提出具有阶段特点的编程要求, 由浅入深循序渐进地逐步深入学习C++语言程序设计方法, 从而增强学生学习的信心, 消除畏惧心理。使学生通过上机操作, 调试, 观察程序的运行情况和结果, 真正理解“面向对象”的思想和编程方法, 并且体会到采用了面向对象编程技术之后, 软件重用所带来的好处, 从而使理论和实践相结合, 提高教学质量。随着课程的深入, 实践的内容尽可能要求学生能够独立设计、编程, 进一步增强学生独立分析问题、解决问题的能力, 为用C++开发项目打下基础。 3.2 加强团队合作 在实验教学中, 创建团队, 把学生分成小组, 选出一名组长, 负责小组活动。对于一些设计性、综合性的实验内容, 学生以小组为单位来完成, 教师提前把内容布置给学生, 让学生充分预习, 加强组内同学之间的交流沟通能力, 集思广益, 各抒己见, 找出解决问题的思路与方法。这样能够自然地调动学生的参与, 有效开阔学生的思维, 激发学生学习的动力。 教师在实验指导过程中, 发现实验中普遍性问题和同学中的新思路、新方法, 实时地提出问题, 对存在的共性问题进行讲解, 或者请有独特思路的小组, 由组长演示自己的方法或程序, 对比各种方法的优缺点, 修改错误, 鼓励大家提出新方法, 引导学生进行程序的优化, 提高编程的灵活性。在完成实验的过程中, 提高了学生分析解决问题的能力和创新能力, 培养了学生团队协作精神。软件开发的过程中, 团队合作是非常重要的。如果没有科研团队的协作, 要完成重大的科研项目, 是不可想象的。学习编程语言的过程中, 不仅要培养学生具有分析问题、解决问题的能力, 还应注重培养其团队合作能力。强调培养学生的团队精神, 不仅要使学生具有一种从事科学研究所必备的素质, 而且也是为了使他们进入社会后能与他人更好合作与沟通。 3.3 注重实验总结 实验教学中应注重实验结果的分析与总结, 使学生巩固本次实验内容, 培养学生分析、概括能力。学生调试和运行完程序后, 进行以下两方面内容:一是对实验的结果与调试中遇到的问题, 以实验报告的形式总结出来, 真正解决编程过程中的问题;二是让各小组讨论, 就本次实验过程的收获, 解决问题的思路与方法, 各种算法的比较等问题做一总结, 从而扩展实验内容, 避免今后再出现类似的问题, 更好地掌握所学知识。 3.4 进行网络实践教学 随着网络技术的发展, 多媒体教学形式的产生, 教师可以以网络和现代教育技术为依托, 创建一个开放式的网络教学模式, 合理地使用网络教学平台进行辅助教学。建立以教师为主导、学生为主体的自主学习的交互式网络教学环境, 通过网络提供的大量资源, 使C++语言程序设计教学内容更丰富, 教学方式更灵活, 教学手段更先进, 更有利于调动学生学习兴趣及学生个性化发展。教师可以把教案、作业、算法案例、视频点播、多媒体课件, 试题库等一系列资料上传到平台上, 在线答疑, 留言等。学生可以下载相应的资料, 上传自己完成的作业、实验报告, 在线自测, 并反馈学习中困难, 教师及时做出解答, 增强交互性。通过网络教学平台真正实现资源共享和信息交流, 极大地激发学生学习兴趣, 提高教学效率。 3.5 考核方式 针对C++语言的课程特点, 既要考察基本知识点.又要考察编程能力。在实验教学环节中, 采用上机考试和课程设计的形式。要求学生利用已学的知识, 去设计和开发小型的应用系统, 用于考察学生的编程能力。学生通过参与应用系统的设计和开发, 了解并掌握利用计算机进行应用系统设计的过程和方法, 使学生获得自主学习的能力, 极大地调动学生主动上机调试程序的热情。上机考试主要测试学生在规定的时间内正确编写和调试程序的能力, 进一步引导和督促学生重视实践教学。 4 结束语 实践教学的改革和探索, 一方面培养了学生应用计算机解决问题的实际动手能力, 另一方面也开发了学生新的思维方式。作为教师, 应重视实验教学, 一定要在教学过程中不断端正学生的学习态度, 激发学生兴趣和积极性, 在一定程度上提高学生程序的编写、调试、优化等能力, 为今后学习其他计算机课程打下良好基础。 参考文献 [1]李宇翔, 李端明, 王大志.提高“C++语言程序设计”教学效果的思考[J].福建电脑, 2006 (1) . 关键词:C++,教学改革,教学模式,教学方法,教学内容 一、引言 “高级语言程序设计 (C++) ”一直是计算机专业、信息类和电类一年级学生开设的专业基础课程, 部分其他理工科专业也将此课程纳入公共基础课范畴。本课程培养学生软件设计逻辑思维和编程能力, 特别对于计算机专业的学习, 是后续专业课程必不可少的先修课程。目前, 课程的建设综合考虑了各专业学生的接受能力和学习条件, 事实上, 对于计算机学科领域的学生, C++作为他们学习的第一门计算机高级语言, 掌握和运用的好坏不仅仅影响了他们对整个学科知识体系的理解, 更体现了他们的专业素质和技巧。 通过一段时间的教学, 我们发现, 目前存在的主要问题是课程学习完毕以后, 学生能掌握一定的理论知识, 但实际动手能力较差。大部分学生在通过一年的学习后, 只会解决书本和试卷中的练习题, 但不会处理解决实际问题, 不能动手编制较复杂的程序。因此, 我们建设更适于计算机相关专业的C++课程, 而改革的核心在于实验。 二、教学模式改革 笔者认为, 当前高校教学改革的长期目标之一是要改变传统的以教师为中心的教学模式, 建构一种既能发挥教师的主导作用又能充分体现学生认知主体作用的新型教学模式。在此基础上逐步实现教学内容、教学手段和教学方法的全面改革。之所以要把教学模式作为此次教改的主要目标, 是因为教学模式是指在一定的教育思想、教学理论和学习理论指导下, 在一定环境中展开的教学活动进程的稳定结构形式, 也就是说, 教学模式是指按照什么样的教育思想、教学理论和学习理论来组织教学活动进程。所以教学模式是教育思想、教与学理论的集中体现。教学模式的改变将要引起教学过程的深刻变革, 也必将导致教育思想、教学观念、教与学理论的根本变革。 从我们目前的现实情况看, 教学模式基本上都是以教师为中心。这种模式的优点是有利于教师主导作用的发挥, 便于教师组织、监控整个教学活动进程, 便于师生之间的情感交流, 因而有利于系统的科学知识的传授, 并能充分考虑情感因素在学习过程中的重要作用。其严重弊病则是:几乎完全由教师主宰课堂, 很大程度上忽视了学生的认知主体作用, 不利于具有创新思维和创新能力的创造型人材的成长 (按这种模式培养出的绝大部分是知识型人材而非创造型人材) 。 建构主义学习理论和学习环境强调以学生为中心, 要求学生由外部刺激的被动接受者和知识的灌输对象转变为信息加工的主体、知识意义的主动建构者, 建构主义的教学理论则要求教师要由知识的传授者、灌输者转变为学生主动建构意义的帮助者、促进者;要求教师应当在教学过程中采用全新的教育思想与教学模式 (彻底摒弃以教师为中心、强调知识传授、把学生当作知识灌输对象的传统教育思想与教学模式) 、全新的教学方法和全新的教学设计。因而很自然地, 建构主义的学习理论与教学理论就成为以学生为中心教学模式的主要理论基础。以学生为中心的教学模式注意在学习过程中发挥学生的主动性、积极性, 相应的教学设计主要围绕“自主学习策略”和“学习环境”两个方面进行。前者是整个教学设计的核心——通过各种学习策略激发学生去主动建构知识的意义 (诱发学习的内因) ;后者则是为学生主动建构创造必要的环境和条件 (提供学习的外因) 。 上述两种教学模式各有其优点和不足, 结合我们社会和学校自身的实际情况, 我们希望能够实践一种更加符合实际的“主导—主体”的双主教学模式。双主模式介于上述两种总模式之间, 它不是以教师为中心, 也不完全是以学生为中心, 而是既发挥教师的主导作用 (而不是像“教师中心模式”中那样发挥“主宰”作用——自始至终主宰课堂, 完全由教师唱主角) , 又要充分体现学生的认知主体作用, 即要把“教师中心”和“学生中心”两者的长处吸收过来, 而把两者的消极因素加以避免。这就要求在基本保留“传递-接受”教学活动进程 (在大班授课情况下, 这有利于教师对教学的组织和主导作用的发挥) 的条件下, 要对这种“进程”加以认真的改造, 即在此进程中要利用计算机为核心的技术手段, 在建构主义理论指导下通过人机交互让学生更多地去主动思考、主动探索、主动发现, 从而形成一种新的教学活动进程的稳定结构形式:在整个进程中, 教师有时处于中心地位 (以便起主导作用) , 但并非自始至终;学生有时处于传递-接受学习状态, 但更多的时候是在教师帮助下进行主动思考与探索;教学媒体有时作为辅助教的工具, 有时作为学生自主学习的认知工具;教材要素也各自有不同的作用, 彼此之间有不同的联系, 从而形成一种新的教学模式——“双主模式”。这种模式的理论基础既有“传递-接受”教学理论和行为主义学习理论, 也有建构主义的教学理论和学习理论。 教学模式的改革必将引起教学策略、教学设计方法和教学内容的变化, 因此, 我们还要对现有的教学策略和教学内容进行一定的改造, 以适应模式的转变。 三、教学设计方法改革 在双主教学模式的背景下, 可以采用很多不同的具体的教学设计方法, 如支架式教学设计、抛锚式教学设计、随机进入式教学设计等, 这些设计方法可以在具体的教学过程中有选择性地采用, 在我们新的教学改革方案中, 我们也给学生定义了这样的七个学习阶段: 1.选——找到帮助 选包括选老师、选教材、选参考资料、选信息来源、选学习渠道, 等等。虽然一部分选择教师负责完成, 但教会学生充分利用网络资源、有效利用开发工具, 并以此作为他们的良师益友是非常重要的。笔者经常在第一堂课就告诉学生, 教师只是一个领路人, 他们的良师益友是编译器、是优秀的文献资料、是网络另一端的先行者们。 2.拓——认识程序 给学生们一些简单的例程, 给学生们一段操作的步骤, 让他们依葫芦画瓢地将程序输入, 编译、连接之后运行。这个时候他们多数只知道是连续的点击不同的按钮的操作过程。当出现错误时, 只能让他们仔细检查输入的每一个字符是否准确。但是, 这将树立他们对于程序的第一印象, 他们能迅速地体会到程序“启动”的欣喜和成就, 尽管不是自己创作的程序。 以往教学中, 习惯于先解释字、词、语句。每完成一部分内容的教学, 让学生们尝试用他们已经认识的信息组成的一段代码进行实验。实际上, 学生们在知识筹备的时间内, 他们对于词法、语法的学习是漫无目标的, 不知道什么时候有用, 不知道该怎么用;自然而然以一种死记硬背的方式去学习, 真正进行实验的时候, 一些记忆模糊了, 一些已经不记得了, 再一次从头来过。 事实上, “拓”的过程中, 学生对于语言知道的越少, 他对于程序的运行越感兴趣, 在后续的学习过程中, 更加能够集中精力去研究清楚程序中的每一个组成部分。这其实是在教学的初期阶段给学生建立一个谜题的过程, 而解开谜题的过程与科学探讨的过程及其相似。通过目标的创建, 不仅激发学生对于学习目标的兴趣, 还可以引导他们像专业人员一样思考。再给学生准备好一些更复杂的源程序, 让他们可以直接打开运行, 这些都可以吸引他们的注意力。 3.临——改动程序 在原样照搬的基础上, 一些变化能够激起学生更多的好奇心。通过让学生在例程上自由的进行一些改动, 记录下改动的内容, 猜测这样的改动将给程序的运行带来怎样的变化后再次编译运行, 来验证他们的想法。运用“差距理论”来调动学生的学习主动性。1994年, 卡耐基梅隆大学的行为经济学家Georgy Loewenstein给出了对情境兴趣最全面的解释。他认为, 当我们感到在知识上存在差距时就会产生好奇心;Loewenstein认为差距导致痛苦。当我们想知道什么事却无法知道的时候, 就像我们身上有个非挠不可的痒痒。为了解除这种痛苦, 我们就必须填补这种知识差距。即便看烂电影本身就是一种痛苦, 我们也会耐心地坐着, 因为不知道解决实在是太痛苦了。差距理论的一个重要含义是在填补差距之前要制造差距。说出事实之前, 他们先要认识到他们需要这些事实才行。根据Loewenstein的观点, 说服人们相信自己需要我们的信息的诀窍在于首先要强调某种他们所没有的特定知识。我们可以给学生们提出一个就他们的知识而言存在差距的问题, 给他们预测结果的挑战。 “改变‘=’左边的内容程序会怎么样?”, “改变‘=’右边的内容程序会怎么样?”不管结果和猜测是否吻合, 是否能分析出原因呢?“为什么改变‘=’左边的字符对于运行结果没有任何改变, 但是改变右边的字符, 运行结果就变了?”“如果把‘=’左右两边的内容交换又会怎样?”解决一个问题往往能引发出更多的问题, 让学生在一个自问自答的过程中思考和学习。 4.仿——重写程序 在帮助学生解答问题的过程中, 其实已经把语言的基本要素教授给了学生, 虽然他们还会拼写错关键字, 会不记得运算符的优先级别, 但是他们已经知道怎么去运用每一个元素。那些字面上的错误, 或者用户手册上清楚列明的问题不需要花费他们太多的时间去解决, 也将随着运用次数的增加牢牢地刻在学生脑海之中。 既然他们已经清楚了每一个分词在例程中的作用, 他们可以通过改写程序来实现一些类似但不同的功能。刚才他们只能把一个从1累加到10的程序改成从1累加到100的程序, 再改成从1累加到n的程序, 现在让学生解决一个计算2的n次方, 或者n的阶乘的程序, 接下来他们可以计算任意复杂的表达式了。 5.脱——创造程序 前面四个阶段是本科生必须在一年级完全经历的学习阶段, 后面的三个阶段在本课程的学时内或多或少的会有一些闪现, 然后一直贯穿学生专业学习的过程, 乃至从事软件开发工作的职业生涯。 当前面积累的例程代码都转变成个人的编程经验, 学生们面对问题不再需要摆着例程在面前。他们通过将问题不断分解, 直到每个小问题都是一个自己曾经解决过的问题。把积累的那些代码拼装起来, 得到新问题的解决方案。 进一步的脱离模板、程序创造, 需要学生进行数据结构和算法的学习, 这让他们能够组织的问题规模更加庞大, 结构更加复杂。每个学生有自己拆分现实世界的角度, 也有重新拼装的独特想法。同样的问题, 解题的思路丰富了, 编写的代码也各不相同。 6.变——创新程序 大作业或者课程设计是检验学生掌握计算机语言, 并能灵活运用的好方法。在布置大作业时, 让学生自由选题, 只对于程序的规模, 功能的完整性和知识点在程序中的应用提出。在检查学生们的大作业时, 总能出现一些很陌生的代码, 需要花上一些时间才能看懂看明白。到这一阶段时, 老师对于学生的影响已经很小, 尤其是技术的指导, 学生基本形成了特有的技术风格, 并感受到方法学、模式、结构框架等对于大规模开发的重要作用, 软件工程对于团队开发的重要作用。老师引导学生更加关注知识体系的组成、行业的发展趋势、先进技术的产生, 帮助他们开拓视野。Mitchell kapor的《软件设计宣言》说道“设计就是脚踏两个世界, 即技术的世界和人及其愿望的世界, 设计人员努力要做的是把两者结合到一起”。让学生懂得, 技术不是全部, 技术为人类服务。 四、教学内容改革 目前的教学内容主要依赖于课本, 但课本由于编写周期较长, 很多内容比较陈旧, 而且由于缺乏可视化编程的内容, 很多学生在学习完成之后无法编写标准的Windows程序, 导致他们学习兴趣骤然降低。我们计划在教学内容上作出如下改进: 1.采用课本+课外书藉+MSDN帮助+网络的多元化教材 课本和相关书籍由于结构清晰、层次清楚, 因此很适合学生作为系统的学习材料, 但也因其更新速度慢、离今后的实际工作距离较远, 导致学生学不到最新的知识, 进而导致学生缺乏实际的动手能力。采用多元化的教材, 一方面, 可以促进学生阅读大量的中英文技术文档, 提高其自主学习和研究的能力, 另一方面, 也可以让学生接触到最新的技术发展趋势。 2.加强可视化编程内容的学习 集成开发环境VC是可视化编程的开发工具。在以往的教学中, 只关注语言本身的练习, 因此只开发控制台 (DOS) 程序。但学生的兴趣不高, 成就感不强。将可视化开发纳入C++实验课程体系, 可以提升学习乐趣, 尽早给学生提供实现创新想法的工具。 3.加强编程模式的学习 计算机语言的学习, 不仅是语法规则的学习, 更重要的是编程模式的学习。在编程特别是面向对象编程方面有很多前人总结的模式和习惯用法, 这决定这一个程序设计人员水平的高低。这就好像人人都会下象棋, 但真正的高手是需要有一个行棋的模式的。常见的编程模式包括简单工厂模式、工厂方法模式、策略模式、装饰模式、建造模式、单例模式、多例模式、代理模式、适配器模式、桥梁模式、观察者模式等, 所有这些内容在现在的教材中都没有得到体现。 4.提倡规范化编程 好习惯从小养起, 好的编程习惯也要从初学就开始培养。在实验中应强调和贯彻专业的编程规范, 不仅可以减少程序中错误, 更是帮助学生树立了良好的专业形象, 培养职业道德, 为以后的团队合作、软件工程实践奠定基础。 五、总结和展望 高级语言程序设计是计算机和软件专业专业学习必不可少的先修课程, 能不能学好就意味着专业知识的基础是否扎实, 直接影响到后续学习的效果。笔者认为, 在传统的教学内容上, 必须融入团队精神和编程规范的思想, 以引导学生主动探究的方式开展教学, 从而提高学生的应用能力和创新能力。 参考文献 [1]Heath, Chip&Dan.Made to Stick[M].Random House, 2007. [2]威诺格拉德.Bringing Design to Software[M].机械工业出版社, 2005. [3]何克抗.关于网络教学模式与传统教学模式的思考.电化教育研究, 1998, (1) :34-36. 《面向对象程序设计及C++》是我校的一门通识基础课, 也是计算机学院省精品专业“计算机科学与技术”进行专业建设的重要支撑课程。该课程是一门实践性很强的课程。在教学过程中, 要求学生既要掌握概念, 又要掌握程序设计方法、技术、工具, 并且具备灵活运用的能力, 特别重视学生动手能力的培养。目前, 在教学中主要采用任务驱动、协作式、启发式和讨论式等教学法, 这些方法在培养学生分析问题和处理问题能力方面都取得了一定的成效。 然而, 在这些教学方法中, 在课件设计方面普遍采用Flash、Powerpoint、Authorware等多媒体设计软件, 设计出的课件基本上以幻灯片方式全屏放映, 以这种课件为教学道具多少还会给人一种“纸上谈兵”的感觉, 而编程最怕的便是“纸上谈兵”。在几年的高级语言程序设计教学中, 我们发现很多学生在课前预习了, 课上也认真听讲了, 说起概念来也头头是道, 可是到上机写程序编译后却错误百出, 更有些学生上机房时一坐在电脑前便无所事事, 不知编程从何做起, 又有大部分的学生看不懂程序的英文编译错误提示, 同时, 在程序的格式缩进、变量和函数起名、大小写的使用、行末分号等方面都没有形成良好的编程习惯。这一系列的问题都与目前课件的设计模式不适合《高级语言程序设计》这门课程有关, 它们都有一个共同的缺点, 那就是含知识内容的课件与实际编程开发环境相分离, 导致理论教学和实际应用衔接不及时、不直观, 学生的学习与实践产生脱节, 容易遗忘, 从而影响了学生的学习积极性。 为解决这些问题, 本文提出一种新的面向C++语言的课件设计思路, 根据《面向对象程序设计及C++》这门课程实践性强的特点, 利用插件技术开发了一套嵌入Microsoft Visual C++6.0集成开发环境 (IDE) 的课件设计平台, 基于该平台设计出的课件可以将C++语言的教学内容与实际编程开发环境紧密结合, 把培养和提高学生的实际编程能力的最终目标处处融合在教学过程中, 使得《面向对象程序设计及C++》课程的教学工作变得简单而有效。 2 课件平台设计 2.1 系统结构图 如图1所示, 课件平台利用Visual C++6.0 (以下简称VC6.0) 中的ATL项目开发基于VC6.0集成开发环境下的插件, 以此插件为核心, 获取VC6.0编辑窗口中源代码, 通过文法分析技术解析源代码, 利用键盘的虚拟码转换模块和HOOK (钩子) 技术监听来自USB翻页笔的按键信息, 根据源代码分析结果和按键信息从课件内容数据库中获取知识点, 并以GDI+显示技术展现在用户屏幕上。 2.2 核心技术实现 2.2.1 嵌入VC6.0 IDE的插件开发 要实现C++课件与C++集成开发环境的集成, 就必须使用插件 (Add-in) 技术。插件是一种遵循统一的预定义接口规范编写出来的程序, 应用程序在运行时通过接口规范对插件进行调用, 以扩展应用程序的功能。实现Add-in对象有三种方法:第一种是利用VC6.0 ATL COM Wizard中的ATL对象Add-in Object来实现;第二种是利用Dev Studio Add-in Wizard来实现;第三种是手工写所有的代码, 主要是实现IDSAdd In接口。 本课件主要采用第一种方法来实现, 具体是实现IApplication Events接口和IDSAdd In接口, 其中实现Iapplication Events接口是为操作Application对象, 比如New Document () 、Workspace Open () 等方法。而通过实现IDSAdd In接口, 将增加新的命令和工具条到VC6.0的IDE环境中去, 从而能操纵VC的IDE环境, 达到解析C++编辑器中源代码。 2.2.2 HOOK (钩子) 技术 为了实现课件的翻页功能, 本课件通过键盘钩子技术监视用户的键盘操作。HOOK技术是利用API来提前拦截并处理windows消息的一种技术, 它是一个处理消息的程序段, 通过系统调用, 把它挂入系统。每当特定的消息发出, 在没有到达目的窗口前, 钩子程序就先捕获该消息, 亦即钩子函数先得到控制权。这时钩子函数即可以加工处理该消息。 要实现Win32的系统钩子, 必须调用SDK中的API函数Set Windows Hook Ex来安装这个钩子函数, 这个函数的原型是 HHOOK Set Windows Hook Ex (int id Hook, HOOKPROClpfn, HINSTANCE h Mod, DWORD dw Thread Id) ; 其中, 第一个参数是钩子的类型;第二个参数是钩子函数的地址;第三个参数是包含钩子函数的模块句柄;第四个参数指定监视的线程。如果指定确定的线程, 即为线程专用钩子;如果指定为空, 即为全局钩子。其中, 全局钩子函数必须包含在DLL (动态链接库) 中, 而线程专用钩子还可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理后, 如果想要该消息继续传递, 那么它必须调用另外一个SDK中的API函数Call Next Hook Ex来传递它。钩子函数也可以通过直接返回TRUE来丢弃该消息, 并阻止该消息的传递。 2.2.3 GDI透明位图显示技术 在通过插件技术完成了课件和集成开发环境的集成以及通过钩子技术完成了课件的翻页功能之后, 还需要利用绘制"透明"位图来达到课件内容和集成开发环境的人性化显示效果。绘制“透明”位图是指绘制某一位图中除指定颜色外的其余部分, 一般称这种颜色为“透明色”。通过将位图的背景色指定为“透明色”, 在绘制时, 不绘制这部分背景, 而仅绘制图像, 这样就可以将位图中图像透明地绘制到窗口上。 绘制“透明”位图的要害是创建一个“掩码”位图 (maskbitmap) , “掩码”位图是一个单色位图, 它是位图中图像的一个单色剪影。在Windows编程中, 绘图都要用到设备描述表, 需要创建两个内存设备描述表:位图设备描述表 (image DC) 和“掩码”位图设备描述表 (mask DC) 。位图设备描述表用来装入位图, 而“掩码”位图设备描述表用来装入“掩码”位图。在“掩码”位图设备描述表中制作“掩码”位图的方式是:先创建一个单色的Bitmap, 装入mask DC, 然后, 以“SRCCOPY”的方式将装有位图的位图设备描述表绘制 (Bit Blt) 到mask DC上。这样, mask DC的显示平面中的位图即是“掩码”位图。 一般情况下, 绘制“透明”位图的实际操作步骤如下: 步骤1、位图设备描述表以“SRCINVERT”的方式绘制 (Bit Blt) 到显示设备描述表上; 步骤2、"掩码"位图设备描述表以“SRCAND”的方式绘制 (Bit Blt) 到显示设备描述表上; 步骤3、再将位图设备描述表以“SRCINVERT”的方式绘制 (Bit Blt) 到显示设备描述表上。这样除"透明色"外的其余位图部分 (图像部分) 就被绘制到窗口上了。 上述操作中需要用到的显示函数Bit Blt的原型和说明如下: BOOLBit Blt (intx, inty, intn Width, intn Height, CDC*p Src DC, intx Src, inty Src, DWorddw Rop) ; 函数的参数说明如下:intx表示贴到目的地的左上角X坐标;inty表示/贴到目的地的左上角Y坐标;intn Width表示贴到目的地的区域宽度;intn Height表示贴到目的地的区域高度;CDC*p Src DC表示存储源位图的设备描述表;intx Src表示源位图的左上角X坐标;inty Src表示源位图的左上角Y坐标;DWORDdw Rop为柵格运算标志。 3 平台运行效果及其实践意义 3.1 新旧课件的效果图对比 从新旧课件的界面 (图2和图3) 的对比上不难看出, 原先使用的课件在授课时将全屏覆盖实际的集成开发环境, 需要频繁地切换视图, 影响教学效果, 而从本文设计的课件效果图上看, 课件内容与集成开发环境融合在一个视图中, 理论教学与实践演示和谐统一, 有利于教学效果。 3.2 实践意义 本项目的实践意义和推广价值主要包括: (1) 有助于学生深入理解和掌握程序设计的精髓, 激发学生的学习热情和积极性; (2) 能够对各种编译错误即时提示和解析, 有利于学生及时了解和比较各种在实际编程中可能遇到的问题, 有效提高学生处理问题的能力; (3) 将教学内容充分集成到开发环境中, 保留了课件内容的直观性、真实性, 提高教学质量和效率。 4 结束语 在计算机教学中, 面向对象程序设计语言C++课程是许多高校中作为专业或通识基础课都要开设的, 对于这类计算机编程语言课程, 如果采用传统的“黑板+粉笔”或者现在常用的全屏多媒体课件的教学模式, 很难直观地、形象地让学生理解源程序在实际集成开发环境中的编辑、编译、链接和运行过程。本文提出的课件设计方法能够将编程语言的知识内容直接在开发环境中显示出来, 不仅学生可以容易理解和掌握所学内容, 而且对于教师来说可以作为多媒体课件教学的辅助或替换手段, 能够在课件中列举大量典型的源程序实例, 配合详细、生动的讲解, 则一定能有效克服上述缺陷, 大大提高教学效率和教学质量。 参考文献 [1]陈芳.谈VC++程序设计语言教学[J];淮阴师范学院教育科学论坛, 2006 (3) . [2]陶文金, 敬茂华.基于HOOK进程监控的设计与实现[J];电脑编程技巧与维护, 2009 (16) . 1. C++语言教学平台系统体系结构设计 C++语言教学平台系统采用的三层B/S架构模式, 使客户端与服务器的数据处理负载得以平衡, 实现分布式计算的设计目标, 提高系统的可操作性和通用性, 服务器端负责处理数据信息的同时, 客户端可以实现数据信息的生成和查询功能, 充分体现客户端与服务器的特征优势, 发挥Web服务的最大作用, C++语言教学平台系统的B/S架构模式如图1所示: 在C++语言教学平台系统的三层体系架构中, 最底层是数据信息服务层, 负责对系统中的数据信息进行处理;中间层是负责对事物进行逻辑处理的功能层;最上层是用户界面层, 负责输出和显示系统应用服务。 2. C++语言教学平台系统功能架构设计 C++语言教学平台系统主要可以实现教学资源交换与共享、学生作业提交、教师批改作业、在线考试测评、在线答疑解惑、在线发布和浏览公告等, 使传统的课堂学习模式更加灵活方便。C++语言教学平台系统功能模块如图2所示: C++语言教学平台系统用户主要包括三种类型:一是教师用户;二是学生用户;三是管理员用户。首先, 学生注册成功拥有个人账户, 可以登录到系统中完成相关操作, 包括浏览教学资源、下载教学资源、在线提出问题、在线提交作业等。教师注册成为教师账户后可以登录到系统中上传教学资源、在线批阅试卷、在线解答问题等。系统管理员则可以对系统其他用户进行管理, 完成用户授权、资源配置等操作。 3. C++语言教学平台系统数据架构设计 在C++语言教学平台系统中, 系统数据包括教师信息、学生信息、教学资源信息等, 以及系统对数据信息进行处理过程中产生的用户身份验证信息等, 同时还包括C++语言课程信息、作业信息、讨论区信息和考试信息等。 由于系统管理员所承担的功能比较简单, 因此本文对其逻辑功能不再赘述。C++语言教学平台系统数据架构示意图如图3所示, 图中给出了教师与学生的逻辑关系: C++语言教学平台系统中, 教师用户信息与学生信息、作业批改信息、教学资源信息、在线答疑和讨论区信息相关;学生信息与在线答疑信息、教学资源信息和作业提交信息相关联。 4. C++语言教学平台系统数据库设计 本文选择SQL Server 2010作为数据库系统, 以学生在线答疑和学生基本信息为例, 给出了两种数据表和对应的数据项: 5. C++语言教学平台系统详细设计 ⑴上传和下载教学资源模块。由于C++语言程序设计课程属于自主性较强的教学内容, 因此, 教师需要为学生提供丰富的教学资源, 以供学生下载学习使用, 包括C++语言程序设计电子书、C++语言程序案例等。 ⑵发布和维护公告模块。教师用户可以通过发布和维护公告模块将各种信息置于平台中, 包括C++语言程序设计课程安排、考试时间安排、教务处紧急通知等。学生则可以登录系统随时查看公告栏发布的最新信息。 ⑶作业功能模块。对于作业功能模块来说, 学生可以通过网络上传个人作业, 教师在线考核学生作业的完成质量, 对学生的作业进行评价。 ⑷在线答疑模块。C++语言教学平台系统设计实现了一个讨论区域, 学生可以在线提出问题, 教师在线解答学生的问题, 在线答疑功能同时实现了教师向学生提出问题的功能。在线答疑功能中, 学生和教师可以分别向对方提出问题, 也可以解答对方提出的问题。在答疑功能中可以设置一个讨论区, 以主题发问的形式发布一个问题主题, 用户可以在线回复问题, 由系统管理员对发帖进行管理。在C++语言教学平台系统中, 讨论区可以包括多个讨论组, 以此实现虚拟写作学习。同时, 用户可以浏览全部讨论主题, 并在回复栏留言回复。C++语言教学平台系统给予了教师和学生平等交流的空间, 使师生可以共同进步。 ⑸聊天室模块设计。学生和教师可以登录到C++语言教学平台系统中, 进入聊天室进行实时交流, 教师和学生还可以随时查看历史聊天内容、删除聊天记录和发送聊天内容。 ⑹在线考试模块。 (1) 学生可以选择需要测评的试卷; (2) 系统可以为学生随机生成试卷, 并进行暂时存储; (3) 当学生完成试卷时可以进行保存, 系统会根据试卷中的答案自动测评, 并显示学生成绩。 ⑺学生账户模块。C++语言教学平台系统可以实现对在线考试的学生信息进行管理。首先, 学生进入系统注册成为在线考试用户, 并进入系统登录到个人用户状态, 系统管理员可以随时对在线考试学生的账户进行管理, 并查看账户状态, 同时负责添加和删除在线考试学生账户。 ⑻在线批阅模块。 (1) 教师可以登录系统浏览学生在线考试答卷情况; (2) 系统可以自动批阅试卷, 给出试卷成绩;教师登录到C++语言教学平台系统之后, 可以随时浏览学生答卷情况, 当学生完成试卷之后, 也可以查询浏览个人答卷情况。 结论 综上所述, C++语言教学平台系统是当今社会互联网环境下的新型教育方式, 但是在实际应用中仍然存在诸多问题, 例如无法对学生的学习过程进行监控、无法实现智能化交互等, 故而下一步需要对系统进行扩展设计, 加强系统的实用性和稳定性。 摘要:随着计算机技术、通信技术和互联网技术的发展, 网络应用广泛应用于人们日常生活中, 各大高校相继建立了符合学校战略发展目标的校园网络, 实现了教学资源的网络共享与交换, 网络教学方式应运而生。文章基于以上背景, 提出了C++语言教学平台系统的设计方案。 关键词:网络教学,教学内容,教学平台 参考文献 [1]李美.基于.net的学生教学管理系统设计与实现[J].牡丹江大学学报, 2012, 12:139-142. [2]李庆年.浅谈利用网络学习系统提高C语言实践课教学[J].中国——东盟博览, 2012, 12:129. 1 程序设计语言C与C++的比较 1.1 C与C++的共性。 一般简要的介绍是把C++当作C的加强版, 这种认知当然是错误的, C++语言的设计者在设计之初为了保障自家语言会受到开发者的关注, 所以兼容了的C的语法, 这就自然使得C++可以使用C的编程方式进行程序设计, 所以也导致了很多人对这两种语言的关系产生了错误的认知。 同时由于C语言本身设定上的优越性, 所以C++在进行自我定义的时候也沿用了C语言很多优良的性质。基础数据结构一致, C与C++的基础数据类型都是以变量和常量作为基本属性划分, 类型上有字符型、整型、长整型、单精度浮点型和双精度浮点型, 不过C++额外增设了布尔型。复合型数据结构上也都同时具有数组、多维数组、结构体、枚举类型和共同体, 但是C++增设了字符串类型以替代C语言中的字符数组, 功能上更加强大, 也更加便捷。在语法方面, 声明、赋值、循环、选择的结构和实现都是一致的, 并且C++虽然提倡使用类和对象的概念去设计程序结构, 可也同样支持函数体结构的程序设计结构。并且C语言中函数的赋值都是间接调用, 在使用C语言函数时总是会在指针上出现各种纰漏, 但是C++的函数体可以使用引用参数, 这就使得C++的函数体比之C的更加好用。总的说来就是, C++标准下用户可以完全使用C语法进行编程而不会出现任何BUG, 同时C++自身的优越设定和标准使得其设计能力比C要强大数倍, 是目前市场上大型程序开发的首选语言。 1.2 C与C++的不同。 上一节介绍了C++和C的基础语法上的区别, 这些区别都是C++的作者在C的基础之上修订而来的结果, 是为了让C++标准下得面向过程的程序设计比之单纯的C更加便捷方便。但是C++的诞生伊始, 就是一门向上使用面对对象的程序设计思想的高级编程语言。它的封装性、继承性、多态性和对象唯一性才是C++成为强大高级语言的重要原因, 这些特性都是C语言不可能拥有的。所以C能够实现的程序, C++能够实现并且实现的更为方便, C不能实现的程序, C++同样可以实现。 1.3 C++的特色。 承接上一节, C++和C之间最大的不同, 也是C++自身最值得夸耀的特性, 就是面向对象程序设计思想。这种思想使得C++语言设计出来的程序, 变成了类和对象的有机结合, 这种结合的代码比之面向过程的函数体架构的代码更加易读, 共同开发起来容易上手, 后续的维护者也不用费更多的脑筋去理解前人的代码含义。而类和对象的设计思路, 使得开发者合作时相互之间的工作变的更为独立, 双方之间只需要知道对方所写的类实现的功能和包含的数据就行。这种特性我们称之为良好的封装性, 开发者之间不需要去知道对方的代码是如何实现, 甚至在此之上还可以保证良好的代码健壮性。因为类的引入, 更先进的作用域机制也被引入进来, 类的书写者往往会将自己类中的数据进行严格的作用域限定, 防止其他合作者擅自去修改和使用自己类中的数据。合作者想要知道类中的数据或者使用类中的数据, 只能通过类的书写者定义的带有检查机制的方法才行。这样会使得很多人合作开发的大型项目的稳定性和安全性比之用C语言开发时再上一个台阶。 同时类的概念中还有一个先进的设定就是继承性, 并且由这个继承性还延伸出了接口的概念。有了可以继承的接口和类, 那么开发者在对程序进行迭代的瀑布开发流程时, 就可以很好的使用自己曾经开发的源代码, 或者借用其他项目的源代码, 因为只要学会科学的使用继承机制, 就不仅仅是节约程序员的代码时间, 也减少了程序员在回顾曾经代码时发生的错误和歧义。 而与继承机制配合使用的是多态性, 曾经C语言中定义的函数, 其灵活度非常差, 特定的函数只能满足特定程序定义的需求, 想要重用曾经的源代码是几乎不可能的事情。我们刚才提到的继承机制使得C++开发者复用源代码成为了一种习惯, 但是复用时不可避免的修改问题又摆到了台面上, 多态机制顺应而生了。多态机制使得类不仅可以继承其他类, 将父类的数据和方法都在本类体中自如的使用, 同时还可以用本类中新的定义和代码去覆盖父类中的数据定义和方法。这就让程序员变的更加自由, 想用父类的数据和方法时就去继承, 但是不想全部使用时就加上多态机制去覆盖。这样代码之间的重复利用率变得十分客观, 节约了大量的开发时间和开发成本。 2 程序设计语言C与C++开设建议 C++课程的内容应当如下安排: 第一部分, 教授C++的基础语法, 让学生可以编写出在DOS命令行下输入输出的程序, 了解编程的基本概念和思想。并且这时应当同时进行C和C++的双向语法教学, 为日后学生进入高年级后的方向选择打下基础。此部分使用半个学期最为适宜, 并且此时并不灌输学生何为面向对象何为面向过程, 而主在让学生使用基础语法进行最基本的编程探索。 第二部分, 在学生有了基础编程知识后, 将数据结构的内容放入课程中去, 用半学期的时间教授学生用C++实现的各类常见数据结构。并且结合实际开发项目中的代码作为阅读补充, 让学生明白数据结构的知识对程序开发的意义, 然后将简化后的小项目作为课堂的主要内容, 用实际的代码让学生去理解那些枯燥的数学定理和概念。而且在实现数据结构的过程中, 必然会面对一些更为高级的C++语法和概念。总的来说, 用大一上的一个学期让学生对于基础编程有了良好的认知和深入, 是十分值得和有效的。 第三部分, 在学生有了数据结构的基础和C++的基本语法掌握后, 应当面对一些实际的开发项目和问题。当然实际的问题还是需要老师进行简化, 其主要目的是让学生掌握C++的高级特性和实际软件开发的过程与思路, 并且想学生传授基础的算法。这一部分较为困难, 应当使用一个学期让学生慢慢的掌握和熟悉。 第四部分, 在学生算是对C++语言和数据结构与算法都有了基础的入门后, 再进行课堂教学意义就不大了, 应当再大二上学期开设一门课程设计实验课, 让学生完成几个难度从小到大的项目, 循序渐进的掌握基本的实际开发技巧和思维。 参考文献 [1]罗莉.计算机程序设计的多应用型开发与实现[J].产业与科技论坛, 2015 (14) :54-55. [2]邓薇, 何锫, 钱俊彦, 等.深度优先的多基因表达式程序设计[J].模式识别与人工智能, 2013 (9) :819-828. 【C++语言程序设计】推荐阅读: 黑马程序员C语言教程:C++语言78个常见编译错误及分析11-15 C++语言教学08-13 程序语言09-02 语言程序07-25 C#程序语言07-26 Java程序设计语言08-31 VB语言程序设计09-18 中职程序设计语言教学09-21 vfp语言程序设计10-22 vb程序语言设计总结01-30C++语言程序设计 篇6
C++语言程序设计 篇7
C++语言程序设计 篇8
C++语言程序设计 篇9
C++语言程序设计 篇10
C++语言程序设计 篇11