劉宇欣 周秋霞
摘 要: C語(yǔ)言程序設(shè)計(jì)課程是計(jì)算機(jī)專業(yè)的入門課程之一,程序設(shè)計(jì)類課程的強(qiáng)實(shí)踐性要求學(xué)生動(dòng)手編程,勤加練習(xí)。ACM在線測(cè)試平臺(tái)有著自動(dòng)化判題、便于統(tǒng)計(jì)分析數(shù)據(jù)等優(yōu)點(diǎn),為學(xué)生的自主學(xué)習(xí)提供了一個(gè)園地。不僅如此,ACM平臺(tái)還可以很好地應(yīng)用于C程序設(shè)計(jì)教學(xué)的多個(gè)環(huán)節(jié)來(lái)輔助教學(xué)。通過(guò)對(duì)ACM平臺(tái)模塊介紹展示其功能,并以實(shí)驗(yàn)課、作業(yè)、考試為例體現(xiàn)ACM平臺(tái)輔助教學(xué)的途徑及優(yōu)勢(shì)。實(shí)踐證明,使用ACM平臺(tái)輔助教學(xué)確實(shí)可以提高學(xué)生的學(xué)習(xí)積極性,并取得良好的教學(xué)成果。
關(guān)鍵詞: C程序設(shè)計(jì); ACM平臺(tái); 判題系統(tǒng); 教學(xué)輔助
中圖分類號(hào):G642 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2018)03-66-03
Application of ACM platform in C programming teaching
Liu Yuxin, Zhou Qiuxia
(School of Information Engineering, Linnan Normal University, Zhanjiang, Guangdong 524048, China)
Abstract: The C language program design course is one of the introductory courses in the computer specialty. The strong practicality of the course requires the students to program and exercise diligently. ACM online test platform has the advantages of automatic judgment, statistical data and so on. It provides a garden for students' autonomous learning. And the ACM platform can be applied to many links of C programming teaching. This paper introduces the ACM platform modules to display its functions, and taking experimental courses, assignments and examinations as examples to show the ways and advantages of ACM platform aided teaching. Practice has proved that the use of ACM platform to assist teaching can really improve students' learning initiative, and obtain good teaching effect.
Key words: C programming; ACM platform; judge system; teaching assistance
0 引言
ACM國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽,簡(jiǎn)稱ACM競(jìng)賽,由國(guó)際計(jì)算機(jī)界歷史悠久、頗具權(quán)威性的組織—美國(guó)計(jì)算機(jī)ACM學(xué)會(huì)主辦,是世界上公認(rèn)的規(guī)模最大水平最高的國(guó)際大學(xué)生程序設(shè)計(jì)競(jìng)賽,素來(lái)被冠以“程序設(shè)計(jì)的奧林匹克”之稱[1],旨在使大學(xué)生運(yùn)用計(jì)算機(jī)來(lái)展示分析問(wèn)題和解決問(wèn)題的能力。
C語(yǔ)言程序設(shè)計(jì)是計(jì)算機(jī)專業(yè)的入門課程之一,是數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計(jì)等課程的基礎(chǔ),重在培養(yǎng)學(xué)生學(xué)習(xí)掌握解決問(wèn)題的思路和方法,并使用計(jì)算機(jī)編寫程序,即利用計(jì)算機(jī)解題的能力[2-3]。這與ACM大賽的宗旨是一致的。同時(shí),C程序設(shè)計(jì)也是一門實(shí)踐性很強(qiáng)的課程。既要掌握概念,更要求學(xué)生動(dòng)手編程、上機(jī)調(diào)試運(yùn)行[4]。鑒于ACM在線測(cè)試平臺(tái)的實(shí)用性和自動(dòng)判題的優(yōu)勢(shì),嶺南師范學(xué)院計(jì)算機(jī)系從2015級(jí)開(kāi)始,逐步采用ACM平臺(tái),實(shí)現(xiàn)C語(yǔ)言程序設(shè)計(jì)課程的在線練習(xí)、作業(yè)與考試。
1 ACM平臺(tái)介紹
在Linux系統(tǒng)服務(wù)器上搭建了在線判題系統(tǒng)[5],使用gcc作為C語(yǔ)言的編譯器。ACM平臺(tái)基于B/S結(jié)構(gòu),只要通過(guò)校園局域網(wǎng)輸入網(wǎng)址即可訪問(wèn)該平臺(tái)。頁(yè)面如圖1所示。
圖1 ACM平臺(tái)頁(yè)面圖
ACM平臺(tái)有六大常用功能模塊。
⑴ 討論模塊:作為學(xué)生的自主學(xué)習(xí)園地,設(shè)置討論專欄便于學(xué)習(xí)交流。
⑵ 問(wèn)題模塊:題庫(kù),錄入了本校所使用的C程序設(shè)計(jì)教材[6]中所有例題與課后習(xí)題,以及一些ACM競(jìng)賽題、其他課程的練習(xí)題等。
⑶ 狀態(tài)模塊:記錄所有用戶每次運(yùn)行的狀態(tài),如:用戶ID、問(wèn)題編號(hào)、運(yùn)行結(jié)果、內(nèi)存耗時(shí)、代碼長(zhǎng)度、提交時(shí)間等。
⑷ 排名模塊:對(duì)所有用戶按照答題正確數(shù)從多至少排序,并顯示名次、用戶ID、昵稱、正確數(shù)、提交次數(shù)與正確率。
⑸ 競(jìng)賽與作業(yè)模塊:用作競(jìng)賽、作業(yè)與考試的發(fā)布。一次競(jìng)賽、作業(yè)或考試可以設(shè)置若干道題,并設(shè)置開(kāi)始與結(jié)束時(shí)間,如圖2所示(為2016-2017學(xué)年第一學(xué)期的C語(yǔ)言期末考試)。
圖2 競(jìng)賽與作業(yè)模塊頁(yè)面圖
⑹ 管理模塊:該模塊只有管理員賬號(hào)登錄可見(jiàn),主要功能有:題目的增刪改查(一個(gè)題目包括題目的描述、輸入輸出描述、樣例輸入/輸出與測(cè)試用例等內(nèi)容)、競(jìng)賽作業(yè)的增刪改查;重置普通用戶的密碼;題庫(kù)的導(dǎo)入導(dǎo)出等等。如圖3所示。
圖3 管理模塊頁(yè)面圖
為了方便管理,本平臺(tái)關(guān)閉了注冊(cè)功能,所有學(xué)生賬號(hào)統(tǒng)一由數(shù)據(jù)庫(kù)導(dǎo)入,用戶ID為學(xué)生學(xué)號(hào),昵稱為學(xué)生姓名,不可修改。這極大方便了任課教師查看學(xué)生完成作業(yè)情況、統(tǒng)計(jì)考試結(jié)果等等。
2 ACM平臺(tái)輔助C語(yǔ)言教學(xué)的途徑
在C程序設(shè)計(jì)的教學(xué)過(guò)程中,能夠使用到ACM平臺(tái)的地方有很多。
⑴ 上機(jī)實(shí)驗(yàn)
在實(shí)驗(yàn)課上,可以使用ACM平臺(tái)輔助實(shí)驗(yàn)教學(xué)。通過(guò)提交運(yùn)行后的判題結(jié)果可以看出程序是否正確,省去了設(shè)計(jì)測(cè)試用例來(lái)測(cè)試程序的過(guò)程。這種競(jìng)賽機(jī)制平臺(tái)的運(yùn)用增加了課堂學(xué)習(xí)的趣味性。
學(xué)生上機(jī)練習(xí)時(shí),使用該平臺(tái)自動(dòng)判題,可以幫助學(xué)生判斷程序的正誤。一般情況下,學(xué)生在學(xué)習(xí)C程序設(shè)計(jì)時(shí)還未學(xué)過(guò)軟件測(cè)試類課程,缺乏設(shè)計(jì)測(cè)試用例的意識(shí),往往一次運(yùn)行得到正確結(jié)果就認(rèn)為程序是正確的,這極有可能產(chǎn)生誤導(dǎo)。例如某次編程中,有學(xué)生將“if(a>b&&a;>c)”寫成“if(a>b,a>c)”,在一次運(yùn)行后答案是正確的,該學(xué)生誤認(rèn)為可以用逗號(hào)代替邏輯與運(yùn)算符,而這顯然是錯(cuò)誤的。如果在ACM平臺(tái)提交該程序,肯定會(huì)得到“答案錯(cuò)誤”的運(yùn)行結(jié)果提示,這就可以幫助學(xué)生發(fā)現(xiàn)程序中存在的錯(cuò)誤。
⑵ 提交作業(yè)
任課教師可以通過(guò)管理模塊中發(fā)布競(jìng)賽作業(yè)的功能來(lái)布置作業(yè)。只需點(diǎn)擊”添加問(wèn)題”,然后錄入標(biāo)題(title)、問(wèn)題描述(Description)、輸入/輸出描述(Input/Output)、樣例輸入輸出(Sample Input/Output),以及測(cè)試輸入輸出數(shù)據(jù)(Test Input/Output);也可以直接使用題庫(kù)中的問(wèn)題。然后點(diǎn)擊添加作業(yè),錄入問(wèn)題標(biāo)號(hào),以及作業(yè)的開(kāi)始與結(jié)束時(shí)間即可發(fā)布。
在競(jìng)賽作業(yè)模塊的“Standing”頁(yè)面可以直接看到每位學(xué)生的作業(yè)完成情況,如提交了哪些題,哪些題結(jié)果正確,哪些題提交了但沒(méi)有通過(guò)等等。圖4所示為某次作業(yè)完成情況。
圖4 某次作業(yè)完成情況
其中,綠色標(biāo)簽表示判題通過(guò)(Accepted,在ACM中簡(jiǎn)稱為AC);紫色標(biāo)簽表示判題通過(guò)且用時(shí)最少,即首次AC;紅色標(biāo)簽表示提交了但未通過(guò);標(biāo)簽中時(shí)間格式的數(shù)字(格式為“時(shí):分:秒”)表示從作業(yè)(或競(jìng)賽、考試)開(kāi)始時(shí)計(jì)時(shí)到提交且判題通過(guò)所花費(fèi)的時(shí)間;標(biāo)簽中括號(hào)里的負(fù)數(shù)表示提交次數(shù)(例如:-2表示提交了兩次但均未通過(guò))。
這種帶有競(jìng)賽性質(zhì)的作業(yè)提交系統(tǒng)極大激發(fā)了學(xué)生的學(xué)習(xí)興趣,通過(guò)該平臺(tái)可以及時(shí)了解自己或其他同學(xué)的學(xué)習(xí)情況:點(diǎn)擊學(xué)號(hào)或姓名可以看到該同學(xué)做了哪些題,哪些題目提交正確,哪些題目正在解決中等等(如圖5)。
⑶ 在線考試
傳統(tǒng)的考核方法(筆試)不利于對(duì)學(xué)生編程能力的測(cè)試,可以采用上機(jī)測(cè)試作為期末考核的一部分。利用該平臺(tái)可以方便的實(shí)施上機(jī)測(cè)試,只需添加一次競(jìng)賽/作業(yè),而且可以即時(shí)看到考試結(jié)果,不需要教師運(yùn)行任何程序,所有的判題都是在線的、自動(dòng)化完成的。
3 ACM平臺(tái)輔助C語(yǔ)言教學(xué)的優(yōu)勢(shì)
采用ACM平臺(tái)來(lái)輔助C語(yǔ)言教學(xué)有以下優(yōu)點(diǎn)。
⑴ 自動(dòng)化判斷程序是否正確
一般情況下,學(xué)生在學(xué)習(xí)C語(yǔ)言之前并未學(xué)過(guò)軟件測(cè)試類課程,對(duì)于程序運(yùn)行結(jié)果缺乏測(cè)試的認(rèn)知與方法,而OJ平臺(tái)的自動(dòng)化判題功能可以很好的解決這個(gè)問(wèn)題。
⑵ 便于了解學(xué)生的答題情況
編程類作業(yè)的檢查是一個(gè)費(fèi)時(shí)又費(fèi)力的工作。如果提交書面作業(yè)無(wú)法知曉學(xué)生是否真正上機(jī)操作過(guò),且語(yǔ)法檢查(尤其是難以區(qū)分中英文標(biāo)點(diǎn)符號(hào))、邏輯思維檢查易有疏漏;而如果提交程序又需要一個(gè)個(gè)運(yùn)行、測(cè)試才能知曉程序是否正確、是否存在漏洞,且程序測(cè)試本身工作量就很大,何況是幾十個(gè)、甚至幾百、幾千個(gè)程序。
使用ACM平臺(tái)來(lái)布置作業(yè),教師通過(guò)該平臺(tái)即可看到每個(gè)學(xué)生的答題情況,如做了哪些題,哪些題正確,哪些題提交了但答案錯(cuò)誤等;也可以看到每道題的答題情況,如提交了多少次,正確率是多少等等,此外,在競(jìng)賽作業(yè)版塊還可以看到所有學(xué)生的答題情況與排名,方便及時(shí)了解學(xué)生學(xué)習(xí)情況。
⑶ 利于培養(yǎng)學(xué)生的編程興趣
實(shí)踐證明,在采用該平臺(tái)輔助C語(yǔ)言教學(xué)后,學(xué)生學(xué)習(xí)的積極性有了很大提升,至少一半以上的學(xué)生會(huì)超前學(xué)習(xí)、額外做一些編程題。例如,在本學(xué)期教學(xué)中,某章的編程作業(yè)一共只布置了9道,但是兩個(gè)班的學(xué)生(共96位同學(xué))有75%做了10道題以上,其中有十幾位學(xué)生做了20道題以上,甚至有做了近50道題的。而在之后的教學(xué)中,學(xué)生的學(xué)習(xí)情況越來(lái)越好,特別是編程入門之后,不再局限于書本上的例題或習(xí)題,開(kāi)始做一些題庫(kù)里有意思的競(jìng)賽題,這對(duì)開(kāi)拓學(xué)生的思維,激發(fā)學(xué)習(xí)興趣以及學(xué)習(xí)其他課程是十分有利的。
4 結(jié)束語(yǔ)
ACM平臺(tái)有著自動(dòng)化判題,及時(shí)反饋答題功能,利于培養(yǎng)學(xué)生編程興趣,可以在實(shí)驗(yàn)課、日常作業(yè)、考試等教學(xué)環(huán)節(jié)輔助C程序設(shè)計(jì)教學(xué)。實(shí)踐證明,采用ACM平臺(tái)輔助教學(xué)后,不僅解決了教師檢查編程類作業(yè)的難題,還為學(xué)生的程序設(shè)計(jì)類課程的學(xué)習(xí)提供了引導(dǎo)和助力,便于學(xué)生自主學(xué)習(xí)。在未來(lái)的教學(xué)中,我們將進(jìn)一步大范圍地推廣運(yùn)用該平臺(tái),使其更好地服務(wù)于學(xué)生的編程學(xué)習(xí)和練習(xí)。
參考文獻(xiàn)(References):
[1] 祝昌宇,陳廣貴.從ACM競(jìng)賽談?dòng)?jì)算機(jī)實(shí)驗(yàn)教學(xué)改革[J].實(shí)驗(yàn)
科學(xué)與技術(shù),2011.9(S1):300-302
[2] 辛中琦.《C語(yǔ)言程序設(shè)計(jì)》教學(xué)方法的嘗試與探討[J].中小企
業(yè)管理與科技(下旬刊),2017.6.
[3] 戴麗萍,宋艷,張風(fēng)彥,崔瑩.《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)改革
與實(shí)踐[J].當(dāng)代教育實(shí)踐與教學(xué)研究,2016:1-3
[4] 楊松濤,王斌,張海燕.從ACM/ICPC競(jìng)賽探討大學(xué)生的能力
培養(yǎng)[J].計(jì)算機(jī)教育,2010.24:16-18
[5] 劉楠,孫國(guó)道,田賢忠.ACM在線評(píng)判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)
算機(jī)時(shí)代,2010.2:34-35,38
[6] 譚浩強(qiáng).C程序設(shè)計(jì)(第四版)[M].清華大學(xué)出版社,2010.