《C++程序设计》课程的改革与实践*
2018-09-29朱红,柯璟
朱 红,柯 璟
(南京理工大学 电子工程与光电技术学院,江苏 南京 210014)
一、C++教学应适应现代社会的发展
计算机程序设计类课程是理工类各个专业的必修课程。《C++程序设计》是大部分专业选择的课程,因为C++算法语言广泛用于编写各类操作系统、微处理器控制系统,同时在图形处理、神经网络计算等各类算法编程方面具有广泛的应用。
在《C++程序设计》的教学中,由于知识点众多,尤其是指针和面向对象部分概念抽象,所以这门课程一直存在课时量少、课容量大、教师讲课速度过快等问题;而学生普遍反映课程内容枯燥,随堂掌握知识程度低,语法难懂,算法难以理解。随着“互联网+”时代的到来,需要教师改变传统的教育教学理念,利用先进的教学理念和教学设备进行教学方法和模式的改革,提高学生学习的兴趣,降低学习的难度[1]。
二、翻转课堂应与课堂教学相结合
翻转课堂(Flipped Classroom)是近年来全球教育界普遍关注的热点之一[2]。这种新型的教学模式,将传统教学模式“课堂上教师主要传授知识,课后学生温习知识,进行强化练习与反馈”翻转为“课外学生自主学习教学、微视频等学习资源,完成知识建构,课堂上学生在教师面对面的指导下做练习或者以小组合作等形式完成对知识技能的掌握,进行知识内化”[3]。翻转课堂将教师为中心的传统教学模式转换成以学生为中心的新的教学模式,充分调动了学生的主观能动性,在教学活动中具有不可替代的积极作用。
随着教学改革的深入,减少课堂教学,重视应用实践,注重学生能力的培养已经是教改的大趋势,翻转课堂的出现为教学改革提供了一个很好的途径。在翻转课堂上所涉及的内容大多是概念性的或演示性的,而大量涉及复杂算法、逻辑思维等的概念和程序还需要在课堂上进行讲解。
微视频是翻转课堂一种重要的学习资源,微视频资源的质量影响着学生的学习兴趣与学习效果,决定着翻转课堂的教学效果[4]。焦建利教授[5]认为,教学中的微视频以阐释某一知识点为目标,以短小精悍的在线视频为表现形式,以学习或教学应用为目的。因此,我们在《C++程序设计》课程的微视频制作中,以知识性、趣味性为目标,对课程的知识点按章节进行分类,基本上每个微视频都在10分钟之内,讲解1-2个相关的知识点和附带的语法格式、数据存储形式等,而具体的程序运行过程则在课堂上讲解。
以“函数”这章为例,微视频主要介绍函数的概念和类型及各种类型函数的语法形式,用时8分钟,表1列举了前4个分镜头的处理脚本。
通过观看微视频,学生已经了解了函数的概念、函数的类型、函数的调用格式和定义格式,并对与函数定义相关的名词术语:如“函数类型”“实际参数”“形式参数”等都有直观的认识。这样,在课堂教学中,教师先用3分钟时间把微视频的内容概括总结一下,然后就可以直接开始讲解无参函数、有参函数程序的运行过程等内容。为了更好地展示程序的运行过程,提高学生的学习兴趣,我们将课件全部采用交互式的Flash动画方法制作,讲解程序时运行一条语句,就展示相应的存储器中变量或数据的变化过程,清晰直观效果很好。表2是在函数的课堂教学设计中的教学内容部分。
通过观看微视频和一节课的课堂教学,使学生对函数的知识从概念到种类,从分析程序到编写程序,都有一个完整的认识,形成了一个完善的认知过程。
表1 “函数的概念和类型”4个分镜头脚本
表2 “函数的概念和类型”的课堂教学内容
三、利用网络教学环境建立C++算法资源库
课程的资源建设是一个长期积累的过程,在《C++程序设计》的教学改革实践中,我们依托校园网的平台,建立了包括Flash动画课件、微视频、算法资源库、课程作业等各种资源,具有在网上提交上机作业、答疑讨论等功能。
1.建立算法资源库的必要性
任何课程的教学活动都是为了提高学生分析问题、解决问题的能力,强化学生的实践动手能力,因此在具体的C++算法语言的教学实践中,应采用强化算法、弱化语法的原则,以算法教学为主,通过对典型算法的分析讲解,培养学生的计算思维能力和规范的编程习惯[6]。但是,用程序设计语言编写的算法与数学、物理中的解决问题的方法还是有很大差别的,需要对计算机的运行、存储机制有全面的了解,熟悉基本数据类型、自定义数据类型在计算机中是如何存储、赋值的,熟悉地址、数据在内存和CPU中的作用等,而所有这些又都是在计算机内部进行的活动,学生是无法看见的,因此算法的讲解和解释具体程序的运行过程一直是程序设计类语言教学中的难点。
针对教学活动中出现的大量的有关算法的问题,我们归纳总结了C++程序设计中应该掌握的各类算法,建立了一个由Flash动画制作的算法资源库。对每一类算法,用动画详细演示了算法实现的过程、步骤,对实现算法的程序也给出了详细的讲解。每种算法独立成章,既可以在课堂上进行讲解,又可以供学生在课前课后反复观看。由于动画生动形象,又与程序同步,详细地描述了程序在计算机及存储器中运行的过程,因此对学生而言,有较深刻的印象,达到了很好的效果。
2.筛选典型算法
制作算法资源库的第一步要由易而难地筛选出一些典型算法。在这里,算法是指广义的计算方法,即用编程语言解决各类问题的方法。算法库中的算法主要有以下两类:
(1)常规的经典算法。比如交换两个数据,最小公约数和最大公倍数,起泡法排序,牛顿法、弦截法、二分法解方程,链表的建立、输出、删除、插入等。
(2)很多在教学过程中总结出来的经验和规律。例如循环就有两种形式,一种是“穷举法”,或称为“海选法”,就是将所有可能的选择列出,继而用各种条件筛选,找出符合筛选条件的结果,例如水仙花数、鸡兔同笼、计算三个数的公约数和公倍数等都是利用这种方法;另一种是“递推法”,就是用前一个数去递推后一个数,大部分循环问题都是利用这种方法求解,例如计算某个数的阶乘、求级数等问题。再例如字符串的操作,从母串中查找子串,进而可以统计子串数量、删除子串、用另一子串替换子串等,其算法也是根据大量的经验和规律总结的。
这些算法基本涵盖了《C++程序设计》的全部内容,也是对C++算法语言所涉及到的各种类型问题的细化分类,有助于学生按图索骥,模仿练习,继而总结规律,培养自己的算法意识和思维。
3.算法的动画演示
算法的动画演示是制作算法资源库的重点和难点。不同的算法解决的问题不一样,解释算法的侧重点也不一样。我们根据长期的教学实践经验,针对不同的算法制作了一系列特点鲜明的动画,从不同的角度由浅入深诠释算法的本质和内涵,以期给学生留下鲜明的印象。
在算法的动画制作上,根据不同的问题,采取了以下几种方法:
(1)比喻法
就是用浅显的道理去解释算法的本质。例如,在“穷举法”中,用寻找笔筒中的红色铅笔来演示海选的范围与海选条件之间的关系,将一只只铅笔从笔筒中弹出,红色和黑色的铅笔分开存放,当所有的铅笔都从笔筒中弹出,才能解决这个问题;在“递推法”中,用一个小猪吃食物长大的例子来描述前一时刻的小猪和吃了食物后的同一小猪的关系,从而推导出循环体:小猪+食物→小猪。通过这些生动有趣的例子,给学生留下了深刻的印象,进而帮助他们理解算法的本质。
(2)解析法
有些算法是利用解析几何的知识得到的,例如牛顿法、弦截法、二分法求解方程,梯形法、矩形法求解定积分等。虽然在编程中不用推导具体的算法迭代公式,但是在讲解算法时,还是要让学生了解迭代公式的原理和含义,这样才能记忆深刻、灵活应用、举一反三。因此,在这些算法的演示中,以动画的形式,让铅笔在屏幕上移动,画出表示算法的几何图形并标出了具体的参数,经过反复迭代后,推导出算法迭代公式。这样演示生动形象,效果直观明了,既解释了公式的出处,也给出了具体的迭代程序。
(3)实例法
有些算法可以开门见山,直接用实际例题代入,通过对这一问题的求解而推广到这一类问题的算法。例如数组的排序、筛法求素数、字符串的操作等。举例来说,字符串的操作包括求子串在母串中的位置、删除子串、替换子串等。
(4)分析程序法
在链表的建立、输出、删除和插入的操作中,是通过分析描述程序的运行过程来讲解算法的。以链表的建立为例,首先将循环建立结点的语句一一列出,然后运行一条语句,接着就演示运行语句后程序的操作过程和结果,通过一条条语句的动画运行和操作演示,可以清楚地看到一个一个结点有规律地组织在一起、形成链表的过程。
四、结束语
在《C++程序设计》的教学改革过程中,我们通过翻转课堂与课堂教学相结合的教学模式,有效地提高了学生课堂学习的效率,加强了分析和编写程序的能力;同时,结合网络教学环境建立的C++算法资源库将《C++程序设计》中的各类算法以动画的形式生动形象地演示出来,应用到C++算法语言的教学过程中,可以有效地激发学生的学习兴趣,降低学习难度,提高学习效率,对学生的学习起到很好的促进作用。