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