季晓慧 张玉清
摘要:讨论了在线评测系统在C程序设计实践教学中的题库建设、随堂及课后练习的题目分类及使用方法、考试方式及分数评定方法等。
关键词:C程序设计;在线评测;题库;练习;考试
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)07-1465-02
C语言是大学一年级学生学习计算机程序设计广泛使用的一种语言。学习本门课程,学生不仅可以掌握此种高级程序设计语言的语法和语义,还可以掌握结构化程序设计“自顶向下、逐步求精”的思想及方法、常用的算法及实现技术,以及分析和解决实际问题的语言应用能力。其教学目标是激发学生的程序设计兴趣、培养学生探索精神和实际编程能力。
为实现上述教学目标,上机编程实践是极为重要的教学手段,具有重要的教学意义。但由于本门课程面向的是大一学生,此时学生还没有接触专业课程,不能将专业的实际需要与本门课程的学习联系起来,对课程的地位认识不足,存在对课程的兴趣不大、学习动力不够、主观能动性差、投入精力有限等问题。在具体上机实践时,有些同学精力不够集中,不能按照指导教师的要求完成指定的上机实践题目,甚至个别同学会有上网、看电影等与编程无关活动的现象。而由于指导教师面向的学生较多,无法监督和检查所有学生的上机完成情况,对于能检查到的学生,由于时间和精力有限也不能进行十分严谨的檢验,因此学生会进一步放松对自己的要求。
在线评测系统是一套能对程序源代码进行自动评判的计算机应用软件,目前国内众多高校都已采用此软件作为计算机程序设计教学的辅助系统,其特点是评判严格,不仅要求逻辑上正确,而且数据的格式也要相符合,学生必须考虑到每一个细节和特殊边界条件,而不是大体上正确就能通过测试,这对于培养严谨、周密的程序设计思想及风格极为有效。另一方面,在线评测系统可以通过对各学生的账号查询来掌握学生的上机实践情况,使得教师能够实时地查看每一个学生的上机情况,极大地增强了教师的管理能力,可以促进学生上机实验热情的提高,加大学生的上机实验效率。该文就在线评测系统在C程序设计教学中的具体应用进行了探讨。
1 在线评测系统简介
在线评测系统最早用于国际大学生程序设计竞赛,其通过对学生用网页浏览器提交到服务器的竞赛题目源代码进行在线编译,生成可执行文件并产生输出,将输出与服务器数据库中的测试数据中的输出文件进行逐字节的对比来判断学生提交程序的正确性,并对耗时、耗费内存等方面进行评测,并将评测结果保存在数据库中同时返回给用户。目前,在线评测系统已广泛应用于各高校的程序设计类课程实践教学中,其除对源代码进行评判之外,还具有用户管理、题库管理、在线比赛及在线讨论等功能模块,其中用户管理模块用于提供新用户的注册及用户信息的更改功能,并为每个用户维护提交的源程序,同时对所有用户进行排名;题库管理模块用于题目的发布、修改、分类和删除等,每一道题目包括题意描述和测试数据两部分,其中题意描述部分包含与测试数据格式相同的输入及输出数据格式要求;在线比赛模块提供在限定时间内对限定题目进行的程序提交及评测;在线讨论模块类似于小型的bbs系统,用户可以针对相应的题目进行讨论。
有了在线评测系统,教师在程序设计类课程的实践教学上可以利用其进行随堂练习、作业布置、在线考试、远程指导等。与传统的教学方式相比,将在线评测系统引入到实践教学中具有如下优势:(1)利用严格的测试数据对程序进行自动评判,更能训练学生编程思维的严谨性;(2)学生通过对已求解题目数量的累积及所在排名的实时查看能激发学生的上机实践自主性、增强学生的程序实践兴趣并形成学生之间的讨论和交流氛围;(3)教师通过对学生提交的次数、排名及源代码的查看,能更好地了解学生的实践完成及掌握情况;(4)24小时开放、自主的实验环境可以增加学生课外上机实践的动力。[1]
2 在线评测系统的题库管理及应用实践
如前所述,在线评测系统具有严谨、能增强学生实践兴趣、形成良好的实践讨论氛围等优势,但欲使其能够充分发挥所拥有的优势,必须有与所学知识点紧密配合的、适于在线评测的相关题目。在教学实践中我们采用下面几种方式进行相应的题库建设:
1)通过增加明确的输入输出格式要求将传统的实验题目转化为适于进行在线评测的实验题目;
2)借鉴兄弟院校的相关实验题目进行必要补充。这里推荐哈尔滨工业大学李希然老师的课程实验题目(https://cms.hit.edu.cn/course/view.php?id=294)及浙江大学C程序设计基础及实验课程题目(http://jpkc.zju.edu.cn/k/409/ml32.htm);
3)鼓励优秀学生结合课程所学知识点为题库出新题,题目如果被采用可以以加分作为鼓励。
拥有了一定数量的题目之后,在随堂练习和作业布置上可将题目分为必做题与选做题两部分,其中必做题是学生为掌握相关知识点必须完成的题目,而选做题则是供掌握情况较好的学生为进一步提高程序设计水平而布置的题目。为鼓励学生多做选做题,在平时成绩中除去对学习态度及出勤率的考量外,按照学生所通过题目的数量进行排序和折算。这样一方面可以以显式的方式使得学生投入实验,另一方面由于并不要求所有的学生都完成同样的题目,可以部分地规避抄袭现象的发生。
必做题是要求学生必须弄懂、调通的题目。对于随堂练习的必做题,在距下课20分钟的时候公布测试数据,供没有通过的同学分析程序,在距下课5分钟的时候公布通过的优秀程序,供同学们比较学习;对于课后作业的必做题,参考北京大学程序设计类课程实践教学的作法,要求一周内提交程序,一周之后公布测试数据,供没有通过的学生分析程序,两周之后公布优秀程序,供学生学习参考并改进自己的方法[2]。在学生通过评测系统进行练习的过程中,教师并不是完全置之不理,而是可以以抽查学生代码的方式了解学生掌握情况,及时发现相关问题并在课堂上讲解、要求学生改正。
同其他课程一样,学生在随堂及课后练习过程中会存在抄袭现象。为规避抄袭,在课程开始时即进行诚信教育,并宣布一旦发现抄袭即将本次及以往实验成绩清零的处罚,以增大学生抄袭成本、减小学生抄袭可能。在具体操作上,对每次作业可采用斯坦福大学的moss软件(http://theory.stanford.edu/~aiken/moss/)进行雷同作业甄别,并对结果进行公示。对于申辩的同学,如果其能够了解题目的算法及实现细节,可以考虑适当恢复分数,以达到教学是为了使学生最终掌握知识点的目的。
3 在线评测系统的考试应用
C程序设计的教学目标是使得各专业的学生在学完本门课程后具有实际的动手编程能力,在线评测系统的实时判题能力使得考察学生的现场编程解决问题的能力成为现实。在具体应用在线评测系统考察学生的动手编程能力时,允许学生携带纸质资料进入机房,只需在给定时间内完成指定题目的求解即可,最终成绩可按通过的程序数目以及提交次数与通过题目数量的比例进行排名换算,首先按通过的题目数量进行排名,如果通过的题目数量相同则按照提交次数与通过题目数量的比例进行排名,比例越小排名越靠前。
C语言的一个特点是规则繁多且琐碎,因此结合相关笔试来考察学生的相关语法规则掌握情况以及对程序的阅读及理解能力也是十分必要的。同时对仅用几道题目来对学生进行考核的方式也是一个有益补充。在笔试试卷中可以增加平时在线评测系统中的练习题的程序填空,并在课程开始时就告诉学生有这样的考试题型,以督促学生平时在利用在线评测系统进行实践时的认真性,同时也减少了学生在完成程序设计实践任务时的简单抄袭。
最终学生的课程分数可以由平时成绩20%、期末笔试成绩30%、期末上机考试成绩30%及期中成绩20%的比例综合获得。其中,期中考试可以完全采用在线评测系统来完成。
4 结论
在线评测系统具有严谨、评判客观、开放等特点,将在线评测系统应用到C程序设计教学中,可以激发学生的学习实践兴趣、训练学生的程序设计能力、帮助学生养成严谨的编程习惯。在具体应用上,可通过移植传统实验题目、借鉴兄弟院校题目、自行编制题目等方式建设题库,并根据教学需要将题目划分为必做题目、选做题目及考试题目进行使用。在线评测系统可作为传统笔试考试的有益补充,以充分考察学生对C语言的实际运用能力,并结合平时的实践分数给出最终成绩。
致谢:文章受中国地质大学(北京)2012年度教学研究与教学改革项目資助。
参考文献:
[1] 肖潇,贺细平. C 语言程序设计教学探索[J]. 计算机教育,2011(5):65-68.
[2] 李文新,郭炜:北京大学程序在线评测系统及其应用[J]. 吉林大学学报(信息科学版), 2005(S2):170-177.