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

?

程序設(shè)計(jì)題在線評(píng)閱技術(shù)的研究

2019-09-10 21:55林寧
現(xiàn)代信息科技 2019年8期
關(guān)鍵詞:關(guān)鍵字C語(yǔ)言程序設(shè)計(jì)

摘? 要:本文針對(duì)目前計(jì)算機(jī)專業(yè)畢業(yè)生就業(yè)難的問(wèn)題,提出開發(fā)一個(gè)程序設(shè)計(jì)類課程在線學(xué)習(xí)系統(tǒng),有助于減輕教師的工作量、增加學(xué)生的代碼量,從而提高學(xué)生的編程能力,但程序設(shè)計(jì)題的主觀性較強(qiáng),大多數(shù)在線評(píng)閱的準(zhǔn)確率難以令人滿意;本文就程序設(shè)計(jì)題的在線評(píng)閱技術(shù)進(jìn)行探討,給出了程序設(shè)計(jì)題自動(dòng)評(píng)閱模塊的實(shí)現(xiàn)方法、評(píng)閱目標(biāo)和原則,以及題目測(cè)試數(shù)據(jù)的要求、靜態(tài)評(píng)閱實(shí)現(xiàn)的方法、語(yǔ)法錯(cuò)誤檢測(cè)方法,還給出了運(yùn)行結(jié)果自動(dòng)評(píng)閱的實(shí)現(xiàn)方法等;評(píng)閱的技術(shù)具有一般性,可以應(yīng)用到C語(yǔ)言、C++和Java等語(yǔ)言的自動(dòng)評(píng)閱上。

關(guān)鍵字:程序設(shè)計(jì)題;在線評(píng)閱;靜態(tài)評(píng)閱;C語(yǔ)言

中圖分類號(hào):TP311.1? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2019)08-0104-03

Abstract:In view of the difficult employment of computer graduates at present,this paper puts forward that the development of an online learning system of programming courses can help reduce the workload of teachers,increase the amount of code for students,and thus improve the programming ability of students. However,the subjectivity of programming problems is strong,and the accuracy of most online reviews is difficult to be satisfied. This paper discusses the online evaluation technology of program design questions,and gives the realization method of automatic evaluation module of program design questions,the goal and principle of evaluation,the requirement of test data,and the realization method of static evaluation. The method of syntax error detection and the realization method of automatic evaluation of running results are also given in this paper. The technology of review is general and can be applied to automatic review in C language,C++ language and Java language.

Keywords:programming questions;online evaluation;static evaluation;C language

1? 現(xiàn)狀及問(wèn)題

據(jù)不完全統(tǒng)計(jì),我國(guó)軟件人才總量不足,結(jié)構(gòu)也不合理,軟件測(cè)試專業(yè)人員缺口高達(dá)20萬(wàn),Java軟件工程師每年的缺口為15萬(wàn)左右,各行各業(yè)對(duì)計(jì)算機(jī)人才的需求不減,而計(jì)算機(jī)專業(yè)卻是高校應(yīng)屆生就業(yè)率較低的專業(yè)之一。對(duì)于計(jì)算機(jī)類專業(yè)的畢業(yè)生,有很多公司抱怨其實(shí)踐能力較差,高校培養(yǎng)出來(lái)的人才難以符合企業(yè)需求。社會(huì)需要的是編程能力強(qiáng)、開發(fā)水平高、掌握新技術(shù)的計(jì)算機(jī)應(yīng)用創(chuàng)新型人才。因此在教學(xué)方面急需轉(zhuǎn)變傳統(tǒng)教學(xué)方式,增強(qiáng)學(xué)生編程實(shí)踐能力,以培養(yǎng)適應(yīng)市場(chǎng)需求的應(yīng)用型人才。

