论文部分内容阅读
摘要:本文对当前自动阅卷系统中编程题的现状进行了分析,并提出了使用代入法解决完善程序题和使用文件输出法解决编程题两种解决方法,同时给出了一些实现细节。
关键词:自动阅卷;编程题;VBA
中图分类号:TP311 文献标识码:A 论文编号:1674-2117(2016)23-0071-03
现状和问题
在现代教学中,计算机课程的阅卷系统越来越多,从Office应用到各种高级编程语言都有,不过计算机本身的智能化程度不高,主要是按照事先设定好的程序运行的,所以在批改选择题时非常有优势,速度快,准确率高,但对主观程度比较高的,如完善程序,特别是编写程序,很多阅卷系统还解决得不够好,而编程题恰恰又是计算机编程语言课程考试的常见题型。
选择题的实现已经非常成熟,本文不再讨论。填空、简答、论述等题型也有了各种解决方法,虽然效果还不是很理想,但技术也是在不断进步的,这部分也不是本文要讨论的。本文以VBA为例,主要讨论主观性很强且会有多种不同答案但结果又都正确的完善程序和编写程序两种题型的阅卷方法。
完善程序题
1.一般的解决方法
完善程序题其实是填空题的一种,但里面填写的是程序的代码,下面就是一个完善程序的例子。
题目:从大到小输入3个数,如不符合要求则显示“输入不符合要求”,在空白处填入程序代码完善程序(如图1)。
一般的阅卷程序都在用枚举答案的方法,如将可以想到的x > y And y > z和y < x And z < x等答案和学生的答案进行比较,如果相符则判对,否则扣分。但其实这道题目还有很多其他答案也是正确的,如y < x And x > z和x > y And z < x,甚至也会有学生写成Not x <= y And Not y <= z和Not (x <= y Or y <= z)等答案。枚举是一种方法,但只适应于答案非常单一的题目,因此建议尽量不使用。下面笔者将介绍一种代入法,将学生的答案代入到阅卷系统中,根据生成的表达式结果来判定答案是否正确。
2.代入法
代入法就是将学生写的答案代入到事先编写好的程序中进行验证,图2中的函数t15就是为上题编写的验证函数,其中的参数x、y、z为输入的三个数,sExpression为获得的学生编写的答案。在t15函数中的第三行,就是On Error和Exit Function之间是一个空行,学生的代码将代入到这里。
那么如何在一个程序中动态地插入一行代码并运行呢?这里要用到module对象中的ProcStartLine属性和ReplaceLine方法。ProcStartLine属性是指返回一个值,该值标识指定的过程的起始行。ReplaceLine方法是指在标准模块中替换指定行。下面给出代入法的代码,如图3。
其中:①score是模块的名称。②sExpression = "t15 = "
关键词:自动阅卷;编程题;VBA
中图分类号:TP311 文献标识码:A 论文编号:1674-2117(2016)23-0071-03
现状和问题
在现代教学中,计算机课程的阅卷系统越来越多,从Office应用到各种高级编程语言都有,不过计算机本身的智能化程度不高,主要是按照事先设定好的程序运行的,所以在批改选择题时非常有优势,速度快,准确率高,但对主观程度比较高的,如完善程序,特别是编写程序,很多阅卷系统还解决得不够好,而编程题恰恰又是计算机编程语言课程考试的常见题型。
选择题的实现已经非常成熟,本文不再讨论。填空、简答、论述等题型也有了各种解决方法,虽然效果还不是很理想,但技术也是在不断进步的,这部分也不是本文要讨论的。本文以VBA为例,主要讨论主观性很强且会有多种不同答案但结果又都正确的完善程序和编写程序两种题型的阅卷方法。
完善程序题
1.一般的解决方法
完善程序题其实是填空题的一种,但里面填写的是程序的代码,下面就是一个完善程序的例子。
题目:从大到小输入3个数,如不符合要求则显示“输入不符合要求”,在空白处填入程序代码完善程序(如图1)。
一般的阅卷程序都在用枚举答案的方法,如将可以想到的x > y And y > z和y < x And z < x等答案和学生的答案进行比较,如果相符则判对,否则扣分。但其实这道题目还有很多其他答案也是正确的,如y < x And x > z和x > y And z < x,甚至也会有学生写成Not x <= y And Not y <= z和Not (x <= y Or y <= z)等答案。枚举是一种方法,但只适应于答案非常单一的题目,因此建议尽量不使用。下面笔者将介绍一种代入法,将学生的答案代入到阅卷系统中,根据生成的表达式结果来判定答案是否正确。
2.代入法
代入法就是将学生写的答案代入到事先编写好的程序中进行验证,图2中的函数t15就是为上题编写的验证函数,其中的参数x、y、z为输入的三个数,sExpression为获得的学生编写的答案。在t15函数中的第三行,就是On Error和Exit Function之间是一个空行,学生的代码将代入到这里。
那么如何在一个程序中动态地插入一行代码并运行呢?这里要用到module对象中的ProcStartLine属性和ReplaceLine方法。ProcStartLine属性是指返回一个值,该值标识指定的过程的起始行。ReplaceLine方法是指在标准模块中替换指定行。下面给出代入法的代码,如图3。
其中:①score是模块的名称。②sExpression = "t15 = "