陳鳳祥 許 勇



摘要:本文通過分析全國計算機等級考試通過率較低的現(xiàn)狀與原因,對程序設(shè)計語言的課堂教學(xué)與實驗教學(xué)提出了堅持“掌握—學(xué)習(xí)”導(dǎo)向的觀點。根據(jù)學(xué)生情況因材施教,合理組織實驗題目,讓學(xué)生體會到進(jìn)步和掌握的情感,從而逐步提高程序設(shè)計能力。
關(guān)鍵詞:計算機等級考試;“掌握—學(xué)習(xí)”導(dǎo)向;能力培養(yǎng)
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A
1我校全國計算機等級考試通過率分析
全國計算機等級考試是由教育部考試中心主辦,用于測試應(yīng)試人員計算機應(yīng)用知識與能力的等級水平考試。其考試成績可以為勞動(就業(yè))人員提供計算機應(yīng)用知識與能力的證明,為用人部門錄用和考核工作人員提供一個統(tǒng)一、客觀、公正的評價標(biāo)準(zhǔn),因此受到高校非計算機專業(yè)的學(xué)生和廣大就業(yè)人員的歡迎。作為一線教學(xué)人員,我們也非常關(guān)注學(xué)生們的考試結(jié)果,并將其作為我們改進(jìn)教學(xué)方法的一種參考。通過對我校某考點近期連續(xù)三次計算機等級考試(二級和三級)通過率的分析,得到了表1和表2。從表1中可以看出,通過率不高。若是從同時參加筆試和機試兩項考試,僅從其中一項看,筆試的平均通過率明顯高于機試平均通過率。只有一次例外,因為三級機試只有一道程序設(shè)計題,只要選中的題目是考生背下來的,就能通過,這就會帶來一定的偶然性。而二級機試中,題量比較大,偶然性大為降低。表2為這三次考試獲得證書的考生統(tǒng)計數(shù)據(jù),從表2中可以看出,有相當(dāng)比例的考生是通過補考而獲得證書,其中尤以補考機試者為多。
2通過率較低的原因分析
為什么通過率較低且有如此多的考生要補考機試?究其原因,主要是有不少考生只注重“背”而不注重上機實驗。其次,很多單位只認(rèn)證書不問能力,也造成了不少學(xué)生不愿動手寫程序。不少學(xué)生甚至分不清編輯源程序與編譯源程序的區(qū)別;有的認(rèn)為只要編譯沒有語法錯誤,程序就正確了;有的考生沒有掌握常用的算法,面對試題沒有解決的思路,當(dāng)然就寫不出解決問題的程序了;有的考生對程序設(shè)計語言本身掌握不牢,無法用正確的語句寫出解決問題的程序。
上述情形均從某個側(cè)面說明了我們不少學(xué)生只注重閱讀指導(dǎo)書上的程序,很少或不愿意動手編寫與調(diào)試程序,使得程序設(shè)計能力較弱,從而造成通過率不高。
3堅持“掌握—學(xué)習(xí)”導(dǎo)向,做到因材施教
要改變學(xué)生重書本,輕動手實驗的狀況,真正提高學(xué)生程序設(shè)計能力,教師的責(zé)任與作用不容忽視。我們不少學(xué)生進(jìn)入大學(xué)前,幾乎沒有接觸過計算機,有的即使用過計算機,也幾乎沒有程序設(shè)計的概念。從大學(xué)新生入學(xué)到結(jié)束計算機課程的教學(xué),從最基本的計算機應(yīng)用基礎(chǔ)開始,到結(jié)束程序設(shè)計語言的學(xué)習(xí),只有不到120學(xué)時(包括課堂教學(xué)和實驗教學(xué))的時間。在這么短的時間里,讓學(xué)生掌握使用計算機的基本技能和一門程序設(shè)計語言,其難度可想而知。李未院士在第四界全國計算機教育論壇上指出:我們要走新型工業(yè)化道路,就要更新知識結(jié)構(gòu),培養(yǎng)新一代產(chǎn)業(yè)大軍。在不遠(yuǎn)的將來,程序設(shè)計和數(shù)學(xué)建模將與微積分、高等代數(shù)、大學(xué)物理一樣,成為所有大學(xué)的核心基礎(chǔ)課程。教育的根本目標(biāo)之一是培養(yǎng)學(xué)生的問題求解能力。能力應(yīng)該是理性能力,面對一個新問題,能運用所有資源將其解決,這就是對問題的求解能力。為使現(xiàn)在的大學(xué)生,能成為新一代的產(chǎn)業(yè)大軍,培養(yǎng)他們對問題的求解能力,包括程序設(shè)計能力,是計算機教育工作者不可推卸的責(zé)任。在教學(xué)中,我們堅持以培養(yǎng)能力為目標(biāo),遵循“掌握—學(xué)習(xí)”導(dǎo)向的理念,使學(xué)生有努力成功的動機,讓其體會到進(jìn)步和掌握的情感。為此,在C語言的教學(xué)部分,我們作了如下嘗試。
3.1分解難點,讓學(xué)生能動手寫出程序
初學(xué)程序設(shè)計的人,往往不知道該如何將自己的解題方法用計算機語言寫出。因為計算機的語言有許多語法規(guī)則、算法的描述、還有數(shù)據(jù)類型的約束、運算符的表示、以及輸入輸出的實現(xiàn)等等。倘若按照先講語法規(guī)則,然后介紹算法的描述方法,再講數(shù)據(jù)類型及運算符的表示,這樣的課堂教學(xué)下來,學(xué)生對如何寫程序仍然很茫然。為了在一開始就讓學(xué)生養(yǎng)成自己寫程序的習(xí)慣,我們在介紹了C語言程序的大致結(jié)構(gòu)后,就開始介紹順序結(jié)構(gòu)程序的設(shè)計。從學(xué)生熟悉的數(shù)學(xué)公式著手,用C語言寫出求解的程序。所舉的第一個例子是求正方形的面積,程序及流程圖如圖1所示:
在這個例子里,我們用流程圖描述了順序程序的執(zhí)行過程。盡管這樣的描述并不是最好的方法,但比較直觀,容易理解。同時我們通過演示程序的執(zhí)行,改變數(shù)據(jù)類型及相應(yīng)輸出函數(shù)printf()中的格式控制字符,使學(xué)生明白,不同的數(shù)據(jù)類型,在輸出其值時,應(yīng)匹配不同的格式控制字符。然后,我們指出此程序的不足之處:當(dāng)需要計算邊長不同的正方形面積時,每次都要修改程序,不僅麻煩而且容易出錯,于是很自然地引出了輸入函數(shù)scanf()的使用。同樣地,可以通過輸入不同數(shù)據(jù)類型的計算過程,讓格式控制字符的使用反復(fù)刺激學(xué)生大腦,加深他們對輸入函數(shù)和輸出函數(shù)正確使用的理解。通過舉一反三,學(xué)生對如何計算長方形的面積、圓柱體的體積的流程圖和程序都能很快理解。在計算長方形面積的程序里,我們還解決了用scanf()函數(shù)輸入多個數(shù)據(jù)時,數(shù)據(jù)之間的分隔符問題,這比單獨講授用scanf()函數(shù)接收輸入數(shù)據(jù)的分隔問題更容易被學(xué)生接受和理解。
介紹分支程序設(shè)計和循環(huán)程序設(shè)計時,我們?nèi)匀皇褂媚切W(xué)生很熟悉的算法。為此我們首先設(shè)問,如何解決數(shù)據(jù)輸入時錯誤數(shù)據(jù)的排除?這樣自然地引入了分支程序設(shè)計的問題。我們在已有流程圖“計算面積框”前面添加一判定框,講清楚判定框中兩個出口的含義,在程序中相應(yīng)位置添加條件語句就可解決問題了。這樣對if語句與if…else語句的使用,學(xué)生接受起來就更加自然,不必死背語法了。再通過反復(fù)計算不同邊長正方形面積的設(shè)問引入循環(huán)結(jié)構(gòu)。于是,在3次課(6學(xué)時)的時間里,三種程序結(jié)構(gòu)介紹完畢,且基本數(shù)據(jù)類型和輸入輸出函數(shù)的使用、格式控制字符的應(yīng)用等,這些編程中最基本的元素在短時間里不斷地刺激了學(xué)生的大腦。使他們經(jīng)常將已有的知識與新知識進(jìn)行連接,并不斷的融合、固化,從而形成長期記憶。
3.2循序漸進(jìn),掌握程序設(shè)計的方法,培養(yǎng)程序設(shè)計的能力
要提高學(xué)生程序設(shè)計的能力,除了掌握語言本身的語法規(guī)則外,還得掌握一些常用的算法。在后續(xù)的教學(xué)中,我們遵循這樣的原則:即在學(xué)習(xí)新的語法規(guī)則時,用已掌握的算法進(jìn)行程序設(shè)計;學(xué)習(xí)新的算法時,用已學(xué)過的語法規(guī)則。這樣引導(dǎo)學(xué)生面對一個新問題,能運用所有資源將其解決。同時,我們?yōu)橹鸩脚囵B(yǎng)學(xué)生理解算法的能力,在學(xué)生對算法有了一些理解能力后,引導(dǎo)學(xué)生逐步讀懂用N-S圖描述的算法,通過閱讀算法,可以提高學(xué)生的邏輯思維能力。比如模式匹配的問題,盡管我們介紹簡單回溯法,學(xué)生理解起來仍有一定的難度。我們在學(xué)習(xí)字符數(shù)組內(nèi)容時介紹這個算法,為使學(xué)生理解起來容易些,使用雙重循環(huán)描述這個算法。算法描述如圖2所示。
這樣描述的算法省去了回溯時計算i的位置,通過圖示,再輔以具體的實例,學(xué)生基本能理解。然后引導(dǎo)他們根據(jù)N-S圖寫出程序。到學(xué)習(xí)函數(shù)、指針時,再用這個算法,學(xué)著用字符數(shù)組和指針作函數(shù)參數(shù),用函數(shù)的返回值判斷st2是否在st1中,這樣學(xué)生對這個算法就有了進(jìn)一步的理解。
3.3合理組織實驗題目,逐步提高程序設(shè)計能力
教育部在2號文件中指出要“高度重視實踐環(huán)節(jié),提高學(xué)生實踐能力”。要提高學(xué)生程序設(shè)計能力,僅僅依靠良好的課堂教學(xué)效果是不夠的,還需學(xué)生充分利用實驗課的時間。為此,我們優(yōu)選了既能讓學(xué)生動手編寫、調(diào)試,又能達(dá)到舉一反三效果的設(shè)計題,使他們相信自己有能力完成,從而能堅持不懈的努力。
在學(xué)習(xí)之初,我們給出求面積和體積一類的程序設(shè)計題,這類題目算法簡單,目的是讓學(xué)生能自己動手寫程序,掌握程序的結(jié)構(gòu)及基本的語法規(guī)則。因此題目的要求重點在數(shù)據(jù)類型的變換和輸入輸出函數(shù)的使用,格式控制字符的正確使用等。同時在題目中留下讓學(xué)生目前知識無法解決的問題,使學(xué)生有繼續(xù)學(xué)習(xí)的愿望。
隨著知識的積累,我們逐步引入了一些常用算法的程序設(shè)計題,這些常用算法可以用不同的語法規(guī)則去實現(xiàn)。比如常用的選擇排序算法,學(xué)習(xí)數(shù)組時,實現(xiàn)對已給序列排序。學(xué)習(xí)函數(shù)時,將待排序數(shù)組名作函數(shù)參數(shù),學(xué)習(xí)指針時,將待排序數(shù)組的地址傳遞給函數(shù)的形參指針變量,實現(xiàn)在函數(shù)內(nèi)排好序,在主調(diào)函數(shù)中輸出排好序的結(jié)果。又如模式匹配的簡單回溯算法,學(xué)習(xí)字符數(shù)組時可以作為上機實踐題,學(xué)習(xí)函數(shù)時 也作為上機練習(xí)題,學(xué)習(xí)指針時同樣作為上機練習(xí)題。再比如十進(jìn)制整數(shù)轉(zhuǎn)換成八進(jìn)制整數(shù)或十六進(jìn)制整數(shù)的算法,同樣在數(shù)組、函數(shù)、指針的學(xué)習(xí)中都作為程序設(shè)計練習(xí)題。等等,這樣的練習(xí)題可以有很多。通過這樣的練習(xí),培養(yǎng)學(xué)生對同一個問題,用不同的方法去求解的能力。
3.4加強實驗指導(dǎo),引導(dǎo)學(xué)生協(xié)作學(xué)習(xí),使學(xué)生能體驗進(jìn)步的快樂
課堂目標(biāo)定向影響學(xué)生的目標(biāo)定向。在課堂中的活動和重點可以分為“掌握—學(xué)習(xí)”導(dǎo)向型和成績導(dǎo)向型?!罢莆铡獙W(xué)習(xí)”導(dǎo)向型的課堂強調(diào)努力、進(jìn)步、挑戰(zhàn),掌握導(dǎo)向型的課堂有一個環(huán)境,在那里學(xué)生能體驗進(jìn)步和掌握的情感。
盡管是經(jīng)過優(yōu)選后給出的實驗題目,但對于初學(xué)者來說,寫程序時發(fā)生的錯誤仍然不少。如何排錯是初學(xué)者最不易掌握的技能,且各種錯誤名目繁多,教師此時需要有耐心,除幫助學(xué)生解答各種問題外,還應(yīng)引導(dǎo)學(xué)生學(xué)習(xí)使用調(diào)試工具。對計算機程序而言,有語法錯誤程序不能運行,有邏輯錯誤,得不到正確的結(jié)果。為提高學(xué)生程序設(shè)計的能力,學(xué)會調(diào)試程序是很重要的一個方面。為此我們有意培養(yǎng)學(xué)生排除錯誤的能力,首先,引導(dǎo)學(xué)生如何盡快排除語法錯誤,然后,引導(dǎo)學(xué)生學(xué)習(xí)使用調(diào)試工具,學(xué)會單步執(zhí)行程序,查看變量在程序運行過程中值的變化,這樣逐步讓學(xué)生學(xué)習(xí)如何排除邏輯錯誤。學(xué)生只有在學(xué)會使用調(diào)試工具后,其程序設(shè)計能力才能真正得到提高?!笆谌艘贼~,不如授人以漁”,當(dāng)學(xué)生不需要老師為其排除程序中的錯誤時,我們的教學(xué)目標(biāo)就達(dá)到了。另一方面,為培養(yǎng)學(xué)生協(xié)作學(xué)習(xí)的能力,我們在實驗課時,將學(xué)生分成若干小組,每組4~5人,能力較強的學(xué)生作組長,允許他們以討論的方式完成上機題目。通過討論,使他們對問題的求解思路有一個較清晰的認(rèn)識,共同完成作業(yè)。在這過程中,能力較強的學(xué)生,幫助較弱的同學(xué),而他自身的能力也會得到提高。不少得到幫助的同學(xué),也因自己經(jīng)過努力后能寫出程序,而體驗到了進(jìn)步的快樂。采用這種實驗教學(xué)方式多數(shù)學(xué)生愿意動手寫程序,同學(xué)之間也加深了了解,從而給學(xué)生一個良好的情感記憶,并有了成功的體驗。
4教學(xué)嘗試的效果與總結(jié)
經(jīng)過一段時間這樣的教學(xué)嘗試,多數(shù)學(xué)生已養(yǎng)成自己動手寫程序的習(xí)慣,而且能力較強的學(xué)生已開始對程序的設(shè)計有了自己獨到的見解與處理能力了。比如在學(xué)習(xí)指針一章時,講了這樣一個例題:在一個串的尾部添加一個字符。當(dāng)指針s指向串的結(jié)束符,給出這樣的語句{*s=c;s++;*s=