張 穎
(莆田學院信息工程學院,福建 莆田 351100)
C語言程序設計是高校計算機專業的專業基礎課,很多非計算機專業也有開設,是學生學習計算機程序設計的一門重要基礎課程,通過學習C語言程序設計,使學生能夠熟練掌握C語言的基本知識和程序設計方法,進而靈活運用C語言進行程序設計,并通過上機操作來完成源程序的錄入、編譯、運行,培養學生具有較高的計算機編程技巧、較強的思維方法和解決問題的能力,為以后的學習奠定一個良好的基礎。
程序設計是一門需要進行大量編程實踐的課程,C語言程序設計傳統的教學方式是教師把重點放在了語法規則的敘述上,但由于這些知識點“太抽象”“名詞太多”“內容太多”“很復雜”等原因,導致學生失去學習興趣,整體學習情況并不理想,同時傳統的授課方式都是教師在授課后布置上機實驗,這些實驗都是為解決某個小問題而進行的編程,各個實驗之間也沒有任何聯系,學生只是單純的完成實驗作業,并沒有系統的做出一個完整的軟件或者解決一個大型的綜合性問題,以至于到學期末學生也沒有感覺到通過這門課程學到了哪些對自己有用的知識,只是單純地去參加考試,學生的綜合能力也沒有得到更好的鍛煉。因此,要想達到好的學習效果,學生學習興趣的培養和學生綜合能力的鍛煉是教師在教學過程當中需要不斷探尋的。
案例式教學就是一個能激發學生學習興趣和提高學生綜合能力的很好方法,它將各種小問題綜合到一起形成一個大型的實際問題并在開學初就引入課堂中,引導學生要解決這個問題需要學習哪些理論知識,再把這個復雜的綜合性問題拆分成一個個小問題小模塊,讓學生通過學習理論知識,通過編程逐個解決各個小模塊,直到期末時把整個大問題全部解決,學生平時的完成情況和最終的作品可作為平時成績計入期末總評成績中,這樣不但提高了學生的學習興趣和積極性,還提升了學生運用理論知識分析解決實際問題的能力。
為了提高學生解決綜合性問題的能力,擺脫應試教育,故把各種相關零散的小問題綜合到一起,形成一個大的綜合性的問題,授課教師在學期初就把這個綜合性問題布置下去,并要求學生編出解決這個問題的軟件,學生每學完一個章節,就利用所學的知識解決這個綜合性問題里面的相關小模塊,這樣這個作品從學期初一直陪伴到學期末,學生也會對自己的作品產生感情,也會更有熱情更迫切的學習下去以便最終完成這個軟件。那么這個綜合型的案例如何選取就變得非常重要,將直接影響整個學期的教學效果。
案例要緊密貼合教學內容和學生的培養目標:首先要明確每一章節的教學目的和教學重點,把需要學生掌握的知識點進行提煉,然后根據這些知識點設計出生動有趣并貼近生活的問題,使學生對問題產生興趣,并能主動地想去解決這些問題。
學期初先將學生每2~3人分成一個小組,要求每小組用C語言編程制作一個軟件。要求各小組學生根據題目的基本要求,畫出流程圖,編寫程序,并寫好程序設計說明書。學生應將所設計的程序進行上機調試,并將調試結果(是否通過,哪些問題尚未解決等)在設計說明書給予說明,源程序以書面形式提交。
每小組也可擴展軟件功能,若三人的小組需要擴展至少五項以上,并在設計說明書中標注出各小組成員負責的模塊,某些模塊也可兩人協力完成。學生在學期初先將軟件的封面、登錄界面和主菜單界面做出來,然后隨著所學知識的增加逐漸完善各功能模塊。
通過傳統的課堂教學發現,學生如果課前預習課堂效果會完全不同,因此要求學生課前預習,這樣講課時就以學生預習過為起點,只講難點、重點、有變化之處,這樣既給了學生思維分析的余地,又能使學生更易掌握新知識,所以教師必須精選教學內容,注意詳略安排合理,在每次課程結束后把下次課要預習的知識點布置下去。
在案例式教學中,教師應把重點放在算法和程序設計方法上,通常由案例或例題引出一種語法規則,根據實例分析算法,介紹程序設計的基本思路和技巧,不要求學生死記語法規則,而是要求學生能把規則運用到編程中,編出一個好的程序,培養學生良好的編程風格,讓學生在編程中不斷總結、鞏固,達到學會算法、記住語法規則,提高程序閱讀和設計的目的。
在章節間的授課安排上應注意詳略得當,如“順序結構”就應略一點,而“選擇分支結構”“循環結構”這些關鍵性章節就應詳細一點,并能做到精講;使學生做到非常熟練、透徹掌握的程度,為后面“數組”“函數”等章節的講解也作了良好的鋪墊。課上經常找一些解題思路比較精、技巧比較好的例題讓學生寫出運行結果,讓學生自己“讀程序”,找出程序中精彩之處或不理解之處,對于普遍性問題共同講解,個別問題課后解答。
在案例教學后半階段則采取分組教學,每3~4個小組形成一個大組進行互評和討論,對于這個案例中的每個功能模塊,是否有創新出不同的編程法,然后講解分組中有代表性的程序,讓學生來評論哪種程序更簡單,效率更高。從而讓學生明白如何分析并解決實際問題,逐漸培養學生進行程序設計的正確思維方式。
通過一段時間的學習,發現有少部分同學具有“天賦”的優勢,他們總比其他同學學得快、領悟力高,理解能力強。因此在教學中,特別是在上機實踐環節,對有“天賦”的同學可區別對待,額外布置學習任務、用不同的方法解題等,經過一段時間的重點培養,這些同學在程序設計和上機調試程序方面都比一般同學優秀,在后期分組時,讓這些優秀的同學當組長帶動小組其他成員來完成任務,平時的學習和上機中也可為其他同學提供一些幫助。
下面就是精煉出來的案例實例:中小學生電子助手軟件的設計。設計一個為中小學生用戶提供數學方面幫助的軟件。整體的功能及流程如圖1所示。

