1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 考试自动评分系统C语言改错 谈C语言上机考试的自动评分

考试自动评分系统C语言改错 谈C语言上机考试的自动评分

时间:2020-08-23 00:29:55

相关推荐

考试自动评分系统C语言改错 谈C语言上机考试的自动评分

论文写作指导:请加QQ229366758

摘要:在程序设计课的上机考试系统中,如何实现自动评分是最为关键的部分。该文对不同题型给出了不同的评分方法,其中编程题的评分,采用学生答案和标准答案之间的编辑距离作为评分依据,将LD算法用于考试系统的自动评分,并给出用VB6.0实现的函数代码。

下载论文网

关键词:自动评分;考试系统;VB6.0;LD算法

中图分类号:TP399文献标识码:A文章编号:1009-3044()27-6517-03

Discussion on Automatic Scoring of the C Language Exams

LIU Qing-hai, LIU Guang-feng,YANG De-yan, LIANG Qian

(The Linyi Campus of Qingdao Technological University, Linyi 273400, China)

Abstract: In the program design course of computer examination system, how to realize the automatic scoring is the most critical part. This paper presents the different types of different scoring methods, including programming score, using the student answer and the standard answer between the edit distance as the score based on LD algorithm for examination system, automatic scoring, and gives the realization of using VB6.0 function code.

Key words: automatic scoring; examination system; Visual Basic 6.0; Levenshtein Distance algorithm

目前,各高等院校越来越多的专业不断开设了计算机程序设计基础课,虽然有些院校采用计算机进行考试,但多限于诸如选择题和判断题之类的题型。而且对于程序设计课程上机考试的评分,多采用人工阅卷方式,由教师到每台计算机上逐句分析学生所写的代码然后给出分数并手工上传,这样就消耗了大量的人力,物力和时间,而且容易受阅卷老师的情绪影响,使得评分标准不统一。

若采用系统自动评分,不但将考生作弊的可能大幅减小,并且智能化的给学生的程序进行评分,以取代教师的低效率的、机械的阅卷模式,改变了院校人工批阅上机考试的现状,更加直观地反应学生的学习水平和教师的教学成果。因此,自动评分技术的研究与实现,在高等教育领域和计算机考试中具有十分重要的实际意义。本文以C语言程序设计为例,给出一种利用LD算法实现自动评分的方法。

1填空改错题的评分

C语言上机考试系统的题型一般情况下,不外乎有填空题、改错题和编程题,其中填空题和改错题的评分完全可以将比较来判定成绩,即通过比较原题和学生答题找到最长不同字符串,然后将该字符串同标准答案比较即可。其实现方法在VB6.0中可以用以下源代码实现:函数名为CompStrFun,形参indata、dindata表示学生答题结果、试题标准答案,均为字符串类型。该函数返回两个参数最长不同字符串的长度。

Public Function CompStrFun(ByVal indata As String, ByVal dindata As String) As String

Dim si As Integer: si = 1

Dim sj As Integer: sj = 1

Dim fi As Integer: fi = Len(indata)

Dim fj As Integer: fj = Len(dindata)

Dim flg As Boolean : flg = False

Dim i As Integer, j As Integer

If StrComp(indata, dindata) <> 0 Then

Do While si <= fi And Mid(indata, si, 1) = Mid(dindata, sj, 1)

si = si + 1 : sj = sj + 1

Loop

i = si

flg = True

Do While si <= fi And Mid(indata, fi, 1) = Mid(dindata, fj, 1)

fi = fi?C1 : fj = fj - 1

Loop

j = fi

flg = True

End If

If flg = True Then CompStrFun = Mid(indata, i, j - i + 1)

End Function

2编程题的评分

对C语言考试系统中的编程题,因为不同学生考虑问题的角度和解决问题的思路与方法存在差异,于是同样的问题学生给出的争取答案多种多样,从而造成系统无法给出标准的答案。

目前,多数程序设计类课程的上机考试系统对于编程题的评判,多是采用比较程序运行所输出结果的文件,而不考虑学生所编写程序。虽然这样能够确保编程完全正确的学生获得该题满分,但是这样造成了以下两种不合理的情况存在。第一种情况,完全不编程而直接通过编辑输出文件来获取满分的情况;第二种情况:编写的程序大部分正确,但程序无法运行得零分的情况。

