摘要:C語言計(jì)算機(jī)專業(yè)教學(xué)中有重要的地位。傳統(tǒng)的C語言教學(xué)采用“課堂理論+上機(jī)實(shí)驗(yàn)”的教學(xué)模式,學(xué)生一般認(rèn)為它比較難學(xué),本文跟據(jù)十余年的C語言教學(xué)實(shí)踐,提出任務(wù)驅(qū)動法在C語言教學(xué)中有積極的作用,進(jìn)而具體闡述任務(wù)驅(qū)動的意義、任務(wù)案例確立的原則和方法等,以提高C語言教學(xué)質(zhì)量和效果。
關(guān)鍵詞:C語言;程序案例;任務(wù)驅(qū)動
C語言是一種理想的結(jié)構(gòu)化語言,具有功能豐富、表達(dá)能力強(qiáng)、使用靈活、應(yīng)用面廣、目標(biāo)程序效率高、可移植性好、能對硬件直接進(jìn)行操作等優(yōu)點(diǎn)。贏得計(jì)算機(jī)程序設(shè)計(jì)人員的青睞。因此,計(jì)算機(jī)專業(yè)學(xué)生應(yīng)該學(xué)會使用C語言。C語言學(xué)習(xí)的優(yōu)劣直接影響學(xué)生計(jì)算機(jī)應(yīng)用的能力和水平。雖然C語言做為計(jì)算機(jī)專業(yè)的基礎(chǔ)科目,在我國已開設(shè)多年,但實(shí)驗(yàn)教學(xué)效果并不理想,因?yàn)镃語言功能強(qiáng)、使用靈活,學(xué)生一般認(rèn)為比較難學(xué),常常出錯而不知其所以然。計(jì)算機(jī)專業(yè)學(xué)生學(xué)習(xí)專業(yè)知識目的是就業(yè),目標(biāo)任務(wù)驅(qū)動教學(xué)法在教育界已得到普遍認(rèn)可,例如VISUAL FOXPRO等教材本身的編撰就是以任務(wù)驅(qū)動的模式完成整個(gè)教學(xué)工作。但是,C語言科目的教材和教法改進(jìn)甚微,筆者在十幾年的C語言教學(xué)中,逐步嘗試采用目標(biāo)任務(wù)驅(qū)動法的教學(xué)模式,收到較好的效果。
當(dāng)下,計(jì)算機(jī)專業(yè)課教材和教法豐富,例如VISUAL FOXPRO、CAD等課程的講授,教師大都采用目標(biāo)任務(wù)驅(qū)動教學(xué)法,學(xué)生學(xué)以致用,教與學(xué)雙受益。但是,C語言科目的教材幾經(jīng)改版,變化不大,教師按照章節(jié)順序,理論課講授知識點(diǎn),然后上機(jī)做實(shí)驗(yàn),各章節(jié)孤立,無法讓學(xué)生系統(tǒng)的了解整個(gè)課程,教師感到力不從心,能跟隨教學(xué)進(jìn)度學(xué)習(xí)的學(xué)生數(shù)量,隨著教學(xué)進(jìn)度的深入而遞減。最后以學(xué)生突擊背題,應(yīng)付考試來結(jié)束這樣一門重要課程的學(xué)習(xí)。在十余年的C語言教學(xué)中總結(jié)出,學(xué)生在學(xué)習(xí)C語言科目后,由于C語言的自身特點(diǎn),例如C語言語法規(guī)則復(fù)雜,大量新概念、名詞、術(shù)語、語法規(guī)則的記憶,讓學(xué)生心生厭惡,產(chǎn)生畏難心理,學(xué)生學(xué)習(xí)C語言后,認(rèn)為只是學(xué)到一些復(fù)雜的語法,學(xué)后很快遺忘,C語言的優(yōu)勢和精華更是無從談起。
在多年的計(jì)算機(jī)C語言教學(xué)中,筆者認(rèn)為,學(xué)生不應(yīng)是記憶語法的小冊子,教師不能片面的講授各個(gè)章節(jié),而要全面的看待整個(gè)教材,將知識串起來,帶給學(xué)生一個(gè)完整、系統(tǒng)的知識體系。用任務(wù)驅(qū)動的教學(xué)模式構(gòu)建C語言教學(xué)體系,用鮮活的融合去演繹理論。
1 目標(biāo)任務(wù)設(shè)定目的和意義
學(xué)習(xí)C語言的目的就是編程,1976年瑞士計(jì)算機(jī)科學(xué)家Niklaus Wirth提出了一個(gè)著名的公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序。從今天的觀點(diǎn)來看,它只能是對過程化程序的一個(gè)抽象定義,對面向?qū)ο蟮某绦蚨詣t不盡然。但對我們學(xué)習(xí)C語言是完全適用的。每節(jié)課設(shè)定一個(gè)或幾個(gè)任務(wù)程序案例做為開篇,教學(xué)環(huán)節(jié)之初給出一個(gè)有輸出結(jié)果的源程序代碼,讓每個(gè)學(xué)生編輯并調(diào)試,堅(jiān)持“參與式”的教學(xué)理念。當(dāng)學(xué)生編出的程序有了結(jié)果,學(xué)生成為了教與學(xué)的主動方參與到教學(xué)中來,自然產(chǎn)生興趣,看到程序結(jié)果,自然對結(jié)果的產(chǎn)生原因提出疑問,就有了探究新知的欲望,以此為前提,教師對程序中知識點(diǎn)逐一進(jìn)行講授,抽象的知識在具體程序?qū)嵗械靡詫?shí)現(xiàn)。
2 目標(biāo)任務(wù)的設(shè)定原則
2.1 在任務(wù)程序案例中涵蓋本節(jié)全部知識點(diǎn)
將理論知識應(yīng)用到實(shí)際程序中來,有了這樣的任務(wù)驅(qū)動,保證了教學(xué)實(shí)施的可能性,每條語句進(jìn)行說明,用實(shí)例加深復(fù)雜概念和格式的理解和記憶,通過任務(wù),學(xué)生可以輕松了學(xué)習(xí)數(shù)據(jù)類型的表示、存儲形式、取值范圍和關(guān)鍵字的拼寫等學(xué)生學(xué)習(xí)中的難點(diǎn)問題,化繁為簡,將以往學(xué)習(xí)中的難點(diǎn)問題滲透實(shí)例中來,使學(xué)生真正理解和應(yīng)用數(shù)據(jù)來編程,在學(xué)生理解和掌握任務(wù)的目的后,再對本節(jié)知識點(diǎn)進(jìn)行總結(jié)歸納,上升到理論高度。例如:在講授數(shù)據(jù)類型和輸入輸出函數(shù)時(shí),可以設(shè)定如下任務(wù)程序:
main()
{int i=128;
float x=234.89;
double y=-123.4567;
char ch=’*’;
printf(“%d%f%lf\”,i,x,y);
printf(“%.3f%.3e\”,x,x);
printf(“%08.3f%08.3e\”,x,x);
printf(“%g%f%e\”,y,y,y);
printf(“%6c%c%c%d%%”,ch,ch,ch,i); }
2.2 跟據(jù)章節(jié)不同內(nèi)容,靈活設(shè)定典型任務(wù)案例
結(jié)構(gòu)化程序設(shè)計(jì)的思想,對于編程的初學(xué)者來說比較抽象,是一個(gè)量變到質(zhì)變的過程,典型任務(wù)的設(shè)定,用具體的實(shí)際案例反復(fù)講解程序的執(zhí)行過程,例如:循環(huán)結(jié)構(gòu)中確定循環(huán)條件是一個(gè)難點(diǎn)問題,可以采用以下案例:編程輸出以下圖形:
***********
***********
***********
***********
對于編程的初學(xué)者,不要避諱學(xué)習(xí)前人比較成熟的優(yōu)秀編程案例,編程應(yīng)該從會讀程開始,進(jìn)而將上述程序加以變形,可以使知識鞏固提高又活學(xué)活用。
************
*** ***********
****************
******* ***********
********************
2.3 通過不同任務(wù)案例,用比較法講授新知
通過比較法教學(xué)能達(dá)到優(yōu)化程度,使教學(xué)思路寬廣,開拓學(xué)生的思維空間,為學(xué)生留有“教學(xué)空白”、“教學(xué)間隙”,讓學(xué)生馳騁其間。例如:循環(huán)是C語言解題的一個(gè)重要特征,在循環(huán)算法中,窮舉與迭代是兩類具有代表性的基本應(yīng)用,兩種算法的語法實(shí)現(xiàn),學(xué)生容易做到,但這兩種算法的實(shí)際應(yīng)用范圍確是重點(diǎn)和難點(diǎn)問題,通過實(shí)例任務(wù)程序比較,常常能起到事半功倍的教學(xué)效果,用一學(xué)時(shí)完成以往二學(xué)時(shí)的教學(xué)任務(wù)。
例如窮舉法是一種重復(fù)型算法。它的基本思想是,對問題的所有可能狀態(tài)一一測試,直到找到解或?qū)⑷靠赡軤顟B(tài)都測試過為止??梢詣?chuàng)設(shè)窮舉法典型任務(wù):36人搬36塊磚問題。
main()
{int men=0,women,children;
while(men<=8)
{women=0;
while(women<=11)
{children=36-women-men;
if(4.0*men+3.0*women+children/2==36)
{printf(“\ men is %d”,men);
printf(“\ women is %d”,women);
printf(“\ children is %d\”,children);}
women++;}
men++;}}
又例如迭代法,迭代是一個(gè)不斷用新值取代變量的舊值,或由舊值遞推出變量的新值的過程??梢詣?chuàng)設(shè)典型任務(wù)如下:用牛頓迭代法計(jì)算一個(gè)正實(shí)數(shù)a的平方根。
#include “math.h”
double sq_root(double a)
{ double x;
x=a;
while(fabs(x*x-a)>=E0)
x=(x+a/x)*0.5;
return(x);}
3 結(jié)束語
任務(wù)驅(qū)動式教學(xué)在C語言程序設(shè)計(jì)中的采用,其基本思想就是將所有知識點(diǎn)融入到具體程序案例中來,將抽象的難點(diǎn)和重點(diǎn)問題,通過在程序中的實(shí)際應(yīng)用,使學(xué)生有明確的學(xué)習(xí)目的,以學(xué)生參與意識為文體,提升學(xué)習(xí)興趣為先導(dǎo),順利完成教學(xué)任務(wù)。計(jì)算機(jī)專家譚浩強(qiáng)主編的C語言教材,在二十多年中重印三十多次,其受到無數(shù)程序員們的親睞,說明C語言學(xué)習(xí)的重要性,C語言教學(xué)質(zhì)量的提高,必將促進(jìn)我國計(jì)算機(jī)事業(yè)的發(fā)展。