為了適應(yīng)社會(huì)對(duì)計(jì)算機(jī)專業(yè)人才的需求,我院與企業(yè)雙主體共同培養(yǎng)計(jì)算機(jī)專業(yè)人才,計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)和數(shù)據(jù)科學(xué)與大數(shù)據(jù)技術(shù)專業(yè)成為首批合作的專業(yè)。校企協(xié)同育人的模式有利于培養(yǎng)適應(yīng)社會(huì)需求的應(yīng)用型人才,但這也帶來(lái)了新的挑戰(zhàn)。在專業(yè)課程模塊上將會(huì)開設(shè)更多與企業(yè)需求的前沿技術(shù)相關(guān)的課程,如數(shù)據(jù)挖掘技術(shù)與應(yīng)用、神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)應(yīng)用和智能機(jī)器人等課程,這些課程的學(xué)習(xí)都要求學(xué)生具備較好的編程能力。C語(yǔ)言、C++和Java程序設(shè)計(jì)等是計(jì)算機(jī)及大數(shù)據(jù)專業(yè)的重要基礎(chǔ)課程,學(xué)好這些課程將為后續(xù)專業(yè)課程的學(xué)習(xí)打下堅(jiān)實(shí)基礎(chǔ)。如何提高學(xué)生的基礎(chǔ)編程能力?在教學(xué)中可以通過(guò)增加學(xué)生的編程代碼量來(lái)提高學(xué)生的編程能力,然而傳統(tǒng)的教學(xué)方式勢(shì)必會(huì)加重教師的教學(xué)負(fù)擔(dān),開發(fā)一個(gè)程序設(shè)計(jì)類課程在線學(xué)習(xí)系統(tǒng)有助于減輕教師的工作量、增加學(xué)生的代碼量,從而提高學(xué)生的編程能力。由于程序設(shè)計(jì)題的主觀性較強(qiáng),現(xiàn)有的自動(dòng)評(píng)閱準(zhǔn)確率難以令人滿意,目前能用于教學(xué)與考試的系統(tǒng)并不多,針對(duì)這一情況,本文就程序設(shè)計(jì)題的在線評(píng)閱技術(shù)進(jìn)行探討。

2? 自動(dòng)評(píng)閱模塊

自動(dòng)評(píng)閱模塊是程序設(shè)計(jì)題在線評(píng)閱系統(tǒng)的重要組成部分,該模塊能夠?qū)崿F(xiàn)對(duì)學(xué)生提交的程序進(jìn)行自動(dòng)評(píng)閱。該模塊實(shí)現(xiàn)的功能包括:接收學(xué)生提交的程序、對(duì)程序進(jìn)行去掉注釋處理、靜態(tài)評(píng)閱、輸出語(yǔ)句標(biāo)準(zhǔn)化、動(dòng)態(tài)評(píng)閱,并將評(píng)閱結(jié)果返回給學(xué)生且保存到數(shù)據(jù)庫(kù)等。在線評(píng)閱系統(tǒng)接收提交的程序后,Web服務(wù)器與判分的守護(hù)進(jìn)程創(chuàng)建Socket連接,并將程序以及測(cè)試數(shù)據(jù)發(fā)送給守護(hù)進(jìn)程;自動(dòng)評(píng)閱系統(tǒng)首先將提交的程序中所有的注釋全部去掉,然后對(duì)必須包含的關(guān)鍵字進(jìn)行匹配,并計(jì)算靜態(tài)相似度。對(duì)提交程序中的printf輸出語(yǔ)句格式控制進(jìn)行標(biāo)準(zhǔn)化處理;然后編譯、運(yùn)行學(xué)生程序,輸入測(cè)試數(shù)據(jù),再判斷輸出的結(jié)果是否正確,可通過(guò)反復(fù)多次運(yùn)行學(xué)生程序來(lái)提高判分的準(zhǔn)確率。

評(píng)判系統(tǒng)滿足以下目標(biāo)和原則:

(1)實(shí)現(xiàn)并行評(píng)閱,對(duì)同時(shí)提交的程序可以同時(shí)進(jìn)行判分,且相互之間不影響結(jié)果。

