APP下载

C/C++程序设计多元协同实验教学平台构建

2019-06-03孙伟峰齐玉娟

实验室研究与探索 2019年3期
关键词:程序设计实验课编程

孙伟峰, 杨 华, 齐玉娟, 万 勇

(中国石油大学(华东)信息与控制工程学院,山东青岛266580)

0 引言

程序设计语言C/C++是面向我校电子信息工程、自动化、测控技术与仪器、电气工程及其自动化4个电气信息类专业大一新生开设的程序设计语言入门课程,也是学习后续专业课程如微机原理、单片机原理与接口等的基础课程。编程作为理工科专业学生必备的基本工具与技能,其掌握程度将直接影响到后续相关课程的学习[1],甚至以后的科研与工作。

本课程理论与实验并重,由32学时的理论课与24学时的上机实验课组成,实验单独设课,教学内容包括面向过程的程序设计与面向对象的程序设计两部分,涉及到的内容多,概念抽象,语法、规则繁多,实践性强。目前,该课程的教学面临以下问题:①依照我校计算机系列课程的“Bus”培养模式,取消了先修课程计算机文化基础,部分学生计算机基础薄弱;②学时少与内容多之间的矛盾突出;③理论课与实验课作为独立的教学单元,两者之间衔接不畅,没有充分发挥出实验教学对本课程的支撑与促进作用;④为了便于学生管理,大一的学生不允许带电脑到学校,学生只能在24学时的实验课上进行上机编程,实践练习的机会少,不利于课程知识的掌握与学生编程能力的培养。学生普遍反映该课程比较抽象、难学,“课上能听懂,程序能看懂,上机不会编”“遇到问题也不知道如何去调试,实际编程能力较弱”,学生学习兴趣不高,学习效果不尽人意。

作为一门实践性很强的课程,上机实践是学习程序设计语言最为有效的方法[2],尤其对于大一新生而言,他们的计算机文化基础较为薄弱,理解及应用程序设计语言的能力不强,只有通过不断上机编写、调试程序,发现并改正错误,才能真正理解并掌握程序设计语言的语法、结构及程序设计的基本思路与方法,才能逐渐培养计算思维[3]。因此,编程实践在程序设计类课程的教学中具有十分重要的作用,强化实践能力是提高本课程教学效果的重要途径。

为了解决本课程教学过程中遇到的学时少与内容多、理论与实验教学衔接不畅、尤其是因条件所限导致学生上机实践机会少等问题,在信息技术与教学深度融合的大趋势下,课程组以提高学生的上机编程能力为目标,将智能手机、互联网等信息技术发展成果引入到课程教学中,建立了智能手机端编程、网络在线编程与实验室上机实验相结合的多元协同实验平台,为学生编程实践提供了更多途径。

1 程序设计实验教学现状分析

对注重编程实践的程序设计类课程而言,实验教学不仅仅是理论教学的辅助,能够帮助学生加深、巩固对理论教学内容的理解,更是学习程序设计的一种重要途径,对学生发现问题、分析问题、解决问题的能力以及计算思维、创新能力的培养都具有重要作用,学生只有通过编程实践才能真正掌握程序设计的思想和方法。因此,实验教学对程序设计类课程的教学质量具有至关重要的作用,教学效果最终要体现在学生的编程能力上。

程序设计实验课程目前大多采用单独设课的方式,理论课程与实验课程独立进行,分别由不同的教师执教。理论课教师主要负责程序设计基础知识、基本语法及程序设计方法的讲解,实验课教师根据理论课程进度指导学生上机编程练习。在这种教学模式下,①学生在理论课上只能“纸上谈兵”,老师讲的理论知识及演示实验都能看得“懂”,但由于无法亲自编程实践,这种“懂”仅限于浅层的理解,很多情况下学生并未真正明白,由此,就会出现学生上机编程时需要翻课本、看课件,比照例题“照葫芦画瓢”的现象,也即学生所说的“上课能听懂,上机不会编”“面对题目无从下手,面对错误束手无策”。②实验课上由1位老师指导众多学生,学生在编程调试过程中遇到问题往往得不到及时解答,理论课教师又不能及时了解学生遇到的问题,理论课与实验课衔接不畅。实验课由于学时少等原因在培养学生编程能力方面的作用受限,学生缺乏编程实践的机会,导致课程整体教学效果不佳。

