摘要:C語(yǔ)言是一種應(yīng)用廣泛又比較難學(xué)的計(jì)算機(jī)高級(jí)語(yǔ)言,它接近硬件和系統(tǒng)低層軟件資源,在教學(xué)上與其他語(yǔ)言有區(qū)別,本文結(jié)合教學(xué)實(shí)踐,探討了任務(wù)驅(qū)動(dòng)法在本課程教學(xué)實(shí)踐中的應(yīng)用。
關(guān)鍵詞:任務(wù)驅(qū)動(dòng)法;C語(yǔ)言;教學(xué);實(shí)踐
中圖分類號(hào):G642.0 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1674-9324(2013)09-0087-03
隨著教學(xué)改革步伐的加快和后續(xù)課程的迫切要求,多數(shù)高校包括我們甘肅機(jī)電職業(yè)技術(shù)學(xué)院將C語(yǔ)言安排為第一計(jì)算機(jī)教學(xué)語(yǔ)言,且有些系部為了開設(shè)課程的需要在一年級(jí)就開始授課,這無(wú)疑給C的教學(xué)帶來(lái)了新的壓力和挑戰(zhàn)。本人擔(dān)任此課程的教學(xué)工作以來(lái),在《C語(yǔ)言程序設(shè)計(jì)》課程中引入任務(wù)驅(qū)動(dòng)教學(xué)方法,學(xué)生在任務(wù)中學(xué)習(xí)語(yǔ)法、算法和編程方法,教師著重引導(dǎo),學(xué)生主動(dòng)參與,很大的激發(fā)了學(xué)生的學(xué)習(xí)興趣和培養(yǎng)實(shí)踐動(dòng)手能力。
一、任務(wù)驅(qū)動(dòng)教學(xué)法的理論基礎(chǔ)
“任務(wù)驅(qū)動(dòng)教學(xué)法”是一種建立在建構(gòu)主義學(xué)習(xí)理論基礎(chǔ)上的教學(xué)法,它將以往以傳授知識(shí)為主的傳統(tǒng)教學(xué)理念,轉(zhuǎn)變?yōu)橐越鉀Q問題、完成任務(wù)為主的多維互動(dòng)式的教學(xué)理念。將再現(xiàn)式教學(xué)轉(zhuǎn)變?yōu)樘骄渴綄W(xué)習(xí),使每一位學(xué)生都能根據(jù)自己對(duì)當(dāng)前問題的理解,運(yùn)用共有的知識(shí)和自己特有的經(jīng)驗(yàn)提出方案、解決問題。在這個(gè)過(guò)程中,學(xué)生還會(huì)不斷地獲得成就感,可以更大地激發(fā)他們的求知欲望,逐步形成一個(gè)感知心智活動(dòng)的良性循環(huán),從而培養(yǎng)出獨(dú)立探索、勇于開拓進(jìn)取的自學(xué)能力。在如何學(xué)習(xí)方面,構(gòu)建主義提倡在教師指導(dǎo)下以學(xué)習(xí)者為中心的學(xué)習(xí),也就是說(shuō)強(qiáng)調(diào)學(xué)習(xí)者的認(rèn)知主體作用,又不忽視教師的主導(dǎo)作用,教師是意義構(gòu)建的幫助者、促進(jìn)者。而不是知識(shí)的傳授者與灌輸者。學(xué)生是信息加工的主體,是意義的主動(dòng)構(gòu)建者,而不是外部刺激的被動(dòng)接受者和被灌輸?shù)膶?duì)象。
二、任務(wù)驅(qū)動(dòng)教學(xué)法在《C語(yǔ)言程序設(shè)計(jì)》課程中的實(shí)踐
1.確定問題(任務(wù))。任務(wù)驅(qū)動(dòng)教學(xué)法首先需要解決的是確定任務(wù),選擇與當(dāng)前學(xué)習(xí)主題密切相關(guān)的真實(shí)性事件或問題(任務(wù))作為學(xué)習(xí)的中心內(nèi)容,讓學(xué)生面臨一個(gè)需要立即去解決的現(xiàn)實(shí)問題。在授課開始,提出問題,指出該問題的難點(diǎn),圍繞授課內(nèi)容引導(dǎo)學(xué)生進(jìn)行思考。例如,學(xué)習(xí)結(jié)構(gòu)體一章時(shí),可以讓學(xué)生思考如何才能存放全班同學(xué)的信息(姓名、年齡、成績(jī)等),以往的基本數(shù)據(jù)類型可以完成嗎?由此引入結(jié)構(gòu)體數(shù)組的概念。以“選擇結(jié)構(gòu)”一章為例,該單元的教學(xué)知識(shí)點(diǎn)是掌握關(guān)系表達(dá)式、邏輯表達(dá)式和條件表達(dá)式,會(huì)使用if語(yǔ)句和switch語(yǔ)句。在教學(xué)過(guò)程中,從簡(jiǎn)單的問題著手,先要求學(xué)生自己編寫程序,引入條件語(yǔ)句,同時(shí)在程序中講解相關(guān)的語(yǔ)法知識(shí)點(diǎn),提升高度。具體步驟:(1)任意輸入兩個(gè)數(shù),求最大值,并輸出最大值。(以此為例講解if...else語(yǔ)句的用法及其執(zhí)行過(guò)程。)(2)擴(kuò)展第一步,任意輸入三個(gè)數(shù),求最小值并輸出。(引入介紹六種基本關(guān)系運(yùn)算符并給出優(yōu)先順序,學(xué)習(xí)計(jì)算關(guān)系表達(dá)式的值,強(qiáng)調(diào)值為邏輯值。)(3)擴(kuò)展第二步,任意輸入三個(gè)數(shù),并按從小到大的順序輸出。(注意講解其中的算法,為循環(huán)語(yǔ)句打基礎(chǔ)。介紹三種邏輯運(yùn)算符號(hào)及其優(yōu)先順序,學(xué)習(xí)計(jì)算邏輯表達(dá)式的值。)(4)移植第三步,求解符號(hào)函數(shù),強(qiáng)調(diào)else子句與if語(yǔ)句的匹配原則。(5)推進(jìn)第四步,進(jìn)行if語(yǔ)句的多重嵌套。從鍵盤上輸入成績(jī)并按原則輸出其等級(jí)為習(xí)題供學(xué)生練習(xí)。(6)改寫第五步程序,使用switch語(yǔ)句構(gòu)成多分支結(jié)構(gòu)。(引入switch語(yǔ)句和break語(yǔ)句。)(7)進(jìn)行嵌套if語(yǔ)句與switch語(yǔ)句互換。同時(shí),還要注重算法分析,培養(yǎng)學(xué)生以算法為中心解決問題的能力。這是程序設(shè)計(jì)課程的教學(xué)重點(diǎn),也是教學(xué)難點(diǎn)。對(duì)于C語(yǔ)言所涉及的算法,在精講多練的同時(shí)還應(yīng)注意這些算法之間的聯(lián)系,與課程的相關(guān)內(nèi)容結(jié)合。如選擇法可以結(jié)合選擇程序設(shè)計(jì)結(jié)構(gòu),篩選法、起泡法等算法可以結(jié)合數(shù)組、函數(shù)部分進(jìn)行教學(xué)。這樣,學(xué)生在任務(wù)訓(xùn)練中熟練掌握這些算法的同時(shí),也學(xué)習(xí)并掌握了相關(guān)課程內(nèi)容,并逐漸養(yǎng)成在程序設(shè)計(jì)時(shí)進(jìn)行觸類旁通的思維模式。我這里強(qiáng)調(diào)了確定任務(wù)的重要性,但同時(shí)也要注意在確定任務(wù)時(shí)應(yīng)該控制任務(wù)的難度。在教學(xué)層次上,要根據(jù)學(xué)生基礎(chǔ)程度的不同,制定不同的任務(wù)標(biāo)準(zhǔn),要求每一個(gè)層次的學(xué)生都要達(dá)到最低的標(biāo)準(zhǔn)的任務(wù)并向高一級(jí)標(biāo)準(zhǔn)努力。具體來(lái)說(shuō),一個(gè)課堂的練習(xí)要有多個(gè)層次的任務(wù),第一個(gè)層次是基本的,體現(xiàn)課程主要內(nèi)容,第二個(gè)層次略為擴(kuò)充,體現(xiàn)一定的技巧和算法,第三個(gè)層次就是要求學(xué)生的設(shè)計(jì)無(wú)論從界面、風(fēng)格、完整型還是算法、技巧、易用性等方面接近專業(yè)程序員的習(xí)慣和水平。舉一個(gè)簡(jiǎn)單的例子,剛開始學(xué)生接觸C語(yǔ)言課程時(shí),有這么一個(gè)任務(wù):
例:計(jì)算并顯示2個(gè)數(shù)的和是多少?
任務(wù)遞進(jìn):①計(jì)算并顯示2個(gè)數(shù)的和,按任意鍵退出顯示屏幕?②計(jì)算并顯示2個(gè)數(shù)的和,以算術(shù)的形式顯示?③輸入兩個(gè)數(shù)求和,并以算術(shù)的形式顯示?問題(任務(wù))的解決有使學(xué)生更主動(dòng)、更廣泛地激活原有知識(shí)和經(jīng)驗(yàn),來(lái)理解、分析并解決當(dāng)前問題,問題的解決為新舊知識(shí)的銜接、拓展提供了理想的平臺(tái),通過(guò)問題的解決來(lái)建構(gòu)知識(shí),正是探索性學(xué)習(xí)的主要特征。
2.任務(wù)實(shí)施。任務(wù)遞進(jìn)中,通過(guò)新任務(wù)引出新的概念,新的語(yǔ)法,新的知識(shí)點(diǎn)。如:①按任意鍵退出顯示屏幕,可以用以下兩句來(lái)實(shí)現(xiàn):printf(“Please press any key to exit?。躰”);scanf(“%c”,&c);\*假設(shè)字符型變量c已經(jīng)定義*\或:printf(“Please press any key to exit!\n”);getchar();\*這時(shí)不用定義字符型變量,節(jié)省了存儲(chǔ)空間*\進(jìn)而引出Turbo C中的3個(gè)標(biāo)準(zhǔn)的輸入函數(shù)getchar()、scanf()和以后要學(xué)習(xí)的gets(),在這里我結(jié)合具體教學(xué)中談?wù)勥@三個(gè)函數(shù)。①這3個(gè)函數(shù)都屬于標(biāo)準(zhǔn)輸入函數(shù),它們?cè)陬^文件stdio.h中進(jìn)行說(shuō)明,其功能分別是:從標(biāo)準(zhǔn)輸入文件得到一個(gè)字符、按所給字符格式的要求從標(biāo)準(zhǔn)輸入文件得到若干項(xiàng)不同類型的數(shù)據(jù)、從標(biāo)準(zhǔn)輸入文件得到一個(gè)字符串。顯然,這3個(gè)函數(shù)在操作上存有共性。②我的處理是將3個(gè)函數(shù)捆在一起、硬著頭皮往深里講,所抱的指導(dǎo)思想是講十分可能會(huì)七分,如果講七分就只能會(huì)五分。這3個(gè)函數(shù)的操作對(duì)象都是標(biāo)準(zhǔn)輸入文件,該文件在系統(tǒng)啟動(dòng)時(shí)自動(dòng)打開,文件指針由系統(tǒng)定義為stdin。所謂標(biāo)準(zhǔn)輸入文件,實(shí)際上是在DOS的高層將鍵盤設(shè)備當(dāng)作一個(gè)輸入文件,將鍵盤操作視為文件操作;由于鍵盤是計(jì)算機(jī)必備的輸入設(shè)備,所以又稱它為標(biāo)準(zhǔn)輸入設(shè)備或標(biāo)準(zhǔn)輸入文件。顯然,DOS的這一高層操作必然要依賴于DOS的低層功能,其具體機(jī)制是,系統(tǒng)為標(biāo)準(zhǔn)輸入文件配有一個(gè)文件緩沖區(qū)、并支持行編輯操作,即:用戶連續(xù)鍵入字符,只要用戶不按回車鍵('\r'),則前面鍵入的字符可退回任意修改;一旦回車,鍵入字符將進(jìn)入文件緩沖區(qū),包括最后鍵入的回車符也將轉(zhuǎn)變?yōu)閾Q行符('\n')送入文件緩沖區(qū),此后它們將不能再被修改。③這3個(gè)函數(shù)面對(duì)同一個(gè)設(shè)備對(duì)象,共享同一個(gè)文件緩沖區(qū),在操作上均分成兩個(gè)環(huán)節(jié)。第一個(gè)環(huán)節(jié),如果文件緩沖區(qū)空,它們等待用戶鍵入字符直到用回車結(jié)束本行操作;第二個(gè)環(huán)節(jié),它們從文件緩沖區(qū)中提取字符,并進(jìn)行各自的相應(yīng)處理:getchar()函數(shù)將從文件緩沖區(qū)中截取一個(gè)任意字符(包括空格和換行符)返回。gets()函數(shù)將從文件緩沖區(qū)中截取若干字符(其中包括空格符),直到遇到換行符并將它轉(zhuǎn)變?yōu)榭刂谱址鸑ULL(' '),并以它作為串的結(jié)束標(biāo)志。該函數(shù)返回串的首地址。函數(shù)將按格式的要求逐項(xiàng)截取字符,將它轉(zhuǎn)變?yōu)橐蟮臄?shù)據(jù)類型后存入相應(yīng)的地址。截取原則有3個(gè):a.按格式要求的數(shù)據(jù)類型和域?qū)拋?lái)截取。b.遇到空格符、制表符和換行符時(shí)截取告一段落。c.遇到與所要求的格式不匹配的字符時(shí)截取告一段落。注意被scanf()函數(shù)截取后,最后的換行符仍被遺留在文件緩沖區(qū)內(nèi),成為影響后續(xù)接收的垃圾。該函數(shù)返回成功匹配的數(shù)據(jù)項(xiàng)的個(gè)數(shù)。④scanf()函數(shù)有諸多的操作細(xì)節(jié),在教材上已經(jīng)展開,但當(dāng)scanf()函數(shù)連續(xù)使用時(shí)情況就不太正常。(已經(jīng)有好多學(xué)生在上機(jī)時(shí)向我問過(guò)此類問題了。)
在連續(xù)使用scanf()函數(shù)時(shí),可用getchar()、fflush(stdin)或其他函數(shù)清除前次遺留在文件緩沖區(qū)中的垃圾字符。
通過(guò)引出Turbo C中的3個(gè)標(biāo)準(zhǔn)的輸入函數(shù)getchar()、scanf()和gets(),就可以總結(jié)出相對(duì)應(yīng)的輸出函數(shù)putchar()、printf()和puts()了,這里就不再重復(fù)了。
通過(guò)任務(wù):①引入知識(shí)點(diǎn)的學(xué)習(xí),就可以輕松的解決任務(wù)遞進(jìn);②計(jì)算并顯示2個(gè)數(shù)的和,以算術(shù)的形式顯示;③輸入兩個(gè)數(shù)求和,并以算術(shù)的形式顯示。這些無(wú)非就是輸入輸出函數(shù)的靈活應(yīng)用而已,在具體教學(xué)中我采取了讓學(xué)生自己在原有的程序中改動(dòng)來(lái)實(shí)現(xiàn)。
問題(任務(wù))的解決有使學(xué)生更主動(dòng)、更廣泛地激活原有知識(shí)和經(jīng)驗(yàn),來(lái)理解、分析并解決當(dāng)前問題,問題的解決為新舊知識(shí)的銜接、拓展提供了理想的平臺(tái),通過(guò)問題的解決來(lái)建構(gòu)知識(shí),正是探索性學(xué)習(xí)的主要特征。
3.評(píng)價(jià)與反饋。評(píng)價(jià)和反饋可與讓教師實(shí)時(shí)了解學(xué)生任務(wù)實(shí)施的進(jìn)展和效果,促進(jìn)學(xué)生的學(xué)習(xí)興趣,達(dá)到以評(píng)促學(xué)的目的。如在任務(wù)實(shí)施階段過(guò)程中(如在學(xué)生上機(jī)的過(guò)程中)發(fā)現(xiàn)問題及時(shí)糾正,任務(wù)實(shí)施結(jié)束后,提問幾位學(xué)生匯報(bào)任務(wù)進(jìn)展情況,匯報(bào)過(guò)程中我采取了將他們的程序通過(guò)大屏幕給大家演示,有錯(cuò)誤的地方提問若干個(gè)學(xué)生錯(cuò)在哪里了、為什么錯(cuò)了、怎么去改動(dòng)、是哪個(gè)語(yǔ)法現(xiàn)象的問題等,回過(guò)頭再講講這個(gè)語(yǔ)法現(xiàn)象。評(píng)價(jià)和改動(dòng)后結(jié)合幾位學(xué)生的程序,給予點(diǎn)評(píng)與鼓勵(lì)。
實(shí)踐證明,評(píng)價(jià)與反饋可以極大的調(diào)動(dòng)學(xué)生的學(xué)習(xí)興趣,激發(fā)斗志,使學(xué)生在今后的學(xué)習(xí)中更加有動(dòng)力,是任務(wù)驅(qū)動(dòng)法不可或缺的一個(gè)步驟。
三、任務(wù)驅(qū)動(dòng)教學(xué)法在《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)中的整體把握
上面談到的是具體章節(jié)中怎樣利用任務(wù)驅(qū)動(dòng)來(lái)教學(xué),實(shí)際上對(duì)整個(gè)課程也可以從宏觀上進(jìn)行任務(wù)設(shè)計(jì)。
如完成學(xué)生成績(jī)管理信息系統(tǒng),必須學(xué)習(xí)以下知識(shí):掌握文件的建立、打開、讀、寫等操作;系統(tǒng)的組織包含數(shù)據(jù)輸入、修改、查詢、統(tǒng)計(jì)、輸出等功能,必須掌握函數(shù)的調(diào)用;數(shù)據(jù)內(nèi)容的組織涉及數(shù)組、結(jié)構(gòu)體、鏈表,必須掌握數(shù)組、結(jié)構(gòu)體、鏈表等數(shù)據(jù)對(duì)象的操作;功能的實(shí)現(xiàn)必須設(shè)計(jì)算法控制流程,掌握不同的流程圖表示方法;功能算法的實(shí)現(xiàn)必須根據(jù)算法描述進(jìn)行符號(hào)化語(yǔ)句表示;根據(jù)編寫程序的源代碼進(jìn)行程序調(diào)試。
該任務(wù)難度適中,囊括了C語(yǔ)言課程的大綱要求,而且與學(xué)生聯(lián)系密切,使學(xué)生不必進(jìn)行復(fù)雜的項(xiàng)目背景分析就可以進(jìn)行不同程度的功能擴(kuò)展。同時(shí)項(xiàng)目的實(shí)現(xiàn)能夠突出程序設(shè)計(jì)“以算法為中心”求解問題的方法,是一個(gè)比較合適的項(xiàng)目。學(xué)生從開始模仿單一的記錄添加、排序、查詢、統(tǒng)計(jì)和記錄瀏覽等簡(jiǎn)單程序,到利用函數(shù)、結(jié)構(gòu)和指針等知識(shí)對(duì)模仿期開發(fā)的各功能模塊進(jìn)行擴(kuò)充和完善,逐步組建學(xué)生的管理系統(tǒng)。
通過(guò)在《C語(yǔ)言程序設(shè)計(jì)》課程中引入任務(wù)驅(qū)動(dòng)的教學(xué)方法,相比傳統(tǒng)的教學(xué)方法,學(xué)生的興趣提高,積極主動(dòng),大大的提高了教學(xué)效率。以實(shí)際的軟件開發(fā)項(xiàng)目為載體,學(xué)生通過(guò)各個(gè)任務(wù)的訓(xùn)練,基本上可以掌握一個(gè)C語(yǔ)言程序設(shè)計(jì)的軟件的開發(fā)過(guò)程。
參考文獻(xiàn):
[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2008:64,70,296.
[2]鄭英.任務(wù)驅(qū)動(dòng)教學(xué)模式探索[J].考試周刊,2007,(7).
[3]龍志強(qiáng),施曉紅,謝云德.任務(wù)驅(qū)動(dòng)法在單片機(jī)系統(tǒng)設(shè)計(jì)教學(xué)中的實(shí)踐[J].實(shí)驗(yàn)室研究與探索,2008,(3).
[4]萊斯利·P·斯特弗,杰里·蓋爾.教育中的構(gòu)建主義[M].高文,徐斌艷,程克拉,等,譯.上海:華東師范大學(xué)出版社,2003.
作者簡(jiǎn)介:許玉煥(1982-),男,甘肅秦安人,2005年7月畢業(yè)于西北師范大學(xué)電子信息工程系(計(jì)算機(jī)方向),大學(xué)本科,工學(xué)學(xué)士,講師,主要研究方向計(jì)算機(jī)程序設(shè)計(jì)。