1浅谈C++程序设计课程的建设与实践刘维富liu.wf@ntu.edu.cn南通大学计算机科学与技术学院2006.11第二届“大学计算机课程报告论坛”2一、C++课程背景•C++语言–兼容C的面向对象程序设计语言。–面向过程和面向对象的主流程序设计语言,编写系统软件和应用软件的通用语言。–“高级语言程序设计”课程的首选教学语言。•课程认识–本身是一门基础课–后续课程的基础–计算机应用的开发工具–创新教学的理想平台3•课程特点–内容多、环节多、难点多、问题多。–大班教学,教学质量难保证。–课堂教学和实验教学并重,学以致用,以编程解决实际问题为目标。–课程涉及语言语法、算法、调试等,综合性、实践性强,理论与实践结合紧密。–非计算机专业学生需参加二级考试,真正考教分离。–实验编程环境极其严格,结果要求100%正确,对培养大学生编程能力、创新能力和严谨的科学作风有非常重要的作用。•C++课程考核–笔试(50%)+机试(50%)4二、教学内容•教学安排(1学时=40分钟)–授课:62学时–课程实验(与授课同步进行):34学时–课程设计(授课结束后进行):2周•知识模块–第一单元结构化程序设计基础:包括C++概述、数据类型、运算符、表达式、简单的输入输出、算法与流程控制语句等,约30学时。–第二单元模块化程序设计:包括函数、编译预处理、数组、结构体、共用体、枚举类型、指针和引用,约34学时。–第三单元面向对象程序设计:包括类、对象、构造函数、析构函数、继承、派生、友元、虚函数、静态成员、运算符重载、I/O类库和模板等,约32学时。5•课程的重点、难点及解决办法–算法表达、结构化语句:结构化编程基础。注重讲授算法的结构化表示法,结构化语句,常用基本算法,断点+单步调试技术。–函数:模块化编程基础。注重讲授程序的模块化组织思想和方法,自顶向下逐步求精的程序设计思想,参数传递,变量作用域,程序的多文件组织。–数组、结构体、指针:数据的结构化和模块化组织基础。指针是重点和难点,应正确区分指针与地址,强调指针类型的作用,讲清各类指针的含义及作用;特别注重讲授指针在动态生成基本数据结构,解决实际问题方面的综合实例。–类和对象、继承、运算符重载、虚函数:面向对象程序设计基础。运算符重载较易理解,但有些方面易忽视,应提请学生注意。虚函数是重点和难点,应注重讲授虚函数的必要性、重要性、实现机制和综合实例。6三、教学方法•负反馈教学法的产生–确定教学理念:以整体提高教学质量为首要目标,注重学生创新能力和优秀人才的培养。–分析教学对象和教学课程:结合我校办学定位、人才培养目标和生源情况,对C++课程的特点、内容、结构及与其他课程的关系等方面做了大量研究。–改进教学方法:根据多年软件开发经验和C++课程的教学实践与研究,在控制论、教育学和心理学的基础上,吸收了布鲁纳的“发现教学法”和瓦根舍因“范例教学法”的合理成分提出了负反馈教学法。7•负反馈教学模型–从过程控制理论看,教学过程由组成系统的对象(教师、学生),教、学、检测和反馈等环节组成,是一个具有负反馈环节的过程控制系统,如图所示。–该模型的核心是通过反馈,及时发现和解决教学过程中存在的问题,确保整体实现教学目标。师:教生:学授课作业、实验测验讲评听课做作业做实验听讲评:自改做测验师:找问题改作业(抽样)指导实验改实验报告改测验-+教学目标答疑8•C++程序设计课程负反馈教学法的要点–按单元组织教学:•单元划分依据:–按C++程序设计方法演进发展的自然顺序和实际编程能力形成的三个关键期,即结构化程序设计→模块程序设计→面向对象程序设计,将教学内容分为三个单元。•单元测验:–每单元安排一次•优势:–有利于获得真实的教学反馈信息–有利于及时发现、分析和解决教学中存在的各种问题–有利于教学效果的巩固和教学质量的提高–有利于大型基础课的教学组织、实施和考核9•C++程序设计课程负反馈教学法的要点(续)–课堂教学:•教学思路:根据程序设计课程的特点,用“范例”组织课堂教学,贯彻“发现式”教学思想,突出重点、难点和综合应用,注重学生创新能力和优秀人才的培养。•范例程序:涉及基本语法、算法、数据结构和调试技术,具有典型性、综合性和可扩展性。•范例程序的讲解:–符合“现象→发现问题→分析问题→解决问题→验证”的探索过程,使学生掌握基本语法、算法及应用;–通过对范例程序的启发式扩展,揭示程序由小到大、由简单到复杂直到实用的过程,激发学生的探索热情和兴趣,使学生掌握知识间的联系和编程的工程化思想,获得实际编程能力。10•C++程序设计课程负反馈教学法的要点(续)–课堂教学(续):•课堂教学由授课和讲评两部分组成。–授课:讲授新内容。主要集中在»知识的形成、发展和用途:使学生明确学习目的,激发学习兴趣;»知识的重点、难点及联系:给学生提供开动脑筋、积极探索、大胆猜想、寻求解决问题方法、进行创造性思维的实践机会。–讲评:解决反馈的问题。主要集中在»探索过程:使未达终点的学生了解自己离终点的差距,学会探索,激发再次探索的愿望;»难点问题:使学生理解不突破难点很难解决实际问题,使他们想学、主动学、举一反三;»扩展性问题:采用启发、发问等方式,使学有余力、编程兴趣浓厚的学生进一步提高。11•C++程序设计课程负反馈教学法的要点(续)–采集教学负反馈信息,做好分类、分析和讲评,消除学生学习中的问题,保证教学的师生同步状态。–强化同步教学措施,确保大班教学的整体效果•大班教学成功的关键:保持教学的师生同步状态。•同步措施:授课、作业、实验、答疑、单元测验和讲评。其中授课、讲评与单元测验同步效果较好。–编写负反馈教学配套资料•学习指导•实验指导•典型问题编程实践•课程设计指导•开发环境与调试技术12•负反馈教学法成功的关键–预期的教学目标要合理。–负反馈的问题要真实。–解决问题的讲评要及时。•负反馈教学法的优势–课堂教学突出重点和难点,解决课时少与内容多、难点多的矛盾,注重学生创新能力和优秀人才的培养。–推进同步教学策略,及时发现和解决教学过程中存在的问题,确保整体教学效果。13四、实践环节•实践环节:课程实验和课程设计•课程实验–至关重要的教学环节:与课堂教学同步进行–调试程序:会发现很多想不到的问题,通过解决这些问题,可以加深对语言和算法的理解,提高实际编程能力和创新能力。–基本调试技术:深入学习本课程和取得实际编程能力的前提,不可轻视。–实验指导书:以基本语法、基本算法、基本数据结构、综合编程和调试技术为核心内容,共拟定十七个实验,每个实验通常包括调试题、编程题和选做题,供不同层次学生选用。–经过多年实践,取得较好的教学效果。14•课程设计–目标:以综合性程序设计训练为主,选题典型、综合,突出难点及其实用价值,使学生进一步巩固和掌握基本语法、基本算法、基本数据结构和基本调试技术,养成良好程序设计风格和严谨的科学作风,初步形成软件工程化思想,具有一定的程序组织能力。–内容:涉及基本算法和数据结构的综合运用。•基本算法:穷举、迭代、递推、递归、排序和查找等。•基本数据结构:数组、结构、指针、动态内存分配、单向链表、对象、文件等。–课时:2周。推荐非计算机专业选用2周小综合方案,计算机专业选用1周小综合+1周大综合方案。•实践环节的考核–预习和考勤:30%–上机检查并回答提问:40%–课程实验报告和课程设计报告:30%15五、教学效果•二级考试成绩突出–我校学生在02年秋季第二次参加省二级(VC++)考试中成绩突出,超出省二级(VC++)平均通过率(42%)。–负反馈教学法所教班级的平均通过率为62.62%,平均优秀率为15%,其中优秀人数16人,占通过人数的23.9%,占全校所有等级考试优秀人数的45.71%(数据源自我校教务处)。表.负反馈教学法所教班级02年省二级(VC++)考试成绩班级人数优秀人数合格人数优秀率%通过率%X013242138.362.5X014306820.046.7X0152941713.872.4X0162441316.770.8合计107165115.062.616•学生评价高:“讲课内容丰富,采用多媒体和真实编程环境,深入浅出,启发式教学,激发兴趣,调动积极性,有助于提高实际编程能力”。•课程规模扩大:目前我校开设本课程的有6个学院,10多个专业,学生班级数已达60个。•得到校内、省内和省外专家初步肯定–2002年12月“VisualC/C++课程负反馈教学法的设计与实践”获校级优秀教学成果二等奖;–2005年2月出版自编教材《VisualC++程序设计习题、实验与编程实践》(刘维富等,华东理工大学出版社),同年重印;–2005年10月“VisualC++程序设计”获江苏省高等学校精品教材立项建设;–2006年4月本课程被评为南通大学精品课程。17六、教学研究•C++语言研究–研究C++语言的历史、现状和进展•C++程序设计课程体系研究–构建结构优化的课程体系•C++程序设计课程教学内容研究–确保教学内容的正确性和系统性–确保讲清讲透重点、难点内容•教学方法研究–提出并实施负反馈教学法•教学手段研究–合理运用传统和现代教学手段•C++课程教材建设研究•C++语言开发环境研究18七、教材建设•C++教材建设的重要性–主流编程语言–程序设计课程首选教学语言–等级考试和程序员考试指定语种–内容、技术和开发环境更新快,教材更新也快。–与欧美高校相比,我国高校生均教学资源较低,尤其是可用的“C++程序设计”课程教学参考资料较少,教材的作用显得格外重要。•C++教材建设已有良好的教学基础和教研基础–2005年2月出版《VisualC++程序设计习题、实验与编程实践》。–2005年10月获江苏省高校精品教材立项建设。–体现“负反馈”教学特色的系列化教材正在酝酿出版。19八、后续工作•不断加强教学研究,推进C++课程教学内容和体系改革,完善“负反馈”教学法,进一步提高课程的教学水平和影响力。•加快特色教材建设,力求建成精品教材。•不断丰富和优化课程网站资源。•加强与省内外院校的合作交流,进一步提高本课程的建设水平。20附录A.联邦德国教育学家瓦根舍因(M.Wagenshein)的范例教学法•基本思想:为了提高学习者的独立学习能力,而组织教养性学习,通过这种学习,不是为了再现性地接受很多个别知识和某些技能训练,而是依靠精选的有限范例,来帮助学生主动地获得概括性较强的一般知识、能力,以及继续学习的态度。•范例教学的关键是调动学生学习的积极性和主动性,以“范例”来“教”,正是为了学生主动起来“学”。通过范例而获得的知识是所谓“活动的知识”,是继续掌握与发现新知识的知识,是产生新知识的能力。教师通过范例辅助学生理解、掌握知识和原理,其目的是让学生能够独立地获得判断能力、推理能力、认识能力和继续学习的能力。要做到这一点,最关键的问题是最大限度地通过“范例”调动学生学习的主动性和进取精神。21附录B.布鲁纳的“发现教学法”•基本思想:当代美国著名的教育心理学家布鲁纳认为“要培养具有创造才能的科技人才,不但要使学生掌握学科的基本概念、基本原理,而且要发展学生对待问题的探索性态度。”,即学生创新素质培养寓于学生对问题的探索过程中。•有难度的学习给学生提供了一个开动脑筋、积极探索、大胆猜想、寻求解决问题方法、进行创造性思维的实践机会。但学习的难度并不意味着人为地增加难度,而表现为在解题时需要有一个深入分析和探索过程。如何根据具体问题,巧妙地、恰当地利用探索性法则,进而完成解题过程,不只是经验性技能,更是一个人具有较高能力的重要表现。•探索过程模型:现象→发现问题→分析问题→解决问题→验证22参考文献[1]顾晖,刘维富,管致锦,邱建林,王波,沈天晴.负反馈教学法的原理与实践[J],电气电子教学学报,2004.4。[2]刘维富,丁卫平,沈学华,沈天晴.VisualC++程序设计习题、实验与编程实践[M].上海:华东理工大学出版社,2005.2。[3]刘维富.C++运算符重载教学和编程中易被忽视的问题[J],南通工学院学报(自然科学版