国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言程序在線分析輔導系統(tǒng)設計

2017-05-17 08:52張良
中國教育信息化·高教職教 2017年4期
關鍵詞:C語言自主學習

張良

摘 要:本文設計了一種針對C語言程序設計課程的在線分析與輔導系統(tǒng)。學生學習C語言的過程中,需要通過大量練習題鞏固所學知識。目前,一些教學平臺提供了在線判題的功能來檢驗程序的對錯,但存在一些問題。該系統(tǒng)在在線判題系統(tǒng)的基礎上,通過測試用例分析、編譯分析、結(jié)構分析等方法,進一步細化檢查和定位學生程序中的錯誤,為學生提供針對性的輔導,對提高學生的學習效率有一定幫助。

關鍵詞:自主學習;在線判題智能輔導;C語言

中圖分類號:G434 文獻標志碼:A 文章編號:1673-8454(2017)07-0086-03

一、引言

C語言程序設計是一門實踐性很強的課程,在教學過程和學生的自主學習過程中,都需要通過大量的練習題來鞏固所學知識、檢驗學習效果。很多C語言課程教學平臺和自主學習平臺也提供了大量的題目(主要是編程題)供學生練習。由于學生數(shù)量眾多,學習時間也不一致,教師很難及時為每位學生所做的題目進行評價并給出針對性的指導。

目前一些教學實踐過程中采用在線判題(Online Judge)系統(tǒng)進行自動評分。[1][2]在線判題系統(tǒng)大多采用測試用例的方法進行判斷,即編制若干組測試用例,模擬運行程序,將數(shù)據(jù)輸入程序,并將輸出結(jié)果與預期結(jié)果進行匹配,如果完全匹配成功判對,否則判錯。這種方法能夠很直觀地判斷學生程序的對錯,對促進學生提高實驗水平也有很大幫助,但這種判斷方法并不能完全適用于學生自主學習的場景。

(1)在線判題的前提是必須保證程序能夠運行。而學生(尤其是初學者)編寫的源程序可能存在個別語法錯誤而不能通過編譯并生成可執(zhí)行文件。這些程序不能得到分析評價和針對性輔導。

(2)輸出結(jié)果與預期成果進行文本匹配來判斷對錯的方式,使一些只在輸出格式上有錯誤的程序判斷為錯。程序中某些數(shù)據(jù)類型的精度問題也可能導致輸出結(jié)果有誤差,從而導致判斷為錯。

(3)目前的在線判題系統(tǒng)只能對題目整體進行判斷對錯,不能具體定位到程序出問題的部分并針對學生的錯誤進行輔導。

自主學習過程中,很多初學者可能找不到以上出錯的原因,而浪費了很多學習時間,降低了學習效率。而在教師現(xiàn)場輔導時,可以很容易發(fā)現(xiàn)其中的錯誤,并可以根據(jù)其程序給出分析評價并進行指導。近年來,許多教改項目對在線判題系統(tǒng)進行改進,主要的研究思路有通過優(yōu)化判題流程[3]、語義檢測的穩(wěn)定模型[4]、基于關鍵字和序列匹配[5]等方法,這些方法在一定程度上解決了以上問題。本文借鑒以上思路,結(jié)合測試用例、編譯系統(tǒng)、結(jié)構分析法等設計了一種在線分析及輔導系統(tǒng),可以用于應用C語言教學平臺及自主學習系統(tǒng),經(jīng)過測試,在線分析和輔導系統(tǒng)可以模擬教師現(xiàn)場指導,從而提高學生學習的效率。

二、系統(tǒng)設計

基于對在線判題系統(tǒng)優(yōu)缺點的分析,本系統(tǒng)采用以下原則進行設計:①系統(tǒng)基于成熟的在線判題系統(tǒng),采用測試用例法對學生提交的源程序進行初步分類。②對于初步分類為錯誤的程序再采用編譯分析、結(jié)構分析等方法進行進一步分析。設系統(tǒng)整體流程如圖1 所示。

整個系統(tǒng)分為四個部分——測試分析模塊、編譯分析模塊、結(jié)構分析模塊、輔導模塊。

首先對源程序進行編譯鏈接,如果編譯成功,可以生成exe文件,調(diào)用測試模塊進行測試。如果編譯不成功,則需要對源文件進行進一步分析。①調(diào)用編譯分析模塊解析程序中出現(xiàn)的語法錯誤并進行自動修正。②調(diào)用結(jié)構分析模塊分析程序的結(jié)構問題。

在測試模塊中,如果測試用例全部通過測試,程序判對并將此程序加入?yún)⒖即鸢笌熘?;如果部分通過,則進行用例分析,并調(diào)用結(jié)構分析模塊分析程序,如果全部未通過,直接調(diào)用結(jié)構分析模塊進行分析。針對各個模塊分析、對比得到的程序問題,分類別(語法錯誤、格式錯誤、結(jié)構錯誤等)對學生進行針對性輔導。

三、詳細設計

1.測試分析模塊

