劉宇欣 周秋霞
摘 要: C語言程序設(shè)計(jì)課程是計(jì)算機(jī)專業(yè)的入門課程之一,程序設(shè)計(jì)類課程的強(qiáng)實(shí)踐性要求學(xué)生動(dòng)手編程,勤加練習(xí)。ACM在線測試平臺(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é)來輔助教學(xué)。通過對ACM平臺(tái)模塊介紹展示其功能,并以實(shí)驗(yàn)課、作業(yè)、考試為例體現(xiàn)ACM平臺(tái)輔助教學(xué)的途徑及優(yōu)勢。實(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國際大學(xué)生程序設(shè)計(jì)競賽,簡稱ACM競賽,由國際計(jì)算機(jī)界歷史悠久、頗具權(quán)威性的組織—美國計(jì)算機(jī)ACM學(xué)會(huì)主辦,是世界上公認(rèn)的規(guī)模最大水平最高的國際大學(xué)生程序設(shè)計(jì)競賽,素來被冠以“程序設(shè)計(jì)的奧林匹克”之稱[1],旨在使大學(xué)生運(yùn)用計(jì)算機(jī)來展示分析問題和解決問題的能力。
C語言程序設(shè)計(jì)是計(jì)算機(jī)專業(yè)的入門課程之一,是數(shù)據(jù)結(jié)構(gòu)、算法分析與設(shè)計(jì)等課程的基礎(chǔ),重在培養(yǎng)學(xué)生學(xué)習(xí)掌握解決問題的思路和方法,并使用計(jì)算機(jī)編寫程序,即利用計(jì)算機(jī)解題的能力[2-3]。這與ACM大賽的宗旨是一致的。同時(shí),C程序設(shè)計(jì)也是一門實(shí)踐性很強(qiáng)的課程。既要掌握概念,更要求學(xué)生動(dòng)手編程、上機(jī)調(diào)試運(yùn)行[4]。鑒于ACM在線測試平臺(tái)的實(shí)用性和自動(dòng)判題的優(yōu)勢,嶺南師范學(xué)院計(jì)算機(jī)系從2015級開始,逐步采用ACM平臺(tái),實(shí)現(xiàn)C語言程序設(shè)計(jì)課程的在線練習(xí)、作業(yè)與考試。
1 ACM平臺(tái)介紹
在Linux系統(tǒng)服務(wù)器上搭建了在線判題系統(tǒng)[5],使用gcc作為C語言的編譯器。ACM平臺(tái)基于B/S結(jié)構(gòu),只要通過校園局域網(wǎng)輸入網(wǎng)址即可訪問該平臺(tái)。頁面如圖1所示。
圖1 ACM平臺(tái)頁面圖
ACM平臺(tái)有六大常用功能模塊。
⑴ 討論模塊:作為學(xué)生的自主學(xué)習(xí)園地,設(shè)置討論專欄便于學(xué)習(xí)交流。
⑵ 問題模塊:題庫,錄入了本校所使用的C程序設(shè)計(jì)教材[6]中所有例題與課后習(xí)題,以及一些ACM競賽題、其他課程的練習(xí)題等。
⑶ 狀態(tài)模塊:記錄所有用戶每次運(yùn)行的狀態(tài),如:用戶ID、問題編號(hào)、運(yùn)行結(jié)果、內(nèi)存耗時(shí)、代碼長度、提交時(shí)間等。
⑷ 排名模塊:對所有用戶按照答題正確數(shù)從多至少排序,并顯示名次、用戶ID、昵稱、正確數(shù)、提交次數(shù)與正確率。
⑸ 競賽與作業(yè)模塊:用作競賽、作業(yè)與考試的發(fā)布。一次競賽、作業(yè)或考試可以設(shè)置若干道題,并設(shè)置開始與結(jié)束時(shí)間,如圖2所示(為2016-2017學(xué)年第一學(xué)期的C語言期末考試)。
圖2 競賽與作業(yè)模塊頁面圖
⑹ 管理模塊:該模塊只有管理員賬號(hào)登錄可見,主要功能有:題目的增刪改查(一個(gè)題目包括題目的描述、輸入輸出描述、樣例輸入/輸出與測試用例等內(nèi)容)、競賽作業(yè)的增刪改查;重置普通用戶的密碼;題庫的導(dǎo)入導(dǎo)出等等。如圖3所示。
圖3 管理模塊頁面圖
為了方便管理,本平臺(tái)關(guān)閉了注冊功能,所有學(xué)生賬號(hào)統(tǒng)一由數(shù)據(jù)庫導(dǎo)入,用戶ID為學(xué)生學(xué)號(hào),昵稱為學(xué)生姓名,不可修改。這極大方便了任課教師查看學(xué)生完成作業(yè)情況、統(tǒng)計(jì)考試結(jié)果等等。
2 ACM平臺(tái)輔助C語言教學(xué)的途徑
在C程序設(shè)計(jì)的教學(xué)過程中,能夠使用到ACM平臺(tái)的地方有很多。
⑴ 上機(jī)實(shí)驗(yàn)
在實(shí)驗(yàn)課上,可以使用ACM平臺(tái)輔助實(shí)驗(yàn)教學(xué)。通過提交運(yùn)行后的判題結(jié)果可以看出程序是否正確,省去了設(shè)計(jì)測試用例來測試程序的過程。這種競賽機(jī)制平臺(tái)的運(yùn)用增加了課堂學(xué)習(xí)的趣味性。
學(xué)生上機(jī)練習(xí)時(shí),使用該平臺(tái)自動(dòng)判題,可以幫助學(xué)生判斷程序的正誤。一般情況下,學(xué)生在學(xué)習(xí)C程序設(shè)計(jì)時(shí)還未學(xué)過軟件測試類課程,缺乏設(shè)計(jì)測試用例的意識(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è)
任課教師可以通過管理模塊中發(fā)布競賽作業(yè)的功能來布置作業(yè)。只需點(diǎn)擊”添加問題”,然后錄入標(biāo)題(title)、問題描述(Description)、輸入/輸出描述(Input/Output)、樣例輸入輸出(Sample Input/Output),以及測試輸入輸出數(shù)據(jù)(Test Input/Output);也可以直接使用題庫中的問題。然后點(diǎn)擊添加作業(yè),錄入問題標(biāo)號(hào),以及作業(yè)的開始與結(jié)束時(shí)間即可發(fā)布。
在競賽作業(yè)模塊的“Standing”頁面可以直接看到每位學(xué)生的作業(yè)完成情況,如提交了哪些題,哪些題結(jié)果正確,哪些題提交了但沒有通過等等。圖4所示為某次作業(yè)完成情況。
圖4 某次作業(yè)完成情況
其中,綠色標(biāo)簽表示判題通過(Accepted,在ACM中簡稱為AC);紫色標(biāo)簽表示判題通過且用時(shí)最少,即首次AC;紅色標(biāo)簽表示提交了但未通過;標(biāo)簽中時(shí)間格式的數(shù)字(格式為“時(shí):分:秒”)表示從作業(yè)(或競賽、考試)開始時(shí)計(jì)時(shí)到提交且判題通過所花費(fèi)的時(shí)間;標(biāo)簽中括號(hào)里的負(fù)數(shù)表示提交次數(shù)(例如:-2表示提交了兩次但均未通過)。
這種帶有競賽性質(zhì)的作業(yè)提交系統(tǒng)極大激發(fā)了學(xué)生的學(xué)習(xí)興趣,通過該平臺(tái)可以及時(shí)了解自己或其他同學(xué)的學(xué)習(xí)情況:點(diǎn)擊學(xué)號(hào)或姓名可以看到該同學(xué)做了哪些題,哪些題目提交正確,哪些題目正在解決中等等(如圖5)。
⑶ 在線考試
傳統(tǒng)的考核方法(筆試)不利于對學(xué)生編程能力的測試,可以采用上機(jī)測試作為期末考核的一部分。利用該平臺(tái)可以方便的實(shí)施上機(jī)測試,只需添加一次競賽/作業(yè),而且可以即時(shí)看到考試結(jié)果,不需要教師運(yùn)行任何程序,所有的判題都是在線的、自動(dòng)化完成的。
3 ACM平臺(tái)輔助C語言教學(xué)的優(yōu)勢
采用ACM平臺(tái)來輔助C語言教學(xué)有以下優(yōu)點(diǎn)。
⑴ 自動(dòng)化判斷程序是否正確
一般情況下,學(xué)生在學(xué)習(xí)C語言之前并未學(xué)過軟件測試類課程,對于程序運(yùn)行結(jié)果缺乏測試的認(rèn)知與方法,而OJ平臺(tái)的自動(dòng)化判題功能可以很好的解決這個(gè)問題。
⑵ 便于了解學(xué)生的答題情況
編程類作業(yè)的檢查是一個(gè)費(fèi)時(shí)又費(fèi)力的工作。如果提交書面作業(yè)無法知曉學(xué)生是否真正上機(jī)操作過,且語法檢查(尤其是難以區(qū)分中英文標(biāo)點(diǎn)符號(hào))、邏輯思維檢查易有疏漏;而如果提交程序又需要一個(gè)個(gè)運(yùn)行、測試才能知曉程序是否正確、是否存在漏洞,且程序測試本身工作量就很大,何況是幾十個(gè)、甚至幾百、幾千個(gè)程序。
使用ACM平臺(tái)來布置作業(yè),教師通過該平臺(tái)即可看到每個(gè)學(xué)生的答題情況,如做了哪些題,哪些題正確,哪些題提交了但答案錯(cuò)誤等;也可以看到每道題的答題情況,如提交了多少次,正確率是多少等等,此外,在競賽作業(yè)版塊還可以看到所有學(xué)生的答題情況與排名,方便及時(shí)了解學(xué)生學(xué)習(xí)情況。
⑶ 利于培養(yǎng)學(xué)生的編程興趣
實(shí)踐證明,在采用該平臺(tái)輔助C語言教學(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í)情況越來越好,特別是編程入門之后,不再局限于書本上的例題或習(xí)題,開始做一些題庫里有意思的競賽題,這對開拓學(xué)生的思維,激發(fā)學(xué)習(xí)興趣以及學(xué)習(xí)其他課程是十分有利的。
4 結(jié)束語
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í)。在未來的教學(xué)中,我們將進(jìn)一步大范圍地推廣運(yùn)用該平臺(tái),使其更好地服務(wù)于學(xué)生的編程學(xué)習(xí)和練習(xí)。
參考文獻(xiàn)(References):
[1] 祝昌宇,陳廣貴.從ACM競賽談?dòng)?jì)算機(jī)實(shí)驗(yàn)教學(xué)改革[J].實(shí)驗(yàn)
科學(xué)與技術(shù),2011.9(S1):300-302
[2] 辛中琦.《C語言程序設(shè)計(jì)》教學(xué)方法的嘗試與探討[J].中小企
業(yè)管理與科技(下旬刊),2017.6.
[3] 戴麗萍,宋艷,張風(fēng)彥,崔瑩.《C語言程序設(shè)計(jì)》課程教學(xué)改革
與實(shí)踐[J].當(dāng)代教育實(shí)踐與教學(xué)研究,2016:1-3
[4] 楊松濤,王斌,張海燕.從ACM/ICPC競賽探討大學(xué)生的能力
培養(yǎng)[J].計(jì)算機(jī)教育,2010.24:16-18
[5] 劉楠,孫國道,田賢忠.ACM在線評判系統(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.