(衡水學(xué)院,河北衡水市,053000)王 超
互聯(lián)網(wǎng)技術(shù)的出現(xiàn)給以人類社會的發(fā)展帶來了巨大的改變,當(dāng)前計算機(jī)專業(yè)已經(jīng)成為高校的一門熱門專業(yè),深受國家和社會各界的重視,越來越多的學(xué)生選擇加入到計算機(jī)專業(yè)的學(xué)習(xí)中。而C語言程序設(shè)計則是計算機(jī)類專業(yè)諸多課程中的一門基礎(chǔ)性的課程,是計算機(jī)的入門課程,于計算機(jī)專業(yè)的學(xué)生而言有著深遠(yuǎn)的意義,且該項課程具有較強(qiáng)的實(shí)踐性,教師在教學(xué)過程中要注重做實(shí)踐課程的課時規(guī)劃,更好地利用起C語言程序設(shè)計實(shí)踐課程,通過增加學(xué)生的編程代碼量來提高學(xué)生整體的編程能力。但就目前而言,高校計算機(jī)專業(yè)教學(xué)中教師所擁有教學(xué)資源已經(jīng)無法滿足C語言程序設(shè)計實(shí)踐課程的根本需求,使得課堂實(shí)踐教學(xué)工作的開展存在著一定的阻礙,不利于新時期學(xué)生實(shí)踐能力的有效提升。為了解決這一教學(xué)難題,從根本上降低計算機(jī)專業(yè)教師工作量,提高高校計算機(jī)專業(yè)學(xué)生編程能力,高校選擇適用程序設(shè)計題在線自動評分系統(tǒng),將其應(yīng)用到學(xué)生上機(jī)練習(xí)和考試中。
基于Linux的C語言程序設(shè)計不僅是大學(xué)計算機(jī)專業(yè)學(xué)生的必修課之一,同時更是計算機(jī)專業(yè)學(xué)生對計算機(jī)相關(guān)專業(yè)知識學(xué)習(xí)的基礎(chǔ)。因此,為了方便教師對學(xué)生的學(xué)習(xí)狀況進(jìn)行了解,我國許多高校均對其設(shè)計了相應(yīng)的考評。但當(dāng)前一些高校在對C語言程序設(shè)計題進(jìn)行評閱的過程中仍舊采用傳統(tǒng)的人工評閱方式,這一方式不僅會影響到教師的評閱效率,同時還極易在評閱過程中出現(xiàn)一些人為失誤,從而直接影響到學(xué)生的綜合成績。此外,在一些高校中,其教師為了有效提升C語言程序設(shè)計的評閱效率也采用了自動評閱的方式對學(xué)生的答題進(jìn)行評閱。而自動評閱中包括靜態(tài)評閱和動態(tài)評閱。其中動態(tài)評閱是指對學(xué)生所設(shè)計的程序進(jìn)行測試運(yùn)行并將其運(yùn)行結(jié)果與正確答案進(jìn)行比對,從而得出該學(xué)生的分?jǐn)?shù)。而靜態(tài)評閱則是指對學(xué)生所設(shè)計的程序代碼進(jìn)行檢測,從而得出該生的分?jǐn)?shù)。雖然動態(tài)評閱可以促進(jìn)學(xué)生創(chuàng)新性思維的發(fā)展,但其在對學(xué)生的程序設(shè)計進(jìn)行評閱過程時卻無法指出該生程序設(shè)計中的錯誤,因此學(xué)生無法在這一過程中了解到其不足。同時,若學(xué)生在程序設(shè)計中出現(xiàn)部分錯誤也有可能會因為答案正確而被判定為正確,從而使其評閱過程失去公正性。
在動態(tài)評閱技術(shù)中最為常見的便是基于關(guān)鍵詞匹配的動態(tài)評閱算法,在這一算法中,首先需要執(zhí)行對源代碼的編譯與運(yùn)行。由于動態(tài)評閱是依據(jù)學(xué)生所設(shè)計的程序結(jié)果對學(xué)生的程序設(shè)計的正誤進(jìn)行判斷的,因此在對學(xué)生程序設(shè)計進(jìn)行評閱前,需要對學(xué)生所編寫的程序進(jìn)行測試運(yùn)行。在這一過程中,首先動態(tài)評閱算法需要利用其中的system函數(shù)調(diào)用shell命令對該生所設(shè)計的程序進(jìn)行編譯。在這一過程中,動態(tài)評閱算法不僅僅需要對學(xué)生所設(shè)計的程序進(jìn)行初步檢測,同時更需要判斷其是否可以被編譯。其次,動態(tài)評閱算法還需要對已編譯的程序進(jìn)行模擬運(yùn)行,從而確定其是否得以運(yùn)行。為了保障評閱結(jié)果的有效性,其在對程序進(jìn)行測試的過程中不僅僅需要利用多組特征數(shù)值對該程序進(jìn)行測試,同時還需要將其輸入數(shù)據(jù)以及得出結(jié)果依次存儲在input.txt以及result.txt文件中。
動態(tài)評閱算法是一種通過對學(xué)生所設(shè)計的程序結(jié)果進(jìn)行判定的自動評閱方法,其在對學(xué)生程序進(jìn)行評閱的過程中主要需要經(jīng)歷以下步驟。首先,在動態(tài)評閱算法中含有一個循環(huán)語句,其主要作用是對學(xué)生程序結(jié)果進(jìn)行循環(huán)檢測。而在該循環(huán)語句中,動態(tài)評閱算法需要對該生的程序是否能夠被編譯進(jìn)行檢測,若其可以被編譯則進(jìn)行下一步檢測,若其無法被編譯則跳出循環(huán)體并輸出程序報錯。其次,在動態(tài)評閱算法中還需要包括一個循環(huán)語句,從而循環(huán)對該生程序是否得以運(yùn)行進(jìn)行檢測。若可以運(yùn)行則將其輸出結(jié)果與正確結(jié)果進(jìn)行比對,若結(jié)果正確,跳出循環(huán)并輸出正確,若結(jié)果錯誤或無法運(yùn)行則跳出循環(huán)并輸出錯誤。當(dāng)以上結(jié)果出現(xiàn)后則表示動態(tài)評閱結(jié)束,輸出結(jié)果為該生的測試結(jié)果。
在學(xué)生所設(shè)計的程序運(yùn)行過程中極有可能會出現(xiàn)關(guān)鍵詞有序或關(guān)鍵詞無序的現(xiàn)象。在面對關(guān)鍵詞有序時,動態(tài)評閱算法首先需要對該結(jié)果中的關(guān)鍵詞進(jìn)行比對,從而確定該關(guān)鍵詞是否完整以及關(guān)鍵詞輸出順序是否與答案一致。若該同學(xué)所設(shè)計的程序與答案一致,那么動態(tài)評閱程序則輸出正確,若該程序輸出關(guān)鍵字不全或關(guān)鍵詞輸出順序與答案不一致,那么則輸出錯誤。
在面對輸出關(guān)鍵詞無序的情況時,動態(tài)評閱程序首先需要對該程序所輸出的關(guān)鍵詞正確率進(jìn)行檢測,即一次對該程序所輸出的關(guān)鍵詞與答案中的關(guān)鍵詞進(jìn)行比對,從而確定其是否正確。其次,動態(tài)評閱程序還需要判定該程序所輸出的關(guān)鍵詞是否存在重復(fù)現(xiàn)象。在這一過程中,動態(tài)評閱程序需要將已輸入的關(guān)鍵詞進(jìn)行兩兩之間的相互比對,進(jìn)而防止其出現(xiàn)關(guān)鍵詞重復(fù)的現(xiàn)象。
在動態(tài)評閱程序運(yùn)行過程中難免會遇到諸多問題,為了方便維護(hù)人員及使用人員對當(dāng)前動態(tài)評閱程序的運(yùn)行現(xiàn)狀進(jìn)行了解,在該程序中也加入了相應(yīng)的程序錯誤提示語句。例如,當(dāng)學(xué)生在提交程序時出現(xiàn)無法提交的現(xiàn)象時,該程序會輸出問價類型不符等提示語句。而在其無法編譯以及無法運(yùn)行時也會出現(xiàn)相應(yīng)的語句提示。最后,若該生所設(shè)計的程序難以滿足要求,該程序?qū)敵鑫窗搭}目要求輸出結(jié)果的提示,從而方便學(xué)生以及教師對其程序運(yùn)行結(jié)果進(jìn)行了解。
綜上所述,基于Linux的C語言程序設(shè)計題的動態(tài)評閱技術(shù)探討具有一定的現(xiàn)實(shí)意義。本文介紹關(guān)于動態(tài)評閱方法的設(shè)計已經(jīng)被充分實(shí)踐到了C語言程序設(shè)計題自動評閱系統(tǒng)中,且在實(shí)踐過程中可以發(fā)現(xiàn),評閱系統(tǒng)的評分準(zhǔn)確率得到了有效的提升,且完善了系統(tǒng)的錯誤提示功能,使得學(xué)生能夠第一時間察覺到程序的錯誤,有助于學(xué)生更好地調(diào)試程序。