測試模塊首先要設置若干組合理的測試用例。測試用例需要覆蓋到程序的所有結(jié)構路徑。如分支結(jié)構中,每個分支至少要有1組測試用例。測試用例除了設置輸入輸出外,還需要設置測試用例說明,如分支結(jié)構中,每組測試用例必須設置該分支測試用例說明。

通過測試用例對程序進行模擬運行,如果測試用例全部通過,程序得滿分,如果該程序的結(jié)構模塊與參考答案庫所有答案均不同,將該程序加入到參考答案庫。如果部分通過,對未通過測試的用例進行分析,得到程序出現(xiàn)錯誤結(jié)構路徑。針對部分同學的格式、數(shù)據(jù)類型精度等情況可能造成判錯的問題,需要在現(xiàn)有的測試用例方法基礎上增加容錯的機制。常見的格式錯誤有:

多寫或少寫空格、制表符、回車符等符號造成的錯誤。格式控制串“%m.nf”“%md”未按要求書寫造成的輸出格式錯誤。

將間隔符號如“,”“;”等寫錯引起的錯誤。

在輸出時多寫或漏寫了其他說明性文字引起的錯誤,比如輸出變量a的值。格式輸出要求“a=5”,而學生程序只輸出了 5,漏寫“a=”,或者要求輸出5,而程序輸出“a=5”。

為解決以上由于格式問題導致系統(tǒng)判錯,需要對測試用例的參考輸出結(jié)果和用戶程序的實際輸出結(jié)果進行歸一化操作后再次進行比對,并對測試用例中的輸出結(jié)果進行細化設置。

(1)格式歸一化操作。對測試用例的參考輸出結(jié)果或程序的實際輸出中常用的控制字符如空格、制表符、換行符等為統(tǒng)一的間隔標記。歸一化后再次進行比對。

(2)精度歸一化。在編寫程序過程中,由于學生用的數(shù)據(jù)類型不合適可能導致數(shù)據(jù)結(jié)果存在誤差,如float類型數(shù)據(jù)在6位數(shù)之后出現(xiàn)的精度誤差,需要對學生提供的源程序數(shù)據(jù)精度進行歸一化,統(tǒng)一為精度較高的數(shù)據(jù)類型。

(3)輸出結(jié)果的細化設置。在《C語言程序設計》課程中,編程題輸出結(jié)果一般可分為“說明性字符串”、“計算型數(shù)值”、“間隔符號”等三大類,其中核心為“計算型數(shù)值”。在設置測試用例參考答案時分別細化標記三類輸出,在進行結(jié)果比對時按照“完全匹配—>計算性數(shù)值匹配—>間隔符號匹配—>說明性字符串匹配”的順序進行比對結(jié)果。

2.編譯分析模塊

目前的在線判題系統(tǒng),一般是在服務端使用編譯工具對用戶提交的源程序進行編譯鏈接,如果能夠編譯通過,進入測試用例模塊進行測試。如果不能通過,則進行報錯。編譯系統(tǒng)所報的錯誤基本都是針對源程序中存在的語法錯誤,有的指示位置有偏差,有的錯誤是由前面的錯誤引起的,有的描述不直觀,對初學者查找錯誤造成很大的誤解,不能直接對學生修改程序起到指導作用。本系統(tǒng)根據(jù)教師在教學實踐中的經(jīng)驗,將編譯系統(tǒng)的報錯進行分析,反推出源程序中的書寫錯誤,并進行直觀提示。由于每一種編譯器的報錯提示有差異,本文以VC6.0 編譯器為例,如表1所示。

根據(jù)編譯器的提示錯誤的順序依次自動修正源程序中的錯誤后重新進行編譯,如果編譯成功,則重新進入測試用例模塊進行測試,如果編譯不成功,再次修正錯誤,進行編譯,直至可以編譯或者修正次數(shù)大于設定的閾值。

3.結(jié)構分析模塊

為了分析源程序的結(jié)構,需要為每道題目設置參考答案。參考答案的要求一是要標準化,采用標準流程和通用方法解決問題,參考答案書寫要求規(guī)范,并詳細注釋。二是要鼓勵多樣化思維,答案不一定唯一,應給出一種或幾種參考答案,形成答案庫。在判題的過程中,對全部通過測試的新答案,也要加入到參考答案庫中。

C語言程序的結(jié)構有如下特點:

絕大多數(shù)C語言中源程序都可以轉(zhuǎn)化為“預處理命令+若干個函數(shù)”的結(jié)構,細分到每個函數(shù),又可以分為順序、選擇和循環(huán)3 種控制結(jié)構及其嵌套結(jié)構。[5]

關鍵語句。C語言有32個關鍵詞,每個關鍵詞往往代表一種語法結(jié)構。根據(jù)關鍵詞,可得到關鍵語句序列。

即使算法相同,不同人編寫的程序也可能完全不同,可能變量名不同、變量定義的順序不同、控制結(jié)構不同(比如循環(huán)語句,有人習慣用for語句,有人習慣用while語句)等。

