摘要:C語言計算機專業教學中有重要的地位。傳統的C語言教學采用“課堂理論+上機實驗”的教學模式,學生一般認為它比較難學,本文跟據十余年的C語言教學實踐,提出任務驅動法在C語言教學中有積極的作用,進而具體闡述任務驅動的意義、任務案例確立的原則和方法等,以提高C語言教學質量和效果。
關鍵詞:C語言;程序案例;任務驅動
C語言是一種理想的結構化語言,具有功能豐富、表達能力強、使用靈活、應用面廣、目標程序效率高、可移植性好、能對硬件直接進行操作等優點。贏得計算機程序設計人員的青睞。因此,計算機專業學生應該學會使用C語言。C語言學習的優劣直接影響學生計算機應用的能力和水平。雖然C語言做為計算機專業的基礎科目,在我國已開設多年,但實驗教學效果并不理想,因為C語言功能強、使用靈活,學生一般認為比較難學,常常出錯而不知其所以然。計算機專業學生學習專業知識目的是就業,目標任務驅動教學法在教育界已得到普遍認可,例如VISUAL FOXPRO等教材本身的編撰就是以任務驅動的模式完成整個教學工作。但是,C語言科目的教材和教法改進甚微,筆者在十幾年的C語言教學中,逐步嘗試采用目標任務驅動法的教學模式,收到較好的效果。
當下,計算機專業課教材和教法豐富,例如VISUAL FOXPRO、CAD等課程的講授,教師大都采用目標任務驅動教學法,學生學以致用,教與學雙受益。但是,C語言科目的教材幾經改版,變化不大,教師按照章節順序,理論課講授知識點,然后上機做實驗,各章節孤立,無法讓學生系統的了解整個課程,教師感到力不從心,能跟隨教學進度學習的學生數量,隨著教學進度的深入而遞減。最后以學生突擊背題,應付考試來結束這樣一門重要課程的學習。在十余年的C語言教學中總結出,學生在學習C語言科目后,由于C語言的自身特點,例如C語言語法規則復雜,大量新概念、名詞、術語、語法規則的記憶,讓學生心生厭惡,產生畏難心理,學生學習C語言后,認為只是學到一些復雜的語法,學后很快遺忘,C語言的優勢和精華更是無從談起。
在多年的計算機C語言教學中,筆者認為,學生不應是記憶語法的小冊子,教師不能片面的講授各個章節,而要全面的看待整個教材,將知識串起來,帶給學生一個完整、系統的知識體系。用任務驅動的教學模式構建C語言教學體系,用鮮活的融合去演繹理論。
1 目標任務設定目的和意義
學習C語言的目的就是編程,1976年瑞士計算機科學家Niklaus Wirth提出了一個著名的公式:算法+數據結構=程序。從今天的觀點來看,它只能是對過程化程序的一個抽象定義,對面向對象的程序而言則不盡然。但對我們學習C語言是完全適用的。每節課設定一個或幾個任務程序案例做為開篇,教學環節之初給出一個有輸出結果的源程序代碼,讓每個學生編輯并調試,堅持“參與式”的教學理念。當學生編出的程序有了結果,學生成為了教與學的主動方參與到教學中來,自然產生興趣,看到程序結果,自然對結果的產生原因提出疑問,就有了探究新知的欲望,以此為前提,教師對程序中知識點逐一進行講授,抽象的知識在具體程序實例中得以實現。
2 目標任務的設定原則
2.1 在任務程序案例中涵蓋本節全部知識點
將理論知識應用到實際程序中來,有了這樣的任務驅動,保證了教學實施的可能性,每條語句進行說明,用實例加深復雜概念和格式的理解和記憶,通過任務,學生可以輕松了學習數據類型的表示、存儲形式、取值范圍和關鍵字的拼寫等學生學習中的難點問題,化繁為簡,將以往學習中的難點問題滲透實例中來,使學生真正理解和應用數據來編程,在學生理解和掌握任務的目的后,再對本節知識點進行總結歸納,上升到理論高度。例如:在講授數據類型和輸入輸出函數時,可以設定如下任務程序:
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 跟據章節不同內容,靈活設定典型任務案例
結構化程序設計的思想,對于編程的初學者來說比較抽象,是一個量變到質變的過程,典型任務的設定,用具體的實際案例反復講解程序的執行過程,例如:循環結構中確定循環條件是一個難點問題,可以采用以下案例:編程輸出以下圖形:
***********
***********
***********
***********
對于編程的初學者,不要避諱學習前人比較成熟的優秀編程案例,編程應該從會讀程開始,進而將上述程序加以變形,可以使知識鞏固提高又活學活用。
************
*** ***********
****************
******* ***********
********************
2.3 通過不同任務案例,用比較法講授新知
通過比較法教學能達到優化程度,使教學思路寬廣,開拓學生的思維空間,為學生留有“教學空白”、“教學間隙”,讓學生馳騁其間。例如:循環是C語言解題的一個重要特征,在循環算法中,窮舉與迭代是兩類具有代表性的基本應用,兩種算法的語法實現,學生容易做到,但這兩種算法的實際應用范圍確是重點和難點問題,通過實例任務程序比較,常常能起到事半功倍的教學效果,用一學時完成以往二學時的教學任務。
例如窮舉法是一種重復型算法。它的基本思想是,對問題的所有可能狀態一一測試,直到找到解或將全部可能狀態都測試過為止。可以創設窮舉法典型任務: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++;}}
又例如迭代法,迭代是一個不斷用新值取代變量的舊值,或由舊值遞推出變量的新值的過程。可以創設典型任務如下:用牛頓迭代法計算一個正實數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 結束語
任務驅動式教學在C語言程序設計中的采用,其基本思想就是將所有知識點融入到具體程序案例中來,將抽象的難點和重點問題,通過在程序中的實際應用,使學生有明確的學習目的,以學生參與意識為文體,提升學習興趣為先導,順利完成教學任務。計算機專家譚浩強主編的C語言教材,在二十多年中重印三十多次,其受到無數程序員們的親睞,說明C語言學習的重要性,C語言教學質量的提高,必將促進我國計算機事業的發展。