石光華
如何解決工程環(huán)境下的結構化編程問題,是高職計算機類專業(yè)“面向結構程序設計”課程改革的基本任務。四年來,作者一直在教學第一線進行課程改革,深刻認識到高職教材在指導思想、教學內容、實訓設計等諸多方面必須進行大膽的改革與創(chuàng)新。本文具體論述了教材改革創(chuàng)新的思路與實踐。
創(chuàng)新的指導思想
高職計算機專業(yè)學制短,技能要求高,而大部分學生的抽象思維能力較差,要達到“因材施教,提高技能”的目標,《面向結構程序設計》教材必須在如何裁剪知識點,構建結構化編程的工程應用框架方面進行創(chuàng)新。經過四年的探索,我們確立了與傳統(tǒng)的《C語言程序設計》完全不同的定位,明確了高職教材的“四個特點”:
(1)高職的C語言不是“C語言語法大全”
傳統(tǒng)的C語言教材把C語言本身當成研究的對象,總是試圖面面俱到地講解C語言的方方面面,不適合高職使用。我們本著一切以工程實用為原則,圍繞構建結構化編程的工程應用程序框架的目標,通過建立函數(shù)框架、主程序框架到應用程序框架,以案例驅動的方式,具體講解了工程應用程序的編寫過程。
(2)高職的C語言不是“數(shù)據(jù)結構基礎”
傳統(tǒng)的C語言教材,把C語言的學習和“數(shù)據(jù)結構”的內容結合起來,這樣的結果是把C語言的學習引向解決抽象的數(shù)據(jù)結構問題,對高職的學生來說,老師教得辛苦,學生學得痛苦,因此,我們去掉了排序、鏈表等比較抽象算法的講解,增加了使用“狀態(tài)變量”控制程序功能、用戶身份識別、動態(tài)數(shù)組使用、文件讀寫錯誤處理等實用內容。
(3)高職的C語言不是“程序設計基礎”
傳統(tǒng)的C語言教材承擔了講解“程序設計基礎”的任務,這樣的結果是沒有時間講解C語言中比較深入的技能。因此直接從建立函數(shù)框架開講,強化用函數(shù)實現(xiàn)結構化編程的方法,可以讓學生學到工程應用的技能。
(4)工程化的編寫風格
對全書所有的案例和例題必須進行通盤的考慮,在循環(huán)、數(shù)組、指針、函數(shù)和結構化設計等單元,所有的例子都有前后的聯(lián)系,強調內容的前后銜接,特別注意工程規(guī)范的引入,在變量的命名、程序格式方面,均按工程要求進行。
適用的技能與內容
根據(jù)在企業(yè)工作的實際經驗,把要求學生掌握的C語言的基本技能,歸納為“八個掌握”:掌握C語言程序的基本結構;掌握編寫并使用自定義函數(shù)的方法,能夠使用系統(tǒng)函數(shù);掌握一維數(shù)組在字符處理中的應用;掌握對一維、二維數(shù)組進行遍歷的方法;掌握使用指針進行一維數(shù)組遍歷的方法;掌握使用動態(tài)結構數(shù)組的方法;掌握使用文件保存數(shù)組數(shù)據(jù)的方法;掌握主程序中使用函數(shù)建立功能模塊的方法,能用流程圖描述簡單問題的算法,能夠根據(jù)流程圖和算法,編制出相應的C語言程序。
“八個掌握”構建了學生使用C語言的基本技能,這些技能不是孤立的講解,而是貫徹到案例設計的“三結構”、“四循環(huán)”中。
“三結構”是指學生要學習三個成績管理軟件的編程,分別是基于一維數(shù)組、二維數(shù)組和動態(tài)結構數(shù)組。選擇數(shù)組作為基本的數(shù)據(jù)結構,一方面是貼近學生的認知水平,二是可以保持適當?shù)倪B貫性。
“四循環(huán)”是指編寫基于“三結構”的每一個成績管理軟件過程中,教材中提供四個以上的程序版本,引導學生改寫、增加函數(shù),并采用工具軟件Beyond Compare,比較不同的程序版本之間的差異,讓學生直觀地看到軟件的功能是如何一步一步構建起來的。通過不斷反復的比較,學生就可以掌握結構化程序設計的過程和方法。
為了幫助學生掌握C程序的基本結構,在教材中還提出了兩個創(chuàng)新:
(1)通過定義預處理區(qū)、變量聲明區(qū)、執(zhí)行語句區(qū)“三大區(qū)域”為特色的C程序的基本框架,讓學生樹立正確的程序格式與規(guī)范。
我們提出把一個基本的C程序從上到下分成三個區(qū)域。預處理區(qū)域:用于書寫程序相關的預處理文件;變量聲明區(qū)域:用于書寫變量的聲明;執(zhí)行語句區(qū)域:用于書寫執(zhí)行語句。
這三個區(qū)域的順序不能交換,只能是按規(guī)定的順序書寫,而程序也是按這個順序執(zhí)行。
“三大區(qū)域”概念的提出,明確規(guī)定了程序的基本框架,讓學生從一開始就按固定的格式進行編程,養(yǎng)成良好的編程習慣。
【例1】程序的基本框架,如圖1所示。
通過在變量聲明區(qū)域定義要用的變量,在執(zhí)行語句區(qū)域書寫計算方法,程序就可以完成不同的功能,程序的基本結構并沒有變化。事實上,我們要求學生以后寫程序,都要在這個基本框架上進行改寫。
(2)提出了使用函數(shù)的“三大步九要素”的基本方法,讓學生掌握函數(shù)完整清晰的概念。
結構化程序設計的核心是函數(shù)的使用,正確使用函數(shù),特別是使用自定義函數(shù)涉及的知識要點很多,在C語言中函數(shù)的書寫又很靈活,這種靈活性對初學者來說并不是好事,往往讓人找不到規(guī)律。我們提出的使用函數(shù)的“三大步九要素”的基本方法,在教學中取得了很好的效果。
【例2】程序使用函數(shù)的基本框架,如圖2所示。
所謂“三大步”,是指我們在使用自定義的函數(shù)時,應該按【例2】所示的框架,對函數(shù)進行聲明、定義和調用。三大步的順序不要搞錯。
所謂“九要素”,是指函數(shù)聲明的三要素:返回值的類型、函數(shù)的名字、參數(shù)的類型和參數(shù)的個數(shù)。函數(shù)定義的三要素:參數(shù)、功能、返回值。函數(shù)調用的三要素:名字、參數(shù)、返回值。通過對“九要素”的理解掌握,學生能夠建立起使用函數(shù)的清晰框架。
在案例選擇上,全部采用工程實際和實際生活中的案例。例如,選擇執(zhí)行語句,在講解了條件的表達方式后,我們只講三種情況的處理:1)單項選擇語句 if (條件)語句;2) 雙項選擇語句if (條件)-else語句; 3) 多項選擇語句switch-case語句。講解條件的表達時,則強調把生活中的要求轉化為程序中的語句,不再是傳統(tǒng)的 if(a > b)。
例如:如果晚上6點(包括6點)以后或者氣溫低于18度,我就加衣服。
如果我們用time來表示時間,用temperature來表示氣溫,那我們可以這樣來寫:
if((time >= 18)||( temperature < 18))printf(“adding dresses!”);
經過這樣的訓練,引導學生用程序來表述和解決生活中的問題。在教材的編寫中,始終抓住這一點:以教育心理學中的聯(lián)結學習理論為指導思想,采用不斷改寫程序的辦法,總是從實際問題入手,通過提出問題、討論解決方法、實際動手解決、分析不同的解決方案來總結提高,各個環(huán)節(jié)環(huán)環(huán)相扣,通過反復練習與強化,讓學生在舊知的基礎上探索新知,在新知的不斷探索中獲得學習的快樂。
工程化的實訓設計
結構化程序設計的教學中,如何讓學生建立起結構化程序的框架,理解主函數(shù)和功能函數(shù)的不同作用是很困難的。一個簡單的成績管理軟件,代碼就超過300行。對初學者來說,看懂超過100行的程序就需要很長時間,又如何在短短的課堂時間里,讓學生通過增加/改寫函數(shù)來增加功能?這也就是很多學生學完了C語言程序設計,依然不能編寫一個簡單的應用程序的主要原因。
我們按照案例設計的“三結構”、“四循環(huán)”原則,設計了12個實訓項目,每個項目發(fā)布一個程序版本,并在教材附送的光盤里,提供了全部程序的電子版本和相應的工具軟件Beyond Compare,學生可以方便地比較不同的程序版本之間的差異,直觀地看到軟件的功能是如何一步一步構建起來的。程序的第一個版本,就是一個主函數(shù),不超過10行,只顯示程序的幾項功能菜單,學生很容易理解。然后通過發(fā)布第二個、第三個版本,每一個版本實現(xiàn)或改進一個菜單的功能,直到最后版本。
對高職學生的技能培養(yǎng),實訓是很重要的環(huán)節(jié)。我們采用了項目驅動的思想來設計實訓項目,每一單元的實訓,都是構成最終程序的不同版本,在教材中共發(fā)布程序版本12個,構成了實用的軟件框架。學生相當于參與了一個中等復雜程度的軟件開發(fā),積累了經驗。在今后的實際工作中,完全可以以此為模板,進行結構化程序的開發(fā)。
在《C語言程序案例教程》的課程設計中,學生對主函數(shù)與模塊函數(shù)的理解更加深入,可以看懂超過300行的C語言源程序,理解基于動態(tài)結構數(shù)組的成績管理系統(tǒng),掌握主函數(shù)的設計方法,并按照工程規(guī)范的格式寫出自己的函數(shù)。回想在三年前沒有進行改革的時候,只要是超過10行的程序,學生就普遍反映看不懂,學生編程能力的提高十分明顯。