余小燕 李 晶
文章編號(hào):1672-5913(2009)10-0136-03
摘要:“C語(yǔ)言程序設(shè)計(jì)”是計(jì)算機(jī)及相關(guān)專(zhuān)業(yè)的重要的專(zhuān)業(yè)基礎(chǔ)課,也是一門(mén)難學(xué)難教的課程,采用什么教學(xué)方法使學(xué)生能更好地掌握C語(yǔ)言是值得思考、值得研究的問(wèn)題。本文通過(guò)分析目前各個(gè)高校“C語(yǔ)言程序設(shè)計(jì)”課程的三種教學(xué)模式,結(jié)合實(shí)際的教學(xué)過(guò)程對(duì)這三種教學(xué)模式中所使用的教學(xué)方法進(jìn)行了探討。
關(guān)鍵詞:C語(yǔ)言;程序設(shè)計(jì);教學(xué)方法
中圖分類(lèi)號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
高級(jí)程序設(shè)計(jì)語(yǔ)言是計(jì)算機(jī)應(yīng)用專(zhuān)業(yè)及相關(guān)專(zhuān)業(yè)的一門(mén)很重要的專(zhuān)業(yè)基礎(chǔ)課程,C語(yǔ)言是一種典型的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,其處理能力和表現(xiàn)能力極強(qiáng)、使用靈活方便、目標(biāo)程序效率高、可移植性好的特點(diǎn)使其能在各類(lèi)各型計(jì)算機(jī)上廣泛使用,也因而作為很多高等院校(包括高職院校)開(kāi)設(shè)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言課的首選語(yǔ)言;但是C語(yǔ)言的概念復(fù)雜、規(guī)則多、因靈活而易錯(cuò)的特點(diǎn)也給教師和學(xué)生在教與學(xué)中帶來(lái)不小的壓力。為了提高學(xué)生學(xué)習(xí)程序設(shè)計(jì)的興趣和信心,更好地培養(yǎng)學(xué)生程序設(shè)計(jì)的基本思想,教師在把握授課內(nèi)容的同時(shí)也要積極探索教學(xué)方法和教學(xué)技巧。目前各個(gè)高?!癈語(yǔ)言程序設(shè)計(jì)”課一般包括理論課、上機(jī)課和課程設(shè)計(jì)課三種教學(xué)模式,本文將對(duì)這三種教學(xué)模式中所使用的教學(xué)方法進(jìn)行探討。
1理論課教學(xué)方法
傳統(tǒng)的理論課教學(xué)方法應(yīng)由以下教學(xué)環(huán)節(jié)組成:
(1) 回顧上一次課主要內(nèi)容,并預(yù)習(xí)檢查;
(2) 講解本次課的學(xué)習(xí)任務(wù)和目標(biāo);
(4) 講解知識(shí)點(diǎn)1、小結(jié)、課堂練習(xí),講解知識(shí)點(diǎn)2、小結(jié)、課堂練習(xí)……
(5) 總結(jié)和布置作業(yè)。
筆者認(rèn)為在理論課教學(xué)中可多采用課堂設(shè)問(wèn)和提問(wèn)教學(xué)法、對(duì)比歸納教學(xué)法、現(xiàn)場(chǎng)編程教學(xué)法和課堂陷阱教學(xué)法。
1.1課堂設(shè)問(wèn)和提問(wèn)教學(xué)法
高等學(xué)校的教學(xué)方式和學(xué)習(xí)過(guò)程與中學(xué)階段有較大的不同,高校的專(zhuān)業(yè)教育不僅是傳授知識(shí),而且是引導(dǎo)學(xué)生“進(jìn)入”到專(zhuān)業(yè)領(lǐng)域,教師不是“教書(shū)”,學(xué)生不是“記憶”,而是“思考”,我們通過(guò)課堂設(shè)問(wèn)和提問(wèn)教學(xué)法引導(dǎo)學(xué)生去思考。
如講解例題“求任意自然數(shù)n中各位數(shù)字之和”,教師可設(shè)問(wèn)“如自然數(shù)345,各位數(shù)字之和是多少?”,然后提出兩個(gè)關(guān)鍵性問(wèn)題“如何求得n中每一位數(shù)字?”及“自然數(shù)n是任意的,其位數(shù)是不確定的,如何控制循環(huán)次數(shù)?”。教師的問(wèn)題提出之后,對(duì)比較簡(jiǎn)單的問(wèn)題,教師可自問(wèn)自答,也可以和學(xué)生一起回答,對(duì)于關(guān)鍵性的問(wèn)題首先引導(dǎo)學(xué)生去思考,然后要求學(xué)生來(lái)回答。
在教師的引導(dǎo)及學(xué)生的積極思考下,就很容易解決這兩個(gè)關(guān)鍵性問(wèn)題,即用n%10得n的最低位,加入和s;然后n=n/10,即n始終表示由未處理的數(shù)字組成的自然數(shù)。重復(fù)以上過(guò)程,直至n等于0時(shí)結(jié)束。主要程序段如下:
main()
{int sum=0, n;
printf(" input a natural number:");
scanf("%d", &n);
while(n>0)
{ sum+=n%10;
n/=10;
}
printf(" sum=%d", sum);
}
在使用課堂設(shè)問(wèn)和提問(wèn)教學(xué)法時(shí),要注意設(shè)問(wèn)不能太多,千萬(wàn)不能變成“口頭禪”而引起學(xué)生的反感;在提問(wèn)時(shí)要保證提問(wèn)的質(zhì)量,不能是學(xué)生不用想就能回答的問(wèn)題,也不能是學(xué)生經(jīng)過(guò)教師啟發(fā)后也不能回答的問(wèn)題,也不能是太寬泛的問(wèn)題,并且不管學(xué)生回答是否正確,都要給予適當(dāng)?shù)恼Z(yǔ)言鼓勵(lì)。
1.2對(duì)比歸納教學(xué)法
通過(guò)對(duì)比的方式對(duì)相關(guān)的概念或類(lèi)似的程序代碼進(jìn)行比較,進(jìn)而明確差異,然后進(jìn)行歸納總結(jié),更好地方便學(xué)生理解。如在講解continue語(yǔ)句的使用時(shí),可通過(guò)break語(yǔ)句利用示例進(jìn)行對(duì)比,如下列兩個(gè)程序段:
程序1:
main()
{int k,n=0,a=0;float s=0;
printf(“ enter 10 integers:”);
for(k=0;k<10;k++)
{ scanf(“%d”,&a);
if(a<=0) continue;
s+=a;n++;
}
printf((“aver:%f”,s/n);
}
程序2:
main()
{int k,n=0,a=0;float s=0;
printf(“ enter 10 integers:”);
for(k=0;k<10;k++)
{ scanf(“%d”,&a);
if(a<=0) break;
s+=a;n++;
}
printf((“aver:%f”,s/n);
}
程序1的輸出結(jié)果是“輸入的10個(gè)整數(shù)中正數(shù)的平均值”,程序2輸出的結(jié)果是“至多10個(gè)正數(shù)的平均值”,也就是說(shuō)不一定有10個(gè)整數(shù),因?yàn)橐坏┹斎氲氖欠钦龜?shù)程序循環(huán)就終止。通過(guò)這兩個(gè)程序段的對(duì)比,可歸納總結(jié)出break語(yǔ)句和continue語(yǔ)句的區(qū)別,即如果條件a<=0成立,遇到continue語(yǔ)句則跳過(guò)本次循環(huán)體中其余尚未執(zhí)行的語(yǔ)句(s+=a和n++),而去執(zhí)行k++語(yǔ)句,接著再進(jìn)行下一次循環(huán)條件(k<10)的判定;而如果條件a<=0成立,遇到break語(yǔ)句則結(jié)束循環(huán),不執(zhí)行k++語(yǔ)句,也不再進(jìn)行下一次循環(huán)條件(k<10)的判定。通過(guò)這樣的對(duì)比,不僅方便學(xué)生理解,而且也加深了學(xué)生對(duì)該知識(shí)點(diǎn)的理解和把握。
1.3現(xiàn)場(chǎng)編程教學(xué)法
在一個(gè)技能知識(shí)點(diǎn)講解完畢進(jìn)行小結(jié)時(shí),要求所有學(xué)生拿出紙和筆,對(duì)一個(gè)簡(jiǎn)單的有代表性的編碼題進(jìn)行現(xiàn)場(chǎng)編程,并且在3-5分鐘內(nèi)完成。通過(guò)現(xiàn)場(chǎng)編程不僅方便教師了解學(xué)生對(duì)該知識(shí)點(diǎn)的掌握程度,而且克服學(xué)生怕動(dòng)手畏難的習(xí)慣,提高學(xué)生動(dòng)手意識(shí)和編程能力。在學(xué)生進(jìn)行現(xiàn)場(chǎng)編程時(shí),教師應(yīng)走下講臺(tái)巡視學(xué)生,督促全部學(xué)生動(dòng)手,了解學(xué)生在編程時(shí)出現(xiàn)的錯(cuò)誤;在剛開(kāi)始學(xué)習(xí)編程時(shí),教師可選兩位學(xué)生在黑板上書(shū)寫(xiě)自己的程序代碼,然后請(qǐng)學(xué)生自愿前來(lái)改正代碼中的錯(cuò)誤,這樣不僅可提高學(xué)生的編程能力,還可提高學(xué)生調(diào)試程序的能力,同時(shí)也活躍了課堂氣氛,提高了教學(xué)效果。
在使用現(xiàn)場(chǎng)編程教學(xué)法時(shí),要注意要求學(xué)生現(xiàn)場(chǎng)編程的題目不能太復(fù)雜,否則學(xué)生都解答不出來(lái);安排學(xué)生現(xiàn)場(chǎng)編程的時(shí)間也不能太長(zhǎng),否則課堂講解時(shí)間不夠;安排學(xué)生在黑板上書(shū)寫(xiě)或修改程序代碼也不宜太頻繁,可在課程前期、在學(xué)生對(duì)C語(yǔ)言的程序結(jié)構(gòu)印象還不深刻的時(shí)候安排。
1.4課堂陷阱教學(xué)法
在講解或演示程序代碼的時(shí)候,通過(guò)故意地把典型的、容易出錯(cuò)的代碼寫(xiě)錯(cuò)來(lái)設(shè)置陷阱,使程序調(diào)試不能通過(guò),進(jìn)而吸引學(xué)生的注意力,然后學(xué)生在教師的啟發(fā)引導(dǎo)下找出錯(cuò)誤、改正錯(cuò)誤,得到正確的程序代碼。通過(guò)“調(diào)試程序→發(fā)現(xiàn)錯(cuò)誤→改正錯(cuò)誤→調(diào)試程序”的一系列過(guò)程不僅可以提高學(xué)生對(duì)程序代碼、概念的理解和認(rèn)識(shí),而且可以提高學(xué)生編寫(xiě)程序代碼的經(jīng)驗(yàn),提高調(diào)試程序的能力。
如講解循環(huán)結(jié)構(gòu)語(yǔ)句,當(dāng)循環(huán)體由多條語(yǔ)句組成時(shí),必須用{ }將這些語(yǔ)句括起來(lái)組成一個(gè)復(fù)合語(yǔ)句,教師可故意去掉這個(gè)花括號(hào)(設(shè)置陷阱),則程序不能得到正確結(jié)果或者是死循環(huán)。
再如指針問(wèn)題,要求用指針實(shí)現(xiàn)“交換兩個(gè)變量a和b的值”,程序段如下:
main()
{int a=10,b=20;
int *p1=&a,*p2=&b,*t;/*使p1指向a, 使 p2指向b*/
t=p1;p1=p2;p2=t; /* 交換后p1指向 b,p2指向a */
printf((“a=%d,b=%d ”,a,b);
}
很顯然,指針變量p1和p2的值雖然發(fā)生了交換,但指針變量p1和p2所指向的變量的值沒(méi)有交換即變量a和b的值沒(méi)有交換。其執(zhí)行過(guò)程如下圖(a)(b)所示:
如要實(shí)現(xiàn)上述功能只需在最后一句前加:
a=p2; b=p1;
使用課堂陷阱教學(xué)法要求教師不僅有豐富的教學(xué)經(jīng)驗(yàn),對(duì)知識(shí)點(diǎn)的易錯(cuò)性有較好的把握,而且對(duì)學(xué)生的知識(shí)點(diǎn)的掌握情況有較深入的了解,同時(shí)備課要充分,避免程序代碼出錯(cuò)了自己也找不出錯(cuò)誤。
2上機(jī)課教學(xué)方法
一堂典型的上機(jī)課應(yīng)當(dāng)由以下教學(xué)環(huán)節(jié)組成:
(1) 教師講解本次上機(jī)目標(biāo)和訓(xùn)練技能點(diǎn);
(2) 教師講解本次上機(jī)需完成任務(wù)一,學(xué)生編寫(xiě)程序代碼、同時(shí)教師巡視并指導(dǎo)學(xué)生編碼、教師對(duì)出錯(cuò)率大于30%的問(wèn)題進(jìn)行集中講解;
(3) 教師講解本次上機(jī)需完成任務(wù)二、學(xué)生編碼的同時(shí)教師巡視指導(dǎo)……
(4) 總結(jié)和布置作業(yè)。
筆者認(rèn)為在上機(jī)課教學(xué)中可采用任務(wù)分解教學(xué)法、任務(wù)貫穿教學(xué)法、課堂陷阱教學(xué)法和對(duì)比歸納教學(xué)法等。
2.1任務(wù)分解教學(xué)法
通過(guò)對(duì)一個(gè)比較大的任務(wù)或比較復(fù)雜的問(wèn)題進(jìn)行分解,分解成若干小的問(wèn)題,然后逐步解決這些小的問(wèn)題。如編程實(shí)現(xiàn)“輸入30個(gè)學(xué)生4門(mén)課程的成績(jī),要求計(jì)算出每位學(xué)生和每門(mén)課程的平均成績(jī)”,對(duì)于這個(gè)問(wèn)題我們首先把它分解成如下三個(gè)小問(wèn)題:
(1) 輸入30個(gè)學(xué)生4門(mén)課程的成績(jī);
(2) 計(jì)算每位學(xué)生的平均成績(jī);
(3) 計(jì)算每門(mén)課程的平均成績(jī)。
然后在教師的指導(dǎo)下學(xué)生分別編程實(shí)現(xiàn)這三個(gè)問(wèn)題,學(xué)生編程實(shí)現(xiàn)這三個(gè)問(wèn)題的時(shí)間分別控制在5-10分鐘。由于對(duì)上機(jī)任務(wù)進(jìn)行了分解,不僅教師可以控制學(xué)生完成每個(gè)任務(wù)的情況,學(xué)生也可以按時(shí)完成任務(wù),上機(jī)的效率和完成率都高,學(xué)生也就有成就感,進(jìn)而增強(qiáng)學(xué)生學(xué)習(xí)程序設(shè)計(jì)的興趣。
使用任務(wù)分解教學(xué)法要求教師不能急于求成,在理論課后不能立即布置一個(gè)復(fù)雜的上機(jī)任務(wù),要因材施教,根據(jù)學(xué)生的實(shí)際掌握程度布置一個(gè)大多數(shù)學(xué)生都能完成的任務(wù)。
2.2任務(wù)貫穿教學(xué)法
對(duì)于比較復(fù)雜的問(wèn)題且在2個(gè)課時(shí)內(nèi)不能完成,需要2-3次上機(jī)完成的上機(jī)任務(wù)可采用任務(wù)貫穿教學(xué)法,該教學(xué)方法通常應(yīng)用在“C語(yǔ)言程序設(shè)計(jì)”課程教學(xué)后期,其實(shí)質(zhì)仍然是任務(wù)分解。
3課程設(shè)計(jì)課教學(xué)方法
“C語(yǔ)言程序設(shè)計(jì)”的課程設(shè)計(jì)課通常是要求學(xué)生根據(jù)現(xiàn)有的C語(yǔ)言知識(shí)或技能(也許還要用到其他課程的知識(shí)或技能),完成一個(gè)或兩個(gè)規(guī)模和完整性都遠(yuǎn)遠(yuǎn)大于上機(jī)課的項(xiàng)目,如比較貼近學(xué)生生活的“學(xué)生成績(jī)管理系統(tǒng)”、“圖書(shū)管理系統(tǒng)”等項(xiàng)目,在真實(shí)的編程情景中做學(xué)生感興趣的項(xiàng)目,不僅可以鞏固和提高已經(jīng)學(xué)過(guò)的知識(shí)和技能,還可將編程的技巧滲透其中。通常課程設(shè)計(jì)課由以下幾個(gè)教學(xué)環(huán)節(jié)組成:教師講解(包括問(wèn)題描述、問(wèn)題分析、難點(diǎn)分析、階段劃分)、教師演示上機(jī)的成果、學(xué)生分階段進(jìn)行編碼、教師分階段進(jìn)行檢查、教師分階段對(duì)共性問(wèn)題集中講解、學(xué)生總結(jié)。在課程設(shè)計(jì)課中可采用任務(wù)分解教學(xué)法、任務(wù)貫穿教學(xué)法及課堂陷阱教學(xué)法,這里就不再贅述。
4結(jié)束語(yǔ)
上述三種教學(xué)模式中使用的教學(xué)方法是根據(jù)實(shí)際教學(xué)過(guò)程提出的,并已經(jīng)在“C語(yǔ)言程序設(shè)計(jì)”課程教學(xué)實(shí)踐中運(yùn)用,取得了良好的教學(xué)效果。當(dāng)然,在使用和設(shè)計(jì)某種教學(xué)方法時(shí),務(wù)必做到因材施教。
參考文獻(xiàn):
[1] 劉燕.C語(yǔ)言程序設(shè)計(jì)[M].北京:中國(guó)鐵道出版社,2008.
[2] 張春燕.面向能力培養(yǎng)的C語(yǔ)言程序設(shè)計(jì)教學(xué)方法研究[J].時(shí)代教育,2007(07Z).
[3] 譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.