论文部分内容阅读
伴随着线上教育平台[1]、无纸化测试系统的出现,计算机自动检测本文的优势已经日益明显。计算机自动测评不仅可以减少传统考试中巨大的财力和人力的消耗,还能避免人工阅卷过程中因为人的主观因素而造成的评分误差。目前,客观题的自动检测技术已经相当成熟,相对来说主观题的检测还在不断的研究中。本文主要研究的是C语言程序设计编程题的检测方法,从编程题的查重到自动评分技术。本文首先提出了基于LSC的C语言查重算法,分析学生一般的抄袭方式,针对性的对源代码做去噪处理。分析匹配的元素,在字符与语句之间经过测试后选取语句作为LCS算法的匹配单元,计算代码之间的相似度。对比阈值选取的静态和动态方式的精确度,最终以程序特征属性为度量值来确定阈值,对比求解出的相似度,筛选出属于抄袭的代码。实验结果表明,基于LCS的C语言程序查重算法是可行的,相对于其他文本相似度检测算法精确度得到有效的提高。接着对非抄袭代码进行自动评分处理,本文提出了基于流程控制匹配的自动评分算法。使用编译原理技术静态分析源代码语法结构。在不改变语义的情况下对源代码进行预处理,减少代码编写的多样性。结合系统依赖图的知识理论以及源代码程序结构,自定义控制流程结构与流程结构之间的依赖关系,得到控制流程结构图。划分图中用于匹配的单位元素,匹配模板程序与学生代码的单位元素,得到一组相似元素集合。最后根据题目总分完成对学生的自动评分。实验结果表明,基于控制流程匹配的自动评分算法是可行的,误差控制接近于人工误差。为提高程序运行效率,本文提出了基于最小子程序的C语言自动评分算法。引入结构化编程的思想,整个程序可看做是由多个不同功能的子程序组合而成的,这样能减少对自定义函数处理过程中可能出现的误差。首先给出子程序与结构树的定义,再对子程序做语法分析转换成结构树的中间表达形式,从结构树中提取不同粒度的子程序进行语义匹配,求得程序之间相似度,结合权值给学生代码评分。实验结果表明,执行效率有所提高,误差控制在可接受范围内。