在高等教育中,编程语言课程特别是C语言是理工科学生的必修课程,同时也是计算机等级考试的重要科目。然而,传统的编程考试评分方法依赖于教师的人工批改,这种方式耗时且主观性较强。随着信息技术的发展,自动评分系统的出现能够极大地提高评分效率和客观性。然而,当前的自动评分系统存在一些不足,比如在编程结果不正确或编译有错时,难以给出合理的步骤分。此外,程序源代码的多样性以及算法思想的灵活性,使得单纯依靠自动评分系统难以全面反映学生的实际编程能力。
针对上述问题,研究者提出了基于人工评分思路的C语言自动评分算法,旨在改善编程题稍有错即为零分的情况,并帮助学生在自学编程时能够客观地衡量自己对知识点的掌握程度。这种算法结合了静态分析和动态测试两种方法,试图从实际出发,模拟人工评分过程。
静态分析是一种模式匹配的过程,它通过对比学生的答案和标准答案来判定分数,这种方法的不足之处在于需要完备的答案库才能进行有效的匹配。动态测试则是指将源代码编译并运行,然后检测程序的运行结果是否正确。动态测试在实现上相对简单快速,但它的局限性在于不能处理编译失败或结果不匹配的程序。
在C语言自动评分算法的研究中,通过模拟人工评分的思路,提出了改进的算法,通过动态测试和静态分析相结合的方式进行自动评分。这样的算法设计能够更加客观地反映学生编程题的得分情况,即使在编译失败或结果不匹配的情况下,也能给出合理的分数,减少因小错误导致整个程序不得分的问题。
研究者对现有的评分策略进行了分析,这些策略通常是将程序按分点划分,找到相应的得分语句后累计分数。但是,这种方式可能会因个别小错误而对整个程序给出零分,造成不合理的结果。为了改进这一点,新的评分思路采用抽取程序骨架与标准骨架进行对比,这种方法适用于检查程序的算法思想是否合理准确。
文章中提到的算法思想对比,即抽取程序骨架和标准骨架对比的方法,是对现有的动态测试评分法的一个补充。它能够在代码无法编译或运行结果与标准答案不一致时,通过检查程序的算法思想来给出合理的评分。例如,即使学生在实现同一个问题时使用了不同的方法,但只要算法思想一致,就可以根据这一点给予相应的分数。
基于人工评分思路的C语言自动评分算法研究涉及了静态分析、动态测试以及算法思想对比等多个方面。该算法能够更准确地模拟人工评分过程,为学生提供更为合理和客观的评价,帮助学生在学习过程中更好地掌握知识点。同时,这种算法也为计算机自动评分系统的发展提供了新的思路和方法。不过,算法的实现细节和实际应用效果还需要在后续的研究和实践中进一步探讨和验证。