(2)在評(píng)閱過(guò)程中,控制每個(gè)判分進(jìn)程資源的使用,合理分配服務(wù)器的內(nèi)存和CPU資源。

(3)評(píng)閱的可靠性,保證判分的準(zhǔn)確率在測(cè)試中超過(guò)某個(gè)值。

3? 題目輸入輸出要求

輸入值是用來(lái)檢測(cè)學(xué)生程序是否正確。輸入值對(duì)學(xué)生來(lái)說(shuō)是看不到的,輸入值可以設(shè)置若干組,后臺(tái)判分程序根據(jù)輸入的組數(shù)來(lái)執(zhí)行程序,每執(zhí)行一次程序輸入一組值。設(shè)置多組輸入值的好處是避免出現(xiàn)對(duì)某些題目的誤判。例如:

題目:用C語(yǔ)言編寫一個(gè)命題公式賦值計(jì)算器,通過(guò)鍵盤輸入一組賦值,實(shí)現(xiàn)自動(dòng)計(jì)算命題邏輯公式的真值。

該題輸出的結(jié)果只有兩種情況:1或0,如果只有一組輸入值,那么學(xué)生只需在程序中輸出1或0就可以得分。設(shè)置了多組值,且輸出結(jié)果有的為0,有的為1,這樣不管是學(xué)生的程序輸出1還是0都會(huì)被判分進(jìn)程判為0分。

在動(dòng)態(tài)評(píng)閱時(shí),系統(tǒng)將多次運(yùn)行學(xué)生程序,根據(jù)所有的運(yùn)行結(jié)果來(lái)進(jìn)行判分。輸出值也是分為多組的,每組輸出值是對(duì)應(yīng)一組輸入值的,輸出值是出題老師事先根據(jù)輸入值計(jì)算出來(lái)的標(biāo)準(zhǔn)結(jié)果。用輸出值與運(yùn)行學(xué)生的程序進(jìn)行關(guān)鍵字的對(duì)比來(lái)計(jì)算動(dòng)態(tài)相似度,輸出值也相當(dāng)于標(biāo)準(zhǔn)答案。

4? 在線評(píng)閱的關(guān)鍵技術(shù)

4.1? 靜態(tài)評(píng)閱

靜態(tài)評(píng)閱目的是檢查程序是否包含必要的關(guān)鍵字或者框架,這樣可以限制學(xué)生使用某些知識(shí)來(lái)解決問(wèn)題。例如,題目中要求使用自定義的結(jié)構(gòu)體,那么提交的程序中必須包含有struct{}這樣的框架,否則該程序被檢測(cè)為沒(méi)有按照題目要求完成,被判為0分。在判斷關(guān)鍵字前首先去掉注釋,避免提交的程序中含有大量注釋,造成誤判。靜態(tài)評(píng)閱的處理流程圖:

將程序去掉注釋后,還需要進(jìn)一步檢測(cè)程序中是否包含某些關(guān)鍵字,檢測(cè)關(guān)鍵字的算法如下:

(2)從程序文件中使用fgets()讀取新的一行到字符數(shù)組str中,轉(zhuǎn)(3),讀取失敗,轉(zhuǎn)(4);

(3)在關(guān)鍵序列S中循環(huán)將關(guān)鍵字取出,每次循環(huán)使用strstr()函數(shù)檢測(cè)關(guān)鍵字是否存在于str字符串中。如果strstr()函數(shù)返回指針?lè)强眨瑒ti=i+1,并從序列S中刪除該關(guān)鍵字;

(4)關(guān)鍵字檢測(cè)結(jié)束,i為程序中包含關(guān)鍵字的個(gè)數(shù)。

4.2? 語(yǔ)法錯(cuò)誤檢測(cè)