许多高校都意识到了编程实践对程序设计类课程的重要性,开展了系列实验教学改革。例如,刘光蓉[4]在C程序设计课程中采用理实一体化的教学模式,将理论知识融入到实验教学中,让学生在练习中理解理论知识。黄云等[5]基于云平台改革程序设计基础实践教学体系,建立实践教学资源库,搭建了课程实践教学平台。许小东等[6]基于MOOC理念,构建了集资源管理、过程控制、考核评价于一体的程序设计开放实验平台,提升了学生的自主学习意识和创新实践能力。陈婷[7]提出将阶梯式教学、案例教学、项目驱动教学等方法应用于程序设计实验教学中。张彦航等[8]提出一种基于虚拟实践平台的C语言实践教学模式,开发了自主式虚拟作业系统及考试系统,促进学生的自主学习。曾庆江等[9]将实验教学与云课堂相结合进行计算机程序设计探索性实验教学,训练学生综合利用知识和解决实际问题的能力。何文广等[10]引入自动评分系统来辅助程序设计课程实验教学。陈昕等[11]提出采用阶梯式递进的分阶段考核方式,注重对学生编程能力的培养。

综上所述,当前程序设计类课程实验教学改革的关注点都集中在内容体系、教学方法、教学组织形式、考核评价等方面,而对于实验得以有效进行的物质载体—实验场所与编程环境,很少有研究涉及,上机实验基本局限在实验室内进行,学生在规定的时间内到实验室,在教师指导下围绕特定的实验内容进行集中实验;而平时机房资源紧张,即使学生自己有计算机,也不便随时随地随身携带,学生在图书馆、自习室等场所写作业或突然冒出一个好的想法想编程验证,但苦于手边没有计算机,只能暂时放弃,想“等实验课的时候验证一下”,但实验课上却已遗忘,编程实践在时间及空间上都受到很大约束,缺乏灵活性,不利于学生的自主、即时学习。

随着信息技术在教育领域的渗透和融入的深化,其在教育教学方面的助推作用越来越显著,信息技术与教学深度融合已经成为当今教育教学的一个重要发展方向[12]。为了给学生提供优质的实验教学环境,让学生获得更多编程实践的机会,让编程实践融入程序设计教学的每个环节,借助业已普及的智能手机与互联网技术,课程组建立了多元协同的C/C++实验教学平台。

2 多元协同实验教学平台构建

为了有效解决传统的实验室教学因时空受限带来的诸多问题,让学生做到“随时有想法,随时可编程”,切实提高课程的教学质量,有必要探索多样化的实验教学手段,构建多元化的实验教学环境。课程组在多年教学实践的基础上,通过与学生多次沟通交流,在信息与教学深度融合的教育教学背景下,逐步发展建立了基于智能手机编程、网络在线编程、实验室上机实验相结合的C/C++课程多元实验教学模式。

2.1 基于智能手机的C/C++编程

当前,智能手机已经成为大学生的必需品,学生对手机的依赖越来越强,上课玩手机的现象及报道层出不穷,很多学校都想方设法限制学生课堂使用手机。但是,“堵而抑之,不如疏而导之”,如果能引导学生合理地使用智能手机,就可以将其变成一种有效的学习工具。基于智能手机的移动教学与学习将成为未来主要的学习方式之一[13-14],能够提高学生学习的自主性和积极性,在促进高校课堂教育教学方面有着无限的潜力。

智能手机在某种程度上相当于一台移动电脑,具有独立的操作系统和运行空间,可以接入无线网络,且具有无可比拟的便携性—本身便于携带,学生也乐于携带,给随时随地学习提供了可能。运行苹果iOS与Android系统的智能手机都可以安装C/C++开发环境,智能手机对程序设计语言课程的教学具有更为重要的意义。

目前,已经有多种可以在智能手机上安装运行的C/C++编译应用程序。例如,可以在苹果手机上安装的应用软件有 Dmitry Kovba开发的“C++Programming Language-Compiler with Reference”(只能联网使用),踏宇科技开发的C/C++开发应用等;可以在 Android手机上安装的应用软件有 C4droid、MySpringC、AIDE、C++compiler IDE、CppDroid 等。目前,应用最为广泛的是Android系统下的C4droid,本节以其为例介绍基于智能手机的C/C++编程方法。