圖1 系統流程圖
整個案例設計要求應有軟件封面、用戶登錄(密碼驗證)、主菜單、功能化模塊、操作幫助等。封面上應標明該軟件名稱、版本號、編程者院系、班級、姓名、完成日期,可參考圖2所示。

圖2 軟件封面圖
用戶輸入密碼,如果密碼輸入錯誤則要求用戶重新輸入,直到密碼正確為止。如果密碼驗證成功則進入歡迎及主菜單界面,可參考圖3所示,兩人以上小組需要再提供五項以上功能。用戶根據自己的需要選擇輸入功能前的序號,完成此功能后能回到主菜單界面繼續選擇其他功能菜單,直到退出為止。

圖3 菜單界面
整個程序設計應按模塊化設計的要求,分模塊設計和調試,再完成整個系統的調試。各個模塊中所有要求用戶輸入處都應有適當的人機對話。每一模塊運行結束都應回到主菜單,正常情況下只能從主菜單中退出,并且正常退出后應有適當的告別辭。
各模塊功能的詳細要求如下:
(1)九九乘法表模塊要求在屏幕上以三角形的形式輸出九九乘法表。
(2)計算器模塊要求用戶輸入運算數和四則運算符后輸出運算結果。
(3)一元二次方程求根模塊要求用戶通過此模塊輸入a、b、c后可求解ax+bx+c=0的完全解。
(4)求三角形周長和面積模塊要求用戶通過此模塊輸入三角形三條邊后可求出此三角形的周長和面積。
(5)質數判斷模塊要求用戶通過此模塊輸入一個整數后能判斷出這個數是否為質數。
(6)求最大公約數和最小公倍數模塊要求用戶通過此模塊輸入兩個整數后能求出這兩個整數的最大公約數和最小公倍數。
(7)整數的階乘模塊要求用戶通過此模塊輸入一個整數后能求出這個數的階乘。
(8)數值排序模塊要求用戶通過此模塊輸入若干實數后對這些實數升序排序。
(9)求轉置矩陣模塊要求用戶通過此模塊輸入一個矩陣后對這個矩陣進行轉置輸出。
(10)通信錄模塊要求用戶可通過此模塊添加聯系人信息、顯示全部聯系人,用戶還可以根據姓名查找、刪除聯系人等。
(11)小游戲模塊要求編寫至少一個小游戲,比如石頭剪刀布、貪吃蛇、五子棋等。
(12)退出模塊要求選擇退出序號后關閉軟件。
整個軟件完成后,要書寫軟件設計說明書,要求內容完整、條理清楚、算法清晰、文字通順,字體工整,源程序的書寫格式應符合規范。用打印機打印,紙張規格為A4紙,標明頁次,裝訂成冊。
案例式教學是培養學生綜合運用所學知識,發現、提出、分析和解決實際問題,鍛煉實踐能力的重要方法,是對學生實際工作能力的具體訓練和考察過程。通過貫穿學期始終的案例教學,不僅使學生鞏固了已學的知識,而且調動了學生繼續學習新知識的積極性,同時學生還學到了很多在書本上學不到的知識。考試通過率也有很大提高。另外,案例式教學把理論與實踐相結合,以理論為基礎在實踐中得出結論,這樣學生才能真正為社會服務,從而提高學生實際動手能力和獨立思考的能力。