对于第一种情况,在学生提交考试结果时的时候通过重新生成结果文件来避免。即先删除学生答题所产生的结果文件,再调用编译系统重新编译连接学生编写的程序,生成可执行的exe文件并运行产生最新的结果文件,然后和标准结果进行比较。这样即使学生直接编辑结果文件正确,但没有编写程序,也无法获取成绩。此情况在VB6.0中可以编写如下函数代码来实现。

‘函数名:AgainExe()

‘参数:形参FileName表示学生所编写的源程序文件(包含路径)。

‘返回值:True表示成功重新生成exe文件,Flase表示生成exe文件失败。

Public Function AgainExe(ByVal FileName As String) As Integer

Shell "VCVARS32.BAT" ’设置运行环境参数

AgainExe = Shell("Cl.exe " & App.Path & FileName, vbNormalFocus)

End Function

对于第二种情况,因学生的主观因素造成学生的答题结果存在着差异,而编程题的答案并不是唯一的。这样造成该类型的题目并不能采用上述填空改错题的方式来评分。本文通过文本相似性来实现编程题的评分,即借助距离编辑(LD)算法,将学生答案和标准答案进行比较获得答案相似度作为得分比例,然后乘以该题总分作为学生该题的得分。

3距离编辑算法实现

距离编辑算法(简称LD算法)是以一个字符串A转换成另一个字符串B的过程中,所进行的插入、删除、替换等操作的次数表示两个字符串的相似度。在上机考试系统中,从学生答案读取程序行作为字符串A,而标准答案读取程序行作为字符串B,然后即可按行执行LD算法。

例如学生程序行“x=a[j]”如何变成标准程序行“x=b[++i]”呢?第1步,a替换成b,x=a[j]→x=b[j];第2步,j替换成i,x=b[j]→x=b[i];第3步,在i前插入++,x=b[i]→x=b[++i]。故x=a[j]和x=b[++i]的编辑距离为3。

在VB6.0中实现该算法的函数源代码如下:其中函数名为LD,形参StrA、StrB表示学生答题结果、试题标准答案,均为字符串类型。该函数返回两个参数的编辑距离。

Public Function LD (ByVal StrA As String , ByVal StrB As String) As Integer

Dim mA() As Byte : mA = StrConv(StrA , vbFromUnicode)

Dim mB() As Byte : mB = StrConv(StrB , vbFromUnicode)

ReDim L(Len(StrA) , Len(StrB)) As Integer

Dim I As Integer , J As Integer

For I = 1 To Len(StrA)

L(I , 0) = I

Next

For J = 1 To Len(StrB)

L(0 , J) = J

Next

For I = 1 To Len(StrA)

For J = 1 To Len(StrB)

If mA(I - 1) = mB(J - 1) Then

L(I , J) = L(I?C1 , J - 1)

Else

L(I , J) = Min(L(I?C1 , J - 1) , L(I?C1 , J) , L(I , J - 1)) + 1

End If

Next

Next

LD = L(Len(StrA) , Len(StrB))

End Function

Public Function IntMin (ByVal IntA As Integer,ByVal IntB As Integer,ByVal IntC As Integer) As Integer Dim I As Integer

I = IntA

If I > IntB Then I = IntB

If I > IntC Then I = IntC

IntMin = I

End Function

4结论

本文提出的计算机自动评分方法,已经应用于程序课上机考试系统中。不但可以将该系统作为《C语言程序设计》课程的期末上机考试系统,另一方面还可以让学生熟悉二级C语言考试环境,从而提高计算机等级考试通过率。

参考文献:

[1]吴宗东,李兵元.浅谈SHELL函数使用新法[J].新疆石油科技,2000,21(2):76-80.

[2]王振明,李俊龙.一种简易的文本内容比较算法及在VB中的实现[J].计算机应用与软件,,24(8):199-221.

[3]杜利峰,牛永洁.字符串相似度在自动评分系统中的应用[J].电子设计工程,,19(7):42-44.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。