C4droid是Android平台下的一款界面友好、功能强大的C/C++集成开发环境 ,默认以tcc(tiny c compiler)为编译器,具有如下特征:能够以离线的方式编辑、编译、运行C/C++程序;支持 ANSI C与 ISO C99标准;源代码编辑器提供语法高亮、代码完整性检查等功能;安装gcc插件后,支持C++11标准,能够进行断点调试,非常适合初学者使用。下面以使用cin及cout语句进行输入输出的程序为例,介绍使用C4droid进行编程的过程。首先,打开软件并新建一个cpp文件,在编辑窗口中编写C/C++程序,在编辑窗口的最下端,有“编译”及“运行”两个控制命令按钮,如图1所示。

图1 程序编辑窗口

程序编辑完成后,执行“编译”命令对程序进行语法检查,若程序无语法问题,则会提示“编译成功”;若存在语法问题,会给出错误提示。例如,将语句“sum=a+b;”后面的“;”去掉,则会给出图2所示的错误信息提示。需要注意的是,对于存在多个语法错误的程序,C4droid每次只会显示一个错误,需要通过多次编译才能发现并解决所有的问题。

图2 错误信息提示示例

程序编译通过后,点击“运行”命令执行程序,出现终端仿真器(Terminal Emulator)界面,从键盘输入“5 6”后回车,运行结果如图3所示。

图3 运行结果示例

若发现运行结果有问题,可以对程序添加断点进行调试。点击行号旁边的区域即可添加断点,如图4所示。添加断点后,执行“运行”命令可以打开调试窗口,如图5所示。调试窗口中提供了“添加监视”功能,可以在调试过程中实时查看程序中变量的当前取值。例如,对上述程序中的变量“a,b,sum”添加监视后,可以观察3个变量在程序执行过程中的取值变化。调试窗口中提供了“继续、步进、单步、断开”4个调试功能,“继续”是指从断点处继续向下运行,直到遇到下一个断点时暂停;“断开”的作用是断开所有断点,直接运行至程序结尾处;“步进”与“单步”均能从断点处开始逐条语句执行,其区别在于,遇到函数调用时,“步进”功能能够跟踪到被调用函数内部执行,而“单步”则会整体跳过函数调用语句。

图4 添加断点示例

图5 程序调试窗口

在智能手机上安装C4droid及其插件后即可单机运行,不需要连接互联网,使用非常方便。

2.2 网络在线C/C++编程

以智能手机为主要终端的移动互联网已经成为人们重要的学习工具与途径,除了可以在智能手机上安装C/C++集成开发环境之外,在网络环境下还可以利用在线C/C++编译器进行程序的编辑及编译运行。我校目前已经实现了无线网络的全校园覆盖,“互联网络高速泛在”,为网络在线C/C++编程提供了条件。

常用的C/C++在线编译器有 codepad、ideone、C++ shell、dooccn、JDoodle、codechef、wandbox、TutorialsPoint、onlineGDB等,不同的在线编译器具备的功能也不尽相同,表1给出了常用的C/C++在线编译器在交互输入、错误信息提示、程序执行方式等方面的对比。

表1 常用C/C++在线编译器功能对比

C/C++在线编译器的响应速度视网速及手机性能而定,但整体比使用离线版本的编译器编译执行速度慢。在线编译器的优点是无需安装集成开发环境,在装有浏览器的手机上即可使用。对上述编译器进行了大量实验测试,根据响应速度、功能、易用性等方面的性能比较,推荐使用 C++shell、ideone、onlineGDB 3款C/C++在线编译工具,其中,onlineGDB还具备程序调试的功能。

2.3 基于QQ群或微信群的即时讨论

学生在初学程序设计时,往往会遇到各种各样的问题,并且很多问题都具有共性,如果问题得不到及时解决,会挫伤他们学习的积极性,滋生畏难情绪,逐渐丧失学习信心和兴趣;相反,如果能够及时引导学生围绕这些问题积极开展讨论,则会让学生在思考、讨论中对涉及到的编程知识有更深刻的认识。QQ或微信群是当前学生普遍采用的即时通信方式,建立C/C++讨论QQ群或微信群,课程组教师及研究生助教都加入群中,学生在学习过程中遇到问题时,可以及时方便地以文字或图片(比如代码截图、编译系统提示的错误信息截图等)的形式发到群中,教师适当引导,让学生充分展开讨论,体现出“协同学习”的优势[15]。讨论有助于引起学生对问题的深刻思考,在理解并掌握编程知识的同时,也能形成良好的学习氛围。同时,学生在提出解决方案时会获得成就感与认同感,能够进一步增强学生的学习兴趣。