根據(jù)C語言程序的結(jié)構特點,將整個程序解析為若干個模塊,解析順序:①預處理命令部分。②全局定義部分。定義全局變量、全局函數(shù)聲明等信息。③函數(shù)模塊:根據(jù)函數(shù)模塊的結(jié)構特點,經(jīng)過文本分析,可以獲得函數(shù)的結(jié)構,并獲取函數(shù)名、返回值類型、參數(shù)列表等信息。④關鍵語句序列,根據(jù)C 語言中的關鍵字,獲取函數(shù)中控制結(jié)構語句。形成關鍵語句序列。

通過解析程序可以得到程序結(jié)構分析結(jié)果及層次結(jié)構。如:

函數(shù)結(jié)構(參數(shù)列表)

輸入語句

循環(huán)結(jié)構

分支結(jié)構

循環(huán)結(jié)構

輸出語句

系統(tǒng)采用XML格式進行存儲,并進行比對。

4.輔導模塊

在自主學習過程中,學生進行測試的目的主要是發(fā)現(xiàn)學習的薄弱環(huán)節(jié),并得到針對性的指導。根據(jù)測試分析模塊、編譯分析模塊、結(jié)構分析模塊得到的分析結(jié)果,針對學生程序中出現(xiàn)的主要問題,對學生進行針對性指導。

如果程序判定為正確,將成績記錄為滿分,系統(tǒng)推薦下一個難度的學習資料和題目進行練習。如果未得滿分,依次根據(jù)以上三個模塊得到的分析結(jié)果進行針對性指導。如果為格式問題,給學生展示正確的書寫格式,并為學生提供格式方面的強化指導,為其推薦格式方面的訓練題目,加強訓練。如果是語法錯誤,根據(jù)編譯分析系統(tǒng)分析結(jié)果,給出錯誤提示,指出修正方法。未按題目要求編寫函數(shù),或者函數(shù)的格式不正確,強化其函數(shù)定義方法及書寫格式、函數(shù)參數(shù)設置等,并提供參考范例供學生學習。結(jié)構型錯誤,為學生提示標準答案的結(jié)構框架及參考范例。

四、總結(jié)

本文設計了一種C語言程序智能評價及輔導系統(tǒng),目前在《C語言程序設計》課程的自主學習平臺中進行了應用測試,作為課程的輔助教學平臺。經(jīng)測試與綜合分析,取得了較好的效果。

(1)本系統(tǒng)細化了在線判題系統(tǒng)判題規(guī)則,改變以往的練習系統(tǒng)只判斷對錯的模式,通過編譯分析模塊和結(jié)構分析模塊,能更細致找出學生的錯誤和給出細化的建議,提高了學生學習的效率。

(2)在判題系統(tǒng)的基礎上增加了針對性輔導的功能,學生通過自主學習系統(tǒng),不僅可以檢驗自己的學習水平,還可以得到針對性的輔導,發(fā)現(xiàn)學習的薄弱環(huán)節(jié),提高學生的學習水平。

(3)在實際運行中,也發(fā)現(xiàn)了系統(tǒng)的一些缺點,比如對個別解題思路比較特別的程序不能給出準確的解讀,智能化還有待提高,在下一步工作中還要繼續(xù)進行研究。

參考文獻:

[1]熊茜,雷亮,許莎,陳劉奎.基于在線判題系統(tǒng)的C語言實驗教學改革[J].重慶科技學院學報(社會科學版),2015(10):67-69.

[2]廖雪花,厲蘭潔,唐思娩.基于Online Judge 的C語言程序設計實驗課教學改革研究[J].計算機教育,2016(6):130-132.

[3]蔣燕敏.自動判題算法及網(wǎng)絡考試平臺研究[D].浙江:浙江工業(yè)大學,2014.

[4]陳晶晶,陳華,范宜標.C語言智能評分系統(tǒng)的開發(fā)[J].龍巖學院學報,2016(2):75-80.

[5]楊利軍,董紅斌,梁意文,譚成予.源程序語義檢測的穩(wěn)定模型分析方法[J].計算機工程,2006(15):96-98.

[6]王力洪.基于關鍵字和序列匹配的自動評分算法的研究[J].福建電腦,2015(12):10-12.

[7]喬少杰,楊燕,葛永明,張翠芳,戴齊.基于B/S架構的多用戶在線程序評判系統(tǒng)設計與實現(xiàn)[J].計算機工程與科學,2011(s1):58-61.

(編輯:王天鵬)

猜你喜歡
C語言自主學習
基于Visual Studio Code的C語言程序設計實踐教學探索
基于C語言的計算機軟件編程
C語言程序設計課程教學與學科專業(yè)相結(jié)合的探索
高職高專院校C語言程序設計教學改革探索
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應用
非計算機專業(yè)C語言教學探討
灵丘县| 集安市| 宁德市| 奉节县| 枞阳县| 汉中市| 定安县| 轮台县| 兴宁市| 固镇县| 楚雄市| 祁门县| 昭通市| 乾安县| 衡南县| 新竹县| 德化县| 深圳市| 富宁县| 三明市| 聊城市| 重庆市| 陕西省| 峨边| 班戈县| 永平县| 张家界市| 五河县| 六枝特区| 平阳县| 调兵山市| 岳阳县| 旺苍县| 北宁市| 莲花县| 格尔木市| 徐闻县| 来凤县| 湘潭市| 长垣县| 宁远县|