李偉光+張勇

【摘要】目前C語言的教學多數都是按照教材章節來進行授課,講解對應的知識點,缺少對C語言整體結構的講解,也缺少對結構化程序設計思維的培養。基于全程案例教學可以有效地解決這一問題,在一個學期講解一個完整的案例,如學生成績管理系統,讓學生自主分析一個相對完整的案例,然后分組實現整個系統的設計工作。這樣可以比較充分地培養學生分析問題和設計程序的能力,同時培養學生的結構化程序設計思維。
【關鍵字】案例教學 C語言程序設計 課程改革
【中圖分類號】TP311.1-4;G642.0
程序設計方法大體上分成兩種:一種是結構化程序設計,一種是面向對象程序設計。結構化程序設計思想的原則是:自頂向下,逐步求精,模塊化。絕大多數高校對學生進行結構化程序設計思維培養都是通過“C語言程序設計”課程進行的,但是多數課堂在進行“C語言程序設計”課程時都是按照教材的章節進行講解[1][2],對C語言缺少一個整體的設計,并且實例之間都是離散的,沒有關聯,這樣對于學生形成結構化程序設計思維造成了很大的困難。學生在學習“C語言”之后,往往知道其中的一些概念,如數組、結構體、指針、函數等等,會使用的就會減少一部分,而對“C語言”能夠有一個整體的理解,對結構化程序設計思維有深入了解的,能夠獨立編程[3]的就少之又少。
為了培養學生的“結構化程序設計思維”,讓學生對“C語言”有一個整體的掌握,并且能夠熟練使用“C語言”進行程序設計,我們采用“全程案例式”教學方式進行C語言程序設計課程改革。
所謂“全程案例式”C語言程序設計教學是指在C語言的教學過程中從頭到尾選用一個典型案例,如“學生成績管理系統”,仿照教務管理平臺對學生成績進行管理。這樣的案例學生非常了解,能夠對其中的角色功能有明確的認知,這樣就很容易分析清楚整個系統的功能模塊構成,在此基礎上對各個功能模塊和數據類型進行設計,從而培養學生的結構化程序設計思維。
一、問題分析
教學人員對教務管理平臺都不陌生,在分析問題的時候可以讓學生自己設定學生成績管理系統的角色和功能,然后實現。一般情況下,學生成績管理系統可以分成三種角色,一是管理員,主要負責訪問成績管理平臺成員數據的增、刪、改、查等操作,二是教師,主要負責學生成績的錄入、修改、查看等操作,三是學生,可以查看自己的成績信息。同時三種成員都可以修改自己登陸平臺的密碼,功能模塊劃分如圖1所示。通過對系統功能模塊的劃分,可以讓學生理解結構化程序設計“自頂向下,逐步求精,模塊化”的程序設計思想,并在此基礎上,開發對應的功能函數。
二、學生分組
將學生分組,如25名同學分成5組,每組5人,有一位組長。每組分別獨立完成以上教務管理平臺中對應的功能模塊,可以根據本組的討論有所增刪。這樣每位同學平均完成兩個功能模塊,從而保證在課堂教學時間能夠完成該項目。組長負責整個案例的任務分配,同時解決小組成員實施時遇到的技術問題,當然組成的最后成績也會較高。
三、教學內容
仿照工程化的思路,如設計一個產品,需要有工人、原材料、工人。工人使用工具按一定的步驟加工原材料得到一個一個的零件,再將這些零件有機地組裝起來就會形成一個產品。C語言的教學內容也可以按照以上思路進行分解,首先要有人,即程序員也就是學生;原材料是C語言的數據類型,包括基本類型(整型、實型、字符型、枚舉型)、構造類型(數組、結構體、共用體)、指針類型和空類型;工具是運算符,用來操作某種類型的數據;操作步驟包括順序結構、選擇結構和循環結構;程序員使用工具按照一定的步驟加工原材料就能夠得到一個零件,即函數;再將這些函數按圖1進行組裝就能夠形成最后的學生成績管理系統的源文件,同時能夠對存儲在外部文件中的人員數據等信息進行訪問。[4]
將C語言的教學內容按照內在邏輯分成五大部分,學生容易理解并掌握。
四、教學方式
在教學上,采用“全程案例教學”,第一節課就開始寫代碼。開發工具可以使用C-Free、Dev-C++、Visual C++等,讓學生理解C語言、C++語言和開發工具的區別。
根據問題的需要,首先要設計一個“學生成績管理系統”的歡迎界面,通過該界面的設計講解順序結構,尤其是輸出語句的使用。接下來應該是用戶權限選擇,如“1、管理員 2、教師 3、學生”,這就要用到選擇結構,講解if語句和switch語句。此時要在選擇語句中使用一些數據類型,因此可以在此處講解基本數據類型(字符型、整型、實型、枚舉型)。在用戶進行選擇時要進行選擇數據的輸入,此時講解輸入語句。此時的程序只能進行一次用戶的選擇,如果想再次選擇則需要重新執行程序,在此處可以進行循環結構的講解,可以多次選擇用戶,直到用戶自己退出程序為止。在循環結構中要用到相關的表達式,可以在此處進行表達式的講解。當然,也可以先講解基本數據類型和表達式,之后再進行順序結構、選擇結構、循環結構的設計。
在選擇了相應的用戶權限之后,就要執行對應的用戶功能,如管理員功能、教師功能、學生功能等。此時給學生講解程序設計中的模塊,即函數,讓學生深刻理解模塊的概念及實現方式。在進入到相應的函數之后,如學生函數,此時應該確認學生的身份是否合法,通過鍵入如學號和密碼來驗證該學生是否合法,如合法則可以查詢成績,如不合法則重新登陸或退出。而學生的信息適合使用結構體類型數據來存儲,很多學生信息則需要用結構體數組來存儲,在此處給學生講解構造數據類型(結構體、共用體、數組),通過學生結構體數組來模擬數據庫表,在此處給學生講解相關的數據庫知識。學生功能包括成績查詢和修改密碼兩部分,所以要寫兩個相關的子函數,此處深入講解函數的相關知識,如函數的調用、參數傳遞等。這部分是學生成績管理系統的核心功能,工作量較大。
在完成相關數據的存儲之后,發現關機之后數據就沒有了,通過回顧內存與外存的區別,所以要把數據庫存儲在外存儲器上,這就要用到文件。建立若干個文件用來存儲管理員、教師和不同班級學生的記錄(可用二維數組或多維數組來區別系或班級等),通過對文件的讀寫來實現對數據庫數據的存取,基本達到學生成績管理系統的使用目標。
在這個過程中,除了必要的知識介紹外,重在培養學生的結構化程序設計思維,理解C語言的幾大組成部分并熟練使用,同時養成設計代碼的規范性。
五、考核方式
全程采用案例教學就不適合出試卷進行考核,因此在考核方式上更適合過程化考核[5]。我們將考核內容分成兩個部分,平時考核占60%(出勤占20%,平時訓練占80%),最終考核占40%(小組考核占50%,個人考核占50%)。這樣可以弱化對知識點的考查,重在考查學生對程序的分析與設計的能力。
六、實踐教學
在實踐教學環節(課程設計[6])可以安排類似的管理系統供學生分析和設計,此時每組要求選擇不同的系統進行設計,每組獨立設計系統功能框圖、分工并實現,從而鞏固并強化課堂所學的內容。
七、第二課堂
第二課堂可以參加相關的學科競賽,如“ACM大學生程序設計競賽”、“藍橋杯全國軟件和信息技術專業人才大賽”等學科競賽,從而開闊學生的視野,加強學生的實際編程能力。當然,如果想參加相關的學科競賽,還需要有一定的數據結構知識和算法知識,這需要對學生進行相關的培訓或由學生自學完成。這對于學生是一次很好的升華,學生獲得的相關學科競賽讀書對于將來的就業是一個很好的準備。
綜上,通過一個典型案例將C語言程序設計課程內容有機地組織起來,將C語言教學內容分成五大部分,使學生容易理解并形成一個較強的印象。在實驗室教學,人手一機,邊講邊練,重在培養學生分析問題和設計程序的能力,培養學生的結構化程序設計思維。
參考文獻
[1]蒲海波 興趣驅動的案例教學在C語言教學中的應用[J]計算機光盤軟件與應用 2013年第7期:192-193
[2]丁海燕 高級語言程序設計案例教學模式的探討[J]計算機教育2011年第8期: 65-68
[3]吳美紅 基于CDIO模式的案例教學在C語言程序設計中的應用[J]電腦知識與技術 2013年第11期:2632-2633
[4]李偉光 提高C語言實際應用能力的研究與實踐[J]煤炭技術2012年11期:242-243
[5]薛小鋒 案例教學在非計算機專業C語言程序設計教學中的應用[J]江蘇技術師范學院學報2010年第4期:80-82
[6]張波 模塊化案例教學在C語言程序設計課程中的應用[J]計算機教育 2009年第21期:62-65
【作者簡介】:李偉光(1979年7月),男,碩士研究生,副教授,長春光華學院計算機科學與技術系主任,研究方向模式識別,
張勇(1974年8月),女,博士,教授,長春光華學院電氣信息學院院長,研究方向模式識別。