袁 梅
(桂林理工大學南寧分校,廣西 南寧530001)
《C語言程序設計》課程是電子類專業的重要專業基礎必修課,學好C語言是為了后續的課程打下編程語言基礎,但C語言有大量的語法和概念,邏輯抽象,枯燥難學,初學者在編程過程中容易出錯,無法自己分析解決問題,過于依賴老師的指導來解決問題,而教學過程中大班教學往往不能全部兼顧及時指導,如果不能及時解決問題,學生學習積極性容易受挫[1],產生厭學情緒。因此在《C語言程序設計》教學過程中提出典型錯誤分析強化訓練法,讓學生正面接受挫折教育,把編程失敗經驗內化升級為成功基石,從而構建自己的知識體系[2],達到讓學生自己分析問題、解決問題具有自主學習能力的教學目標。
學生在初學C語言時,對其語法和概念還處于半知不解,理解了皮毛,因此在編程實驗過程中容易遇到變量未定義、單詞拼寫出錯、標識符前后不一致、中文輸入法標點符號有誤、輸入輸出函數應用有誤等等各種語法錯誤,雖然編譯軟件會提示錯誤,但高職學生英語底子較差,對編譯軟件的英文錯誤提示像看天書一樣不能理解,無法自己分析和處理所遇到的問題。同時學生又害怕編程失敗,抗拒心理較嚴重[3]。因此,在課程教學中提出失敗經驗鼓勵法,正確引導學生不懼失誤,正確面對編程過程中的挫折,同時深化對C語言知識點的掌握和應用。
學生在C語言編程過程中,順利通過軟件編譯無誤后,程序可以執行操作,但在執行時發現程序運行結果達不到預期的效果,比如說循環語句判斷語句多加分號、判斷是否相等時習慣性數學思維用等號判斷、數據區間判斷表達式有誤、條件滿足時執行多個語句未使用花括號、switch語句漏掉break語句、除法運算整數相除被忽略小數等邏輯錯誤,這對于剛入門學習C語言的學生,經驗尚淺,在沒有任何提示的情況下要發現程序段問題是比較難的。因此在教學過程中引入錯誤案例解析法,把典型的邏輯錯誤通過演示操作并解析原因,做出正確解決方案,給學生作為經驗參考。
如果C語言編程時沒有語法錯誤也排除了邏輯錯誤,可是執行程序時還是出現異常[1],結果不正確、突然閃退或者停止工作等問題,如輸入函數格式說明符和輸入列表的數據類型不一致、除數為0、數據溢出等執行錯誤,非常考驗學生知識點的熟悉程度,需要仔細分析程序和借助調試工具,要有深厚的C語言編程功力。
C語言編程過程中,引導學生遇到錯誤時無所畏懼,采用了失敗經驗鼓勵措施,讓學生將遇到的所有錯誤提示和現象全部記錄下來[1],形成學習筆記,并記錄相同問題的出現次數,學生每提出一個問題均可累加學習經驗值,若能提出解決方案者再累加學習經驗值,該經驗值作為過程性考核評價體系的重要指標之一。通過失敗經驗鼓勵的方法:一讓學生習慣并正視編程問題,樹立學習信心;二是通過累加經驗值的方式鼓勵學生自己嘗試分析問題解決問題,從而達到讓學生主動學習的教學目標。
一些C語言編程的邏輯錯誤和執行錯誤,編譯軟件均未有錯誤提示,導致學生無從下手,糾其原因是編程經驗太少,因此采用錯誤案例解析法,把常見的邏輯錯誤和執行錯誤案例“引經據典”放入教學案例中[1],在教學過程中操作演示錯誤出現的現象,分析其原因,提出解決方案,為學生提供一個參考坐標,再次遇到類似問題時有所啟迪。同時在課后布置有類似錯誤的“來找茬”作業,強化訓練學生檢錯技巧,深化理解知識點,增加其實戰經驗,使其熟能生巧構建自己的知識體系。
在《C語言程序設計》課程學習中,學生初學編程時遇到問題容易不知所措過于依賴教師,但由于大多教學是采用合班上課,學生人數居多,教師無法全部兼顧,面面俱到,若學生的問題得不到及時的解決,容易打擊其學習積極性產生厭學情緒。因此采用學生助教指導的策略,讓學生自愿擔當教師助教,在自己完成實驗的情況下去幫助指導其它同學分析問題和解決問題,獲得自己的學習經驗值,增加實戰經驗。遇到問題的學生還可以把問題上傳到藍墨云班課APP里的討論活動中,鼓勵討論組里的學生參與討論和提出解決方案,不僅可以提高指導的覆蓋面,還可以激發學生的學習熱情和動力,通過自己的助教獲得自己的學習經驗值。
函數在C語言教學中,學生比較難掌握的一個內容,在教學過程中,采用“失敗經驗鼓勵法”讓把學生平時編程中遇到的問題放在討論區中進行案例共享,教師根據學生的失敗經驗進行“錯誤案例解析”,形成一個“典型案例”,該案例有語法錯誤、邏輯錯誤和執行錯誤,讓學生來找茬,案例如下所示。
1-------#include
2-------void Bmi(n);
3-------void main()
4-------{float w,h,bmi;
5-------scanf(“%d%d”,&w,&h);
6-------bmi=w/(h*h);
7-------BMI(w,h,bmi);}
8-------void BMI(n);
9-------{if(bmi>40)printf(“超胖!”);
10-------else if(35 11-------else if(30 12-------else if(25 13-------else printf(“正常!”);} (1)語法錯誤:如第 2、7、8 行中,函數頭的定義、聲明和調用問題。 (2)邏輯錯誤:如第 10、11、12行中關系運算表達式表示區間的問題。 (3)執行錯誤:如第5行,輸入函數格式說明符和輸入列表的數據類型不一致。 課內通過教師的錯誤案例分析,學生懂得函數的定義、聲明和調用過程中不規范的編程問題,通過課后作業“來找茬”檢驗學生的掌握情況,其答題情況匯總如圖1所示。語法錯誤經過學生的經驗分享、教師的錯誤案例分析及學生助教的指導學習已經得到解決,而邏輯錯誤和執行錯誤少數同學還未完全掌握解決方法,這還需要依靠編程實戰來累積學習經驗。 圖1 函數課后作業“來找茬”不同錯誤類型的掌握情況 學生在《C語言程序設計》編程過程中,常遇到語法錯誤、邏輯錯誤和執行錯誤,糾其原因是編程經驗不足,語法知識點功底不深厚。教學過程中一是采用了失敗經驗鼓勵法有效引導學生面對編程錯誤;二是通過錯誤案例解析課內引經據典課后找茬再做經驗總結漸進式強化訓練,步步為營;三是鼓勵學習能力優者充當助教參與教學,激發學生的學習激情。通過這一系列的典型錯誤分析強化訓練方法克服了學生對編程問題的恐懼心理,樹立學習信心,大大改善了課程的教學質量和效果。
4 結束語