摘 要: 探討了將PBL教學(xué)法引入C語言程序設(shè)計課堂和實(shí)驗(yàn)教學(xué)中。從課前準(zhǔn)備、課堂組織、分組討論、教師總結(jié)、教學(xué)效果評價等方面進(jìn)行研究,以函數(shù)和指針兩種特殊的數(shù)據(jù)類型的學(xué)習(xí)為重點(diǎn),借助VC++6.0可視化編程特點(diǎn),采用斷點(diǎn)分析法對案例進(jìn)行分析。教學(xué)實(shí)踐證明,該方法激發(fā)了學(xué)生的學(xué)習(xí)興趣,增強(qiáng)了學(xué)生的編程能力,教學(xué)效果得到一定程度的提高。
關(guān)鍵詞: PBL教學(xué)法; C程序設(shè)計; VC++; 可視化
中圖分類號:G43 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2013)04-43-03
Application of PBL in the C programming teaching based on VC++
Li Xiumin, Lei Guohua, Wang Xijie
(College of Health Management, Binzhou Medical University, Yantai, Shandong 264003, China)
Abstract: In this paper, the application of PBL to C Programming Language in both classroom and experimental teaching is discussed. The main problem is proposed based on the pre-class preparation, classroom organization, group discussions, teachers' conclusion and the evaluation of teaching effect. Starting from function and pointer, with the visual programming features of VC++6.0, the case is analyzed through breakpoints. The teaching practice shows that the method stimulates students' interest in learning, enhances students' programming ability, and teaching effect has been improved to some extent.
Key words: PBL; C programming; VC++; visualization
0 引言
C語言程序設(shè)計是我院信息管理與信息系統(tǒng)專業(yè)和統(tǒng)計學(xué)專業(yè)開設(shè)多年的核心課程。它作為一門程序設(shè)計語言的基礎(chǔ)課,主要目標(biāo)是培養(yǎng)學(xué)生掌握程序設(shè)計方法,掌握程序設(shè)計的基本方法和技巧,鍛煉學(xué)生邏輯思維能力,從而具備應(yīng)用程序設(shè)計解決相關(guān)專業(yè)領(lǐng)域內(nèi)實(shí)際問題的基本能力。傳統(tǒng)的C語言教學(xué)以課堂講授和案例教學(xué)作為教學(xué)手段,遵循從概念到算法,再到語法的步驟。在課程教學(xué)結(jié)束時,有的學(xué)生甚至連一個完整的程序結(jié)構(gòu)都編寫不出來,更談不上理解程序和算法,因此學(xué)生學(xué)習(xí)積極性不高,尤其對于非計算機(jī)專業(yè)的學(xué)生而言。筆者經(jīng)過幾年的教學(xué)實(shí)踐深深地感受到,對于非計算機(jī)專業(yè)的學(xué)生來說,大部分學(xué)生是被動式接受教材內(nèi)容,缺乏積極思考的素質(zhì)和能力。因此,只有提高學(xué)生學(xué)習(xí)的主動性,適當(dāng)改進(jìn)教學(xué)方法和教學(xué)手段,才能提高課堂教學(xué)的有效性。為此,我們對該課程的教學(xué)引入基于問題的學(xué)習(xí)模式,以程序設(shè)計為主線組織教學(xué),直接從問題入手,啟發(fā)學(xué)生思考,引導(dǎo)學(xué)生在解決問題中構(gòu)造算法,進(jìn)而掌握相關(guān)的概念、語法、功能及應(yīng)用[1]。
1 PBL相關(guān)理論
1.1 PBL概述
以問題為導(dǎo)向的教學(xué)方法(problem-based learning,PBL),是基于現(xiàn)實(shí)世界的以學(xué)生為中心的教育方式,1969年由美國的神經(jīng)病學(xué)教授 Barrows在加拿大的麥克馬斯特大學(xué)首創(chuàng)[2],目前已成為國際上比較流行的一種教學(xué)方法。美國的南依利諾斯大學(xué)的霍華德·白瑞斯(Howard Barrows)和安·凱爾森(Ann Kelson)博士給PBL下了一個定義:“PBL既是一種課程又是一種學(xué)習(xí)方式”[3]。其教學(xué)方法與傳統(tǒng)的以“授課”為特征的教學(xué)方法相比,在設(shè)計理念、實(shí)施方法、評價方法和教學(xué)效果上有很大的不同。
1.2 PBL特點(diǎn)
傳統(tǒng)的課程講授方法是教師先講解教材,在學(xué)生掌握一定的知識前提下,再開始作案例分析。PBL教學(xué)法是以問題的提出為學(xué)習(xí)的起點(diǎn),強(qiáng)調(diào)以學(xué)生主動學(xué)習(xí)為主,將學(xué)習(xí)與更大的任務(wù)或問題掛鉤,使學(xué)習(xí)者投入于問題中。其精髓在于發(fā)揮問題對學(xué)習(xí)過程的指導(dǎo)作用,調(diào)動學(xué)生的主動性和積極性。PBL尤其適合實(shí)踐性強(qiáng)的課程的教學(xué)工作。PBL的三個基本要素包括:問題、學(xué)生和教師。準(zhǔn)備和提出問題是學(xué)習(xí)的開始,解決問題可能有很多方法,通過激發(fā)學(xué)生積極尋找解決問題的方法從而提高獨(dú)立思考、解決問題的能力。PBL突出的亮點(diǎn)有:①分組討論,能夠激發(fā)每一位同學(xué)的學(xué)習(xí)能動性、創(chuàng)造性;②有利于教師全面掌握學(xué)生的學(xué)習(xí)狀況,進(jìn)行有的放矢的指導(dǎo);③有利于培養(yǎng)學(xué)生團(tuán)隊(duì)合作意識,增強(qiáng)學(xué)習(xí)信心。
2 VC++特點(diǎn)分析
計算機(jī)程序是通過在計算機(jī)內(nèi)存中開辟一塊存儲空間,并用一個語句序列不斷修改這塊存儲空間上的內(nèi)容,最終得到問題的解答來解決實(shí)際問題的。提高對程序的調(diào)試能力非常重要。程序設(shè)計類的課程的教學(xué)中應(yīng)讓學(xué)生充分理解計算機(jī)程序在內(nèi)存中的運(yùn)行原理和過程。學(xué)生需要在程序運(yùn)行過程中任意時刻都清楚語句運(yùn)行到哪里了,當(dāng)前存儲數(shù)據(jù)的內(nèi)存區(qū)是什么值,只有清楚語句中用到的變量以及它們的變化,才能在程序調(diào)試過程中及時地找到出錯位置,并修改錯誤,最終讓程序按照設(shè)計者的意圖執(zhí)行。C語言程序設(shè)計課程教學(xué)中,有很多內(nèi)容比較抽象,不容易被學(xué)生所理解,VC++的可視化特點(diǎn)為問題的理解提供了很好的解決方案。Visual C++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行??梢暬\(yùn)行主要是程序在運(yùn)行過程中的數(shù)據(jù)結(jié)構(gòu)及可視顯示,使初學(xué)者從枯燥乏味的單一編程環(huán)境中解脫出來,強(qiáng)化編程和調(diào)試能力。
3 PBL教學(xué)法應(yīng)用于C語言教學(xué)的研究
C程序設(shè)計是一門實(shí)踐性很強(qiáng)的課程,課程上講授數(shù)據(jù)結(jié)構(gòu)和算法以及具體程序?qū)崿F(xiàn)的分析對非計算機(jī)專業(yè)的多數(shù)學(xué)生來說是非常抽象的,課程教學(xué)的重點(diǎn),應(yīng)該是使學(xué)生自己掌握學(xué)習(xí)語言的方法和訓(xùn)練自己動手寫程序的能力。只有這樣,學(xué)生對C語言具體的語法和常用的算法才能消化、吸收,從而不斷提高編程能力并靈活運(yùn)用。函數(shù)是C程序的基本組成部分,也是C語言最核心的內(nèi)容之一,在設(shè)計良好的程序中,每個函數(shù)都用來實(shí)現(xiàn)一個或幾個特定的功能,編寫C程序的工作主要就是編寫一個個的函數(shù)[4]。筆者以函數(shù)和指針的兩個典型例題為例,討論使用PBL教學(xué)法應(yīng)用于具體的教學(xué)實(shí)踐過程。本課程PBL模式教學(xué)活動的設(shè)計和具體的實(shí)施過程如圖1所示。
3.1 課前準(zhǔn)備
PBL教學(xué)的成功開展,需要學(xué)生的主動配合。開課前先向?qū)W生介紹課堂學(xué)習(xí)的方法,即PBL教學(xué)法具體的實(shí)施過程,講明PBL教學(xué)法與傳統(tǒng)的講授法之間的不同之外,讓大家做到心中有數(shù)。授課課前準(zhǔn)備決不能馬虎,教師須對授課內(nèi)容非常熟練,能夠回答學(xué)生的提問,教學(xué)相長,“教者有心,學(xué)者得益”,不斷提高授課技能和水平。實(shí)施前教師結(jié)合教材的具體內(nèi)容提出學(xué)習(xí)內(nèi)容和任務(wù),把問題布置下去,然后根據(jù)要求,讓學(xué)生提前預(yù)習(xí),收集相關(guān)資料,對算法及重點(diǎn)、難點(diǎn)有一定的自我認(rèn)識和理解。
3.2 學(xué)生上機(jī)實(shí)踐、分組討論
實(shí)驗(yàn)分組是PBL實(shí)施的必要措施,但如何分組是比較敏感的問題。每個學(xué)生的知識水平和學(xué)習(xí)能力都不一樣,分組既要有利于團(tuán)結(jié),組內(nèi)成員能夠積極與其他同學(xué)交流溝通,還要綜合考慮每組成員的學(xué)習(xí)主動性和學(xué)習(xí)能力?;谶@些考慮,我們采取學(xué)生主動報名和老師指派相結(jié)合的分組方法,根據(jù)實(shí)際上課人數(shù),將學(xué)生分成8人一組,每組指定1名組長。組長負(fù)責(zé)整個組具體方案的討論實(shí)施。在編程方面,有部分學(xué)生有較強(qiáng)編程能力,但多數(shù)學(xué)生編程能力較差,分組討論需鼓勵這部分學(xué)生多思考,大膽發(fā)言。
在教學(xué)過程中“如何設(shè)計問題”和“問題設(shè)計得好壞”是影響PBL教學(xué)模式的重要因素,在設(shè)計問題時參考教學(xué)大綱,以教學(xué)目標(biāo)為中心進(jìn)行。例如,函數(shù)的遞歸調(diào)用是C語言的特點(diǎn)之一。結(jié)合教學(xué)目標(biāo),可以設(shè)計以下問題:“遞歸的執(zhí)行過程是怎么樣的”,“用以前學(xué)過的知識能否實(shí)現(xiàn)遞歸算法”,以及“怎么控制遞歸結(jié)束”等問題。在指針這一章中,可以設(shè)計一些問題,如:“指針的涵義是什么”,“如果通過指針去間接訪問變量”等一系列問題。整個過程中,教師不斷地引導(dǎo)學(xué)生思考,鼓勵用自己的語言和方式自由提問。教師是資源提供者和學(xué)生發(fā)展學(xué)習(xí)能力和掌握學(xué)習(xí)技巧的促進(jìn)者,要隨時掌握學(xué)生的思維動態(tài),為下一步總結(jié)做好鋪墊。在每一個專題完成后,小組以文檔的形式進(jìn)行總結(jié),教師流動指導(dǎo),鼓勵好的小組,在學(xué)生中形成競賽的機(jī)制。
3.3 教師總結(jié),提出解決問題的方案
根據(jù)以往的教學(xué)經(jīng)驗(yàn),函數(shù)的遞歸定義看似簡單,但實(shí)際上要真正理解遞歸調(diào)用的過程光靠傳統(tǒng)的課堂講授難以準(zhǔn)確把握和理解遞歸調(diào)用的實(shí)質(zhì)和變量的變化情況。這種情況下借助于VC就可以很好地幫助理解整個遞歸處理的過程。
一個例子是:要求編程求解n!,如果用遞歸法處理,編程如圖2所示。在圖2所示的程序中,我們輸入變量n=4,即計算4!,共設(shè)置了4個斷點(diǎn),按照執(zhí)行的順序分別命名為斷點(diǎn)1、斷點(diǎn)2、斷點(diǎn)3、斷點(diǎn)4。圖3分析了程序執(zhí)行過程中變量f(存放結(jié)果)以及變量n的值的變化情況。從圖3中可以看到:fac函數(shù)一共被調(diào)用4次,即fac(4)、fac(2)、fac(2)、fac(1)。第一次調(diào)用fac時并不是立即得到fac(4)的值,而是一次又一次地進(jìn)行遞歸調(diào)用,到fac(1)時才有確定的值,然后再遞推出fac(2)、fac(3)、fac(4)。分析到此大多數(shù)學(xué)生便對遞歸的執(zhí)行過程有了較清楚的認(rèn)識。
在C語言中,指針是一種表示能力極強(qiáng)、又十分靈活的數(shù)據(jù)類型,是一種特殊的數(shù)據(jù)類型[5]。指針概念和指針運(yùn)算是大多數(shù)同學(xué)理解上的難點(diǎn)。接下來我們借助實(shí)例來認(rèn)識指針,即變量的地址。我們知道函數(shù)的參數(shù)除了基本類型以外,還可以是指針類型。它的作用是將一個變量的地址傳送到另一個函數(shù)中。設(shè)計這樣一個問題:對主函數(shù)中的兩個整數(shù),交換這兩個整數(shù)的值,要求用函數(shù)調(diào)用來處理,而且用指針類型的數(shù)據(jù)作函數(shù)參數(shù)。
在圖4程序中,共設(shè)置了4個斷點(diǎn),調(diào)用函數(shù)時仍然是值傳送給形參變量,采取的依然是“值傳遞”方式,從圖5可以看到,此時傳遞的是變量a,b的地址,即x和y中存放的是a,b,即x指向a,y指向b。函數(shù)調(diào)用結(jié)束后形參x,y已經(jīng)不存在,最終輸出的a和b的值是已經(jīng)交換后的值。
3.4 教學(xué)效果評價
C語言程序設(shè)計課程開展PBL教學(xué)是否有助于學(xué)生能力的提高,在課程結(jié)束后,我們都對學(xué)生進(jìn)行教學(xué)意見的反饋調(diào)查。在整個過程中,學(xué)生帶著問題去學(xué)習(xí),學(xué)生不感到有壓力,并樂意去參與,在實(shí)踐中尋求問題的答案,能極大地提高自主學(xué)習(xí)的能力[6]。從學(xué)生的反饋意見中可以發(fā)現(xiàn),大部分學(xué)生認(rèn)為開展PBL教學(xué)能夠激發(fā)學(xué)習(xí)興趣,提高編程能力,學(xué)習(xí)積極性顯著提高。同時,也有部分學(xué)生認(rèn)為PBL教學(xué)的進(jìn)度較慢,在有限的課時里一些內(nèi)容沒有時間深入學(xué)習(xí)。
4 結(jié)束語
PBL教學(xué)法為學(xué)生營造了一個輕松、主動學(xué)習(xí)的氛圍,可以不斷發(fā)現(xiàn)新問題,解答新問題,加深對知識點(diǎn)的理解,相對于“以教師為中心”的教學(xué)法體現(xiàn)出更多優(yōu)勢:從學(xué)生主動查閱資料、分析思考,到分組討論、發(fā)言,可以更好地培養(yǎng)學(xué)生多方面的能力,將對他們今后開展工作和科研打下良好基礎(chǔ);同時,可以培養(yǎng)學(xué)生人際交往能力,使他們學(xué)會與人溝通。
PBL作為一種開放式的教學(xué)模式,對教師自身的素質(zhì)和教學(xué)技巧要求很高,要求教師扎實(shí)掌握相關(guān)學(xué)科知識,不斷提升自身的素質(zhì),具備良好的組織管理能力,因勢利導(dǎo),這些對任課教師的挑戰(zhàn)是巨大的,勢必要求教師投入更多的精力備課,在教與學(xué)的過程中不斷提高教學(xué)效果。PBL教學(xué)方式需要大量時間,有時會影響教學(xué)進(jìn)度,導(dǎo)致整體教學(xué)任務(wù)難以完成,這就需要我們結(jié)合教學(xué)內(nèi)容的重點(diǎn)、難點(diǎn),有選擇地開展PBL教學(xué),將課堂講授和PBL教學(xué)有機(jī)結(jié)合,對于難度較大的程序分析題,可以在PBL之前給予適當(dāng)?shù)闹v解,進(jìn)而取得更好的教學(xué)效果。今后在學(xué)習(xí)效果評價方面,可以設(shè)計學(xué)習(xí)評價量表,發(fā)放調(diào)查問卷,讓學(xué)生參與教學(xué)方法的評價。同時,采取對照和分析學(xué)習(xí)成績的方法,對教學(xué)效果進(jìn)行比較,對PBL教學(xué)法進(jìn)行滿意度調(diào)查,完善階段性評價方法,掌握學(xué)生意見和建議,為改善教學(xué)方法做參考。
通過開展實(shí)際教學(xué)活動發(fā)現(xiàn),PBL教學(xué)法適合程序設(shè)計理論課和實(shí)驗(yàn)課的講授,能夠更好地幫助學(xué)生理解算法,從而提高實(shí)際編程能力,為學(xué)生進(jìn)一步學(xué)習(xí)其他的面向?qū)ο蟮某绦蛟O(shè)計語言打下良好基礎(chǔ)。
參考文獻(xiàn):
[1] 常本勤.基于問題的學(xué)習(xí)模式在程序設(shè)計類課程教學(xué)中的應(yīng)用[J].計算機(jī)教育,2010.2:125-127
[2] 張翠萍.PBL教學(xué)法在C程序設(shè)計教學(xué)改革中的應(yīng)用[J].福建電腦,2011.8:186-187
[3] 徐一秋,王立偉,王海波.PBL教學(xué)法在C程序設(shè)計實(shí)驗(yàn)課教學(xué)改革中的應(yīng)用[J].計算機(jī)教育,2010.21(10):93-95
[4] 王江濤,陳得寶,楊一軍.基于VC++平臺的C程序設(shè)計可視化研究[J].吉林師范大學(xué)學(xué)報(自然科學(xué)版),2012.4:72-74
[5] 譚浩強(qiáng).C程序設(shè)計(第四版)[M].清華大學(xué)出版社,2010.
[6] 彭海云,馬占欣.基于PBL競爭機(jī)制的“程序設(shè)計基礎(chǔ)”課程教學(xué)模式探究[J].實(shí)驗(yàn)技術(shù)與管理,2012.29(6):174-177