基于QQ群或微信群的即时讨论建立了师生互动、学生互动的平台,学生遇到困惑时可以采用文字、拍照、截图等方式快捷、直观地提出问题,并能够得到老师与同学们的及时响应,不会引起问题的“积压”;同时,这些问题也可以让教师掌握学生的学习现状,及时发现教学过程中的不足之处并进一步改进,形成良性循环。另外,在教学实践中发现,平时在课堂上“沉默寡言”的同学,在讨论组中却变得异常活跃,群内讨论也给这部分学生提供了良好的交流平台。

2.4 多元协同实验教学平台构建

以C4droid作为编译工具的智能手机端编程与以C++shell、ideone等作为编译环境的网络在线编程构成了 C/C++编程的“移动实验室”,与以 Visual C++6.0作为编译环境的实体实验室以及方便即时讨论的QQ群或微信群共同构成了C/C++编程的多元协同实验教学平台,如图6所示。

图6 多元协同实验教学平台构成

其中,移动实验室C/C++编程适合编写小规模程序,主要用于理论课上与课下对知识点及基础验证性实验进行编程验证,以及对设计性与创新性实验中局部代码的验证,其特点是方便、灵活,可随时随地进行编程实践。借助移动实验室,理论课教学可以采用“体验式”的教学方法,在讲解程序设计知识的同时同步让学生进行编程验证,学生在学中做,做中学,边做边学,促进学生对知识的深度理解,体会到编程给其带来的成就感,增强学生的学习兴趣,实现“教学做一体化”,提高课堂教学效率及效果。实体实验室主要用于开展综合设计性与实践创新性实验项目,在实验课前学生编写出初步的代码并利用移动实验室对局部关键代码进行验证,在实验课上主要进行程序的综合调试及开展问题讨论,有效提高实验课的效率。学生不论利用移动实验室编程还是在实体实验室编程时遇到问题,都可以通过QQ群或微信群开展即时讨论。

移动实验室可以让学生有效地利用碎片时间,弥补了现有实验教学环境及资源存在局限的不足,从时间与空间两个维度对现有的实验教学模式进行了拓展,改善了现有的实验教学环境,缓解了课程学时少与内容多之间的矛盾,有助于培养学生的自学能力,满足学生个性发展的需求。3种实验方式相辅相成,相得益彰,协同实现了“理实一体化”,使编程实践贯穿整个程序设计教学及学习过程。以该实验平台为基础,可对程序设计理论与实验教学在教学内容、教学方法、考试方法等方面开展系列教学改革,不断提升课程教学效果。

3 教学实践及效果分析

采用构建的C/C++编程多元协同实验环境,改革与之相适应的教学方法,在自动化、测控技术与仪器两个专业2014~2016级学生中进行了教学实践。结果表明,大部分学生都乐意使用移动实验室编程方式,“感觉手机有了超出娱乐之外更高层次的功能”,很多学生对编程产生了浓厚兴趣;学生在对程序设计基本知识与方法的理解、动手编程能力、计算思维等方面,整体水平都有了明显提高。表2中列出了未使用多元协同实验环境的2013级与使用该实验模式的2014~2016级学生在期末考试平均成绩、期末考试程序设计题平均得分率以及实验平均成绩的对比情况。

表2 编程实践相关成绩对比

由表2中的数据可以看出,随着多元协同实验平台的逐步应用,学生的平均成绩,尤其是与编程实践紧密相关的程序设计题的得分率与实验课平均成绩均逐年提高,从一个侧面反映出构建的实验平台对程序设计课程学习的助推作用。

4 结语

信息技术的快速发展为教育教学提供了越来越多的新手段,如何将更多先进的信息技术有效融入到程序设计语言课程的教学过程中,开展系列教学改革[16],充分发挥好信息技术对教学的助推作用,为此提出并构建了结合智能手机端编程、网络在线编程与实验室上机实践相结合的C/C++编程多元协同实验平台,强化对学生编程实践能力的培养,3种编程手段与基于QQ群或微信群的即时讨论协同实现了理论教学与实验教学的良好衔接,为学生提供了多样化的编程实践平台,使编程实践贯穿程序设计教学的全过程。教学实践表明,建立的多元协同实验教学模式对学生编程能力及计算思维的培养起到了积极的促进作用,有利于推进学生自主学习,提高课程的教学效果。

猜你喜欢

程序设计实验课编程
编程,是一种态度
元征X-431实测:奔驰发动机编程
密林深处——“从写生到创作”的水墨实验课
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
有趣的实验
从细节入手,谈PLC程序设计技巧
高职高专院校C语言程序设计教学改革探索
PLC梯形图程序设计技巧及应用