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