程序的語(yǔ)法錯(cuò)誤是自動(dòng)評(píng)閱中常見(jiàn)的錯(cuò)誤,因此學(xué)生的程序提交到服務(wù)器后首先要進(jìn)行語(yǔ)法上的檢查,造成語(yǔ)法錯(cuò)誤主要有兩方面的原因:一是程序本身存在書寫上的錯(cuò)誤,導(dǎo)致編譯無(wú)法通過(guò);二是編譯器的差異造成編譯無(wú)法通過(guò);如對(duì)于C語(yǔ)言來(lái)說(shuō),編譯器的類型比較多,如VC++,VS2010、VS2015等,也有Linux環(huán)境運(yùn)行的編譯器gcc等,這些差異會(huì)造成在一個(gè)編譯器能編譯通過(guò),但另一個(gè)編譯器無(wú)法通過(guò)。因此,自動(dòng)評(píng)閱系統(tǒng)應(yīng)給出錯(cuò)誤的理由或提示。

如何檢測(cè)提交的程序是否有語(yǔ)法錯(cuò)誤呢?最直接的方法是通過(guò)調(diào)用服務(wù)器上編譯器的命令檢測(cè),如在linux系統(tǒng)下C語(yǔ)言在判分程序中使用system函數(shù)調(diào)用shell命令進(jìn)行編譯,C語(yǔ)言函數(shù)system()調(diào)用gcc命令編譯學(xué)生提交的程序。使用system()函數(shù)調(diào)用命令的格式如下:

如果編譯通過(guò),將會(huì)生成可執(zhí)行文件,說(shuō)明程序沒(méi)有語(yǔ)法上的錯(cuò)誤,否則,后面步驟不再執(zhí)行,該題直接判為0分。

4.3? 無(wú)限運(yùn)行程序的終止

有時(shí)在運(yùn)行提交的程序時(shí),會(huì)出現(xiàn)這樣的情況,死循環(huán)、要求輸入大量的數(shù)據(jù)等,如下面兩個(gè)程序片段:

在這種情況下,該進(jìn)程是不會(huì)自動(dòng)終止的,這種情況下往往需要限制提交程序的運(yùn)行時(shí)間,采用非正常終止的手段。

4.4? 運(yùn)行結(jié)果的評(píng)閱

本文采用了多組測(cè)試值,對(duì)提交的程序進(jìn)行多次測(cè)試,目的是提高評(píng)閱的正確率。對(duì)評(píng)閱結(jié)果分以下三種情況:

(1)每一組測(cè)試結(jié)果都正確,則提交程序是正確的。

(2)部分測(cè)試值結(jié)果錯(cuò)誤,說(shuō)明提交的程序不完全正確。

(3)所有測(cè)試值得到的結(jié)果是錯(cuò)誤的,則該程序錯(cuò)誤。

在動(dòng)態(tài)評(píng)閱方法上,判斷程序是否正確的方法是對(duì)比程序運(yùn)行結(jié)果。對(duì)比的方法有兩種,一是完全匹配法,二是關(guān)鍵字匹配法。

完全匹配方法,即運(yùn)行提交的程序后,得到的運(yùn)行結(jié)果與標(biāo)準(zhǔn)答案進(jìn)行匹配,當(dāng)結(jié)果完全一致,那么程序是正確的,否則程序是錯(cuò)誤。

關(guān)鍵字匹配法,標(biāo)準(zhǔn)答案中只給出主要的關(guān)鍵字,如果運(yùn)行結(jié)果包含所有的必要關(guān)鍵字,那么我們認(rèn)為是正確的。

如題目:輸入整數(shù)n,計(jì)算并輸出n!;實(shí)現(xiàn)的代碼如下:

后臺(tái)給出的標(biāo)準(zhǔn)答案是只輸出n!的值,并沒(méi)有其他字符。從上面的代碼可以看出程序輸出了提示的語(yǔ)句“請(qǐng)輸入n的值:”,如果采用完全匹配方法程序是錯(cuò)誤的。如果采用關(guān)鍵字匹配法,提交的程序是正確的。目前很多系統(tǒng)采用的是完全匹配的方法,這種評(píng)閱方法對(duì)輸出有嚴(yán)格要求;對(duì)于關(guān)鍵字匹配法的實(shí)現(xiàn)方法是首先要盡量去除無(wú)關(guān)的輸出字符,然后再檢測(cè)輸出結(jié)果中的關(guān)鍵字,這種評(píng)閱方法放寬了輸出的要求。

5? 結(jié)? 論

本文對(duì)程序設(shè)計(jì)題的自動(dòng)評(píng)閱的一般方法進(jìn)行了探討,一些方法已經(jīng)被應(yīng)用到C語(yǔ)言自動(dòng)評(píng)閱系統(tǒng)上;國(guó)內(nèi)很多自動(dòng)評(píng)閱系統(tǒng)在評(píng)閱后學(xué)生只能看到對(duì)或錯(cuò)的兩種結(jié)果,學(xué)生往往難以修改程序;作為練習(xí)系統(tǒng),我院開發(fā)的在線評(píng)閱系統(tǒng)增加了錯(cuò)誤提示功能,學(xué)生可以根據(jù)不同的錯(cuò)誤類型對(duì)程序進(jìn)行修改,同時(shí)減輕了教師輔導(dǎo)工作量;本文提及的技術(shù)也可以應(yīng)用到C++、Java等語(yǔ)言的自動(dòng)評(píng)閱系統(tǒng)的開發(fā)中。

參考文獻(xiàn):

[1] 林寧,左悅.基于Linux的C語(yǔ)言編程題在線評(píng)分平臺(tái)的搭建 [J].福建電腦,2018,34(9):45-46.

[2] 何文廣,周珂,熊剛強(qiáng),等.VB.NET程序設(shè)計(jì)題動(dòng)態(tài)評(píng)閱技術(shù)研究 [J].實(shí)驗(yàn)室研究與探索,2017,36(11):122-125.

[3] 劉悅芳.依據(jù)程序依賴關(guān)系匹配度的C語(yǔ)言程序設(shè)計(jì)題評(píng)分方法 [J].電子技術(shù)與軟件工程,2019(1):238.

作者簡(jiǎn)介:林寧(1981-),男,漢族,廣西北流人,講師,碩士,研究方向:軟件理論與應(yīng)用、信號(hào)與信息處理、算法分析。

猜你喜歡
關(guān)鍵字C語(yǔ)言程序設(shè)計(jì)
基于OBE的Java程序設(shè)計(jì)個(gè)性化教學(xué)研究
項(xiàng)目化教學(xué)在Python程序設(shè)計(jì)課程中的應(yīng)用
C++程序設(shè)計(jì)課程教學(xué)改革研究
醫(yī)學(xué)專業(yè)“Python程序設(shè)計(jì)”課程教學(xué)改革總結(jié)與思考
“C語(yǔ)言程序設(shè)計(jì)”課程混合教學(xué)探索
成功避開“關(guān)鍵字”
基于C語(yǔ)言的計(jì)算機(jī)軟件編程技術(shù)探究
中職C語(yǔ)言單片機(jī)課堂教學(xué)中的趣味性探討
計(jì)算機(jī)原理中C語(yǔ)言的應(yīng)用價(jià)值
智能垃圾箱
交口县| 镇江市| 长葛市| 九江县| 原平市| 左贡县| 兰考县| 西藏| 洪江市| 藁城市| 新余市| 濮阳县| 江口县| 威宁| 普兰店市| 五莲县| 鹿邑县| 宜春市| 鱼台县| 东明县| 竹溪县| 康定县| 县级市| 琼海市| 祁阳县| 张北县| 紫阳县| 平阴县| 特克斯县| 淮阳县| 乐东| 永泰县| 大荔县| 浦城县| 四会市| 毕节市| 陆良县| 泗洪县| 大安市| 博野县| 龙里县|