摘要:針對計算機專業高級語言程序設計課程的教學中存在重語法、輕程序設計,以及初學者感到概念抽象難懂,學習效果不佳,動手能力不強的現狀,根據程序設計的特點,結合C語言程序設計的教學體系,本文提出了在程序設計教學中引入案例教學法的觀點,案例教學不同于教學案例,本文分析案例教學的真正含義,給出C語言案例教學模式的思路,并以實例說明在C語言教學過程中如何實施案例教學,在高級語言程序設計課程中取得了良好的教學效果。
關鍵詞:案例教學;教學模式;C語言;程序設計
C語言具有豐富的運算符和數據類型,便于實現各種復雜的數據結構,而且通過位運算和指針還可以直接訪問內存的物理地址,既可以開發應用軟件也可以開發系統軟件,由于其強大的功能和優點,成為計算機及相關專業首選的高級程序設計語言之一。然而,由于C語言涉及的概念和規則繁多,指針使用靈活,初學者普遍反映概念抽象、學習困難, 期末考試不及格率高,實際掌握的情況并不理想。因此如何改進教學方法,以激發學生的學習興趣和自主性,增強動手能力和編程能力,是計算機教育工作者值得思索的問題。
1案例教學法的含義
傳統的程序設計教學過程中也通過使用各種例題來講解和說明語法和知識點,但教學方法還存在諸多不足,例如“老師講、學生學”的單向式教學模式,以及重語法、輕程序設計能力,或者把案例教學等同于教學案例,沒有掌握案例教學的本質,學生學完該課程以后知識點零散,缺乏系統性,不具備良好的軟件開發能力。因此我們必須轉變教學觀念,進一步研究面向研討型課程的案例教學模式。
案例教學是目前國內外比較流行的一種教學方法,被普遍應用于醫學、法學和管理學等學科的教學[1]。所謂案例教學模式是一種互動式的教學方法,以對案例的分析解決為主線,教學內容圍繞案例的討論、分析逐步展開,通過對案例中的問題進行分析,激發學生的求知欲,調動學生的積極性,使學生主動地思考,掌握其原理和方+9SAgVk0BGUnV//j8yo78PZ3eYDF59kN+/oVnr5bQ2Y=法,教師適時引導和評判,讓學生充分討論并發表各自的見解,最后推導出結論[2]。通過案例教學法在C語言教學中的應用可以實現啟發式教學,更好地激發學生的學習興趣和參與的積極性,同時,有利于學生掌握理論知識,并運用知識解決軟件開發中的實際問題,提高編程水平和能力。
2設計C語言案例是案例教學的基礎
在傳統的C語言的教學方法中,教師通常是先講解語法規則,再舉例說明。而案例教學法則要求先設計案例,然后教師和學生一起分析討論,由案例引出新的知識點,教師再根據案例的情景要求講解新的知識點[1]。因此教學案例是實現案例教學法的前提和基礎,教學案例并不是簡單的舉例,要求案例所涉及的知識點要能涵蓋該課程的絕大部分知識,并且具有目的性、系統性、針對性、可實踐性和啟發性。以下從三方面介紹如何選擇案例進行教學。
2.1選擇小型經典案例,掌握算法思想
程序設計的關鍵是算法設計,C 語言課程的根本目的在于使學生掌握程序設計的基本方法。因此,教師要培養學生以算法為中心的思維方式。很多C語言教材大多注重于語法規則、語句的介紹,缺乏生動、實用的例題。我們知道,興趣是最好的老師,為了使學生能盡快地掌握C語言的語法,進入計算機編程領域,在教學過程中,應當選用具有趣味性、實用性的例題,如“雞兔同籠問題”、“求水仙花數”,吸引學生的興趣,使學生體會到編程的成就感。教學內容的進度安排應當采用循序漸進的方式,圍繞數據類型、運算符、表達式、輸入和輸出函數、常用庫函數、選擇和循環控制語句、數組、函數、指針、結構體、共用體、文件這條主線來開展教學,通過案例來闡述理論和常見算法。在C語言中常見算法有:1)連加與連乘,對于連加/連乘的問題, 常采用循環實現,可用1+2+……100或n!的例子進行說明。2)數的算法,如素數、同構數、水仙花數、最大公約數等。3)排序,排序是一維數組很重要的應用之一。常見的有冒泡排序和選擇排序,通過雙重循環分別控制比較的趟數和每趟比較的次數。4)找出一維或二維數組的最大值、最小值及其下標,也是通過循環來實現的。5)與字符串有關的算法,例如:從字符串中刪除某指定的字符;字符串的合并;比較字符串的大小;計算字符串的長度;將字符串中的內容逆置等。通過這些案例,使學生熟練掌握各種常見問題的解題方法和步驟,即掌握編程的核心——算法,增加學習信心、提高學習興趣,并為以后軟件開發奠定基礎。
2.2選擇常見出錯案例,提高上機編程能力
任何一門編程語言的學習,都離不開上機實踐操作,上機實踐是培養程序設計能力和程序調試能力的重要途徑,只有通過大量的編程實踐才能逐步提高編程能力。C語言的教學目標就是使學生掌握C語言的語法,掌握結構化程序設計方法, 能夠編寫、調試和運行規范、可讀性好的C程序[3]。離開了上機調試, 程序設計將成為“紙上談兵”。只有在不斷地改正程序錯誤的過程中才能充分掌握語法知識,領悟算法思想,培養出結構化編程的思維方法。因此,加強上機實踐,提高學生的實踐能力是改善教學效果的主要途徑之一。
然而初學者由于對C語言的語法以及編程的邏輯思維方式還不熟悉,往往檢查不出程序中的錯誤。一個源程序中的錯誤分為語法錯誤、邏輯錯誤、算法錯誤、和運行錯誤。通過編譯可以排除語法錯誤,其他三類錯誤,可以借助C語言的調試工具來查找。為了提高學生調試程序的能力,可以選擇一些上機經常遇到的錯誤案例,讓學生自己調試程序并改正錯誤,然后分析和總結錯誤類型和原因,從而不斷提高學生的算法設計能力。例如:求數組中的最大值及最大值的下標。
main()
{ int a[4],max,i,m;
for(i=0;i<4;i++) scanf(“%d”,&a[i]);
max=a[0];
for(i=1;i<4;i++) if(a[i]>max) {max=a[i]; m=i;}
printf(“%d %d”,max,m);}
這個程序僅當最大值為第一個數運行結果不對,讓學生分析出錯原因,若第一個數就是最大值的話,則if語句的條件從未成立,因此m=i;沒有被執行過。而下標變量m沒有賦初值,系統隨機賦了初值,導致結果錯誤。因此應當在循環外首先給m 賦初值0。再例如:int a=5; printf(“%f”,a);會出現運行時錯誤。因為a是整形變量,但輸出格式說明符%f卻是實型數據,正確的寫法是int a=2; printf(“%d”,a);通過讓學生調試運行這個錯誤案例,分析出錯原因,學生可以總結出: 在輸入/輸出函數中,輸入/輸出參數的個數與類型必須要與格式說明符一致。
通過分析、調試錯誤案例, 有利于學生在問題的切磋、琢磨中明辨是非,加深對知識的理解,從而使學生的程序設計能力螺旋式上升。由此可見,案例教學正是從實踐中的問題出發,啟發和引導學生去積極思考,經過分析討論,最后又重新歸結到問題的解決之上,這種主動獲得知識的方式完全不同于“填鴨式”的被動學習。
2.3選擇綜合性案例,將知識轉化為能力
在教學案例的選擇上還要注重系統性,要能夠體現知識點之間的聯系。例如要處理多個相同類型的變量,就引入了數組的概念,通過計算班上某一門課程10位同學的平均分的程序引入一維數組的知識點, 再用通過實現10位同學3門課程計算每個人的平均成績來引入二維數組的知識點; 若每個學生都有學號、姓名、性別和多門課程的成績,要處理這些類型不相同的數據項,就需要引入結構體,逐漸增加問題的難度,編寫函數,實現成績查詢、成績統計、求平均值、利用結構體鏈表實現學生記錄的添加、刪除、插入、查詢等操作; 學習文件時, 通過將學生的信息保存到磁盤文件中的程序或者從磁盤文件中讀入學生信息進行處理的程序,使學生掌握有關文件打開與關閉、讀寫等函數的使用[4]。通過這樣循序漸進設計教學案例,最終設計出一個簡單的學生信息管理系統程序設計,使學生很容易地掌握案例所涉及的知識點。
在案例教學過程中,通過提出“怎樣才能使程序更完善”的問題,不斷引出新的知識點,激發學習的求知欲和進一步深入學習的興趣。并且通過案例教學,使學生體會到各章知識的連貫性,深刻認識到后續章節的內容是前面章節知識點的深化與擴充,達到學以致用的目的,才能有效地將知識轉變為能力。
3C語言程序設計案例教學法的實施
案例教學法就是根據教學目標,設計有代表性的典型案例,通過學生和教師一起參與案例的分析、討論, 從中找出解決問題的方法和途徑,因此案例教學本質上是研討型教學。在實際教學過程中, 案例教學法的執行步驟大致可以分為以下三個步驟,下面用一個例子來說明案例教學法的實施過程[5]。
3.1精心設計教學案例
為說明數組的用法,設計一個案例:求10位學生的某門課程的平均分,最高分和最低分,供學生討論。
程序一:
main()
{in