吳舜歆 梁寶蘭(電子科技大學中山學院,廣東中山528402)
?
Online Judge在C++程序設計課程實踐教學中的應用*
吳舜歆梁寶蘭
(電子科技大學中山學院,廣東中山528402)
摘要:針對傳統應用型本科C++程序設計課程實踐教學中存在的問題,將原本應用于訓練ACM-ICPC選手的“在線評測系統”引入到教學中來。同時,針對傳統的“在線評測系統”由于實施黑盒測試存在的缺陷進行改造,從而使得其能用來訓練學生的函數設計能力和面向對象編程能力。讓學生得到更加全面、徹底的訓練。
關鍵詞:online judge;C++程序設計;實踐教學
Abstract:Aiming at the problems existing in the practice teaching of the traditional application oriented C++ programming course, online judge which was originally applied to the training of ACM-ICPC players is introduced into the teaching. At the same time, according to the traditional online judge since the implementation of black box testing defects of transformation, so that it can be used to train students' ability of function design and object-oriented programming ability. Let the students get more comprehensive and thorough training.
Keywords:online judge; C++ programming; practice teaching
C++程序設計課程是很多高校計算機專業的第一門專業課,學好該課程對學生后續的專業學習非常重要,不但有助于打好專業基礎,也有助于提高學好本專業的自信心。在這門課程的教學中存在的主要問題是學生實踐環節比較欠缺。缺乏大量的編程訓練,達不到課程的教學要求。
目前的C++程序設計課程的實踐環節主要存在以下問題:學生上機實踐的時間較少,不能透過大量編程實踐掌握程序設計的相關理論、方法。學生上機寫程序,往往限于自身的水平,對測試數據考慮不全面,從而導致程序寫完之后隨便找幾個測試數據測一測,如果沒有問題,就算程序是正確的。實際上,對于初學程序設計的學生來說,如何設計更加全面的測試數據確實是一個不小的挑戰。所以往往出現這樣的情況,學生的程序實際上是錯的,但由于學生使用的測試數據比較片面,從而誤以為程序是正確的。對于課程書面作業,學生交上來的程序很多時候連編譯都通不過。
“在線評測系統”Online Judge起源于ACM國際大學生程序設計競賽(ACM-ICPC)。它是一種B/S架構的在線程序設計評測系統,實施黑盒測試。用戶登錄系統提交相關題目的源代碼,系統會即時地返回評測的結果。系統返回的結果有:(1)正確。(2)格式錯。原因:程序輸出可能有多余的空格或空行。(3)答案錯。原因:算法不正確。(4)運行錯。原因:除零、錯誤指針、下標越界等運行時錯誤。(5)編譯錯。原因:語法錯誤。(6)超時。原因:算法效率太低或存在死循環。(7)程序輸出數據超出限制。原因:輸出太多。
程序設計“在線評測系統”具有一定量的題目,同時更重要的是它具有以下功能:(1)實時判題。學生可以在任何地方、任何時間做題,然后提交自己的源代碼。系統會實時地對學生的代碼進行評測,并給出相應的評測結果。如果學生提交的代碼不正確,學生可以對代碼進行修改,然后再次提交。(2)布置作業。老師可以根據實際教學的需要在系統里面布置作業,限定本班的同學才能參與。系統會對學生提交的代碼進行實時的評判,并對學生的做題情況進行排名,不需要人工干預。同時老師可以設定作業的截止提交時間,超過截止時間系統將拒收作業。老師可以登陸系統一目了然地知道學生的做題情況。(3)組織比賽(或課程測驗)。老師可以根據教學的需要適當地組織一些比賽(或課程測驗),以此調動學生的學習積極性。系統會自動評測學生提交的代碼,并對學生進行實時的排名,比賽一結束,比賽結果同時就出爐。(4)論壇。學生可以在論壇上討論相關的題目,互相學習。
筆者自2007年以來開始指導學生參加ACM-ICPC相關賽事,取得了一定的成績,其中包括亞洲區域賽的獎項。自2009年以來,開始在C++程序設計的實踐教學中推廣使用Online Judge,取得了不錯的效果。筆者根據應用型本科學生的實際情況,對題庫進行精心設計,力求學生在學習C++程序設計的第一天就能夠在系統做題,以此來提高學生的動手能力和專業的自信心。
我校的題庫,題目根據實際教學的需要進行精心設計,分為以下幾個部分:第一部分:入門題目。學生學習程序設計的第一天便能解決的題目,主要涉及題庫輸入、輸出的練習,整除性,簡單的數學函數的調用等。第二部分:條件語句。需要使用if語句、switch語句才能解決的題目。第三部分:循環語句。先是使用單重循環就能解決的問題,然后是需要使用雙重循環才能解決的問題。循序漸進,引導學生解決復雜的問題。第四部分:函數。用于訓練學生的函數設計能力。第五部分:一維數組。主要涉及批量數據的處理問題,這部分的題目很豐富,對學生來講加強這方面的鍛煉非常重要。第六部分:二維數組。需要使用二維數組才能解決
的問題。(7)第七部分:字符串處理。訓練學生解決各種字符串處理有關的問題,熟悉字符串處理函數。(8)第八部分:面向對象程序設計。用于訓練學生的面向對象編程能力。包括類和對象、繼承、多態等。
傳統的“在線評測系統”由于實施黑盒測試,所以無法鍛煉學生的函數設計能力、面向對象程序設計能力。我校的“在線評測系統”針對傳統系統的缺陷進行改造,完全足以用來訓練學生的函數設計能力和面向對象程序設計能力。七年來,“在線評測系統”在我校的應用取得了非常好的效果。由于系統存在排名機制,學生可以查看自己在班級的排名、年級排名、總排名,這極大地調動了學生的編程積極性。很多學生甚至通宵達旦的編程,反復嘗試解決相關題目。通過“在線評測系統”的訓練,學生的編程能力得到了極大的提高,從而為后續的專業課程的學習打下了良好的基礎,建立了專業自信心。“在線評測系統”的推廣應用極大地扭轉了學生對編程談虎色變的局面,得到了廣泛的認可。同時,教師可以通過“在線評測系統”布置作業、組織測驗,這無形中大大減少了教師的相應工作量。甚至可以講,題庫的建設是一勞永逸的。
通過在應用型本科C++程序設計課程實踐教學中引入“在線評測系統”,徹底改變了學生對編程望而生畏的局面,極大調動了學生學習的積極性,提高了編程技能,從而建立了良好的專業基礎和自信心。使后續的專業學習有一個良好的開端。
參考文獻
[1]孫大烈,車萬翔.ACM競賽與學生綜合實踐能力培養[J].計算機教育,2009(19):12-14.
[2]楊松濤,王斌,張海燕.從ACM/ICPC競賽探討大學生的能力培養[J].計算機教育,2010(24):16-18.
[3]吳舜歆.一種新型的OnlineJudge的設計與實現[J].福建電腦,2014(2):158-159.
[4]金保華,閆紅巖,張曉娟,等.基于ACM/ICPC的程序設計語言的教學改革與實踐[J].中國電力教育,2011(20):79-80.
[5]姚翠莉,劉一瑋,金博.ACM/ICPC競賽人才培養模式的研究與實踐+以大連理工大學ACM/ICPC創新實踐班為例[J].內蒙古師范大學學報:教育科學版,2012,25(3):141-143.
作者簡介:吳舜歆(1978-),男,漢族,廣東潮州人,講師,碩士,研究方向為機器學習、推薦系統。
*基金項目:2014年度廣東省高等教育教學改革資助項目(GDJG20142517)
中圖分類號:G642
文獻標志碼:A
文章編號:2096-000X(2016)09-0164-02