Online Judge在C++程序设计课程实践教学中的应用*
2016-03-19吴舜歆梁宝兰电子科技大学中山学院广东中山528402
吴舜歆 梁宝兰(电子科技大学中山学院,广东中山528402)
Online Judge在C++程序设计课程实践教学中的应用*
吴舜歆梁宝兰
(电子科技大学中山学院,广东中山528402)
摘要:针对传统应用型本科C++程序设计课程实践教学中存在的问题,将原本应用于训练ACM-ICPC选手的“在线评测系统”引入到教学中来。同时,针对传统的“在线评测系统”由于实施黑盒测试存在的缺陷进行改造,从而使得其能用来训练学生的函数设计能力和面向对象编程能力。让学生得到更加全面、彻底的训练。
关键词:online judge;C++程序设计;实践教学
Abstract:Aiming at the problems existing in the practice teaching of the traditional application oriented C++ programming course, online judge which was originally applied to the training of ACM-ICPC players is introduced into the teaching. At the same time, according to the traditional online judge since the implementation of black box testing defects of transformation, so that it can be used to train students' ability of function design and object-oriented programming ability. Let the students get more comprehensive and thorough training.
Keywords:online judge; C++ programming; practice teaching
一、概述
C++程序设计课程是很多高校计算机专业的第一门专业课,学好该课程对学生后续的专业学习非常重要,不但有助于打好专业基础,也有助于提高学好本专业的自信心。在这门课程的教学中存在的主要问题是学生实践环节比较欠缺。缺乏大量的编程训练,达不到课程的教学要求。
二、当前存在的问题
目前的C++程序设计课程的实践环节主要存在以下问题:学生上机实践的时间较少,不能透过大量编程实践掌握程序设计的相关理论、方法。学生上机写程序,往往限于自身的水平,对测试数据考虑不全面,从而导致程序写完之后随便找几个测试数据测一测,如果没有问题,就算程序是正确的。实际上,对于初学程序设计的学生来说,如何设计更加全面的测试数据确实是一个不小的挑战。所以往往出现这样的情况,学生的程序实际上是错的,但由于学生使用的测试数据比较片面,从而误以为程序是正确的。对于课程书面作业,学生交上来的程序很多时候连编译都通不过。
三、程序设计“在线评测系统”Online Judge简介
“在线评测系统”Online Judge起源于ACM国际大学生程序设计竞赛(ACM-ICPC)。它是一种B/S架构的在线程序设计评测系统,实施黑盒测试。用户登录系统提交相关题目的源代码,系统会即时地返回评测的结果。系统返回的结果有:(1)正确。(2)格式错。原因:程序输出可能有多余的空格或空行。(3)答案错。原因:算法不正确。(4)运行错。原因:除零、错误指针、下标越界等运行时错误。(5)编译错。原因:语法错误。(6)超时。原因:算法效率太低或存在死循环。(7)程序输出数据超出限制。原因:输出太多。
程序设计“在线评测系统”具有一定量的题目,同时更重要的是它具有以下功能:(1)实时判题。学生可以在任何地方、任何时间做题,然后提交自己的源代码。系统会实时地对学生的代码进行评测,并给出相应的评测结果。如果学生提交的代码不正确,学生可以对代码进行修改,然后再次提交。(2)布置作业。老师可以根据实际教学的需要在系统里面布置作业,限定本班的同学才能参与。系统会对学生提交的代码进行实时的评判,并对学生的做题情况进行排名,不需要人工干预。同时老师可以设定作业的截止提交时间,超过截止时间系统将拒收作业。老师可以登陆系统一目了然地知道学生的做题情况。(3)组织比赛(或课程测验)。老师可以根据教学的需要适当地组织一些比赛(或课程测验),以此调动学生的学习积极性。系统会自动评测学生提交的代码,并对学生进行实时的排名,比赛一结束,比赛结果同时就出炉。(4)论坛。学生可以在论坛上讨论相关的题目,互相学习。
四、“在线评测系统”Online Judge在教学中的应用
笔者自2007年以来开始指导学生参加ACM-ICPC相关赛事,取得了一定的成绩,其中包括亚洲区域赛的奖项。自2009年以来,开始在C++程序设计的实践教学中推广使用Online Judge,取得了不错的效果。笔者根据应用型本科学生的实际情况,对题库进行精心设计,力求学生在学习C++程序设计的第一天就能够在系统做题,以此来提高学生的动手能力和专业的自信心。
我校的题库,题目根据实际教学的需要进行精心设计,分为以下几个部分:第一部分:入门题目。学生学习程序设计的第一天便能解决的题目,主要涉及题库输入、输出的练习,整除性,简单的数学函数的调用等。第二部分:条件语句。需要使用if语句、switch语句才能解决的题目。第三部分:循环语句。先是使用单重循环就能解决的问题,然后是需要使用双重循环才能解决的问题。循序渐进,引导学生解决复杂的问题。第四部分:函数。用于训练学生的函数设计能力。第五部分:一维数组。主要涉及批量数据的处理问题,这部分的题目很丰富,对学生来讲加强这方面的锻炼非常重要。第六部分:二维数组。需要使用二维数组才能解决
的问题。(7)第七部分:字符串处理。训练学生解决各种字符串处理有关的问题,熟悉字符串处理函数。(8)第八部分:面向对象程序设计。用于训练学生的面向对象编程能力。包括类和对象、继承、多态等。
五、我校“在线评测系统”Online Judge的特色及应用效果
传统的“在线评测系统”由于实施黑盒测试,所以无法锻炼学生的函数设计能力、面向对象程序设计能力。我校的“在线评测系统”针对传统系统的缺陷进行改造,完全足以用来训练学生的函数设计能力和面向对象程序设计能力。七年来,“在线评测系统”在我校的应用取得了非常好的效果。由于系统存在排名机制,学生可以查看自己在班级的排名、年级排名、总排名,这极大地调动了学生的编程积极性。很多学生甚至通宵达旦的编程,反复尝试解决相关题目。通过“在线评测系统”的训练,学生的编程能力得到了极大的提高,从而为后续的专业课程的学习打下了良好的基础,建立了专业自信心。“在线评测系统”的推广应用极大地扭转了学生对编程谈虎色变的局面,得到了广泛的认可。同时,教师可以通过“在线评测系统”布置作业、组织测验,这无形中大大减少了教师的相应工作量。甚至可以讲,题库的建设是一劳永逸的。
六、结束语
通过在应用型本科C++程序设计课程实践教学中引入“在线评测系统”,彻底改变了学生对编程望而生畏的局面,极大调动了学生学习的积极性,提高了编程技能,从而建立了良好的专业基础和自信心。使后续的专业学习有一个良好的开端。
参考文献
[1]孙大烈,车万翔.ACM竞赛与学生综合实践能力培养[J].计算机教育,2009(19):12-14.
[2]杨松涛,王斌,张海燕.从ACM/ICPC竞赛探讨大学生的能力培养[J].计算机教育,2010(24):16-18.
[3]吴舜歆.一种新型的OnlineJudge的设计与实现[J].福建电脑,2014(2):158-159.
[4]金保华,闫红岩,张晓娟,等.基于ACM/ICPC的程序设计语言的教学改革与实践[J].中国电力教育,2011(20):79-80.
[5]姚翠莉,刘一玮,金博.ACM/ICPC竞赛人才培养模式的研究与实践+以大连理工大学ACM/ICPC创新实践班为例[J].内蒙古师范大学学报:教育科学版,2012,25(3):141-143.
作者简介:吴舜歆(1978-),男,汉族,广东潮州人,讲师,硕士,研究方向为机器学习、推荐系统。
*基金项目:2014年度广东省高等教育教学改革资助项目(GDJG20142517)
中图分类号:G642
文献标志码:A
文章编号:2096-000X(2016)09-0164-02