前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的c程序設(shè)計(jì)主題范文,僅供參考,歡迎閱讀并收藏。
原型開發(fā)是C語言程序設(shè)計(jì)學(xué)習(xí)支持系統(tǒng)的使用的主要理論基礎(chǔ),在開發(fā)該系統(tǒng)的初始階段,首先要有針對性的對使用的需要進(jìn)行調(diào)查,以此為依據(jù)迅速的將一個系統(tǒng)原型制造出來并進(jìn)行正常的運(yùn)轉(zhuǎn)。使用者運(yùn)用這個原型之后,提供使用建議,接下來就是對該原型進(jìn)行有效的修補(bǔ)和完善,以新的結(jié)構(gòu)、數(shù)據(jù)和使用模型來建立起一個嶄新的原型。之后再交由使用者進(jìn)行使用并反饋意見,經(jīng)過幾次的使用和反饋、修改,使用者與系統(tǒng)提供者能夠在使用上達(dá)到共識,使用過程中的種種誤會得以解除,使系統(tǒng)得到精準(zhǔn)的內(nèi)涵,同時能夠到達(dá)使用者的滿意。經(jīng)過這一系列的反饋與修改,系統(tǒng)如果能夠達(dá)到使用者的要求,就可以被定義為實(shí)際生產(chǎn)運(yùn)行系統(tǒng),如果達(dá)不到使用者的要求,則就會被舍棄進(jìn)行重新開發(fā)。
2C語言程序設(shè)計(jì)學(xué)習(xí)支持系統(tǒng)的開發(fā)步驟
在對C語言程序設(shè)計(jì)學(xué)習(xí)支持系統(tǒng)進(jìn)行開發(fā)的過程中,要嚴(yán)密結(jié)合《C語言程序設(shè)計(jì)》這門課程本身的獨(dú)特之處,并將該系統(tǒng)的開發(fā)思想融入其中,實(shí)現(xiàn)以下五個開發(fā)步驟:
2.1開發(fā)前分析
在進(jìn)行系統(tǒng)開發(fā)之前,一定要結(jié)合實(shí)際情況做好各方面的調(diào)研,這是系統(tǒng)開發(fā)的必經(jīng)之路,也是基礎(chǔ)所在。首先進(jìn)行開發(fā)前調(diào)研,能夠使有疑問的地方展現(xiàn)出來,才能給設(shè)計(jì)者提供一個確實(shí)可行的主題來開發(fā)此系統(tǒng)。
2.2開發(fā)前設(shè)計(jì)
經(jīng)過了開發(fā)前有效的分析和主題的確立,將使用者在使用過程中的需求通過調(diào)查了解清楚,將該系統(tǒng)的具體模塊加以確立,將原型設(shè)計(jì)出來,同時數(shù)據(jù)庫的基本情況也要得到有效的設(shè)計(jì)。
2.3C語言程序編程思路和語料分析
一個科學(xué)的推理路徑的確立需要有效分析C語言程序編程思路和語料,同時要仔細(xì)分析復(fù)雜程序中存在的編程思路。
2.4系統(tǒng)的開發(fā)
在開發(fā)系統(tǒng)的過程中,代碼的編寫、信息庫的開發(fā)、先進(jìn)的技術(shù)的采用一系列程序后,才能使該系統(tǒng)的功能得以實(shí)現(xiàn)。
2.5試用與修改
將開發(fā)出來的系統(tǒng)交給使用者進(jìn)行試用,使用者在使用過程中會發(fā)現(xiàn)各種各樣的不足,及時根據(jù)使用者的意見進(jìn)行溝通和修改,最終形成一個完善的系統(tǒng)。
3C語言程序設(shè)計(jì)學(xué)習(xí)支持系統(tǒng)的功能結(jié)構(gòu)
3.1學(xué)習(xí)支持模塊
在計(jì)算機(jī)的使用過程中,使用者很多時候會遇到種種困難,例如在對編程或程序進(jìn)行調(diào)試的過程中遇到的難題,自己無法解決時,學(xué)習(xí)支持模塊就能夠及時幫助使用者將問題進(jìn)行指示并提供幫助。編程思路分析指導(dǎo)和程序調(diào)試指導(dǎo)是學(xué)習(xí)支持模塊的兩大組成部分。
3.1.1編譯診斷
使用者在使用計(jì)算機(jī)的過程中,正確的程序無法得到有效的調(diào)試的情況下,編譯診斷就能夠充分發(fā)揮自身作用,為使用者給予及時的幫助,使其了解發(fā)生錯誤的根本原因。它包括了上傳程序和診斷問題兩大部分。該系統(tǒng)是在使用者無法進(jìn)行正確的編譯C語言源程序時啟用。使用者在啟用該系統(tǒng)是首先要將參數(shù)輸入進(jìn)去,此時數(shù)據(jù)庫就能夠通過系統(tǒng)的查找提供錯誤的起因及解決方法,系統(tǒng)會逐步為使用者進(jìn)行提示,再通過使用者輸入的問題作出判斷并給出解決方案。此時問題如果沒有得到解決,則說明不完善的數(shù)據(jù)庫存在于該系統(tǒng)中。
3.1.2編程思路分析
計(jì)算機(jī)使用者在進(jìn)行上機(jī)編程的過程中,該系統(tǒng)能夠使思路不清晰的復(fù)雜程序編程進(jìn)行分析,根據(jù)相近的程序編程思路給使用者提供指示。它能夠滿足使用者的即時需求。
3.2信息庫管理模塊
3.2.1用戶信息庫管理
使用者的使用權(quán)限、基本信息和上傳程序信息等的管理都是由該模塊來進(jìn)行的。在使用計(jì)算機(jī)的過程中首先信息庫要將使用者的基本信息收入其中,使用者在每次登陸的過程中只有將基本信息輸入進(jìn)去,通過系統(tǒng)的檢查之后才能夠進(jìn)行使用。
3.2.2出錯知識信息庫管理
針對這一部分的管理,發(fā)生問題的知識信息,其中包括診斷、設(shè)問和編譯錯信息,C語言使用者可以采取管理維護(hù)措施。完善、刪除和添加等操作可以對出錯知識庫加以填充和完善。
3.2.3編程思路分析信息庫管理
C語言使用者可以針對這一部分采取維護(hù)管理,即維護(hù)管理復(fù)雜程序的編程思路分析信息,主要可以采取的手段有更改、刪除和添加等操作,不斷填充和完善此信息庫。
4結(jié)論
(中國礦業(yè)大學(xué)(北京) 機(jī)電與信息工程學(xué)院,北京 100083)
摘要:分析C語言教學(xué)中存在的普遍問題,從教學(xué)內(nèi)容組織形式、教學(xué)方法以及考核方式等方面提出一系列有針對性的教學(xué)方法,指出這種教學(xué)方法能有效地提高學(xué)生的學(xué)習(xí)效率和質(zhì)量。
關(guān)鍵詞 :C語言程序設(shè)計(jì);公共基礎(chǔ)課;教學(xué)方法
基金項(xiàng)目:北京高等學(xué)校青年英才計(jì)劃項(xiàng)目;煤炭資源與安全開采國家重點(diǎn)實(shí)驗(yàn)室開放課題(SKLCRSM11KFB12)。
作者簡介:王振武,男,副教授,研究方向?yàn)閿?shù)據(jù)挖掘、圖形圖像處理,wangzhenwu@126.com。
0 引言
為提高大學(xué)生利用計(jì)算機(jī)解決問題的能力,全國高校普遍為理工科專業(yè)的低年級學(xué)生開設(shè)了C語言程序設(shè)計(jì)這門必修的公共基礎(chǔ)課程。一方面,該課程是學(xué)生接觸的第一門程序設(shè)計(jì)類課程,其編程思維的養(yǎng)成是一個較長的過程;另一方面,該課程具有內(nèi)容繁多、知識點(diǎn)關(guān)聯(lián)性強(qiáng)、算法抽象、實(shí)踐性要求高等特點(diǎn),學(xué)生在學(xué)習(xí)過程中易產(chǎn)生畏難心理,進(jìn)而出現(xiàn)學(xué)習(xí)動力不足、積極性不高等問題。C語言程序設(shè)計(jì)是一門難學(xué)也難教的課程,目前在教學(xué)上普遍存在很多問題。文獻(xiàn)[1-4]對C語言程序設(shè)計(jì)的教學(xué)方法給出了建議,但都不夠系統(tǒng)和全面。
1 C語言程序設(shè)計(jì)教學(xué)方法研究
1.1 理論教學(xué)
對于大多數(shù)課程而言,從宏觀上將課程知識點(diǎn)及其關(guān)聯(lián)講授給學(xué)生非常必要,這便于學(xué)生更加系統(tǒng)深刻地理解所學(xué)內(nèi)容。筆者以文獻(xiàn)[5]作為教材講解C語言程序設(shè)計(jì)的知識點(diǎn)結(jié)構(gòu)。如圖1所示,知識點(diǎn)之間的關(guān)聯(lián)可以層層細(xì)化,教師首先從宏觀上給學(xué)生介紹C語言程序的整體組成結(jié)構(gòu)(如圖1-(a),然后針對圖1-(a)中一個源程序文件的組成成分舉例介紹,如圖1-(b)所示。在圖1-(b)中,教師對涉及的知識點(diǎn)進(jìn)行歸類,共包含預(yù)處理命令、數(shù)據(jù)類型、運(yùn)算符、語句和函數(shù)等5部分,然后圖1-(c)至圖1-(i)依次層層展開上述各類知識點(diǎn)的組成,逐步細(xì)化。
從宏觀上梳理C語言與程序設(shè)計(jì)課程的知識點(diǎn)是非常必要和重要的,這樣可以避免學(xué)生“只見樹木,不見森林”,最后只學(xué)到一堆零散的知識點(diǎn),只有從宏觀上把握各個知識點(diǎn)在知識體系中的位置和作用,才能學(xué)得深、記得牢。
對于程序語言課程,如果僅僅介紹語法的運(yùn)用,學(xué)生往往對知識點(diǎn)理解不深刻。我們在教學(xué)實(shí)踐中的體會是:在講解C語言語法的基礎(chǔ)上,適當(dāng)?shù)仄饰鼍幊陶Z言在計(jì)算機(jī)中的運(yùn)行機(jī)制,會讓學(xué)生的理解更加透徹。因此,我們的課堂教學(xué)方法分為如下兩部分。
1)課件講解。
課件講解包括兩部分,即知識點(diǎn)要點(diǎn)總結(jié)和知識點(diǎn)運(yùn)行機(jī)制剖析。知識點(diǎn)要點(diǎn)總結(jié)就是告訴學(xué)生該知識點(diǎn)如何使用;而知識點(diǎn)運(yùn)行機(jī)制剖析則告訴學(xué)生該程序在計(jì)算機(jī)內(nèi)存中的執(zhí)行過程。由于絕大部分高校在開設(shè)C語言程序設(shè)計(jì)之前都會開設(shè)計(jì)算機(jī)文化基礎(chǔ)等課程,因此學(xué)生有足夠的計(jì)算機(jī)基礎(chǔ)知識來理解C語言程序的運(yùn)行機(jī)制。
2)實(shí)例演示。
作為一門編程語言,C語言需要在實(shí)踐中理解和掌握,因此,課堂教學(xué)中,在具體的編程環(huán)境(如VC++6.0)下演示十分必要。通過在具體的軟件環(huán)境下編程,告訴學(xué)生應(yīng)該做什么和不應(yīng)該做什么,并總結(jié)該知識點(diǎn)的注意事項(xiàng)。相比傳統(tǒng)的脫離編程環(huán)境,只在PPT或黑板上進(jìn)行板書的教學(xué)模式,該方法的教學(xué)效果要好得多。在課堂教學(xué)中,具體的教學(xué)步驟如下:①使用PPT或者板書列出該知識點(diǎn)的注意要點(diǎn);②在編程環(huán)境(如VC++6.0)下演示該知識點(diǎn)的用法,給出正確的和錯誤的使用方法,并進(jìn)行對比;③通過幻燈片動畫或flash動畫等形式演示程序在計(jì)算機(jī)內(nèi)存中的執(zhí)行過程,讓學(xué)生更加深刻地理解程序的運(yùn)行機(jī)制。
3)教學(xué)難點(diǎn)與重點(diǎn)——“復(fù)合知識點(diǎn)”。
從C語言的教學(xué)內(nèi)容來講,數(shù)組、函數(shù)和指針是教學(xué)的重點(diǎn)章節(jié),這些章節(jié)之間相互關(guān)聯(lián)的部分又是重點(diǎn)中的難點(diǎn),如數(shù)組和函數(shù)結(jié)合,數(shù)組名做函數(shù)參數(shù),數(shù)組和指針結(jié)合,指向數(shù)組的指針變量,函數(shù)和指針結(jié)合,指向函數(shù)的指針變量等。在教學(xué)過程中要反復(fù)強(qiáng)調(diào)各個知識點(diǎn)的注意事項(xiàng),如果基本知識點(diǎn)能夠理解透徹,上述難點(diǎn)內(nèi)容也就迎刃而解了。
1.2 上機(jī)實(shí)踐教學(xué)
在實(shí)踐教學(xué)中,教師可以通過實(shí)際教學(xué)案例循序漸進(jìn)地強(qiáng)化學(xué)生對C語言知識點(diǎn)的理解。上機(jī)實(shí)踐的教學(xué)內(nèi)容通常分為兩部分:基本知識點(diǎn)練習(xí)和綜合訓(xùn)練。首先通過基本知識點(diǎn)的練習(xí),讓學(xué)生掌握該知識點(diǎn)的使用,即鞏固課堂所學(xué)內(nèi)容;然后通過一個綜合性的大作業(yè),訓(xùn)練學(xué)生綜合應(yīng)用C語言知識點(diǎn)的能力,例如,通過編寫“學(xué)生課程成績統(tǒng)計(jì)系統(tǒng)”考查學(xué)生對數(shù)組、結(jié)構(gòu)體、指針、函數(shù)、文件等知識的綜合掌握情況。
對于初學(xué)編程語言的學(xué)生,往往沒有養(yǎng)成良好的編程習(xí)慣,出錯的可能性較大,而出錯之后進(jìn)行調(diào)試又將耗費(fèi)較長的時間,這勢必對學(xué)生的學(xué)習(xí)熱情產(chǎn)生負(fù)面影響。因此,一開始就給學(xué)生制定科學(xué)的編程步驟和規(guī)范,使學(xué)生養(yǎng)成良好的編程習(xí)慣,將大大減少程序出錯的可能。在C語言教學(xué)實(shí)踐中,我們總結(jié)了“五步編程法”:①定義變量,如“int a;”;②對變量進(jìn)行初始化,如“a=0;”,對變量進(jìn)行初始化操作是一種良好的編程習(xí)慣,可防止未對變量賦值而引起的隱性錯誤;③通過scanf語句賦值,如“scanf(“%d”,&a);”;④實(shí)現(xiàn)程序的主要算法,該部分是程序的主體;⑤通過printf語句將結(jié)果輸出在顯示器上,將結(jié)果輸出在顯示器上便于比較程序運(yùn)行結(jié)果是否正確。
下面是按照上述五步編寫的一個完整的C語言程序,用來比較兩個整數(shù)的大小。按照上述五步進(jìn)行編程,經(jīng)過一段時間的訓(xùn)練之后,學(xué)生出現(xiàn)語法錯誤的可能性大大降低,此時學(xué)生更多的精力將集中在程序算法的設(shè)計(jì)和實(shí)現(xiàn)上。
1.3 考試形式
對于C語言程序設(shè)計(jì)的考核方式,我們采用知識點(diǎn)考核和編程實(shí)踐相結(jié)合的方式。知識點(diǎn)考核偏重于C語言基本語法,用于檢驗(yàn)學(xué)生對知識點(diǎn)的掌握是否全面,此項(xiàng)考核約占總成績的40%;編程實(shí)踐考核用于檢驗(yàn)學(xué)生的實(shí)際動手能力,學(xué)生將在規(guī)定的時間內(nèi)根據(jù)題目在機(jī)器上編程,此項(xiàng)考核約占總成績的60%。為了實(shí)現(xiàn)知識點(diǎn)的考核,我們將考試與計(jì)算機(jī)二級C語言上機(jī)考試緊密結(jié)合,采用題庫平臺進(jìn)行上機(jī)考試,學(xué)生直接在機(jī)器上答題并提交,知識點(diǎn)考核多采取客觀題,如填空題、程序修改題以及讀程序題等,編程題在實(shí)戰(zhàn)編程中考核。C語言程序設(shè)計(jì)課程的重要特點(diǎn)就是實(shí)踐性強(qiáng),學(xué)習(xí)該課程的目的就是為了編寫程序。因此從考試的角度講,進(jìn)行編程實(shí)踐是最合適的方式,通過上機(jī)編程來考核學(xué)生的學(xué)習(xí)情況也是最公正和客觀的方式。
2 C語言程序設(shè)計(jì)教學(xué)實(shí)踐結(jié)果分析
中國礦業(yè)大學(xué)(北京)每年都有40多個班級同時開設(shè)C語言程序設(shè)計(jì)課程,因此該課程教學(xué)質(zhì)量的高低將直接影響全校理工科學(xué)生對C語言的理解和掌握。中國礦業(yè)大學(xué)(北京)C語言程序設(shè)計(jì)教學(xué)團(tuán)隊(duì)經(jīng)過長期的探索總結(jié)出一套行之有效的C語言教學(xué)方法,我們將上述方法在學(xué)校越崎實(shí)驗(yàn)班中進(jìn)行了試點(diǎn)。如圖2所示,采用上述教學(xué)法的越崎實(shí)驗(yàn)班的C語言程序設(shè)計(jì)課程考試成績要明顯好于其他班級,其中90分以上的學(xué)生占10.7%,80分以上的學(xué)生占總?cè)藬?shù)的53.6%。另外,學(xué)生的學(xué)習(xí)積極性比采用上述方法前得到明顯提高,很多學(xué)生都對計(jì)算機(jī)編程產(chǎn)生了濃厚興趣,實(shí)踐證明我們提出的上述方法是行之有效的。
3 結(jié)語
中國礦業(yè)大學(xué)(北京)C語言程序設(shè)計(jì)教學(xué)團(tuán)隊(duì)在長期的教學(xué)實(shí)踐中探索出的這套教學(xué)方法被證明是行之有效的,它能夠極大地提高學(xué)生的學(xué)習(xí)興趣,不但讓學(xué)生學(xué)得會、記得牢,而且能夠舉一反三,把該方法應(yīng)用到其他編程語言的學(xué)習(xí)中。長期的教學(xué)實(shí)踐使我們深刻地認(rèn)識到,教學(xué)方法的好壞對提高教學(xué)質(zhì)量有直接和重要的影響。我們團(tuán)隊(duì)提出的這套教學(xué)方法是對C語言程序設(shè)計(jì)教學(xué)方法的初步嘗試,希望能夠?qū)Ω叩仍盒語言程序設(shè)計(jì)教學(xué)方法的研究起到拋磚引玉的作用。
參考文獻(xiàn):
[1] 謝中科. C語言程序設(shè)計(jì)的教學(xué)改革與實(shí)踐[J]. 理工高教研究, 2004,3(23): 96-97.
[2] 簡慧云. 提高C語言程序設(shè)計(jì)教學(xué)質(zhì)量的探討[J]. 理工高教研究, 2004, 6(23): 83-85.
[3] 王孝平, 董秀成, 謝維成.提高電器信息類專業(yè)學(xué)生C語言學(xué)習(xí)能力的教學(xué)方法探索[J]. 高等教育研究, 2012, 2(29): 37-40.
[4] 張麗華, 王冬星. 自主學(xué)習(xí)教學(xué)模式在C語言教學(xué)中的運(yùn)用[J]. 黑龍江教育: 高教研究與評估, 2009(12): 91-92.
【關(guān)鍵字】C語言 程序設(shè)計(jì) 教學(xué)探討
一、由實(shí)驗(yàn)入手,培養(yǎng)學(xué)生的學(xué)習(xí)興趣
“C語言程序設(shè)計(jì)”課程往往是是學(xué)生所接觸的第一門計(jì)算機(jī)編程方面課程,所以很多老師采用理論教學(xué),學(xué)習(xí)完理論基礎(chǔ)后開始上機(jī)實(shí)踐,從介紹C語言的語法、算法開始,然后講程序的書寫,最后再學(xué)習(xí)程序的調(diào)試。這樣復(fù)雜且抽象,這就導(dǎo)致部分學(xué)生在上課初期就反映C語言難懂、難學(xué)。在教授C語言之初,教師應(yīng)注意教學(xué)的方式方法,要設(shè)法調(diào)動學(xué)生的學(xué)習(xí)興趣,讓他們先體驗(yàn)C語言程序設(shè)計(jì)的樂趣。第一次上課最好定為實(shí)驗(yàn)課。通過給出幾個簡單且學(xué)生熟悉的數(shù)學(xué)問題以及它們所對應(yīng)的C語言程序源代碼,邊介紹程序運(yùn)行平臺的操作邊指導(dǎo)學(xué)生自己編輯調(diào)試,觀察運(yùn)行結(jié)果。當(dāng)程序成功的輸出結(jié)果時,學(xué)生對這門課的學(xué)習(xí)興趣自然產(chǎn)生了。第一堂課通過實(shí)驗(yàn)教學(xué),完成從數(shù)學(xué)邏輯到計(jì)算機(jī)語言程序的轉(zhuǎn)變,從而逐漸培養(yǎng)學(xué)生對程序設(shè)計(jì)的興趣。
二、教學(xué)中應(yīng)避免過分強(qiáng)調(diào)某些容易引起副作用的知識細(xì)節(jié)
由于C語言牽涉到的概念比較復(fù)雜,規(guī)則繁多,使用靈活,容易出錯,所以在C語言教學(xué)過程中,要遵循由易到難,抓主要矛盾的原則。介于C語言中有些細(xì)節(jié)牽涉到的副作用問題很多,教學(xué)時應(yīng)把教學(xué)精力放在最基本、最常用的那些部分,等學(xué)生有一定基礎(chǔ)后再深入到一些非主要的細(xì)節(jié)上。
三、階梯性舉例
為培養(yǎng)學(xué)生的學(xué)習(xí)興趣,大部分教師在C語言教學(xué)過程中,都不一味地按書本去講,而多舉實(shí)例來鞏固學(xué)生所學(xué)習(xí)的知識點(diǎn)。筆者在一年來的C語言教學(xué)實(shí)踐中采用階梯性舉例方式,取得了不錯的教學(xué)效果。階梯性舉例是指在課堂上把同類型問題歸結(jié)出來,讓學(xué)生從理解最簡單的例子開始,按照由易到難的順序依次理解所學(xué)知識點(diǎn)。
例如,在講述C語言中求若干數(shù)中最大值的知識點(diǎn)時,舉出:第一層問題:2個數(shù)的最大值求法,采用簡單if語句解決;第二層問題:3個數(shù)的最大值求法,采用簡單if-else復(fù)合語句解決;第三層問題:4個數(shù)的最大值求法,采用條件語句加上if語句解決;第四層問題:n個數(shù)(4個數(shù)以上)的最大值求法,采用一維數(shù)組比較方式解決。
這樣通過階梯性舉例教學(xué),學(xué)生對同類問題的解決有了比較深刻的認(rèn)識。其主要特點(diǎn)是升級適度,符合學(xué)生的心態(tài),使學(xué)生有成就感,形成積極向上的學(xué)習(xí)態(tài)度。
四、強(qiáng)調(diào)程序語法規(guī)則,淡化程序算法設(shè)計(jì)思想
C語言語法規(guī)則繁多,且使用靈活,很容易出錯。這樣使得學(xué)生調(diào)試程序過程變得更難。因此,教師在C語言的教學(xué)過程中,一定要強(qiáng)調(diào)C語言中語法細(xì)節(jié)問題,把一些經(jīng)常會犯的錯誤總結(jié)出來。例如,在C語言里,賦值運(yùn)算符是“=”,而“==”是關(guān)系運(yùn)算符的相等比較,如if (a = 1),因?yàn)椤埃健笔琴x值操作,括號中的條件則會永遠(yuǎn)為真,程序在編譯時不會提示有錯,可以編譯通過,但這明顯不是所要的結(jié)果。教師在授課時一定要強(qiáng)調(diào)語法細(xì)節(jié),避免出現(xiàn)不必要的錯誤。
五、傳授編程技巧,養(yǎng)成良好編程習(xí)慣,培養(yǎng)學(xué)生獨(dú)立調(diào)試程序能力
C語言是一門實(shí)踐性相當(dāng)強(qiáng)的課程。教學(xué)中,教師應(yīng)該傳授學(xué)生一些編程技巧,例如一些典型數(shù)學(xué)問題的運(yùn)用等,讓學(xué)生學(xué)會如何熟練應(yīng)用C語言編程。由于C語言語句書寫靈活,教師在實(shí)驗(yàn)課上應(yīng)重視學(xué)生書寫程序規(guī)范問題。例如,強(qiáng)調(diào)變量命名應(yīng)顧名思義,一行只書寫一條語句,每一小段程序要有中文注釋等。養(yǎng)成這些良好的編程規(guī)范對學(xué)生今后編程解決問題是很有幫助的。此外還應(yīng)引導(dǎo)學(xué)生多讀程序,多編程序,多上機(jī)調(diào)試程序。教師在實(shí)驗(yàn)課中,應(yīng)該把一些常用的程序調(diào)試方法總結(jié)出來,教給學(xué)生。只有通過反復(fù)上機(jī)操作,自行找錯糾錯,才能對C語言有更深、更全面的認(rèn)識和理解,逐步提高實(shí)際操作和學(xué)習(xí)的能力。
六、采取多元化的考核方式
為了保證課程的教學(xué)質(zhì)量考核是必不可缺的,可以采用多元化的考核方式,針對C語言中不同的知識類型采取不同的考試形式。如:考查C語言中常識性的知識可以采用閉卷考試形式;考查學(xué)生知識轉(zhuǎn)化能力、應(yīng)用能力等可以采用開卷考試形式;考查學(xué)生的程序調(diào)試、改錯等可以采用上機(jī)考試。
七、結(jié)束語
以上是筆者近年來學(xué)習(xí)和講授C語言課程中的一點(diǎn)心得體會,在教學(xué)過程中應(yīng)注意的問題還是有很多的,但是關(guān)鍵在于對 “教什么”和 “如何教”的合理組合,是否能調(diào)動學(xué)生學(xué)習(xí)的積極性。教學(xué)中,只要教師能理解C語言本身的特點(diǎn)并采取相應(yīng)的措施與教學(xué)手段,一定能取得理想的教學(xué)效果。
參考文獻(xiàn):
[1]譚浩強(qiáng). C程序設(shè)計(jì)(第三版)[M]. 清華大學(xué)出版社.2005
關(guān)鍵詞 C語言程序設(shè)計(jì);教學(xué)理念;教學(xué)方法
中圖分類號TP39 文獻(xiàn)標(biāo)識碼A 文章編號 1674-6708(2010)25-0198-02
C語言程序設(shè)計(jì)課程是我校理工類各專業(yè)必修的計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課,是一門實(shí)踐性很強(qiáng)的課程,學(xué)習(xí)者必須通過大量的編程練習(xí),在實(shí)踐中掌握語言知識,培養(yǎng)程序設(shè)計(jì)的基本能力,并逐步理解和掌握程序設(shè)計(jì)的思想和方法,培養(yǎng)學(xué)生編程興趣和編程能力是我們教師的責(zé)任,也是該課程的目標(biāo)。
現(xiàn)行的教學(xué)中存在一些問題:一是按照從基礎(chǔ)知識講起,然后講解語句語法,最后應(yīng)用舉例;二是教材內(nèi)容安排不盡合理,語法規(guī)則編寫過細(xì)[1];三是教學(xué)理念、教學(xué)方法和考核方法比較老套,不適應(yīng)當(dāng)今教學(xué)的發(fā)展。為了讓學(xué)生學(xué)好這門課程,提高動手能力,必須進(jìn)行教學(xué)改革,探索改革的思路和方法。
1 轉(zhuǎn)變教學(xué)理念
傳統(tǒng)的“蓋房子”教學(xué)理念,強(qiáng)調(diào)必須先打好地基再砌墻,即強(qiáng)調(diào)先打好基礎(chǔ),然后再進(jìn)行實(shí)際編程。這種教學(xué)理念教師往往先介紹概念和定義,再舉例進(jìn)行講解,這種教學(xué)方法死板而枯燥,由于課程的教學(xué)重點(diǎn)往往放在了語言語法知識點(diǎn)上,而語言的語法是相當(dāng)煩瑣而復(fù)雜的,這種教學(xué)方法缺少應(yīng)用型、趣味性的案例,使學(xué)生一步步地陷入到紛多繁雜而索然乏味的語法學(xué)習(xí)當(dāng)中,很難充分調(diào)動學(xué)生的積極性和啟發(fā)學(xué)生思維。
研究自然界中“樹”的生長規(guī)律可以發(fā)現(xiàn),“樹”并不是先長成發(fā)達(dá)的根系,再長樹干和枝葉,樹的根系、樹干和枝葉是同步生長的?!皹洹钡纳L過程應(yīng)用到教學(xué)上,就是基礎(chǔ)語法和編程的教學(xué)同步進(jìn)行,甚至先教編程技能再教理論,在不斷地實(shí)踐中掌握技能,在技能學(xué)習(xí)中提高基礎(chǔ)理論。
2 教材編寫思路
從課程的教學(xué)目標(biāo)出發(fā)制定教材的編寫思路,采用實(shí)例引導(dǎo)法、歸納教學(xué)法和任務(wù)教學(xué)法編寫教材,在編寫內(nèi)容上拋棄過多的語法細(xì)節(jié)和非通用的或?qū)嶋H用途很少的語言特性,算法描述力求通俗易懂。理論教材以實(shí)例引導(dǎo)法思想為主導(dǎo),介紹概念、語句格式、語句用法和算法描述。用歸納教學(xué)法思想編寫多個函數(shù)中相同參數(shù)的使用問題。實(shí)驗(yàn)教材以任務(wù)教學(xué)法思想,確定每一個實(shí)驗(yàn)的任務(wù)、內(nèi)容、要求和思考題。
3 教學(xué)方法探索
3.1實(shí)例引導(dǎo)法[2]
一切從實(shí)際例子出發(fā),引導(dǎo)學(xué)生理解程序中的概念和算法,例如:在講解變量、運(yùn)算符和表達(dá)式時,先通過一個具體實(shí)例程序介紹,如:求圓面積和周長,指出程序中臨時存放數(shù)據(jù)的單元和公式中的運(yùn)算符號,然后再引出變量、運(yùn)算符和表達(dá)式進(jìn)一步講解。又如:在講解指針的概念時,變量的“間接訪問”,可以通過“辦公桌抽屜”實(shí)例講解:一個辦公桌有A,B兩個抽屜,每個抽屜有一把鑰匙,可以把B抽屜的鑰匙放在A抽屜中,若要打開B抽屜,就需要先打開A抽屜,取出B鑰匙,再打開B抽屜,取出B抽屜中的物品,引出“間接訪問”。這樣學(xué)生很快就能理解變量、運(yùn)算符、表達(dá)式和指針的概念并掌握它們的用法。
3.2歸納教學(xué)法[3]
C語言的定義、概念、語法規(guī)則有許多相似的地方,在講解C語言函數(shù)庫中函數(shù)時,有些函數(shù)參數(shù)的類型格式符是一樣的,在講解一個函數(shù)中類型格式符后,對其它函數(shù)的類型格式符可以進(jìn)行歸納,不講或簡單的提一下即可,例如:printf()和scanf()函數(shù)中的類型格式符“%d、%f、%c”等,它們的語法規(guī)則是一樣的。通過歸納教學(xué),學(xué)生只要掌握其中一個,另一個自然就會使用了,免去了重復(fù)講授,提高了教學(xué)效率。
3.3任務(wù)教學(xué)法
C語言程序設(shè)計(jì)課程必須采用實(shí)驗(yàn)教學(xué)環(huán)節(jié)才能把理論算法加以驗(yàn)證。采用任務(wù)教學(xué)法思想編寫實(shí)驗(yàn)教材,適度增加實(shí)用性和自主性實(shí)驗(yàn)任務(wù)內(nèi)容。每章有具體任務(wù)實(shí)例講解,可引導(dǎo)學(xué)生完成每章設(shè)置的實(shí)驗(yàn)任務(wù)題目。讓學(xué)生自主選擇實(shí)驗(yàn)時間,每次實(shí)驗(yàn)課前要布置實(shí)驗(yàn)任務(wù),學(xué)生根據(jù)任務(wù),自學(xué)和實(shí)驗(yàn)任務(wù)有關(guān)的知識,完成實(shí)驗(yàn)任務(wù)的編程。這種教學(xué)方法能夠有效地培養(yǎng)學(xué)生的自學(xué)能力, 激發(fā)學(xué)生學(xué)習(xí)的積極性、主動性和創(chuàng)造性, 鍛煉他們利用所學(xué)的知識解決實(shí)際問題的能力。
3.4網(wǎng)絡(luò)教學(xué)法
依托先進(jìn)完備的校園網(wǎng)絡(luò)環(huán)境,建立C語言程序設(shè)計(jì)網(wǎng)絡(luò)教學(xué)平臺。可以把課程教學(xué)大綱、教案、多媒體課件、教學(xué)錄像、綜合實(shí)例庫、習(xí)題庫、學(xué)習(xí)參考資料、模擬考試系統(tǒng)等教學(xué)資源全部上網(wǎng),通過這個網(wǎng)絡(luò)教學(xué)平臺,學(xué)生可以瀏覽、下載學(xué)習(xí)資料,也可以提交電子作業(yè),在線提問題,老師在線輔導(dǎo)和答疑等,為學(xué)生自主學(xué)習(xí)提供強(qiáng)大的網(wǎng)絡(luò)支持。
4 師資隊(duì)伍建設(shè)
成立C語言程序設(shè)計(jì)課程組,建立結(jié)構(gòu)合理的教師梯隊(duì)。由具有豐富教學(xué)經(jīng)驗(yàn)和科研能力的教授任組長,激勵教師努力鉆研教學(xué)內(nèi)容和教學(xué)方法,拓寬知識結(jié)構(gòu)。同時,針對組內(nèi)教師的不同特點(diǎn),課程組制定了切實(shí)可行的目標(biāo),并定期進(jìn)行集體備課,相互探討,號召組內(nèi)教師積極參與教學(xué)研究和科研開發(fā),為提高教學(xué)水平打下良好的基礎(chǔ)。建立主講教師之間互相聽課和評課制度,定期召開學(xué)生座談會和課程質(zhì)量分析會,并針對反饋意見提出改進(jìn)教學(xué)的具體措施,從而規(guī)范教學(xué)的各個環(huán)節(jié),為更好地提高教學(xué)質(zhì)量奠定良好的基礎(chǔ)。
5 考核評價體系
對課程考核評價體系進(jìn)行改革,突出過程考核和編程能力考核,促進(jìn)學(xué)生實(shí)際動手能力和創(chuàng)新能力的提高。例如:總評成績=理論課出勤成績+作業(yè)成績+實(shí)驗(yàn)出勤成績+實(shí)驗(yàn)完成成績+期末考試成績。期末考試采用《C語言程序設(shè)計(jì)機(jī)考系統(tǒng)》,機(jī)考系統(tǒng)為每個考生隨機(jī)出題,體現(xiàn)了公平考試的原則。改革后的考核評價體系主要體現(xiàn)了考核形式多樣化、考核標(biāo)準(zhǔn)合理化以及考核試卷個性化三大特征。
6 結(jié)論
鑒于目前C語言程序設(shè)計(jì)課程教學(xué)中存在的一些問題,文章通過改革探索,一切從培養(yǎng)學(xué)生編程能力的角度出發(fā),按著新的教學(xué)理念對教材編寫思路和教學(xué)方法進(jìn)行了探索,提出了教學(xué)改革的具體措施。希望對C語言程序設(shè)計(jì)課程的教學(xué)改革有所借鑒。
參考文獻(xiàn)
[1]譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社, 2005.
本書作者具有多年C++面向?qū)ο蟪绦蛟O(shè)計(jì)課程的教學(xué)經(jīng)驗(yàn)。根據(jù)教學(xué)過程中反映出的主要問題,作者在參考大量已有教材和相關(guān)資料的基礎(chǔ)上,對書中的內(nèi)容進(jìn)行合理組合與取舍,力求澄清概念上的誤區(qū),使內(nèi)容反映學(xué)科發(fā)展、涵蓋最新特征,通過具體實(shí)例使讀者盡快掌握C++語言的語法知識,把重點(diǎn)放在程序設(shè)計(jì)方法上。為使學(xué)生了解C++標(biāo)準(zhǔn)庫、掌握標(biāo)準(zhǔn)模板庫的精華,特別安排一章內(nèi)容,介紹C++標(biāo)準(zhǔn)庫的構(gòu)成。另外通過閱讀本書,讀者還可以對過程化編程、面向?qū)ο缶幊毯头盒途幊痰染幊趟枷胗兴私狻?/p>
與同類教材相比,本書具有如下特色:
1) 雖然在最后一章對C++標(biāo)準(zhǔn)庫進(jìn)行了較為詳細(xì)的介紹,但是在第1章安排一節(jié)對標(biāo)準(zhǔn)庫進(jìn)行簡單介紹,并通過一個具體例子告訴讀者如何使用標(biāo)準(zhǔn)庫編寫C++程序,以吸引讀者進(jìn)一步學(xué)習(xí)。
2) 對C++支持的豐富多彩的數(shù)據(jù)類型,進(jìn)行了比較合理的分類,以方便讀者在閱讀過程中理清思路,盡早掌握類(class)的概念。本書將C++支持的數(shù)據(jù)類型分為三大類:基本數(shù)據(jù)類型、自定義類型(抽象類型)和擴(kuò)展類型。
其中基本數(shù)據(jù)類型是C++預(yù)定義的數(shù)據(jù)類型,包括布爾型(bool)、字符型(char)、整型(int)、浮點(diǎn)型(float, double)、空類型(void)??梢岳眯揎椃麑绢愋瓦M(jìn)行擴(kuò)展。例如,signed、unsigned可用來修飾字符型和整型,long可用來修飾整型和雙精度浮點(diǎn)型,short可以修飾整型。
用戶根據(jù)需要,將數(shù)據(jù)與操作數(shù)據(jù)的算法封裝在一起所建立的類型,稱為用戶自定義類型或者抽象數(shù)據(jù)類型,也就是C++中的類,枚舉、聯(lián)合、結(jié)構(gòu)可以看作類的特殊情況。
在已定義的數(shù)據(jù)類型基礎(chǔ)上,結(jié)合某些修飾符(如[]、*、&、())或者關(guān)鍵字(如const、static),可以得到擴(kuò)展數(shù)據(jù)類型,如數(shù)組、指針、引用等。
3) 將類和對象(object)的概念提前介紹,從基本數(shù)據(jù)類型到結(jié)構(gòu)再到類,使讀者盡快建立起“類”這種抽象數(shù)據(jù)類型的概念。在介紹對象的概念時,不是用過于抽象的語言,而是具體到C++語言及計(jì)算機(jī)存儲情況進(jìn)行介紹。
C++中的對象,強(qiáng)調(diào)的是分配好的、具體的一塊內(nèi)存區(qū)域。每個對象都與一個特定的數(shù)據(jù)類型相關(guān)聯(lián),這個類型決定了內(nèi)存的大小、布局、能夠存儲在該區(qū)域的值的范圍以及可以對該區(qū)域進(jìn)行哪些操作等。
4)C++在創(chuàng)建對象時,系統(tǒng)要為對象分配一定的存儲區(qū)域,這些存儲區(qū)包括靜態(tài)存儲區(qū)、棧區(qū)和堆區(qū)。本書對不同存儲類型對象的存儲特性進(jìn)行了較為詳細(xì)的介紹,并通過具體實(shí)例進(jìn)行驗(yàn)證。
靜態(tài)存儲區(qū)(static storage)。全局對象、靜態(tài)對象和函數(shù)一般存儲于該區(qū)域,存儲區(qū)是在程序開始執(zhí)行之前分配的,這些存儲區(qū)在程序的整個運(yùn)行期間都存在。
棧區(qū)(stack)。程序執(zhí)行期間進(jìn)行的內(nèi)存分配。在執(zhí)行函數(shù)時,函數(shù)內(nèi)一般局部變量的存儲區(qū)都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲區(qū)被自動釋放。
堆區(qū)(heap),也稱為動態(tài)存儲區(qū)。程序在運(yùn)行的時候用運(yùn)算符new申請內(nèi)存,由程序員自己負(fù)責(zé)何時用運(yùn)算符delete釋放內(nèi)存。
5) 內(nèi)容結(jié)構(gòu)安排上,將函數(shù)與函數(shù)模板、類與類模板分別放在同一章介紹,使得內(nèi)容前后銜接密切,便于讀者由簡單到復(fù)雜、逐步掌握標(biāo)準(zhǔn)C++的精髓。
6) 與同類大部分中文教材相比,增加了指向成員的指針、成員函數(shù)地址獲取、動態(tài)綁定機(jī)制、函數(shù)對象、模版重載與專門化等內(nèi)容,加強(qiáng)了對C++標(biāo)準(zhǔn)庫特別是對標(biāo)準(zhǔn)模板庫的介紹。
7) 本書的例題和習(xí)題選材大部分面向?qū)嶋H問題,題目具有一定的難度和趣味性,讀者學(xué)完此書從內(nèi)心里會感到有很大收獲。
8) 使用本書不需要有C語言基礎(chǔ)。
1.1教學(xué)只注重課程的講解,不注重教學(xué)過程的質(zhì)量控制
傳統(tǒng)的教學(xué)以課程內(nèi)容的講解為主,通過講解變量、循環(huán)、數(shù)組、指針等內(nèi)容,并結(jié)合一定的教學(xué)案例來推進(jìn)教學(xué)過程的實(shí)施。這種傳統(tǒng)的教學(xué)方法沒有考慮到本階段學(xué)生的特點(diǎn),往往造成教學(xué)效果差,教學(xué)質(zhì)量難以控制。C語言程序設(shè)計(jì)課程在大一新生中開設(shè),許多學(xué)生缺乏程序的思維和一定的動手能力,學(xué)生難以跟上教學(xué)進(jìn)度,造成一定數(shù)量的學(xué)生對學(xué)習(xí)語言失去興趣,從而影響整個專業(yè)課程的學(xué)習(xí)。
1.2教學(xué)過程缺乏有效的互動
C語言程序設(shè)計(jì)的教學(xué)過程中主要使用PPT來講解,案例程序也通過PPT展示,甚至包括程序運(yùn)行結(jié)果也以截圖的形式在PPT中顯示。雖然在PPT中可以添加很多的動作,動態(tài)地標(biāo)注、顯示程序的運(yùn)行過程,但這種方法以投影為中心,缺少與學(xué)生交流的環(huán)節(jié),加上程序類課程相對枯燥,以致學(xué)生難以集中精力做到全程聽課。
1.3代碼編寫規(guī)范強(qiáng)調(diào)不夠
編碼規(guī)范是軟件專業(yè)學(xué)生必須要牢記并遵守的,良好的編碼規(guī)范不僅能體現(xiàn)軟件從業(yè)人員的素質(zhì),而且使代碼有更好的可讀性,更容易被別人所理解和交流。該課程的講解主要以編寫簡單邏輯來解決一些日常問題、數(shù)學(xué)問題,編程的環(huán)節(jié)側(cè)重于算法的實(shí)現(xiàn),往往忽略了編碼規(guī)范
。1.4考試以筆試為主,難以檢驗(yàn)學(xué)生的動手能力
傳統(tǒng)的C語言程序設(shè)計(jì)課程考試以筆試為主,考查學(xué)生對C語言基本的語法、簡單邏輯編寫的掌握情況。這種考試機(jī)制脫離了程序語言的實(shí)現(xiàn)介質(zhì),即計(jì)算機(jī)。雖然在試卷中也可以用編程題目來考查學(xué)生的編程能力,但在紙上寫程序與在計(jì)算機(jī)上寫程序有本質(zhì)的不同。在紙上寫程序只需要寫出大致的邏輯即可,而在計(jì)算機(jī)上寫程序不僅要寫出正確的代碼,而且需要調(diào)試和跟蹤代碼,最終保證程序的正確執(zhí)行。因此,筆試并不能很好地檢驗(yàn)學(xué)生的動手實(shí)踐能力。
2教學(xué)改革措施
2.1加強(qiáng)教學(xué)過程的質(zhì)量控制
C語言程序設(shè)計(jì)課程是一門實(shí)踐性強(qiáng)的課程,僅通過做一些常規(guī)練習(xí)無法達(dá)到教學(xué)質(zhì)量監(jiān)控的目的。為了更好地控制教學(xué)質(zhì)量,需要從學(xué)生語法規(guī)則的掌握到動手編程這一系列環(huán)節(jié)進(jìn)行掌握和跟蹤。為此,我們開發(fā)了一套在線作業(yè)系統(tǒng)用于教學(xué)質(zhì)量的控制。⑴作業(yè)題庫的建設(shè)C語言程序設(shè)計(jì)的任課教師根據(jù)自己的經(jīng)驗(yàn)和理解來搜集和設(shè)計(jì)C語言題目,包括基礎(chǔ)知識的題目和編程實(shí)踐的題目。基礎(chǔ)知識的題目主要用于C語言知識點(diǎn)的訓(xùn)練,包括填空題、選擇題、判斷題和程序閱讀題;編程實(shí)踐的題目主要用于編程能力的訓(xùn)練,這類題目需要學(xué)生對問題進(jìn)行正確分析、設(shè)計(jì)算法、編程并運(yùn)行,最終得到結(jié)果。教師在給出題目時,需要提供測試數(shù)據(jù)和對應(yīng)的結(jié)果。⑵作業(yè)的布置與批改教師可以根據(jù)每次課的教學(xué)大綱、課程內(nèi)容,從作業(yè)題庫中選擇一些填空題、選擇題、程序閱讀題、編程題來建立課程作業(yè)供學(xué)生在課外完成。學(xué)生在規(guī)定的時間之內(nèi)完成作業(yè)后提交作業(yè),系統(tǒng)根據(jù)教師預(yù)先設(shè)定的答案進(jìn)行自動批改,形成每個學(xué)生的作業(yè)記錄。如果學(xué)生在規(guī)定的時間之內(nèi)沒有完成作業(yè)并提交則失去本次作業(yè)的記錄。教師通過查閱部分學(xué)生的解答來掌握學(xué)生對相關(guān)知識的掌握情況,特別是需要整理學(xué)生所犯的共性問題,并有針對性的開設(shè)習(xí)題課進(jìn)行解答。⑶配套政策為了使學(xué)生重視平時作業(yè)的完成,課程的期末成績將考查平時作業(yè)的情況。如果學(xué)生沒有提交作業(yè)的次數(shù)在30%以上,則平時成績計(jì)0分,其他情況按照提交作業(yè)次數(shù)和作業(yè)得分根據(jù)一定的公式進(jìn)行計(jì)算得到學(xué)生的平時成績。這種策略的主要目的在于督促學(xué)生跟著教學(xué)進(jìn)度進(jìn)行學(xué)習(xí)和訓(xùn)練,不至于嚴(yán)重滯后于教學(xué)進(jìn)度而失去學(xué)習(xí)的興趣,可有力地保證教學(xué)質(zhì)量。
2.2加強(qiáng)教學(xué)過程中的互動
課堂教學(xué)應(yīng)該在一定程度上脫離PPT的教學(xué),這樣才可以調(diào)動學(xué)生的積極性。加強(qiáng)師生之間的互動可以結(jié)合本課程特點(diǎn)進(jìn)行。在講解課程知識點(diǎn)后,配以適合的案例進(jìn)行教學(xué),這些案例都是需要編寫C語言程序來實(shí)現(xiàn)的。此時,編程實(shí)現(xiàn)的環(huán)節(jié)不要通過PPT展示,而要在教師的計(jì)算機(jī)上動手編寫并運(yùn)行得到結(jié)果,這樣可以改變教學(xué)節(jié)奏,吸引學(xué)生的注意力。C語言課程案例程序的一大特點(diǎn)是代碼量少,一般在20~30行之間,適宜在課堂上完成。教師在編寫程序的過程中,可以向?qū)W生展示編程中需要注意的問題,同時,進(jìn)一步講解C語言的語法和基本知識點(diǎn)。教師在編寫程序的過程中難免會犯小錯誤,或者是有針對性的故意犯一些學(xué)生經(jīng)常犯的錯誤,在編程后的編譯運(yùn)行時會有錯誤報(bào)出,這時對于提高師生交互是很好的機(jī)會。從學(xué)生的角度來說,他們的編程往往會有很多錯誤,編譯時會出現(xiàn)大量的錯誤提示。此時,學(xué)生可能就比較迷茫,不知道如何定位并解決錯誤。因此,當(dāng)老師也出現(xiàn)錯誤,而且是學(xué)生經(jīng)常遇到的錯誤時,學(xué)生往往是比較興奮的,希望能知道老師是如何處理錯誤的。從老師的角度來說,真實(shí)地反映程序編寫、編譯的過程,展示程序錯誤的發(fā)現(xiàn)、定位、解決的方法,能夠更快地提高學(xué)生的動手實(shí)踐能力。面對錯誤,教師還可以引導(dǎo)學(xué)生參與程序錯誤的解決,消除學(xué)生對程序錯誤的恐懼感。在解決程序錯誤時可以參考以下步驟。首先,教師要把所有錯誤信息讀出來給學(xué)生聽,因?yàn)橐话憔幾g出來的錯誤是用英文寫的,而且有些單詞學(xué)生不熟悉,因此,老師需要指出錯誤是變量重定義、變量沒有定義、還是其他錯誤;然后,指出核心錯誤的位置,教師要告訴學(xué)生程序報(bào)出很多錯誤信息往往是由一個小錯誤導(dǎo)致的,因此,老師要指導(dǎo)學(xué)生學(xué)會確定引起其他錯誤的核心錯誤;最后,在源程序中找到錯誤的位置,修改錯誤并重新編譯,得出運(yùn)算結(jié)果。這個錯誤處理過程是針對簡單語法錯誤的處理方法,如果程序中出現(xiàn)了邏輯錯誤,即程序編譯正確,但運(yùn)行結(jié)果不是預(yù)期結(jié)果,此時,錯誤的處理方法更為復(fù)雜,可能需要重新檢查程序邏輯,并使用編譯環(huán)境進(jìn)行程序中可疑變量的監(jiān)視,通過觀察變量中的數(shù)值在程序運(yùn)行過程的變化來確定錯誤。通過實(shí)地編寫程序并調(diào)試,發(fā)現(xiàn)和解決程序錯誤,最終得到正確的計(jì)算結(jié)果,不僅能使同學(xué)更好地掌握程序編寫的方法,而且還能更好地與學(xué)生進(jìn)行互動,提高教學(xué)效果。
2.3強(qiáng)調(diào)代碼規(guī)范
有些老師在教學(xué)的過程別是演示程序時,注重于解決問題而忽視代碼規(guī)范,甚至是自己寫程序也是這樣,沒有代碼規(guī)范。雖然遵守代碼規(guī)范并不能改善程序的性能,但遵守代碼規(guī)范能夠使程序具有更好的可讀性、可維護(hù)性,是軟件代碼實(shí)施過程中軟件從業(yè)人員良好素質(zhì)的重要體現(xiàn)。改善代碼規(guī)范可以從以下幾個方面進(jìn)行。⑴適當(dāng)?shù)目s進(jìn)每一行代碼不要頂格書寫,而要根據(jù)情況縮進(jìn)。具有良好縮進(jìn)格式的代碼不僅能少犯語法錯誤,還能夠使閱讀者快速掌握程序內(nèi)容。⑵適當(dāng)?shù)目招泻瘮?shù)與函數(shù)之間增加必要的空行,使得程序構(gòu)成一目了然。⑶適當(dāng)增加代碼注釋程序中函數(shù)的開頭最好加上注釋說明該函數(shù)的作用、參數(shù)的意義,在函數(shù)中重要邏輯的部分加入注釋說明該邏輯的主要思路、算法。⑷代碼塊要用花括號界定代碼塊盡量使用花括號來界定代碼范圍,即使代碼塊里只有一行代碼,這樣可以提高代碼的可閱讀性,防止閱讀者誤解程序。⑸變量和函數(shù)的命名盡量使用多個字母來命名變量和函數(shù),使得程序閱讀者通過名稱即可大致了解變量的意義、函數(shù)的作用,提高程序的可讀性。通過編碼規(guī)范的強(qiáng)調(diào)和實(shí)施,使學(xué)生認(rèn)識到軟件開發(fā)的專業(yè)素質(zhì),對于提高學(xué)生的專業(yè)素養(yǎng)具有潛移默化的作用。
2.4上機(jī)考試
上機(jī)考試采用在線考試的方式進(jìn)行,考試環(huán)節(jié)包括如下幾個部分。⑴試題庫的建設(shè)C語言程序設(shè)計(jì)的任課教師負(fù)責(zé)組建上機(jī)試題庫,試題庫中的題目都是編程的題目,用于考核學(xué)生的編程能力。教師在組建試題庫時,標(biāo)明每個試題的知識點(diǎn)和大致難度,并提供測試案例和對應(yīng)的答案。題庫負(fù)責(zé)人負(fù)責(zé)查看、重新編輯每個題目,從題庫整體的角度更新每個試題的難度。⑵上機(jī)考試的實(shí)施為單次考試準(zhǔn)備7個知識點(diǎn)和1個綜合知識點(diǎn)的題目,教師在考試之前為每個知識點(diǎn)選定難度相當(dāng)?shù)?個題目。每個學(xué)生登錄系統(tǒng)后,系統(tǒng)自動建立考卷,具體策略是從為每個知識點(diǎn)準(zhǔn)備的5個題目中隨機(jī)選擇1題組成一個考卷,因此,該考卷包含8個題目,這8個考題要求學(xué)生在4小時內(nèi)完成編程。考試時間一般定為上午8:00至中午12:00點(diǎn)。學(xué)生根據(jù)隨機(jī)組成的考卷題目進(jìn)行解答,為每道題目編程求解,并在學(xué)生機(jī)上利用示例測試用例檢驗(yàn)代碼的正確性。如果在本地沒有通過檢測,則進(jìn)行邏輯檢查,修改程序;如果本地通過測試,學(xué)生需要將代碼提交到服務(wù)器。服務(wù)器接收到代碼后,自動調(diào)用教師提供的更多的測試用例來檢測程序運(yùn)行結(jié)果是否與預(yù)先設(shè)置的結(jié)果匹配,進(jìn)行代碼邏輯黑盒測試。如果全部通過,則說明學(xué)生的編程邏輯是正確的,此時將學(xué)生成績記錄中對應(yīng)的題目標(biāo)為通過,并回顯“通過”給學(xué)生,學(xué)生繼續(xù)做下一道題目;如果其中有的用例運(yùn)行結(jié)果不正確,則返回“錯誤”給學(xué)生,學(xué)生可以接著做本道題目,也可以選做另外一道題目,同時,在學(xué)生成績記錄中對應(yīng)的題目標(biāo)為錯誤。教師在考試現(xiàn)場調(diào)取并查看所有學(xué)生成績記錄信息,如果發(fā)現(xiàn)異常信息,如在很短的時間內(nèi)完成了過多的題目,則可能學(xué)生在作弊。此時,根據(jù)異常學(xué)生信息中的IP地址找到該學(xué)生,進(jìn)行現(xiàn)場查證,如果確認(rèn)為作弊則立即處理。如果學(xué)生正確完成了8道題中的5道題,則學(xué)生通過上機(jī)測試,否則,學(xué)生沒有通過上機(jī)測試。為了減輕學(xué)生的壓力,上機(jī)考試可以分兩次進(jìn)行,如果第一次沒有通過上機(jī)考試,還可以組織學(xué)生進(jìn)行第二次考試,取這兩次考試的較高分作為學(xué)生成績。
3結(jié)束語
關(guān)鍵詞:C語言程序設(shè)計(jì);計(jì)算思維;抽象;自動化
美國卡內(nèi)基?梅隆大學(xué)的周以真教授在2006年系統(tǒng)地提出了計(jì)算思維的概念[1]:計(jì)算思維指的是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計(jì)以及人類行為理解等一系列思維活動。其后,陳國良院士和李廉教授歸納出三種典型的科學(xué)思維,即以觀察和歸納為特征的實(shí)證思維,以推理和演繹為特征的邏輯思維,以抽象和自動化為特征的計(jì)算思維[2-3]。計(jì)算思維是計(jì)算機(jī)類課程的主要思維方式。
有關(guān)計(jì)算思維在程序設(shè)計(jì)類課程中的研究,已經(jīng)引起很多學(xué)者的興趣[4-6]。這些研究雖然從案例設(shè)計(jì)和項(xiàng)目過程等角度做了有益探索,但卻忽略了對計(jì)算思維本質(zhì)的討論。C語言程序設(shè)計(jì)課程中,我們采用李廉教授的觀點(diǎn),即計(jì)算思維的本質(zhì)是抽象和自動化。抽象指的是使用符號系統(tǒng)對問題進(jìn)行精確而嚴(yán)格的描述;自動化指的是對這些符號系統(tǒng)施加一定操作并按照某種結(jié)構(gòu)自動地執(zhí)行。
一、C語言程序中的計(jì)算思維本質(zhì)之一:抽象
有些C語言程序設(shè)計(jì)課程教學(xué)的一開始就提倡使用案例教學(xué)。這雖然能夠使得學(xué)生可以迅速進(jìn)入實(shí)際編程環(huán)節(jié)并建立直觀感性認(rèn)識,但案例教學(xué)由于往往出現(xiàn)“程序就是編程工具”的工具論現(xiàn)象,導(dǎo)致出現(xiàn)“只知其然,而不知其所以然”的學(xué)習(xí)后果,不利于學(xué)生的后續(xù)發(fā)展。
對于C語言程序來說,抽象指的是使用符號系統(tǒng)對求解問題進(jìn)行精確而嚴(yán)格的描述,抽象的過程就是對實(shí)際系統(tǒng)建模的過程。實(shí)際上,程序是用來描述現(xiàn)實(shí)生活中某個實(shí)際存在的或不存在的系統(tǒng)。程序就是對系統(tǒng)的抽象。系統(tǒng)之所以存在,是因?yàn)橄到y(tǒng)具有一些關(guān)鍵特征和核心功能。程序中對系統(tǒng)特征進(jìn)行抽象的就是操作對象,對系統(tǒng)功能進(jìn)行抽象的就是函數(shù)。系統(tǒng)功能往往有多個且存在著復(fù)雜的調(diào)用關(guān)系。例如,求一個函數(shù)定積分的功能必然涉及求函數(shù)在某一個點(diǎn)的取值功能,如果該函數(shù)比較復(fù)雜且含有正弦、余弦和正切等三角函數(shù),還需要繼續(xù)調(diào)用求這些三角函數(shù)值的功能,形成多級調(diào)用;有時函數(shù)執(zhí)行過程中還需要調(diào)用本身,形成遞歸調(diào)用。
C語言程序中的操作對象分為變量和常量。常量是對系統(tǒng)中的取值不變的特征進(jìn)行抽象,如圓的圓周率;而變量是對系統(tǒng)中取值可以改變的特征進(jìn)行抽象,如圓的半徑。不管是哪類特征,都會有一個取值范圍以及所允許的操作。例如,對于課程成績,其取值范圍一般是從0~100,而允許對該特征進(jìn)行的操作可以是加法和減法等算術(shù)操作以及大于和小于等比較運(yùn)算;而對于課程名字這一特征,就不能進(jìn)行加法和減法這樣的算術(shù)操作。C語言程序中用來對特征的取值范圍及允許的操作進(jìn)行抽象的概念是數(shù)據(jù)類型。C語言程序中的抽象模塊如表1所示。
現(xiàn)實(shí)生活中,經(jīng)常需要描述多個相同數(shù)據(jù)類型的一個系統(tǒng)特征,如所有同學(xué)的高等數(shù)學(xué)課程的成績,可以使用一維數(shù)組來進(jìn)行描述;而描述多個不同數(shù)據(jù)類型的多個系統(tǒng)特征,如學(xué)生的姓名、學(xué)生的身高和學(xué)生的年齡等,可以使用結(jié)構(gòu)體來進(jìn)行描述;如果要描述多個相同數(shù)據(jù)類型的多個系統(tǒng)特征,如全班所有同學(xué)的高等數(shù)學(xué)和大學(xué)英語課程的成績,則可以使用二維數(shù)組來進(jìn)行描述。
表1 C語言程序中的抽象模塊
C語言程序中的元素 現(xiàn)實(shí)生活中的元素
程序 系統(tǒng)
函數(shù) 系統(tǒng)功能
函數(shù)調(diào)用 功能調(diào)用
數(shù)據(jù)類型 常量 系統(tǒng)特征
變量
一維數(shù)組 多個相同類型的一個系統(tǒng)特征
多維數(shù)組 多個相同類型的多個系統(tǒng)特征
結(jié)構(gòu)體 多個不同類型的多個系統(tǒng)特征
鏈表或結(jié)構(gòu)體數(shù)組 多個不同類型的多個系統(tǒng)特征的集合
二、C語言程序中的計(jì)算思維本質(zhì)之二:自動化
計(jì)算思維的另一個本質(zhì)是自動化。自動化指的是對符號系統(tǒng)建模的各種元素施加一些操作,并按照某種順序的或非順序的結(jié)構(gòu)自動地執(zhí)行。對于C語言程序來說,自動化體現(xiàn)為函數(shù)內(nèi)部的語句在EIP寄存器加法操作支持下順序自動地執(zhí)行以及函數(shù)之間的調(diào)用在內(nèi)存堆棧區(qū)支持下自動地進(jìn)行跳轉(zhuǎn)。EIP是32位機(jī)的指令指針寄存器,用來存放下一條要執(zhí)行的指令的地址。EIP寄存器中增加值的大小需要根據(jù)實(shí)際存儲指令的大小來確定。
對于C語言程序來說,自動化過程中執(zhí)行的對象是語句。不同類型的語句,執(zhí)行的結(jié)果和效用是不一樣的。例如,一個變量定義語句“int a”的執(zhí)行結(jié)果是在內(nèi)存中分配4個字節(jié)的空間,一個返回語句“return t”的執(zhí)行結(jié)果是將程序的執(zhí)行流程返回到主調(diào)函數(shù)中。這些語句的組合構(gòu)成一個個函數(shù),程序的執(zhí)行就是在某個函數(shù)之中順序自動地執(zhí)行以及在多個函數(shù)之間來回自動地跳轉(zhuǎn)。
既然程序的執(zhí)行過程是在某個函數(shù)之中順序自動地執(zhí)行以及在多個函數(shù)之間來回自動地跳轉(zhuǎn),這種自動執(zhí)行需要有相應(yīng)的計(jì)算機(jī)軟件和硬件基礎(chǔ)。支持程序自動執(zhí)行的軟件基礎(chǔ)是操作系統(tǒng),支持程序自動執(zhí)行的硬件基礎(chǔ)是計(jì)算機(jī)硬件結(jié)構(gòu),即馮?諾依曼原理的程序存儲思想。當(dāng)用戶點(diǎn)擊執(zhí)行按鈕后,程序被提交給操作系統(tǒng)來執(zhí)行,可以不需要人為干預(yù)。此后,程序在操作系統(tǒng)中以進(jìn)程的方式出現(xiàn)。操作系統(tǒng)協(xié)調(diào)內(nèi)存、中央處理器和外存等硬件資源執(zhí)行該進(jìn)程。
函數(shù)中的語句之所以能夠一個接著一個順序地執(zhí)行,主要依賴于EIP寄存器的加法操作。當(dāng)一條指令執(zhí)行完成之后,EIP寄存器在原有內(nèi)容的基礎(chǔ)上再加上當(dāng)前指令所占存儲空間大小,其內(nèi)容便是下一條指令的地址。如此進(jìn)行下去,就可以一個一個順序地執(zhí)行函數(shù)中的語句。
程序控制之所以能夠在函數(shù)之間進(jìn)行跳轉(zhuǎn),主要依賴于操作系統(tǒng)管理的內(nèi)存堆棧區(qū)。內(nèi)存堆棧區(qū)是滿足“后進(jìn)先出”操作約束的存儲區(qū)。當(dāng)操作系統(tǒng)開始執(zhí)行用戶提交的C語言程序時,首先開始從main函數(shù)執(zhí)行,main函數(shù)的相關(guān)局部變量被壓入棧中;當(dāng)執(zhí)行到被調(diào)函數(shù)時,被調(diào)函數(shù)的相關(guān)局部變量再次被壓入棧中,程序控制轉(zhuǎn)移到被調(diào)函數(shù),且操作只能對當(dāng)前棧頂進(jìn)行,而此時棧頂存儲的就是被調(diào)函數(shù)的相關(guān)局部變量;而當(dāng)被調(diào)函數(shù)執(zhí)行結(jié)束時,被調(diào)函數(shù)的相關(guān)局部變量從棧中退出,程序控制轉(zhuǎn)移到main函數(shù)繼續(xù)執(zhí)行,此時棧頂存儲的是main函數(shù)的相關(guān)局部變量;當(dāng)main函數(shù)執(zhí)行結(jié)束時,main函數(shù)的局部變量從棧中退出,整個程序執(zhí)行結(jié)束。下列程序執(zhí)行時的堆棧變化過程示意如圖1所示。
#include "stdio.h"
double s(double r)
{ return r*r; }
int main()
{ double r;
double area;
r=2.0;
area= s(r);
printf("area=%f",area);
return 0;
}
圖1 函數(shù)調(diào)用過程的堆棧變化
自動化過程實(shí)際反映了C語言程序解決實(shí)際問題的算法流程。算法是解決某一問題的執(zhí)行步驟。一般而言,使用C語言進(jìn)行編程之前,需要進(jìn)行相應(yīng)的算法設(shè)計(jì),即構(gòu)思解決實(shí)際問題的思路和步驟。一旦這些步驟變成C語言程序語句并形成一個完整的程序,就可以提交給操作系統(tǒng)自動地執(zhí)行這些步驟,這正是計(jì)算機(jī)解決問題的高效率的體現(xiàn)。
三、以計(jì)算思維為導(dǎo)向的C語言程序設(shè)計(jì)課程教學(xué)
1.教學(xué)內(nèi)容
針對計(jì)算思維的抽象和自動化兩大本質(zhì)特征,C語言程序設(shè)計(jì)課程的教學(xué)內(nèi)容需要在原有的基礎(chǔ)上特別強(qiáng)調(diào)一些針對性的觀點(diǎn)。例如,C語言中的各種數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)可以完成實(shí)際系統(tǒng)中各種不同元素的抽象,一個函數(shù)之中的順序語句自動執(zhí)行的基礎(chǔ)是EIP寄存器的加法操作,多個函數(shù)之間的來回自動跳轉(zhuǎn)的基礎(chǔ)是內(nèi)存堆棧區(qū)的支持等。具體強(qiáng)調(diào)的觀點(diǎn)如表2所示。
表2 教學(xué)內(nèi)容中需要強(qiáng)調(diào)的觀點(diǎn)
C語言程序設(shè)計(jì)
課程的內(nèi)容 強(qiáng)調(diào)的觀點(diǎn)
C語言概述 程序是對系統(tǒng)的抽象
抽象過程就是C語言的建模過程
自動化過程反映C語言的算法流程
數(shù)據(jù)類型、表達(dá)式和語句 操作對象是對系統(tǒng)特征的抽象
語句是系統(tǒng)自動化執(zhí)行的基本對象
控制結(jié)構(gòu) 控制結(jié)構(gòu)是問題求解步驟的抽象
函數(shù)中順序語句自動執(zhí)行的基礎(chǔ)是EIP寄存器的加法操作
數(shù)組 一維數(shù)組是對多個相同類型的一個系統(tǒng)特征的抽象,多維數(shù)組是對多個相同類型的多個系統(tǒng)特征的抽象
函數(shù) 函數(shù)是對系統(tǒng)功能的抽象
函數(shù)調(diào)用是功能調(diào)用的抽象
函數(shù)之間的來回自動跳轉(zhuǎn)的基礎(chǔ)是內(nèi)存堆棧區(qū)的支持
結(jié)構(gòu)體 結(jié)構(gòu)體是對多個不同類型的多個系統(tǒng)特征的抽象
指針 鏈表是多個不同類型的多個系統(tǒng)特征集合的抽象
2.教學(xué)方式
計(jì)算思維的本質(zhì)是抽象和自動化。C語言程
序設(shè)計(jì)課程一般都是面向大一新生,理解抽象和自動化進(jìn)而培養(yǎng)計(jì)算思維,對于還處在計(jì)算機(jī)學(xué)習(xí)起點(diǎn)的學(xué)生來說是比較困難的。
對于C語言程序來說,抽象過程實(shí)際就是運(yùn)用C語言中各種符號對所描述系統(tǒng)的建模過程,培養(yǎng)抽象的計(jì)算思維方式就是培養(yǎng)使用C語言描述實(shí)際系統(tǒng)的思維過程。因此,可以通過啟發(fā)式教學(xué)方式引導(dǎo)學(xué)生思考如何使用C語言中的符號來描述系統(tǒng)??梢蕴岢鲞@樣的一系列問題:C語言中如何描述一個人的身高?如何綜合描述一個人的姓名、年齡和籍貫等?如何描述一個班中所有學(xué)生的高等數(shù)學(xué)成績?如何描述各路公共汽車站的網(wǎng)狀信息?通過啟發(fā)學(xué)生對這些問題的思考,讓學(xué)生所學(xué)的C語言中的各種符號不再“虛幻”,讓學(xué)生真正理解這些符號實(shí)際是一種建模元素,每種符號有著其特別的抽象描述能力。
對于C語言程序來說,理解自動化過程必須借助一些形象化的手段。例如,借助于Visual C++ 6.0平臺的單步調(diào)試功能,可以形象地演示上述C語言程序的自動化過程,如表3所示。
表3 C語言程序執(zhí)行過程中EIP和ESP寄存器內(nèi)容的變化
斷點(diǎn) EIP寄存器內(nèi)容 ESP寄存器內(nèi)容 當(dāng)前棧頂函數(shù)
r=2.0;語句 00401068 0013FF24 main函數(shù)
area=s(r);語句 00401076 0013FF24 main函數(shù)
return r*r;語句 00401020 0013FF18 s函數(shù)
printf("area=%f",area);語句 00401089 0013FF24 main函數(shù)
從表3可以看出,隨著EIP寄存器內(nèi)容的增加,main函數(shù)中的語句順序自動執(zhí)行,即從語句“r=2.0”到語句“area=s(r)”再到語句“printf("area=%f",area)”。ESP寄存器是另一個重要的寄存器,它始終存放棧頂?shù)牡刂?。隨著main函數(shù)對s函數(shù)的調(diào)用開始,棧頂工作函數(shù)由main函數(shù)變化為s函數(shù);當(dāng)s函數(shù)調(diào)用結(jié)束后,棧頂工作函數(shù)又由s函數(shù)回到main函數(shù)。
3.考核內(nèi)容
針對C語言程序設(shè)計(jì)課程的計(jì)算思維培養(yǎng)要求,考核方式上必須從以考查語言的語法知識為主轉(zhuǎn)變?yōu)橐钥疾閷W(xué)生的系統(tǒng)建模能力和算法設(shè)計(jì)能力為主。
系統(tǒng)建模能力的考查主要針對計(jì)算思維的抽象特征。例如,可以給出各種系統(tǒng)特征,考查學(xué)生使用數(shù)據(jù)類型進(jìn)行描述的能力。
算法設(shè)計(jì)能力的考查主要針對計(jì)算思維的自動化特征。當(dāng)然,C語言程序設(shè)計(jì)課程中涉及的都是一些如迭代、枚舉和排序等簡單算法??蓪⑦@些算法封裝成各種函數(shù)來進(jìn)行調(diào)用,以考查函數(shù)中順序語句的執(zhí)行以及函數(shù)間的伴隨參數(shù)傳遞的跳轉(zhuǎn)來理解自動化過程。因此,必須以簡單算
法設(shè)計(jì)和函數(shù)調(diào)用為重點(diǎn)考核內(nèi)容,突出對函數(shù)接口設(shè)計(jì)和算法流程設(shè)計(jì)的考核。
參考文獻(xiàn):
[1] Jeannette M. Wing. Computational Thinking[J]. Communications of the ACM, 2006, 49(3):33-35.
[2] 陳國良. 計(jì)算思維[J]. 中國計(jì)算機(jī)學(xué)會通訊,2012,8(1):31-34.
[3] 李廉. 計(jì)算思維――概念與挑戰(zhàn)[J]. 中國大學(xué)教學(xué),2012(1):7-12.
[4] 張耀文. 基于計(jì)算思維的程序設(shè)計(jì)課程案例教學(xué)法研究[J]. 重慶電子工程職業(yè)學(xué)院學(xué)報(bào),2012,21(3):149-150.
[5] 吳紹兵. 計(jì)算思維和程序設(shè)計(jì)能力的培養(yǎng)[J]. 計(jì)算機(jī)教育,2011(16):11-14.
關(guān)鍵詞:結(jié)構(gòu)化程序設(shè)計(jì);順序結(jié)構(gòu);選擇結(jié)構(gòu);循環(huán)結(jié)構(gòu);算法
當(dāng)前,計(jì)算機(jī)技術(shù)飛速發(fā)展,程序設(shè)計(jì)技術(shù)已從結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)向面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)過渡,對一個規(guī)模較大的應(yīng)用程序,總體框架是由面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)搭而成,而在局部實(shí)現(xiàn)時仍需采用結(jié)構(gòu)化程序設(shè)計(jì)技術(shù)。C語言是一種很好的結(jié)構(gòu)化程序設(shè)計(jì)語言,因此,筆者論述了C中的的結(jié)構(gòu)化程序設(shè)計(jì)的方法。
結(jié)構(gòu)化程序設(shè)計(jì)(STRUCTURED PROGRAMING,簡稱SP)的概念是由荷蘭學(xué)者E·W.DUKSTRA等人在20世紀(jì)60年代后期提出的,是以模塊化設(shè)計(jì)為中心,將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計(jì),也就是將—個大的計(jì)算任務(wù)劃分為一個個比較小的任務(wù),這些小任務(wù)均由函數(shù)來完成。而函數(shù)既可以是C的標(biāo)準(zhǔn)庫函數(shù)。也可以是自定義函數(shù)。在C中,一個具備一定規(guī)模的C程序往往是由多個函數(shù)組成,其中必有一個名為main的主函數(shù),由main來調(diào)用其他函數(shù),必要的話,其他函數(shù)還可以調(diào)用另外的函數(shù)。同一函數(shù)可以被一個或多個函數(shù)調(diào)用一次或多次。模塊的獨(dú)立性還為擴(kuò)充已有的系統(tǒng)、建立新系統(tǒng)帶來了不少的方便,因?yàn)槲覀兛梢猿浞掷矛F(xiàn)有的模塊作積木式的擴(kuò)展。
結(jié)構(gòu)化程序設(shè)計(jì)的思想是一個程序的任何邏輯問題,均可用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這3種基本結(jié)構(gòu)來描述。順序結(jié)構(gòu)的程序流程是按語句的書寫順序依次執(zhí)行;選擇結(jié)構(gòu)是對給定條件進(jìn)行判斷,根據(jù)判斷結(jié)果決定執(zhí)行兩分支中的一個分支或多分支中的一個分支;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個程序段。實(shí)現(xiàn)這些程序流程的語句都是流程控制語句。流程控制語句在程序設(shè)計(jì)中起著重要的作用,通過3種基本控制結(jié)構(gòu)使結(jié)構(gòu)化程序具有唯一的人口和出口,沒有死循環(huán),而且程序的靜態(tài)形式與動態(tài)執(zhí)行形式之間具有良好的對應(yīng)關(guān)系。在C語言中,有4種語句是順序執(zhí)行的:①空語句,光有一個分號“;”作為語句結(jié)束符,它表示什么也不做。②表達(dá)式語句,表達(dá)式后面加一個分號,表達(dá)式語句主要有賦值語句、自加減運(yùn)算符構(gòu)成的語句和逗號表達(dá)式語句。③函數(shù)調(diào)用語句,它是由一個函數(shù)調(diào)用加上一個分號組成的。④復(fù)合語句,由“{”和“}”把一些變量說明和語句組合放在一起,又稱為語句塊。選擇語句有if語句和switch語句。循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句如continue,break,goto等。順序結(jié)構(gòu),選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)共同作為各種復(fù)雜程序的基本構(gòu)造單元,由這3種結(jié)構(gòu)經(jīng)過反復(fù)嵌套構(gòu)成的程序稱為結(jié)構(gòu)化程序,也就是說,結(jié)構(gòu)化程序是由上述3種基本結(jié)構(gòu)組成的。但如果在編程過程中無限制地使用轉(zhuǎn)移語句(goto),會使程序的控制流程強(qiáng)制性地向前或向后跳轉(zhuǎn)而導(dǎo)致程序的流程無序可循,結(jié)構(gòu)雜亂無章。結(jié)構(gòu)化構(gòu)造減少了程序的復(fù)雜性,提高了可靠性、可測試性和可維護(hù)性,使用少數(shù)的基本結(jié)構(gòu),就可使程序邏輯結(jié)構(gòu)清晰,易讀易懂,并且容易驗(yàn)證程序的正確性。對—個初學(xué)計(jì)算機(jī)語言的人來說。最重要的就是要有正確的程序流程概念,不僅要懂得而且要靈活應(yīng)用。由此可見,用結(jié)構(gòu)化方法設(shè)計(jì)的結(jié)構(gòu)是清晰的,有利于編寫出結(jié)構(gòu)良好的程序。因此。結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則可以概括為自頂向下,逐步求精,模塊化,限制使用goto語句。將程序設(shè)計(jì)針對的問題進(jìn)行分解,直到分解到對應(yīng)于一個個功能更簡單,又獨(dú)立的模塊,每個模塊再分解到上述3種基本程序結(jié)構(gòu)。
關(guān)鍵詞:C語言;程序設(shè)計(jì);經(jīng)典教材;計(jì)算機(jī)教育
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B
1引言
只要人們提到學(xué)習(xí)C語言,都會不由自主地和譚浩強(qiáng)三個字聯(lián)系在一起,特別是20世紀(jì)80年代以后的學(xué)生,都是在譚老師的《BASIC程序設(shè)計(jì)》、《FORTRAN語言》、《C程序設(shè)計(jì)》的指引下走過來的。特別是20世紀(jì)的90年代中后期,全國非計(jì)算機(jī)專業(yè)學(xué)生的計(jì)算機(jī)應(yīng)用能力等級考試,將C語言納入到考試的范疇,C語言便進(jìn)入大學(xué)計(jì)算機(jī)公共基礎(chǔ)課的講堂,譚老師的《C程序設(shè)計(jì)》因?yàn)橄到y(tǒng)性強(qiáng)、通俗易懂、例題豐富,并且實(shí)用性強(qiáng),很適合初學(xué)者,瞬時風(fēng)靡各大高校,成為許多理工科專業(yè)學(xué)生書包中的必備書籍。多年的一線教學(xué)體會,我始終推薦該書為使用教材或主要參考書。
2適用各類學(xué)習(xí)對象
筆者從20世紀(jì)90年代中期開始講授C語言,至今已有15年,授課對象有計(jì)算機(jī)專業(yè)和非計(jì)算機(jī)專業(yè)的學(xué)生,也有大專生和社會上成人教育的函授學(xué)員,使用的教材主要是譚老師的《C程序設(shè)計(jì)》,從第一版到第二版、第三版,同學(xué)們都覺得這本書好,從沒有學(xué)生對選用這本教材提出異議。事實(shí)上,國內(nèi)許多高校的非計(jì)算機(jī)專業(yè)用譚老師的書作為“C語言程序設(shè)計(jì)”課的教材,而且許多高校的計(jì)算機(jī)專業(yè)同樣也用譚教授的書作為“C語言程序設(shè)計(jì)”課的教材,自學(xué)C語言程序設(shè)計(jì)的讀者更是不約而同地選擇譚教授的書作為叩開C語言大門的入門書。
最初學(xué)習(xí)C語言的主要是計(jì)算機(jī)專業(yè)學(xué)生,而且大都是作為第二語言開設(shè)的,后來才逐漸演變成作為第一語言,而部分非計(jì)算機(jī)專業(yè)的學(xué)生也有這種歷程。當(dāng)C語言作為第一語言開設(shè)后,《C程序設(shè)計(jì)》的第二版便增加了“算法”,并安排在第二章(C語言概述之后),使學(xué)生首先掌握常用算法(如求一批數(shù)的累加和、累乘積,判斷某年是否為閏年,判斷一個大于等于3的正整數(shù)是否為素?cái)?shù)等算法)的編程思想,而后再講解具體的語法定義、規(guī)則,以及算法的具體實(shí)現(xiàn),將程序語言的講解與算法的分析有機(jī)地結(jié)合起來,同時知識的講解有螺旋式上升的趨勢,非常符合初學(xué)者的認(rèn)知規(guī)律,受到各種學(xué)習(xí)對象的歡迎。記得有一年上成教的課,當(dāng)時成教教材管理部門選用了其他教材并發(fā)給了學(xué)生,筆者在第一次上課時便將譚老師的《C程序設(shè)計(jì)》作為主要的參考書推薦給了學(xué)生。上了兩次課后,許多同學(xué)反映:“老師,我們這本教材沒有譚浩強(qiáng)那本講得清楚”,筆者后來向成教學(xué)院的有關(guān)人員提出下一屆更換教材的建議,以后使用的教材都是譚老師的《C程序設(shè)計(jì)》這本教材。
3內(nèi)容全面、結(jié)構(gòu)清晰
《C程序設(shè)計(jì)》一書涵蓋了程序設(shè)計(jì)基礎(chǔ)知識和C語言程序設(shè)計(jì)的全部內(nèi)容,并介紹了大量常用算法。在C語言中,數(shù)據(jù)類型豐富,運(yùn)算符也比較多,程序設(shè)計(jì)自由度大,這些都給初學(xué)者帶來了較大的學(xué)習(xí)難度。本書從C語言的結(jié)構(gòu)開始,從最簡單的輸出“This is a C program.”、“求兩數(shù)之和”、“求兩個數(shù)中最大者”實(shí)例出發(fā),將基本的程序結(jié)構(gòu)中應(yīng)至少有一個輸出、最簡單的變量定義和使用、C程序是由函數(shù)構(gòu)成的知識點(diǎn)講解得非常清晰,只要懂點(diǎn)英文,就能讀懂程序。進(jìn)而介紹具體的數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、基本的輸入輸出函數(shù),使初學(xué)者很快就能編寫出比較簡單的程序,看到自己的學(xué)習(xí)效果,很有成就感。而后開始介紹稍復(fù)雜的程序結(jié)構(gòu)(選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu))和數(shù)據(jù)類型(數(shù)組),并結(jié)合圖例講解和實(shí)現(xiàn)常用的算法。在函數(shù)一章通過利用前面的講過的實(shí)例復(fù)習(xí)已學(xué)的知識點(diǎn),同時也降低了學(xué)習(xí)函數(shù)的難度。在讀者會編寫基本的C程序后,才開始介紹C語言的特色部分,如編譯預(yù)處理、指針、結(jié)構(gòu)體、共同體、位運(yùn)算文件等,將C語言程序設(shè)計(jì)的知識點(diǎn)全部展開,難度逐漸地增加,而沒有采取在講解函數(shù)之前先講解指針的做法。這種循序漸進(jìn)、螺旋式的教學(xué)內(nèi)容安排非常符合認(rèn)知規(guī)律。
4深入淺出、講解透徹
大學(xué)教材是供人們使用的,它既用于老師教,又供學(xué)生自學(xué),也可作為有關(guān)人員的參考用書。它不但要強(qiáng)調(diào)基礎(chǔ)知識和系統(tǒng)的完整性,而且也能使人通過自學(xué)就可能進(jìn)入一個新的發(fā)展領(lǐng)域。這就要求一本好的教材既要內(nèi)容完整,同時又必須能夠做到深入淺出,講解透徹?!禖程序設(shè)計(jì)》一書各個章節(jié)的編寫通過提出問題、分析問題、解決問題,然后再歸納總結(jié)的方法,將復(fù)雜難懂的抽象概念與實(shí)際應(yīng)用實(shí)例結(jié)合,與形象的比喻科學(xué)地結(jié)合,使其變得容易理解,并與計(jì)算機(jī)的基礎(chǔ)知識相結(jié)合。如在講解遞歸算法時先用求人的年齡問題來講解遞推和回歸的過程,而后才講解經(jīng)典的漢諾塔問題,同時給出了詳盡的數(shù)學(xué)公式推導(dǎo)過程,并配以圖例說明。又如在介紹指針概念中“間接訪問”一詞時,使用了生動的比喻:“為安全起見,將A鑰匙放到另一抽屜B中鎖起來,若果需要打開A抽屜,就需要先找出B鑰匙,打開B抽屜,取出A鑰匙,再打開A抽屜,取出A抽屜中之物,這就是‘間接訪問’?!边@使讀者不僅理解了“間接訪問”概念,也加深了對指針概念的理解。再如在介紹變量的存儲類型時、介紹指針時都對計(jì)算機(jī)的存儲管理作了清楚的論述。
該書的內(nèi)容重點(diǎn)突出,難點(diǎn)分散,對C語言中最基本和常用的部分進(jìn)行了詳細(xì)的分析和講解,凡是涉及的內(nèi)容,都講得非常透徹、詳盡。
5例題難易適度、習(xí)題豐富、教學(xué)資料齊全
多年的課堂教學(xué)過程中,總能體會到本書中例題和習(xí)題選擇的難度非常適宜,如講解循環(huán)結(jié)構(gòu)時選用計(jì)算“1+2+…+100”作為入門的例題,習(xí)題中便有計(jì)算“1!+2!+…+ 20!”之和,既有相似之處又有新舊知識(循環(huán)結(jié)構(gòu)的使用和前面介紹的數(shù)據(jù)類型及其表示范圍)的結(jié)合。另外本書通過豐富的習(xí)題來豐富常用的實(shí)用算法。如在循環(huán)一章的習(xí)題中將迭代法和二分法引入,通過求方程的根來理解其算法含義和實(shí)現(xiàn)過程,在數(shù)組一章的習(xí)題中引入了“篩選法”、“選擇排序法”、“楊輝三角形”等。
計(jì)算機(jī)程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,學(xué)習(xí)時不僅僅需要選擇合適的例題,還需要編寫足夠代碼量的程序,僅靠閱讀教教材或聽課是不可能掌握編程技能的??傆腥吮г拐f:“課堂上聽得很明白,就是課下編程困難”,而學(xué)習(xí)程序設(shè)計(jì)最重要的環(huán)節(jié)就是實(shí)踐。《C程序設(shè)計(jì)》一書中每章都附有大量的各種類型習(xí)題,并且有配套的習(xí)題解答,這不僅有利于學(xué)生開闊視野,豐富知識,而且有益于復(fù)習(xí)、鞏固、加深理解和掌握課上所學(xué)的知識,提高他們的學(xué)習(xí)興趣,培養(yǎng)自學(xué)能力,也便于教師設(shè)計(jì)實(shí)驗(yàn)課的教學(xué)內(nèi)容。近年來譚老師講授《C程序設(shè)計(jì)》的教學(xué)錄像也已成為很多教師講課前的觀摩學(xué)習(xí)課程。
6強(qiáng)調(diào)應(yīng)用意識和應(yīng)用技能
教材要起一種引導(dǎo)作用,要強(qiáng)調(diào)應(yīng)用意識和應(yīng)用技巧,應(yīng)特別注意學(xué)科間的聯(lián)系?!禖程序設(shè)計(jì)》一書將實(shí)際生活中數(shù)學(xué)問題的解決算法、工程應(yīng)用的常用數(shù)值分析方法均作為本書的實(shí)例和習(xí)題,這不僅有助于培養(yǎng)學(xué)生的邏輯思維,而且也有助于學(xué)生分析問題和解決問題的應(yīng)用能力。正因如此,初學(xué)程序設(shè)計(jì)的學(xué)生可以達(dá)到熟練運(yùn)用C語言進(jìn)行小規(guī)模應(yīng)用開發(fā)的能力,許多非計(jì)算機(jī)專業(yè)的人士通過自學(xué)這本教材,打下了程序設(shè)計(jì)的基礎(chǔ),后來便使用C語言開發(fā)出本專業(yè)的應(yīng)用軟件。
7結(jié)論
大學(xué)教材非常重要。譚老師為人們寫下了諸如《BASIC語言》、《FORTRAN語言》、《C程序設(shè)計(jì)》等深受廣大教師和學(xué)生歡迎的經(jīng)典之作。譚老師的《C程序設(shè)計(jì)》一書對我國普及C語言程序設(shè)計(jì)起了很大的推動作用,他為計(jì)算機(jī)教育的普及不懈地努力,取得了巨大的成就,功不可沒,真正做到了“桃李滿天下”。
參考文獻(xiàn):
級別:統(tǒng)計(jì)源期刊
榮譽(yù):中國優(yōu)秀期刊遴選數(shù)據(jù)庫
級別:統(tǒng)計(jì)源期刊
榮譽(yù):中國優(yōu)秀期刊遴選數(shù)據(jù)庫
級別:北大期刊
榮譽(yù):中國優(yōu)秀期刊遴選數(shù)據(jù)庫
級別:部級期刊
榮譽(yù):Caj-cd規(guī)范獲獎期刊
級別:省級期刊
榮譽(yù):中國期刊全文數(shù)據(jù)庫(CJFD)