摘要:基于“最近發(fā)展區(qū)”理論,借鑒ACM國際程序設(shè)計(jì)競(jìng)賽的形式,提出旨在激發(fā)學(xué)生編程興趣、不斷突破自我的C語言教學(xué)方法,闡述如何在打牢語法知識(shí)和調(diào)試能力基礎(chǔ)的前提下分階段組織教學(xué)內(nèi)容,在每階段末尾進(jìn)行突擊能力提升的課堂測(cè)試、測(cè)試用例與語法示例統(tǒng)籌設(shè)計(jì),最終通過類ACM式的測(cè)試方法有效提高學(xué)生編程解決較難實(shí)際問題的能力。
關(guān)鍵詞:C語言;教學(xué)設(shè)計(jì);最近發(fā)展區(qū);ACM;程序設(shè)計(jì)
1 背景
維果斯基的“最近發(fā)展區(qū)”理論指出學(xué)生的發(fā)展存在兩種水平,即通過基本學(xué)習(xí)能夠獨(dú)立完成一定任務(wù)的“現(xiàn)有發(fā)展水平”和在教師啟發(fā)下經(jīng)過自身努力可能達(dá)到的“潛在發(fā)展水平”,兩者之間的差距就是“最近發(fā)展區(qū)” 。基于這一理淪,教學(xué)應(yīng)著眼于學(xué)生的“最近發(fā)展區(qū)”,通過合理的教學(xué)設(shè)計(jì)充分調(diào)動(dòng)學(xué)生的主觀能動(dòng)性,激發(fā)其潛能,從而加深其對(duì)所學(xué)知識(shí)的理解,鍛煉解決實(shí)際問題的能力。
由美國計(jì)算機(jī)協(xié)會(huì)主辦的始于1970年的ACM國際大學(xué)生程序設(shè)計(jì)競(jìng)賽(簡(jiǎn)稱ACM)是一項(xiàng)旨在展示大學(xué)生創(chuàng)新能力、團(tuán)隊(duì)精神和在壓力下編寫程序、分析和解決問題能力的年度競(jìng)賽,已經(jīng)成為最具影響力的世界性大學(xué)生計(jì)算機(jī)競(jìng)賽,并成為一種全新的發(fā)現(xiàn)和培養(yǎng)計(jì)算機(jī)科學(xué)頂尖人才的途徑 。
C語言作為典型的結(jié)構(gòu)化程序設(shè)計(jì)語言,因其豐富的數(shù)據(jù)類型、運(yùn)算功能和控制結(jié)構(gòu),高效的代碼生成與執(zhí)行效率,較好的可移植性,已經(jīng)成為高等院校首選的入門級(jí)程序設(shè)計(jì)語言。針對(duì)C語言教學(xué)方法的研究一直是教改工作的熱點(diǎn)之一,其中不乏基于“最近發(fā)展區(qū)”理論和ACM競(jìng)賽模式的研究。前期基于“最近發(fā)展區(qū)”理淪的C語言教學(xué)主要關(guān)注教師如何通過在授課時(shí)設(shè)計(jì)循序漸進(jìn)的問題啟發(fā)學(xué)生理解并使用相關(guān)語法知識(shí) ?;贏CM模式的程序設(shè)計(jì)教學(xué)則側(cè)重使用ACM式的程序設(shè)計(jì)實(shí)踐替代傳統(tǒng)課程實(shí)驗(yàn),從而鍛煉學(xué)生實(shí)踐編程解決問題的能力 。
上述兩種方法分別從課上知識(shí)講授和課下實(shí)踐動(dòng)手兩方面對(duì)程序設(shè)計(jì)教學(xué)進(jìn)行改進(jìn),筆者將二者相結(jié)合,提出基于“最近發(fā)展區(qū)”理論的類ACM式教學(xué)方法,將由易到難的問題求解貫穿于理論知識(shí)講授和實(shí)踐技能訓(xùn)練的全過程,并以類ACM式的課堂測(cè)試完成跨越“最近發(fā)展區(qū)”的關(guān)鍵一步。
2 教學(xué)設(shè)計(jì)
“最近發(fā)展區(qū)”理論的一種通俗表述就是“跳一跳,摘桃子”。本節(jié)基于這一表述對(duì)第一作者在國防科學(xué)技術(shù)大學(xué)從事C語言程序設(shè)計(jì)課程教學(xué)過程中的教學(xué)設(shè)計(jì)展開介紹。
2.1 先下蹲——打牢語法和調(diào)試基礎(chǔ)
“最近發(fā)展區(qū)”的基礎(chǔ)是學(xué)生的“現(xiàn)有發(fā)展水平”,該水平的高低直接決定了“最近發(fā)展區(qū)”的起點(diǎn)與難度。第一作者在C語言語法知識(shí)點(diǎn)講授的過程中,一直堅(jiān)持文獻(xiàn)所給出的注重計(jì)算思維的啟發(fā)式教學(xué)方法:語法與算法并重、從基礎(chǔ)見思維,并針對(duì)各種語法規(guī)則設(shè)計(jì)相應(yīng)的啟發(fā)式案例,讓學(xué)生深刻理解C語言定義各個(gè)基本語法規(guī)則的原因和形式,為其熟練使用正確的語法解決實(shí)際問題奠定基礎(chǔ)。
提高編程解決實(shí)際問題的能力是C語言教學(xué)的最終目的,調(diào)試是加深知識(shí)點(diǎn)理解和提高編程能力的關(guān)鍵。在傳統(tǒng)教學(xué)中,師生都可能存在因重結(jié)果輕過程而忽略調(diào)試能力訓(xùn)練的現(xiàn)象。在本文所述教學(xué)設(shè)計(jì)中,自開始編程完成作業(yè)起,就要求學(xué)生使用VC++6.0工作環(huán)境的調(diào)試功能:首先通過單步執(zhí)行觀察程序的執(zhí)行流程;而后在遇到具體問題時(shí),通過調(diào)試執(zhí)行發(fā)現(xiàn)并糾正程序錯(cuò)誤。
通過上述方法,學(xué)生可以打牢語法知識(shí)和調(diào)試能力基礎(chǔ),為后續(xù)在老師的引導(dǎo)下進(jìn)一步激發(fā)潛能實(shí)現(xiàn)“跳一跳,摘桃子”做好準(zhǔn)備。
2.2 再起跳——跨越“最近發(fā)展區(qū)”
有了高起點(diǎn)的“現(xiàn)有發(fā)展水平”,如何設(shè)計(jì)合理的“最近發(fā)展區(qū)”成為課程教學(xué)的關(guān)鍵。原則上,該區(qū)的跨度既要讓大多數(shù)學(xué)生擁有經(jīng)自身努力能夠順利通過的信心,又要讓學(xué)生實(shí)現(xiàn)真正的跨越從而提高自身能力,為此,我們做了專門的教學(xué)設(shè)計(jì)。
首先,結(jié)合所使用教材《C++程序設(shè)計(jì)(第2版)》的章節(jié)編排 ,將C語言程序設(shè)計(jì)教學(xué)內(nèi)容劃分為圖1所示的3個(gè)階段,在完成每個(gè)階段的正常課上學(xué)習(xí)和課下作業(yè)實(shí)踐后,專門利用兩學(xué)時(shí)(50分鐘/學(xué)時(shí))時(shí)間進(jìn)行課堂測(cè)試,適當(dāng)提高測(cè)試題的難度,測(cè)試成績(jī)計(jì)入課程平時(shí)成績(jī)。這樣做的目的首先是及時(shí)發(fā)現(xiàn)學(xué)生在基本知識(shí)學(xué)習(xí)中的問題,避免問題的積累,另一個(gè)目的是實(shí)現(xiàn)“最近發(fā)展區(qū)”的跨越。
具體而言,第1階段主要包括數(shù)據(jù)類型、運(yùn)算符和表達(dá)式,輸入輸出,控制結(jié)構(gòu),函數(shù)4章內(nèi)容,其中前兩章為基本知識(shí)點(diǎn),主要通過課下作業(yè)進(jìn)行練習(xí)。在完成控制結(jié)構(gòu)和函數(shù)兩章的學(xué)習(xí)后,學(xué)生應(yīng)該已經(jīng)具備設(shè)計(jì)簡(jiǎn)單的算法和編寫?yīng)毩⒊绦蚰K的能力,為此,教師很有必要為該階段設(shè)計(jì)具有一定難度的問題,引導(dǎo)學(xué)生鞏固基礎(chǔ)知識(shí)提升程序設(shè)計(jì)能力。第2階段主要包括數(shù)組和指針兩章內(nèi)容,這兩章是C語言學(xué)習(xí)的重點(diǎn)與難點(diǎn),因此該課程的啟發(fā)式教學(xué)力求在將相關(guān)語法知識(shí)講透徹的基礎(chǔ)上,通過設(shè)計(jì)專門的課堂測(cè)試,求解相對(duì)較高難度的問題以提高學(xué)生理解和使用數(shù)組指針的能力。第3階段主要包括結(jié)構(gòu)、鏈表和文件3章內(nèi)容,這3章的知識(shí)既可以起到鞏固前兩階段知識(shí)的作用,又利于用程序表示客觀世界。因此,教師也為此階段設(shè)計(jì)了專門的課堂測(cè)試,以提高學(xué)生編程解決實(shí)際問題的能力。
其次,在設(shè)計(jì)本課程各階段的測(cè)試題時(shí)遵從循序漸進(jìn)的思路,將課上講授語法知識(shí)點(diǎn)所使用的案例和測(cè)試所需要的案例聯(lián)系起來,統(tǒng)籌設(shè)計(jì),力求做到讓學(xué)生感到熟悉但不簡(jiǎn)單。具體來說,測(cè)試案例的設(shè)計(jì)力爭(zhēng)做到以下3個(gè)層次:銜接課上知識(shí)點(diǎn)原案例,鞏固對(duì)已有知識(shí)的理解;又不同于原案例,使學(xué)生能觸類旁通;加大難度或多種知識(shí)組合,突擊提高程序設(shè)計(jì)能力,超越自我。
2.3 摘桃子——類ACM式課堂測(cè)試
除了高起點(diǎn)的“現(xiàn)有發(fā)展水平”和階段性的“最近發(fā)展區(qū)”測(cè)試案例,課堂測(cè)試的組織形式也是課程設(shè)計(jì)成功與否的關(guān)鍵。好的課堂測(cè)試應(yīng)能夠充分調(diào)動(dòng)學(xué)生的積極性,利用有限的課時(shí)突擊鍛煉學(xué)生的程序設(shè)計(jì)能力,為此,課程借鑒ACM程序設(shè)計(jì)競(jìng)賽的形式,精心設(shè)計(jì)了類ACM式的課堂測(cè)試組織方法。
類ACM式的課堂測(cè)試一方面保留ACM競(jìng)賽的基本形式,即要求參賽選手在規(guī)定的時(shí)間內(nèi)完成給定問題的編程;另一方面,結(jié)合課上測(cè)試時(shí)間和學(xué)生編程水平的實(shí)際情況,對(duì)競(jìng)賽的題量、組隊(duì)、評(píng)分、判題等形式進(jìn)行相應(yīng)調(diào)整。標(biāo)準(zhǔn)ACM競(jìng)賽與類ACM課堂測(cè)試比較見表l。
如表1所示,由于受到課時(shí)限制,類ACM測(cè)試將測(cè)試時(shí)間從5小時(shí)縮減為2學(xué)時(shí),相對(duì)應(yīng)的題量也由10道縮減至2或3道;測(cè)試形式由3人組隊(duì)變?yōu)閭€(gè)人完成,這是因?yàn)閷?duì)于C語言程序設(shè)計(jì)的初學(xué)者而言,首先需要訓(xùn)練個(gè)人能力,而不是訓(xùn)練其團(tuán)隊(duì)協(xié)作編程能力;評(píng)分形式則是由整題汁分變?yōu)榘袋c(diǎn)計(jì)分且各小點(diǎn)計(jì)分之和大于滿分,這是因?yàn)闇y(cè)試案例大多包含由淺人深的幾個(gè)子問題,按點(diǎn)計(jì)分有助于激發(fā)學(xué)習(xí)積極性,也利于引導(dǎo)學(xué)生完成較難問題的求解,而小點(diǎn)計(jì)分之和后大于滿分也有利于學(xué)生獲得較好的平時(shí)成績(jī)。閱卷、判題根據(jù)教學(xué)平臺(tái)的不同既可以選擇機(jī)器判題,又可以選擇人工判定。對(duì)于2學(xué)時(shí)的測(cè)試時(shí)問,我們進(jìn)行了進(jìn)一步細(xì)分,第1學(xué)時(shí)由學(xué)生獨(dú)立完成測(cè)試并計(jì)分,第2學(xué)時(shí)先由教師對(duì)題目進(jìn)行講解和必要的程序演示,再留半小時(shí)給學(xué)生進(jìn)行測(cè)試,但此時(shí)通過測(cè)試所獲得的分值將有所降低。
3 “最近發(fā)展區(qū)”案例
基于第2節(jié)的課程教學(xué)設(shè)計(jì),本節(jié)重點(diǎn)對(duì)基于“最近發(fā)展區(qū)”理論的類ACM式C語言教學(xué)方法中貫穿授課與測(cè)試的主體——案例展開介紹。篇幅所限,筆者只選取兩個(gè)代表案例,介紹其考核的知識(shí)點(diǎn)、分點(diǎn)計(jì)分的各個(gè)小點(diǎn)、在語法知識(shí)講授時(shí)的鋪墊以及解題的基本思路.,
3.1 長(zhǎng)整數(shù)求“根”
求數(shù)“根”測(cè)試要求主函數(shù)從鍵盤讀人一個(gè)整數(shù),求出該整數(shù)的“根”,即對(duì)該整數(shù)的各位數(shù)字相加求和,若得到的和大于9,則對(duì)該結(jié)果的各位數(shù)字再次相加求和,直到結(jié)果小于10為止,這個(gè)小于10的整數(shù)就是長(zhǎng)整數(shù)的“根”,如整數(shù)12345的“根”為6,因?yàn)?+2+3+4+5=15,而1+5=6。該案例主要用于考查學(xué)生對(duì)控制結(jié)構(gòu)的理解,但學(xué)生也可以通過遞歸函數(shù)知識(shí)編寫出正確的代碼。案例設(shè)計(jì)了3個(gè)層次的計(jì)分點(diǎn),難度逐步加大,具體如下:①輸入整數(shù)的長(zhǎng)度固定為7位;②輸入整數(shù)的長(zhǎng)度不定,但不超過9位;③輸入整數(shù)的長(zhǎng)度不定,但不超過100位。
作為鋪墊,授課教師應(yīng)在課堂舉例或布置作業(yè)時(shí)將計(jì)分點(diǎn)1作為一個(gè)獨(dú)立問題,給出編程思路交由學(xué)生思考求解,如先使用一個(gè)for循環(huán)進(jìn)行定數(shù)循環(huán),求解7位整數(shù)的和;再利用一個(gè)while循環(huán)判定和是否小于10,大于10則重復(fù)第一個(gè)求和的過程,小于10則輸出結(jié)果。有了這一鋪墊,進(jìn)行類ACM式課堂測(cè)試時(shí)學(xué)牛就比較容易理解題目要求,并能夠較順利地編寫程序求解計(jì)分點(diǎn)l。對(duì)于計(jì)分點(diǎn)2,輸入整數(shù)可直接存儲(chǔ)在一個(gè)整型變量中,教師應(yīng)在測(cè)試時(shí)提示學(xué)生使用兩次while循環(huán),即外層循環(huán)控制當(dāng)?shù)臄?shù)是否小于10,內(nèi)層循環(huán)用于求各位數(shù)字之和。計(jì)分點(diǎn)3的輸入整數(shù)已超過整型的表示范圍,教師可以提示學(xué)生先使用getchar函數(shù),邊讀取輸入整數(shù)邊做一次按位求和,從而將計(jì)分點(diǎn)3的問題轉(zhuǎn)變成計(jì)分點(diǎn)2的問題。
3.2 基于動(dòng)態(tài)內(nèi)存分配的掃雷
掃雷是類似Windows操作系統(tǒng)白帶扣雷游戲的案例,主要考查學(xué)生對(duì)數(shù)組和指針的理解、掌握與使用情況,同樣分為3個(gè)層次的汁分點(diǎn):①掃雷邊界區(qū)域固定為20×20的網(wǎng)格,每個(gè)網(wǎng)格有雷的概率固定為0.2,要求程序能夠在屏幕I:輸出雷的二維分布情況,即顯示一個(gè)20行20列的字符信息(有雷打‘X’,無雷打‘O’);②在計(jì)分點(diǎn)1的基礎(chǔ)上,要求在無雷處輸出該網(wǎng)格周圍雷的個(gè)數(shù),即與Windows系統(tǒng)游戲類似的規(guī)則;③在計(jì)分點(diǎn)2的基礎(chǔ)上,要求雷區(qū)的網(wǎng)格規(guī)模是動(dòng)態(tài)輸入決定的。
作為鋪墊,教師在課上講解隨機(jī)數(shù)生成并基于隨機(jī)數(shù)進(jìn)行概率判定的方法,且在課件中給出詳細(xì)代碼,學(xué)生可以直接拷貝使用。在課堂測(cè)試時(shí),針對(duì)計(jì)分點(diǎn)1的提示是用一個(gè)20×20的二維數(shù)組存儲(chǔ)隨機(jī)數(shù)結(jié)果,并根據(jù)隨機(jī)數(shù)結(jié)果在屏幕上輸出‘X’或‘0’;計(jì)分點(diǎn)2的提示是使用一個(gè)22×22的二維數(shù)組,邊界元素均賦值為無雷,從而簡(jiǎn)化中間區(qū)域無雷網(wǎng)格的周邊雷數(shù)計(jì)算過程;計(jì)分點(diǎn)3則提示學(xué)生使用指向指針的指針進(jìn)行動(dòng)態(tài)內(nèi)存分配,需要說明的是指向指針的指針使用方法教師也已在課上舉例時(shí)通過其他案例進(jìn)行了介紹,學(xué)生只需要模仿編程即可。
通過上述兩個(gè)案例的介紹,可以看出測(cè)試案例均具有一定難度。在傳統(tǒng)程序設(shè)計(jì)教學(xué)中,對(duì)于沒有編程基礎(chǔ)的大一新生,往往很少能夠接觸到具有上述難度的習(xí)題,但本課程的實(shí)踐結(jié)果表明,基于“最近發(fā)展區(qū)”理論,有了測(cè)試前課堂教學(xué)時(shí)的相關(guān)示例鋪墊,學(xué)生對(duì)上述測(cè)試表現(xiàn)出了濃厚的興趣,并能夠在有限的課堂測(cè)試時(shí)間內(nèi)顯著加深對(duì)相關(guān)知識(shí)點(diǎn)的理解,提高程序設(shè)計(jì)水平。
4 教學(xué)成效
2014年春季,筆者在給國防科學(xué)技術(shù)大學(xué)大一新生高級(jí)班2班(高級(jí)班學(xué)員是通過以選擇題為主的摸底考試選拔出來的,僅能反映其對(duì)計(jì)算機(jī)的理解較好,即大學(xué)計(jì)算機(jī)基礎(chǔ)知識(shí)掌握較好,但并不代表其具備編程基礎(chǔ) ,如高級(jí)班2班僅4人在高中階段接觸過程序設(shè)計(jì))講授計(jì)算機(jī)程序設(shè)計(jì)課程時(shí)使用了基于“最近發(fā)展區(qū)”理論的類ACM式C語言教學(xué)方法。期末機(jī)試成績(jī)見表2。
如表2所示,在學(xué)期末的機(jī)試考核中,高2班的平均分達(dá)到84.25分,及格率100%,優(yōu)秀率39.39%,并有2人獲得滿分,各項(xiàng)指標(biāo)均大幅高于全校整體水平(全校整體成績(jī)數(shù)據(jù)已扣除高2班的人員影響),也明顯高于另兩個(gè)高級(jí)班。值得注意的是高1班的及格率低于全校整體的及格率,這也在一定程度上反映出高級(jí)班的學(xué)生在課程學(xué)習(xí)之前并不一定具有更好的編程基礎(chǔ)這一事實(shí)。
上述統(tǒng)計(jì)數(shù)據(jù)尤其是平均分和優(yōu)秀率數(shù)據(jù)表明,在同樣的學(xué)習(xí)時(shí)間內(nèi),基于筆者所提出的C語言教學(xué)方法可有效激發(fā)學(xué)生的學(xué)習(xí)興趣,幫助學(xué)生跨越“最近發(fā)展區(qū)”,顯著提高編寫程序解決實(shí)際問題的能力。
5 結(jié)語
筆者結(jié)合在國防科學(xué)技術(shù)大學(xué)從事程序設(shè)計(jì)課程教學(xué)的經(jīng)驗(yàn),提出基于“最近發(fā)展區(qū)”理論,借鑒ACM程序設(shè)計(jì)競(jìng)賽模式的C語言程序設(shè)計(jì)教學(xué)方法——分階段教學(xué),進(jìn)行類ACM式的階段課堂測(cè)試,統(tǒng)籌設(shè)計(jì)課上語法知識(shí)示例與課堂測(cè)試用例。教學(xué)實(shí)踐結(jié)果表明,使用該方法教學(xué)的高級(jí)班學(xué)生具備更好的通過編寫程序解決實(shí)際問題的能力;在學(xué)期末的程序設(shè)計(jì)機(jī)試考核中,該班各項(xiàng)成績(jī)指標(biāo)都大幅領(lǐng)先全校以及其他高級(jí)班的學(xué)生。