詹重詠
【摘 要】 本文探討了C語言教學的特點,研究學生學習面向過程語言的難點所在,給出了化繁為簡的方法,達到了讓學習者能從多方面龜探面向過程語言程序內部奧妙的目的。
【關鍵詞】 面向過程;程序設計;教學方法;可視化
【中圖分類號】 G64.20 【文獻標識碼】 A 【文章編號】 2095-3089(2017)13-00-01
一、引言
C語言作為面向過程語言中的代表,以其自身的突出特點,幾十年來,一直被大多數大學理、工、農科專業列入教學計劃中,同時它也是計算機專業作為學習計算機語言的入門和進一步學習的首選語言。但由于C語言數據類型較多、語法結構較復雜、過程處理抽象,學習者多無計算機語言或編程方面的知識或經驗,從而使得它成為一門教師難教、學生難學的課程。對C語言的教學探討從未停止過。如何搞好此門語言的教學,培養學生的學習興趣,激發學生的學習熱情,掌握面向過程語言的精華,一直是廣大一線教師孜孜探求的內容。關于此方面的討論不絕如縷,但絕大多數文章多從課程設置、教學安排、教學重點(難點)的處理等方面著手[1],或從待解決的事情本身的特征入手,進行初步的研究,如斷點設置等[2]。少有從可視化的角度引導學生認識問題、分析問題、解決問題的文章。本文試以C語言為例,用過程觀察者的角度,就面向過程的計算機語言教學、程序執行過程的可視化問題進行初步的探討。
二、面向過程的計算機語言程序執行過程可視化的概念
近幾年來,可視化的計算機語言之所以倍受人們的青睞,而其最大的特點是學生或程序員在工作過程中的成果是可見的,這樣學生在開發的過程中就能感覺到自己工作的部分成果,看到程序執行時的部分界面,從而提高增強學生的成就感,提高學生的學習興趣。更重要的是以此斷續的界面為出發點,人們就可以通過自己的思維加工,將所有的情景貫穿起來,形成一個整體的、完整的事物。
C語言作為面向過程的語言,用它編寫的程序,一般情況下提供給人們可見的東西只是程序的執行結果。但其結果為何如此?正確與否?多靠學生對程序規定的過程進行分析、推演才能知曉,整個過程枯澀無趣。如何吸引學生、調動學生興趣、加深學生應象呢?常言說“百聞不如一見”。如果能夠像可視化的計算機語言一樣,讓學生親見、親歷程序的執行過程,結果肯定是大不一樣的。但是,過程的親歷必須是在過程運作執行的時候,這樣就只能在程序運行的時候來觀察程序的特征變化情況了。這一點上語言執行過程的可視化與可視化的計算機語言及現在流行的科學計算可視化、數據可視化、信息可視化的概念不完全一致,前者是一個動態的概念,而后者卻是一個靜態的概念;前者展現的是數據本身,面后者展現的卻是抽象數據的圖形式還原或表現。相比面向語言執行過程的可視化與視頻的概念更接近一些,但前者多是指數據的可見,而后者卻是經過圖形化處理的連續場景;前者處理的對角有限,而后者處理的是場景中的所有事物。
三、可視化的對象
總結面向C語言程序執行過程,開發者常關心的對象主要有如下幾種:變量、數組、指針值、過程或函數。
1、變量、數組、指針值
程序中內存變量的值及其地址、用內存變量及其表達式組成的邏輯表達,這些是初學C程序設計語言的學生感受到困惑、作模不定的地方,將其內容展示在學生面前,對分析程序、理解程序大有裨益。
數組是C語言中常用的一種結構形數據,數組名、數組元素的值是多少,在內存中的位置如何,對它的準確掌握十分必要。
指針是C語言程序中最變幻莫測的一個概念[3],其地址、其值及其值的性質或類型是初學者常常關心的東西,對這些內容的展現將有助于掌握指針的實質。
此外程序中的其它結構形數據也是使用或學習它的人關心的內容。
2、過程或函數
函數或過程是對面向過程的計算機語言程序的劃分,劃分的結果是使程序的可讀性增強,復用性增加,程序的難點得以分解,使用好函數是十分重要的。對函數來說,函數名(函數地址)、函數內定義的臨時變量、函數中使用的全局變量、函數的值、函數的退出點等都是學習或使用C語言的人關心的東西,也是可可視化的對象。
四、可視化的方法
針對關心的對象,教師可讓學習者采取如下方法將其可視化。
1、輸出函數法
用輸出函數(如C語言的printf()函數)實現面向過程的計算機語言程序的可視化是一種有效的手段,以下以C語言為例簡述之。
首先在程序的頭部定義變量DEBUG,如define DEBUG;其次定義好條件編譯語句:#ifdef DEBUG 輸出信息程序段 #endif,然后將條件編譯語句插入到程序中適當的地方,最后在語句塊中放置printf()函數及需觀察的對象或對象的地址。
2、用Keil μVision 4.0作學習平臺
目前C語言的學習多是以Turbo C 4.0或Visual C++作為常用平臺,這種平臺的使用簡單,初學者容易掌握,但不足之處是沒有變量窗口,學習或開發者在使用過程中觀察不到關注對象的變化。而Keil μVision平臺卻可以部分解決此類問題。具體方法是將C程序中的關注的對象的值或地址賦給某變量,而將此變量指定為一個寄存器。這樣就可以在Keil μVision 4.0平臺的寄存器窗口上觀察此變量了。
若要觀察程序編譯后的運行碼,在內存中存放的情況,可選取菜單View→Memory windows→Memory1,或按右下方的Memory1,然后點擊Addresss欄內輸入0x800或0800h,則可在Memory1窗口查看[4]。
3、巧用Microsoft Office Excel
微軟公司的辦公自動化軟件Excel是一項功能強大的實用軟件,其工作簿上的每一個單元格對象恰于一個電子細胞,將其組合在一起時其作用為可限量。利用Excel,將其列的單元格(或行的單元格)用作變量,設置好變量的步長,拖動相應區域,完成計算工作(模擬程序),在對應的單元格中即可觀察到變量等運行的結果,亦即可以實現單迭代程序的可視化。
計算機語言與其它課程相比,邏輯思維較強,因此比較枯燥。要教好計算機語言,關鍵在于激發學生的學習興趣,將準備學生感興趣的教學素材包括程序作為備課的一個重要內容是激發學生學習興趣的重要環節,在教學過程中要堅持學生為主體、教師為主導的教學原則,充分利用各種不同的教學法和上機課,強化實踐,提高學生的思維和實踐能力,培養學生的興趣,讓學生主動、愉快地學習,才能取得良好的教學效果。
五、結語
上述討論的可視化對象,只是C程序設計和C語言教學中的部分內容,所提供的可視化方法也只是引玉之磚。在課程教學過程中,只有通過不斷的分析、探索和研究才能找出更好的解決方案。
參考文獻:
[1] 章英. 高等農業院校《C語言語言程序設計》教學探討[J]. 電腦知識與技術. 2008.5 910~912.
[2] 程霄, 張麗芬. “程序設計實習”課程教學研究與探索[J]. 教育與職業, 2008.5.中 102~103.
[3] 張敏霞. 程序設計語言教學方法改革的探索與實踐[J]. 中國高教研究, 2004.2.
[4] 丁向榮, 陳崇輝, 姚永平. 單片機原理與應用[M].北京:清華大學出版社,2015.8