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