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