程序設(shè)計的結(jié)構(gòu)范文

時間:2023-07-13 17:32:07

導(dǎo)語:如何才能寫好一篇程序設(shè)計的結(jié)構(gòu),這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務(wù)員之家整理的十篇范文,供你借鑒。

程序設(shè)計的結(jié)構(gòu)

篇1

關(guān)鍵詞:程序設(shè)計基礎(chǔ);數(shù)據(jù)結(jié)構(gòu);計算思維;教學(xué)銜接

0、引言

程序設(shè)計基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)是計算機類專業(yè)的兩門專業(yè)基礎(chǔ)課,在計算機類專業(yè)教學(xué)中具有舉足輕重的作用,都旨在培養(yǎng)學(xué)生的編程能力和計算思維能力,并為后續(xù)課程打下堅實的專業(yè)基礎(chǔ),但在這兩門課程的教學(xué)過程中,存在一系列問題,嚴(yán)重影響課程的教學(xué)效果。筆者分析和研究產(chǎn)生這些實際問題的原因,對這兩門課程的知識融合、內(nèi)容銜接以及教學(xué)實踐等進行探討,提出切實可行的解決方案,更好地實現(xiàn)兩門課程的教學(xué)目標(biāo)。

1、課程教學(xué)內(nèi)容和教學(xué)目標(biāo)

程序設(shè)計基礎(chǔ)課程是學(xué)生接觸的第一門專業(yè)基礎(chǔ)課,也是進行計算機編程的入門課程。課程的教學(xué)目標(biāo)是使學(xué)生掌握程序設(shè)計的基本方法,培養(yǎng)其擁有良好的程序設(shè)計風(fēng)格、較強的軟件開發(fā)能力以及一定的計算思維能力,為后續(xù)課程打下良好的基礎(chǔ)。

數(shù)據(jù)結(jié)構(gòu)是繼程序設(shè)計基礎(chǔ)課程之后的一門綜合專業(yè)基礎(chǔ)課,是計算機類專業(yè)的核心課程之一,具有舉足輕重的作用。它是程序設(shè)計基礎(chǔ)課程所講知識的自然延伸和具體應(yīng)用。對數(shù)據(jù)結(jié)構(gòu)的理解、掌握和應(yīng)用拓展,將對學(xué)生解決具體實際問題時的數(shù)據(jù)分析、數(shù)據(jù)組織、數(shù)據(jù)處理和編程能力有著深遠(yuǎn)的影響。課程的教學(xué)目標(biāo)是培養(yǎng)學(xué)生縝密的邏輯思維和數(shù)據(jù)抽象能力以及學(xué)生在軟件設(shè)計領(lǐng)域中科學(xué)的計算思維能力,幫助學(xué)生將數(shù)據(jù)結(jié)構(gòu)和算法與具體的編程實現(xiàn)相結(jié)合并靈活地應(yīng)用到實踐和工程實際中。

2、兩門課程間的關(guān)系

從程序與數(shù)據(jù)結(jié)構(gòu)本身的關(guān)系來說,一個好的程序離不開合適的數(shù)據(jù)結(jié)構(gòu),而數(shù)據(jù)結(jié)構(gòu)中算法的實現(xiàn)離不開具體的程序設(shè)計。在計算機類專業(yè)的課程體系中,數(shù)據(jù)結(jié)構(gòu)和程序設(shè)計基礎(chǔ)課程雖然獨立開設(shè),但是它們之間的聯(lián)系是緊密的。在課程設(shè)置上,程序設(shè)計基礎(chǔ)是數(shù)據(jù)結(jié)構(gòu)的前導(dǎo)課程,兩門課程一脈相承,不可分割。

學(xué)生對程序設(shè)計基礎(chǔ)課程的掌握程度、具備的計算思維和編程能力,直接關(guān)系到以程序設(shè)計語言實現(xiàn)算法的數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)效果。數(shù)據(jù)結(jié)構(gòu)課程通過創(chuàng)造性思維的訓(xùn)練,重點突出數(shù)據(jù)抽象與程序抽象能力的培養(yǎng),從而進一步提升學(xué)生的計算思維能力和編程能力,但兩門課程在實際教學(xué)中存在一些問題,主要原因是課程設(shè)置、教學(xué)內(nèi)容、教學(xué)方法和教學(xué)實踐方式等多方面存在缺陷。經(jīng)分析,對程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課程進行知識整合和內(nèi)容銜接,采用適當(dāng)?shù)慕虒W(xué)方式,改進教學(xué)實踐是探討和研究的主要內(nèi)容。

3、兩門課程在實際教學(xué)中存在的銜接問題

3.1 兩門課程教學(xué)內(nèi)容的脫離

目前,在實際教學(xué)中,程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課程雖然關(guān)系緊密,但是一直被設(shè)定為兩門完全獨立的課程,而且教師在制訂教學(xué)大綱和教學(xué)目標(biāo)時容易忽視兩門課程問的聯(lián)系,在教學(xué)過程中出現(xiàn)一些盲區(qū),要么兩門課程在教學(xué)內(nèi)容上出現(xiàn)不同程度的交叉,要么出現(xiàn)知識銜接的斷層,令學(xué)生對兩門課程的內(nèi)在聯(lián)系沒有整體概念和認(rèn)識,從而導(dǎo)致不能深入系統(tǒng)地學(xué)習(xí)相關(guān)知識。尤其是先行課程序設(shè)計基礎(chǔ)的教學(xué)內(nèi)容和課程案例完全脫離了數(shù)據(jù)結(jié)構(gòu)課程,使數(shù)據(jù)結(jié)構(gòu)中最頻繁使用的知識和內(nèi)容在程序設(shè)計基礎(chǔ)課程中甚少提及,不能為數(shù)據(jù)結(jié)構(gòu)課程的講解打下扎實的程序設(shè)計基礎(chǔ)。

3.2 程序設(shè)計編程語言與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)語言不一致

程序設(shè)計基礎(chǔ)課程所教授的編程語言與數(shù)據(jù)結(jié)構(gòu)教材或?qū)嶒炈褂玫膶崿F(xiàn)語言不一致,如將C++語言作為程序設(shè)計基礎(chǔ)的教授語言,而在數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)上選擇c語言或Java語言,以至于數(shù)據(jù)結(jié)構(gòu)的理論教學(xué)與具體上機編程實現(xiàn)脫節(jié),嚴(yán)重影響了上機實驗和課程設(shè)計環(huán)節(jié)。

3.3 程序設(shè)計方法與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)方法不一致

程序設(shè)計基礎(chǔ)課程中或注重面向過程的程序設(shè)計方法,或注重面向?qū)ο蟮某绦蛟O(shè)計方法,但在數(shù)據(jù)結(jié)構(gòu)課程中卻很難利用前導(dǎo)課程中學(xué)到的程序設(shè)計方法實現(xiàn)相關(guān)的數(shù)據(jù)結(jié)構(gòu)和算法,從而影響了學(xué)生對數(shù)據(jù)結(jié)構(gòu)課程知識的應(yīng)用與實現(xiàn)。另一方面,學(xué)生在學(xué)習(xí)過程中沒有充分理解數(shù)據(jù)結(jié)構(gòu)課程的作用和實際意義,以至于在實際項目和問題中不知使用什么方法(面向過程或面向?qū)ο螅┓治鼋鉀Q問題,不知如何運用數(shù)據(jù)結(jié)構(gòu)知識解決實際問題。

3.4 前導(dǎo)課程對后續(xù)課程實踐環(huán)節(jié)的影響

數(shù)據(jù)結(jié)構(gòu)實驗環(huán)節(jié)相對課堂理論環(huán)節(jié)較薄弱。此問題的存在多半是因為數(shù)據(jù)結(jié)構(gòu)具體實現(xiàn)的關(guān)鍵技術(shù)在程序設(shè)計基礎(chǔ)課中未被講解或強調(diào),在進行數(shù)據(jù)結(jié)構(gòu)算法從理論到偽代碼、再由偽代碼到真代碼轉(zhuǎn)換的過程中難以真正編程實現(xiàn),使學(xué)生對數(shù)據(jù)結(jié)構(gòu)的理解和掌握僅停留在抽象層、概念層、理論層,難以上升到實現(xiàn)層,從而影響學(xué)生的學(xué)習(xí)興趣和積極性。同時,課程中的實踐項目過于單一且相對獨立,使實踐環(huán)節(jié)與實際項目的聯(lián)系過于松散,學(xué)生運用所學(xué)知識解決實際問題的能力和實際工程能力很難得以鍛煉。

3.5 缺少計算思維能力的培養(yǎng),缺乏理論知識與實際應(yīng)用的聯(lián)系

提高學(xué)生計算思維能力是程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課程共同的目標(biāo)。計算思維是抽象的多個層次上的思維,而抽象是表達(dá)實際的方法。然而,現(xiàn)行教學(xué)方法過多關(guān)注程序設(shè)計和數(shù)據(jù)結(jié)構(gòu)知識點的講解,缺乏對學(xué)生思維能力的培養(yǎng)。

如果缺乏理論聯(lián)系實際,那么將影響學(xué)生計算思維的培養(yǎng)。數(shù)據(jù)結(jié)構(gòu)中的知識又太抽象,如果缺乏相應(yīng)的實際案例對抽象知識加以應(yīng)用,那么就會導(dǎo)致學(xué)生不知道怎樣將所學(xué)的知識應(yīng)用到實際中,缺乏具體問題具體分析和解決的能力。

3.6 教師本身知識結(jié)構(gòu)欠缺,上機實踐指導(dǎo)教師數(shù)量不足

授課教師知識結(jié)構(gòu)的缺乏將導(dǎo)致一些現(xiàn)實問題:如果程序設(shè)計基礎(chǔ)的教師不懂?dāng)?shù)據(jù)結(jié)構(gòu),那么其自然不會將相關(guān)知識引入課堂,同時也缺乏用所教授的語言具體實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中結(jié)構(gòu)和算法的能力;如果數(shù)據(jù)結(jié)構(gòu)的教師缺乏相關(guān)編程語言知識,那么就會給上機輔導(dǎo)帶來困難。同時,兩門課程具有很強的實踐性,若上機實踐輔導(dǎo)教師不足,將不利于學(xué)生編程能力的提升以及相關(guān)軟件大賽學(xué)生的培養(yǎng)和輔導(dǎo)。

針對以上實際教學(xué)中存在的問題,可知為提高程序設(shè)計基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)效果,根據(jù)計算機類專業(yè)這兩門課程教學(xué)內(nèi)容和目標(biāo),對兩門課程進行知識整合和內(nèi)容銜接的必要性,對課程銜接的方法和思路等進行探討勢在必行。同時,課程教學(xué)不僅要關(guān)注知識的傳授,還要培養(yǎng)學(xué)生主動獲取知識并綜合已有知識創(chuàng)造新知識的能力。

4、程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課程銜接的新方法和思路

4.1 做好兩門課程教學(xué)內(nèi)容的融合和銜接

教師需緊密結(jié)合計算機類專業(yè)的培養(yǎng)目標(biāo),精心設(shè)計程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)內(nèi)容,既要滿足課程的專業(yè)基礎(chǔ)性,又要滿足后續(xù)課程學(xué)習(xí)的需要,嚴(yán)密制訂教學(xué)大綱,做好程序設(shè)計基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)教學(xué)內(nèi)容的銜接以及相關(guān)教材的選定。

在程序設(shè)計基礎(chǔ)課程教學(xué)中,教師需要關(guān)注學(xué)生計算思維能力的培養(yǎng),將重點放在講解思路上,教學(xué)生如何對問題進行抽象,還要介紹一些簡單的基礎(chǔ)算法和數(shù)據(jù)結(jié)構(gòu)。程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)的聯(lián)系過程必須做到循序漸進,若引入的數(shù)據(jù)結(jié)構(gòu)相關(guān)知識過難,會打擊學(xué)生的學(xué)習(xí)積極性。例如,教師講數(shù)組時可引入幾種數(shù)據(jù)結(jié)構(gòu)中簡單的排序算法冒泡排序、選擇排序等;講完指針和結(jié)構(gòu)體后可引入最基本的數(shù)據(jù)結(jié)構(gòu)――鏈表;講完嵌套函數(shù)調(diào)用后可引入“遞歸”,它是數(shù)據(jù)結(jié)構(gòu)中解決問題的常見思想和算法,可以通過簡單的遞歸函數(shù)幫助學(xué)生理解遞歸思想和遞歸調(diào)用過程,這些是理解數(shù)據(jù)結(jié)構(gòu)中復(fù)雜遞歸函數(shù)的基礎(chǔ)。在程序設(shè)計基礎(chǔ)教學(xué)中,只講遞歸函數(shù)的簡單應(yīng)用,而在數(shù)據(jù)結(jié)構(gòu)教學(xué)中,需要介紹遞歸函數(shù)的復(fù)雜應(yīng)用:棧、樹、八皇后問題、N個數(shù)的全排列等。圍繞“遞歸”這一重要知識點,從易到難并結(jié)合課程本身特點進行理論分析,將有益于整合課程教學(xué)內(nèi)容,引導(dǎo)學(xué)生循序漸進地學(xué)習(xí)和思考。

針對在程序設(shè)計基礎(chǔ)課程中不重要但在數(shù)據(jù)結(jié)構(gòu)及算法中被廣泛使用的知識點,教師需要在講解程序設(shè)計課程時將其點出并告訴學(xué)生此知識在后續(xù)數(shù)據(jù)結(jié)構(gòu)課中的重要性,引起學(xué)生對該知識點的興趣和重視,如指針的靈活使用、結(jié)構(gòu)體類型的復(fù)雜應(yīng)用、類型重命名、類的拷貝構(gòu)造函數(shù)(深拷貝)、函數(shù)模板、類模版等。

同時,教師要對程序設(shè)計基礎(chǔ)課程內(nèi)容進行適當(dāng)補充和擴充,如增加c++函數(shù)模板、類模板的相關(guān)知識,為將泛型程序設(shè)計、c++的STL引人數(shù)據(jù)結(jié)構(gòu)課程奠定知識基礎(chǔ),縮小教學(xué)知識與實際運用的距離,提高學(xué)生的動手編程能力和知識運用能力。

4.2 保證程序設(shè)計編程語言與數(shù)據(jù)結(jié)構(gòu)實現(xiàn)語言的一致

程序設(shè)計基礎(chǔ)課程所教授的編程語言要與數(shù)據(jù)結(jié)構(gòu)教材或?qū)嶒炈褂玫木幊陶Z言一致,這樣不僅能大大提高學(xué)生的編程能力,還有利于數(shù)據(jù)結(jié)構(gòu)課程的上機實現(xiàn)。

4.3 將面向?qū)ο笏枷胍氤绦蛟O(shè)計與數(shù)據(jù)結(jié)構(gòu)中

隨著程序設(shè)計方法從傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計演化到面向?qū)ο蟪绦蛟O(shè)計,數(shù)據(jù)結(jié)構(gòu)在面向?qū)ο蟪绦蛟O(shè)計中也將成為面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu),且將隨著程序設(shè)計理論和技術(shù)的發(fā)展而不斷變化發(fā)展。在程序設(shè)計基礎(chǔ)課程中講授面向?qū)ο蟮木幊陶Z言如c++語言,既可以實現(xiàn)面向過程的數(shù)據(jù)結(jié)構(gòu),又能實現(xiàn)面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)課程采用面向?qū)ο蟮挠^點講授并以C++語言作為算法的描述工具,從而強化數(shù)據(jù)結(jié)構(gòu)基本知識和面向?qū)ο蟾呒壋绦蛟O(shè)計基本能力的雙基訓(xùn)練以及實際動手能力培養(yǎng)。在設(shè)計數(shù)據(jù)結(jié)構(gòu)實踐項目時,將面向?qū)ο蟮某绦蛟O(shè)計思想、面向?qū)ο蟮某绦蛟O(shè)計語言和數(shù)據(jù)結(jié)構(gòu)課程教學(xué)內(nèi)容恰當(dāng)?shù)厝诤?,有效整合兩門課程中的重疊部分,突出各自的側(cè)重點,符合當(dāng)前軟件設(shè)計思想和軟件開發(fā)趨勢。

4.4 加強課程中計算思維能力的培養(yǎng)

在程序設(shè)計和數(shù)據(jù)結(jié)構(gòu)的教學(xué)方法上,將面向語法為中心的教學(xué)逐漸轉(zhuǎn)變?yōu)槊嫦騿栴}求解的教學(xué),從問題出發(fā)采用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),將其抽象成解決問題的算法描述,用程序設(shè)計語言實現(xiàn)問題求解,使課程從過去的僅講授孤立的知識點,轉(zhuǎn)變?yōu)橹v授計算思維和問題求解的過程,從而達(dá)到突出思維方法訓(xùn)練的目的。在程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)授課時盡量將理論聯(lián)系實際,將知識點解釋和應(yīng)用為身邊容易理解的真實案例。例如,講“圖”時,可以把現(xiàn)在流行的復(fù)雜網(wǎng)絡(luò)、社交網(wǎng)絡(luò)引入其中;講解“隊列”時,可將春節(jié)買票引入其中,讓學(xué)生從身邊的例子理解理論知識的具體應(yīng)用。對有些案例可以提倡“一題多解”,不局限于一種數(shù)據(jù)結(jié)構(gòu)、解題思路和實現(xiàn)方法,通過一題多問、一題多解帶動學(xué)生探索、比較、尋求更好的解決途徑,達(dá)到學(xué)生分析解決問題能力的提高和計算思維能力的培養(yǎng)。

4.5 提升教師能力,配備充足的上機輔導(dǎo)教師

學(xué)校要加強程序設(shè)計基礎(chǔ)與數(shù)據(jù)結(jié)構(gòu)課程相關(guān)授課教師整體能力的提升。教師不僅要掌握自己所教授課程的知識,還要對該課程的前續(xù)及后續(xù)課程內(nèi)容有所了解,便于維護教學(xué)的整體秩序和融合學(xué)生的知識體系。同時,教師要積極參與各種軟件大賽和企業(yè)培訓(xùn),將教授的理論知識和實際項目相結(jié)合,達(dá)到應(yīng)用知識解決復(fù)雜問題的目的。此外,兩門課程的上機實踐環(huán)節(jié)要配備足量的輔導(dǎo)教師,不讓學(xué)生輸在編程入門的起跑線上。

4.6 依托程序設(shè)計競賽,提高學(xué)生的編程能力

依托全國軟件大賽、ACM大賽等程序設(shè)計競賽,將競賽題目引入程序設(shè)計基礎(chǔ)和數(shù)據(jù)結(jié)構(gòu)課堂中。此類題目強調(diào)考查學(xué)生對各種算法的應(yīng)用能力,綜合性較強,非常適合輔助學(xué)生學(xué)習(xí)和體會數(shù)據(jù)結(jié)構(gòu)的妙用,提升學(xué)生分析和解決實際問題的能力,引導(dǎo)學(xué)生將所學(xué)知識準(zhǔn)確而靈活地運用到實際生活中,大大提高學(xué)生的實踐動手和程序設(shè)計能力,促進其知識的融會貫通。另外,通過競賽等多種活動可以為學(xué)生提供展現(xiàn)程序設(shè)計能力的舞臺,激發(fā)學(xué)生學(xué)習(xí)的主動性,培養(yǎng)其計算思維能力。

例如,在教授程序設(shè)計基礎(chǔ)時,講完邏輯表達(dá)式和多重循環(huán)結(jié)構(gòu)后,可以將大賽中的邏輯推理題目引入教學(xué)中并引出常見的解題方法和思路一枚舉法,從而加深對枚舉法的認(rèn)識。通過采用數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表和線性數(shù)組兩種方式實現(xiàn)大賽中常見的約瑟夫環(huán)問題。

4.7 引入OJ平臺。加強課程實踐環(huán)節(jié)

引人在線判題(Online Judge,oJ)系統(tǒng),提高學(xué)生的實踐能力。能力需要以豐富的知識作為支撐,而實踐是能力賴以生長的土壤。在OJ系統(tǒng)中,學(xué)生可以在線提交程序源代碼,系統(tǒng)對源代碼進行編譯和執(zhí)行并通過預(yù)先設(shè)計的測試數(shù)據(jù)檢驗程序源代碼的正確性。引入0J系統(tǒng)不僅可以輔助教師批改作業(yè),減輕教師工作壓力,還可以促使學(xué)生加強平時上機編程練習(xí),通過編程排名方式提高學(xué)生的學(xué)習(xí)興趣。OJ系統(tǒng)中擁有大量題庫,可以讓學(xué)生進行上機實踐,培養(yǎng)自身的計算思維能力,提高編程能力。0J系統(tǒng)不僅可以作為程序設(shè)計基礎(chǔ)課程的實踐平臺,還可作為數(shù)據(jù)結(jié)構(gòu)課程的實踐平臺。

篇2

關(guān)鍵詞:結(jié)構(gòu)化程序設(shè)計 數(shù)據(jù)結(jié)構(gòu) 算法 設(shè)計技巧

近年來,計算機程序設(shè)計技術(shù)已從結(jié)構(gòu)化程序設(shè)計技術(shù)逐步向?qū)ο蟪绦蛟O(shè)計技術(shù)過渡,特別是當(dāng)設(shè)計一個較大規(guī)模的應(yīng)用程序時,面向?qū)ο笤O(shè)計思路成為首選??v觀計算機軟件技術(shù)的發(fā)展,在局部功能的實現(xiàn)上及功能模塊的設(shè)計上,結(jié)構(gòu)化程序設(shè)計仍然有其不可替代的獨特魅力。在結(jié)構(gòu)化程序設(shè)計中(以C語言為例),巧妙地運用一些設(shè)計技巧,對增強程序的穩(wěn)定性和可靠性,簡化程序操作步聚,提高程序的運行效率十分有效。

結(jié)構(gòu)化程序設(shè)計的概念最初是由荷蘭學(xué)者E?W?DUKSTRA等人在20世紀(jì)60年代提出的,它的基本思路是:以模塊化設(shè)計為中心,將原來較為復(fù)雜的問題簡化為一系列簡單模塊的設(shè)計,也就是將一個大的計算任務(wù)劃分為若干個較小的任務(wù),這些小任務(wù)均由函數(shù)來完成。函數(shù)既可以是C語言定義的標(biāo)準(zhǔn)庫函數(shù),也可以是自定義函數(shù)。在實際應(yīng)用程序中,一個具備一定規(guī)模的C語言程序往往由多個函數(shù)組成,其中必有一個命名為main的主函數(shù),由main來調(diào)用其他函數(shù)。必要時,其他函數(shù)還可以調(diào)用另外的函數(shù),同一函數(shù)可以被一個或多個函數(shù)調(diào)用一次或多次。

結(jié)構(gòu)化程序設(shè)計把程序歸結(jié)為用順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等三種基本結(jié)構(gòu)來描述的邏輯問題。順序結(jié)構(gòu)的程序流程是按語句的書寫順序依次執(zhí)行;在C語言中,有4種語句是順序執(zhí)行的:即空語句、表達(dá)式語句、函數(shù)調(diào)用語句及復(fù)合語句;選擇結(jié)構(gòu)是對給定條件進行判斷,根據(jù)判斷結(jié)果決定執(zhí)行兩分支中的一個分支或多分支中的一個分支,選擇語句有if語句和switch語句;循環(huán)結(jié)構(gòu)是在給定條件成立的情況下,反復(fù)執(zhí)行某個程序段,循環(huán)語句有for,while和do-while語句以及一些輔助流程轉(zhuǎn)向語句如continue,break,go to等等。以上三種結(jié)構(gòu)通過流程控制語句來實現(xiàn)。流程控制語句在程序設(shè)計中起著十分重要的作用,通過三種基本控制結(jié)構(gòu)的合理調(diào)配使結(jié)構(gòu)化程序具有唯一的入口和出口,不會出現(xiàn)死循環(huán),而且程序的靜態(tài)形式與動態(tài)執(zhí)行形式之間具有良好的對應(yīng)關(guān)系。

從以上結(jié)構(gòu)化程序的基本特點分析,結(jié)構(gòu)化程序設(shè)計主要強調(diào)的是程序。程序=算法+數(shù)據(jù)結(jié)構(gòu)+程序設(shè)計方法+語言工具和環(huán)境,其中算法是靈魂,是解決“做什么”和“怎么做”的問題;數(shù)據(jù)結(jié)構(gòu)是加工對象;語言是工具;編程需要采用合適的方法。具體解決主要問題包含以下幾個步驟:

分析問題,找出解決問題的模型根據(jù)模型設(shè)計出適合計算機特點的處理方法即算法進行編程程序,以實現(xiàn)算法上機編輯(.c)、編譯(.obj)、連接(.exe)、運行所編制的程序,直到得出正確結(jié)果對結(jié)果進行分析,整理出文字材料。

程序設(shè)計的任務(wù)不只是編寫出一個能得到正確結(jié)果的程序,還應(yīng)考慮程序的質(zhì)量,否則編寫的程序就會出現(xiàn)質(zhì)量低下、可靠性差、開發(fā)周期長、維護費用高等不良后果,即所謂的的“軟件危機”,它會嚴(yán)重阻礙計算機應(yīng)用的發(fā)展。由于大多高級語言都支持結(jié)構(gòu)化程序設(shè)計方法,其語法上都含有表示三種基本結(jié)構(gòu)的語句,所以用結(jié)構(gòu)化程序設(shè)計方法設(shè)計的模塊從結(jié)構(gòu)到程序的實現(xiàn)是直接轉(zhuǎn)換的,只需用相應(yīng)的語句結(jié)構(gòu)代替標(biāo)準(zhǔn)的控制結(jié)構(gòu)即可。筆者在實際應(yīng)用中,總結(jié)出以下幾點實用技巧。

一、通過引申法廓清思路,選準(zhǔn)目標(biāo)

“引申法”就是通過對某一結(jié)論的合理引申,結(jié)合已經(jīng)解決的問題,因勢利導(dǎo),在此基礎(chǔ)上解決相關(guān)聯(lián)的其他問題?!耙攴ā笨梢耘囵B(yǎng)人們在程序設(shè)計方面的發(fā)散思維,提高程序設(shè)計的應(yīng)變能力。問題是活的,但程序是有章可循的;語法是有限的,可解決的問題是無限的。程序設(shè)計相當(dāng)一部分工作是分析問題,找到解決問題的方法,再以相應(yīng)的語言寫出代碼。要熟練掌握一些簡單的算法,根據(jù)不同的問題,再靈活應(yīng)用。如用100元錢買100只雞,公雞、母雞、小雞分別是5元、3元、1元一只。在數(shù)學(xué)上解三元一次方程,三個未知數(shù),兩個方程好像解不出來。通過“窮舉法”,我們要費好大一番工夫才能算出結(jié)果,但是通過計算機“引申”編程運算卻不用一秒鐘即可解決問題。只有在分析實際向題的基礎(chǔ)上,以清晰的思路去設(shè)計算法,才能舉一反三,以不變應(yīng)萬變。通過“引申”法,我們可使初學(xué)者對函數(shù)設(shè)計的關(guān)鍵問題有清晰的認(rèn)識,利于從統(tǒng)籌全局的角度去考慮問題,體現(xiàn)了程序設(shè)計逐步求精的思路。

二、利用框架法培養(yǎng)全局思維和算法的整體設(shè)計能力

其具體體現(xiàn)在兩方面。一是在有了一點編程基礎(chǔ)后要利用偽代碼或流程圖,從算法設(shè)計的角度講解編程思路,而不應(yīng)拘泥于語法細(xì)節(jié),不分主次、逐條語句地講解代碼。這樣可以層次分明,突出算法設(shè)計的關(guān)鍵,利于培養(yǎng)編程思路。二是在學(xué)習(xí)重點章節(jié)函數(shù)時,由于新的算法已很少,主要是學(xué)習(xí)用函數(shù)調(diào)用的方法來重新編制以前所熟悉的程序,我們可以把著眼點放在函數(shù)的設(shè)計框架上,體現(xiàn)參數(shù)設(shè)計、返回值設(shè)計等關(guān)鍵問題,而無需細(xì)講函數(shù)體的實現(xiàn)細(xì)節(jié)。結(jié)構(gòu)化構(gòu)造減小了程序的復(fù)雜性,提高了可靠性、可測試性和可維護性,使用少數(shù)的基本結(jié)構(gòu),就可使程序邏輯結(jié)構(gòu)清晰,易讀易懂,并且容易驗證程序的正確性。

三、借助求異法引導(dǎo)新思路,啟迪新思維

結(jié)構(gòu)化程序設(shè)計方法的基本思路是:把一個復(fù)雜的問題的求解過程分階段進行,每個階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。一個固定的問題,解決的方法可能不唯一,如果能啟發(fā)人們多角度、多側(cè)面去尋求解決問題的辦法,則可激發(fā)思考的積極性,提高其學(xué)習(xí)興致。對一個初學(xué)計算機語言的人來說,最重要的就是要有正確的程序流程概念,不僅要懂得,而且要靈活應(yīng)用。由此可見,用結(jié)構(gòu)化方法設(shè)計的結(jié)構(gòu)是清晰的,有利于編寫出結(jié)構(gòu)良好的程序。在C語言中一題多解的情況有很多,有意識地引導(dǎo)新思路,鼓勵新方法,以培養(yǎng)人們在編程中的求異思維,而不是死記硬背,墨守成規(guī)。結(jié)構(gòu)化程序設(shè)計強調(diào)程序設(shè)計風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。

四、選準(zhǔn)切入口,合理劃分功能模塊“分而治之”

結(jié)構(gòu)化程序設(shè)計的關(guān)鍵在于功能模塊的選定和劃分。模塊化設(shè)計的思想實際上是一種“分而治之”的思想,把一個大任務(wù)分為若干個子任務(wù),每一個子任務(wù)的劃分以相對簡單為前提。劃分子模塊時我們應(yīng)注意模塊的獨立性,即:使一個模塊完成一項功能,耦合性愈少愈好。具體應(yīng)用時從問題本身入手,自頂向下,逐步細(xì)化,精益求精,將解決問題的步驟分解為由基本程序結(jié)構(gòu)模塊組成的通過程序流程圖、N-S圖、PAD圖表格等表示的結(jié)構(gòu)化程序框圖。在實踐應(yīng)用中往往會出現(xiàn)以下幾個問題:一是用戶要求難以在系統(tǒng)分析階段準(zhǔn)確定義,致使系統(tǒng)在交付使用時產(chǎn)生許多問題。二是用系統(tǒng)開發(fā)每個階段的成果來進行控制,不能適應(yīng)事物變化的要求。三是系統(tǒng)的開發(fā)周期較長。

為解決這些問題,我們要求模塊的設(shè)計要簡潔明了,語句的選用要直觀,不要拖泥帶水。下面是一段小程序,從中可以看出一些語句選用的技巧。

某淘寶商城為鼓勵更多網(wǎng)友光臨本店,對新老網(wǎng)友給出如下優(yōu)惠:凡是購買10件以上者,打9折;20件以上者,8.5折優(yōu)惠;30件以上者,8折優(yōu)惠,40件以上者,7.5折優(yōu)惠。如用習(xí)慣上的if嵌套語句編寫程序如下:

Main()

{float x,y;

printf(“請輸入優(yōu)惠購額款X:\n”);

scanf(“%f”,&x);

if(x

y=x;

else if(x

y=0.9*x;

else if(x

y=0.85*x;

else if(x

y=0.8*x;

else

y=0.75*x;

printf(“網(wǎng)友應(yīng)付優(yōu)惠后款額Y為:y);}

顯然,這段程序冗長,一旦情況有變化,難以擴展。轉(zhuǎn)換為switch語句結(jié)構(gòu)后,程序就變得相對簡單:

Main()

{float x,y;

Int t;

Printf(“請輸入優(yōu)惠購額款X:\n”);

Scanf(“%f”,&x);

If(x>=40)

t =4;

elst

t=(in)(x/10);

switch(t)

{case 0:y=x;break;

case1:y=0.9*x;break;

case2:y=0.85*x;break;

case3:y=0.8*x;break;

case4:y=0.75*x;break;}

printf(“網(wǎng)友應(yīng)付優(yōu)惠后款額Y為:y);}

兩種方法可謂異曲同工,但是對于程序的調(diào)試性和可維護性卻有天壤之別。在結(jié)構(gòu)化程序的編程實踐中,我們要查找某些錯誤比較困難,所以要盡可能避免出現(xiàn)這些問題。編程技巧需要在編制和調(diào)試結(jié)構(gòu)化程序時不斷總結(jié)和完善,力求找出最簡便、最直觀的方法。

總之,結(jié)構(gòu)化程序設(shè)計方法在實際應(yīng)用中有許多技巧可以合理運用,這需要我們對算法和數(shù)據(jù)結(jié)構(gòu)展開深入分析,尋找最佳結(jié)合點,有的放矢,對癥下藥;更需要在實踐中不斷總結(jié)和積累。在編寫過程中我們覺得有些程序沒什么問題,但是一上機調(diào)試,就出現(xiàn)這樣或那樣的問題,這說明程序還不完善,還需要調(diào)整或改進。當(dāng)今,高效率和快節(jié)湊的生活與工作方式對程序的設(shè)計提出了更高的要求和更苛刻的標(biāo)準(zhǔn),我們只有不斷創(chuàng)新設(shè)計理念和方法,才能編制出更多高質(zhì)量、高性能、低故障的優(yōu)質(zhì)程序。

參考文獻:

[1]林銳等編著.高質(zhì)量程序設(shè)計指南[M].北京:電子工業(yè)出版社,2002.

篇3

(河北師范大學(xué)數(shù)學(xué)與信息科學(xué)學(xué)院,河北石家莊050024)

摘要:針對計算機類本科專業(yè)數(shù)據(jù)結(jié)構(gòu)課程與Java面向?qū)ο蟪绦蛟O(shè)計課程之間的銜接問題,分析數(shù)據(jù)結(jié)構(gòu)中集合、線性表、樹和圖等知識點與Java Collections框架之間的映射關(guān)系,提出按照數(shù)據(jù)結(jié)構(gòu)中學(xué)生建立的知識體系組織Collections框架的教學(xué),說明面向數(shù)據(jù)結(jié)構(gòu)知識體系的Java課程教學(xué)實施方法。

關(guān)鍵詞 :數(shù)據(jù)結(jié)構(gòu);Java;Collections框架;課程銜接

文章編號:1672-5913(2015)15-0082-03

中圖分類號:G642

基金項目:河北省精品課程建設(shè)項目“數(shù)據(jù)結(jié)構(gòu)”。

作者簡介:董東,男,副教授,研究方向為數(shù)據(jù)挖掘及應(yīng)用,dongdong@hebtu.edu.cn。

0 引 言

數(shù)據(jù)結(jié)構(gòu)是計算機類本科專業(yè)核心課程之一,其后繼課Java面向?qū)ο蟪绦蛟O(shè)計也是重要的專業(yè)課程之一。通過對數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí),學(xué)生初步掌握了為實現(xiàn)問題求解所需要的基本邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)和常見的算法。Java面向?qū)ο蟪绦蛟O(shè)計則從面向?qū)ο蟪绦蛟O(shè)計的范式出發(fā),試圖使學(xué)生理解如何通過對象以及對象間的通信實現(xiàn)問題求解。在Java教學(xué)實踐中,我們發(fā)現(xiàn)存在如下兩個問題:①學(xué)生無法直接感受到數(shù)據(jù)結(jié)構(gòu)與Java面向?qū)ο蟪绦蛟O(shè)計之間的關(guān)系,體會不了數(shù)據(jù)結(jié)構(gòu)的重要性,無法體驗選擇合適的數(shù)據(jù)結(jié)構(gòu)和算法對實現(xiàn)問題求解的成就感。②由于JDK開發(fā)的歷史原因,Java JDK中提供的數(shù)據(jù)結(jié)構(gòu)與算法的實現(xiàn)并沒有與數(shù)據(jù)結(jié)構(gòu)課程具有對應(yīng)關(guān)系。例如,在Java中,隊列(Queue)和線性表( List)都是Collection的子接口,而數(shù)據(jù)結(jié)構(gòu)認(rèn)為隊列是一種特殊的線性表。

根據(jù)在教學(xué)中發(fā)現(xiàn)的這些問題,我們在Java Collection框架部分的講授中采取了如下措施:①按照數(shù)據(jù)結(jié)構(gòu)中學(xué)生建立的知識體系組織Collection、Set、List、Queue、Stack等內(nèi)容的講授,而不是按照J(rèn)ava API中的繼承關(guān)系來介紹。②在課程設(shè)計實踐環(huán)節(jié),通過“先動手寫自己的算法實現(xiàn)”,然后“閱讀并分析JDK相關(guān)算法源代碼”,通過對照,使學(xué)生發(fā)現(xiàn)自己在程序設(shè)計方面的不足,從而得到在數(shù)據(jù)結(jié)構(gòu)課程中所學(xué)知識的應(yīng)用體驗。

1 JDK中的數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)元素之間的關(guān)系。從概念和實現(xiàn)兩個角度,可將數(shù)據(jù)結(jié)構(gòu)分為數(shù)據(jù)的邏輯結(jié)構(gòu)和數(shù)據(jù)的存儲結(jié)構(gòu)。按照數(shù)據(jù)元素之間前驅(qū)和后繼關(guān)系來分,數(shù)據(jù)的邏輯結(jié)構(gòu)可分為以下4種:集合( Set)、線性表(List)、樹(Tree)和圖(Graph)。數(shù)據(jù)的存儲結(jié)構(gòu)主要包括數(shù)據(jù)元素本身的存儲以及數(shù)據(jù)元素之間關(guān)系表示。數(shù)據(jù)元素之間的關(guān)系在計算機中主要有兩種不同的表示方法:順序映像和非順序映像,并由此得到兩種不同的存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。

Java JDK為常用的數(shù)據(jù)結(jié)構(gòu)定義了一些接口( Interface)和實現(xiàn)(Implementation)。這些接口、實現(xiàn)類以及常用的排序、查找等算法統(tǒng)稱為JavaCollections框架(Java Collections Framework).Collections框架的設(shè)計目的是要滿足如下目標(biāo):高性能、一致性、擴展性和輕松編程。Java程序員在具體應(yīng)用時,不必考慮數(shù)據(jù)結(jié)構(gòu)和算法實現(xiàn)細(xì)節(jié),只需要用這些類創(chuàng)建出來一些對象,然后直接應(yīng)用即可‘3]。Java中把一組對象稱為Collection,也就是說,Collection是對象的容器。Java對Collection中的對象沒有任何前驅(qū)、后繼以及重復(fù)性的約束,只是約束了對象類型E。

Collection接口定義了其上的3類操作:針對單個元素的基本操作、迭代器和Collection對象之間的批量操作?;静僮靼ㄔ黾印h除、判斷是否包含某個元素、判斷是否為空、容器中當(dāng)前元素的個數(shù)、清空等。批量操作包括:合并兩個Collection容器、從一個容器中移走一些元素、保留兩個容器中相同的元素、判斷一個容器中的元素是否完全包含在另外一個容器中等。

接口Collection<E>的子接口有Set<E>和List<E>。集合(Set)在Collection的基礎(chǔ)之上增加了“不允許重復(fù)元素”的約束;而List則在Collection基礎(chǔ)之上增加了“元素之間具有前驅(qū)、后繼關(guān)系”的約束:除了第一個元素外,所有元素具有唯一的前驅(qū);除了最后一個元素外,所有元素具有唯一后繼。

如果僅關(guān)心數(shù)據(jù)元素是否出現(xiàn),而不關(guān)心數(shù)據(jù)元素之間的次序,則應(yīng)使用Set<E>。Java為集合接口提供了兩個基本的實現(xiàn):HashSet<E>和Tree<Set>。HashSet<E>是Set<E>接口的典型實現(xiàn),大多使用集合的場合就是使用這個實現(xiàn)類。HashSet實現(xiàn)類按哈希算法來存儲集合中的元素,因此具有很好的查找性能。HashSet不能記憶元素之間的順序,包括插入順序。其子類LinkedHashSet<E>也是根據(jù)元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,這樣使得能夠記憶插入順序。由于LinkedHashSet需要維護元素的插入順序,所以性能略低于HashSet,但遍歷集合里的全部元素性能較好。

實現(xiàn)類TreeSet<E>可以確保集合元素處于排序狀態(tài),TreeSet并不是根據(jù)元素的插入順序進行排序,而是根據(jù)元素的實際值來進行排序的。TreeSet采用紅黑樹的數(shù)據(jù)結(jié)構(gòu)對元素進行排序,并要求添加進TreeSet中的對象必須實現(xiàn)CompareTo<E>接口。

List<E>接口作為Collection<E>接口的子接口,可以使用Collection接口中的全部方法。但是List接口中定義了元素位置和元素范圍的概念,使得List可以根據(jù)元素位置索引(index)來插入、替換、刪除集合元素以及查找指定對象的位置。ArrayList<E>實現(xiàn)類基于數(shù)組實現(xiàn)了List接口,其內(nèi)部封裝了一個動態(tài)再分配的數(shù)組。每個ArrayList對象都有一個capacity屬性,這個屬性表示它們所封裝的數(shù)組的長度,當(dāng)添加元素超過長度時,capacity會自動增長,其默認(rèn)值為10。LinkedList<E>內(nèi)部以鏈表來保存集合中的元素,因此隨機訪問容器時的性能較差,但在插入、刪除元素時性能較好。

Queue<E>接口用于定義隊列這種數(shù)據(jù)結(jié)構(gòu),隊列是“先進先出”的容器,通常不允許隨機訪問其中的元素。Java中的隊列接口Queue<E>沒有繼承List接口,而是直接繼承了Collection接口。如果使用具有固定容量的隊列,則應(yīng)使用offer()來加入元素,使用poll()來獲取并移出元素,因為add()和remove()方法在因容量原因失敗時拋出異常。如果只是訪問隊首而不移出該元素,使用element()或者peek()方法。LinkedList<E>類實現(xiàn)了Queue<E>接口,因此我們可以把LinkedList當(dāng)成Queue來用。PriorityQueue是一個比較標(biāo)準(zhǔn)的隊列實現(xiàn)類,它并不是按加入隊列的順序,而是按隊列元素的大小來記憶隊列元素的順序。因此當(dāng)調(diào)用peek方法或者poll方法來取出隊列中的元素時,并不是取出最先進入隊列的元素,而是取出隊列中最小的元素。

Stack<E>實現(xiàn)了List<E>接口,提供了push和pop操作限制線性表中元素的插入和刪除只能在線性表的同一端進行。JDK l.6引入的ArrayDequ<E>實現(xiàn)類被優(yōu)先推薦作為棧使用。ArrayDeque<E>實現(xiàn)了Deque<E>接口。Deque<E>接口定義了雙端隊列,雙端隊列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。

Java JDK中沒有直接提供樹和圖的接口和實現(xiàn)類,但是可以通過研究TreeMap的源代碼學(xué)習(xí)操作樹的一般編寫模式。綜上,數(shù)據(jù)結(jié)構(gòu)與Java面向?qū)ο蟪绦蛟O(shè)計兩門課程內(nèi)容的銜接見表1。

2 面向數(shù)據(jù)結(jié)構(gòu)銜接的java課程實施方案

Java面向?qū)ο蟪绦蛟O(shè)計為1學(xué)期的課程。總課時為講授54學(xué)時、實驗32學(xué)時。其中,與數(shù)據(jù)結(jié)構(gòu)知識點緊密相關(guān)的Java Collections框架部分為講授6學(xué)時、實驗4學(xué)時。在講授環(huán)節(jié),按照表1列出的順序進行。在實驗環(huán)節(jié)完成與授課內(nèi)容相關(guān)的驗證性實驗。在課程設(shè)計實踐環(huán)節(jié),要求學(xué)生使用Java設(shè)計常見算法,然后閱讀JDK提供的源代碼進行對照。具體方案如圖1所示。

比如,在java.util.Collections類中提供了數(shù)據(jù)結(jié)構(gòu)中學(xué)生已經(jīng)學(xué)過的常見算法,如二分查找、計算元素頻數(shù)、查找最大/最小元素、反轉(zhuǎn)線性表、按照指定距離旋轉(zhuǎn)線性表、隨機排列線性表、交換指定位置上的兩個元素以及排序等。注意,在Java 6中Collections.sort()使用的是MergeSort;而在Java 7中,內(nèi)部實現(xiàn)換成了TimSort。

要求學(xué)生按照這些API文檔說明,首先按照數(shù)據(jù)結(jié)構(gòu)課程中的知識設(shè)計自己的算法實現(xiàn),然后與API源代碼進行比較。由于學(xué)生使用C語言版的數(shù)據(jù)結(jié)構(gòu)教材,所以在面向Collection編程之前,作為過渡,先讓學(xué)生面向數(shù)組編程。

哈希表是一種重要的數(shù)據(jù)結(jié)構(gòu),也是實現(xiàn)集合的基本途徑之一。通過研究HashSet的源代碼,可以讓學(xué)生理解為什么每個對象都要有hashcode()方法,以及哈希表的編碼特點。由于HashSet的實現(xiàn)是基于HashMap的,所以研究HashSet就要研究HashMap。

Map是一種典型的名值對類型,它提供一種Key-Value對應(yīng)保存的數(shù)據(jù)結(jié)構(gòu)??蛻舫绦蛲ㄟ^Key值來訪問對應(yīng)的Value,這個接口并沒有繼承Collection這接口;而其他的類或者接口,不管是List、Set、Stack等都繼承或?qū)崿F(xiàn)了Collection。

TreeMap和HashMap算是Java集合類里面比較有難度的數(shù)據(jù)結(jié)構(gòu)。HashMap元素存取的時間復(fù)雜度一般是O(l),而TreeMap內(nèi)部對元素的操作復(fù)雜度為O(logn)。TreeMap記憶了順序,TreeSet內(nèi)部的實現(xiàn)使用了TreeMap。

3 結(jié)語

數(shù)據(jù)結(jié)構(gòu)與程序類課程的關(guān)系問題愈來愈引起關(guān)注,我們提出面向數(shù)據(jù)結(jié)構(gòu)知識體系的Java課程教學(xué)與數(shù)據(jù)結(jié)構(gòu)課程的銜接方案。這個教學(xué)方案已經(jīng)在河北師范大學(xué)本科計算機專業(yè)實施三屆,取得了較好的效果,學(xué)生對算法的理解加深了,解決問題的自信心增強了,也建立了工程意識。

參考文獻:

[1]教育部高等學(xué)校計算機科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會,高等學(xué)校計算機科學(xué)與技術(shù)專業(yè)公共核心知識體系與課程[M].北京:清華大學(xué)出版社,2008: 110-111

[2]嚴(yán)蔚敏,吳偉民,數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,1997: 5-7.

[3]扎克霍爾.Java語言導(dǎo)學(xué)[M].北京:人民郵電出版社,2008: 293-294.

[4]沈華.?dāng)?shù)據(jù)結(jié)構(gòu)、算法和程序之間關(guān)系的探討[J].計算機教育,2013(4): 58-61.

[5]智慧來,智東杰.Java教學(xué)與數(shù)據(jù)結(jié)構(gòu)教學(xué)的銜接與融合之我見[J].計算機教育,2012(14): 81-82.

篇4

【關(guān)鍵詞】 閘門 結(jié)構(gòu)設(shè)計 計算 程序

1 前言

水電站金屬結(jié)構(gòu)中平面閘門的設(shè)計計算,由于受專業(yè)面窄,使用情況特殊等影響,目前尚無任何軟件公司進行程序開發(fā)設(shè)計,設(shè)計單位要么按相近條件套用圖紙,要么用傳統(tǒng)的計算方式進行設(shè)計計算,一套平面閘門的結(jié)構(gòu)設(shè)計,計算得費時十天半月甚至更多,且人工操作誤按誤刪,計算錯誤難以避免,假如錯誤未被發(fā)現(xiàn)和糾正,其產(chǎn)成品有可能釀發(fā)嚴(yán)重事故。

有鑒于此,我們在早前的閘門設(shè)計工作中,業(yè)余花費大量時間和精力,開發(fā)了本“平面鋼閘門結(jié)構(gòu)設(shè)計計算程序(以下簡稱‘程序’)”,經(jīng)過反復(fù)調(diào)試、修改,已成功完成多座水電站的工作閘門、尾水檢修閘門等多套閘門的設(shè)計成果,每套閘門的程序計算,一個小時不到,即可完成。其產(chǎn)成品投運效果一直良好正常,可以說,本程序填補了水電站金屬結(jié)構(gòu)設(shè)計領(lǐng)域的一項空白,頗具商業(yè)價值。

2 程序開發(fā)

值得一提的是,我們研制開發(fā)的這套程序,僅限于冗繁復(fù)雜的門葉結(jié)構(gòu)的設(shè)計計算。所謂門葉結(jié)構(gòu),系指平面閘門門葉除去面板、止水裝置及零部件(行走裝置、吊耳吊軸等)的框架梁系結(jié)構(gòu),一般包括水平次梁、豎直次梁、主梁、頂梁、底梁及邊梁等。開發(fā)該程序,我們是按以下思路和原則進行的。

(1)確定該程序的使用范圍或服務(wù)對象是計算水工(包括水利水電)平面鋼閘門中相對冗繁復(fù)雜的門葉結(jié)構(gòu)設(shè)計。內(nèi)容包括各梁體的力學(xué)計算、截面特性計算、強度校核計算等。

(2)要求該程序在平面鋼閘門設(shè)計中,具有實用性和通用性。如一般水平次粱梁體為槽鋼梁或工字鋼等型鋼梁,其跨度作成3~5跨,就必須要求程序能進行各種跨數(shù)的力學(xué)計算,并根據(jù)使用者指令選擇槽鋼或工字鋼的截面特性計算。又如,要求程序能進行各類主梁(包括組焊的實腹梁和箱型梁以及等截面、變截面梁等)的力學(xué)計算和截面特性計算。

(3)選擇通俗易懂、人機對話豐富的BASIC語言作為本程序語言,當(dāng)然,也可將該語言轉(zhuǎn)換為更流行、更簡潔的C語言等其他語言。并且選取的變量函數(shù)要滿足使用者辨認(rèn)理解和計算機辨識的要求。其實,豐富的人機對話功能在本程序中非常有用,如水壓力輸入、梁體截面參數(shù)輸入,KN;=KN輸入水平梁跨數(shù),LN;=LN輸入指定語句等。

(4)為使編程者思路清晰,程序操作者使用方便,該程序采用了模塊化設(shè)計,程序共分六大功能模塊,包括p0:通用校核;p1:水平次梁;p2:豎直次梁;p3:主(頂)梁;p4:底次梁;p5:邊梁。因一般設(shè)計中,頂、主梁結(jié)構(gòu)完全相同,差異只是是否承受梁頂水柱壓力,故程序?qū)⒅髁汉晚斄汉喜⒃谝粋€模塊中。

每一模塊的初始語句均為清除語句,模塊相互獨立,互不干擾,方便調(diào)試、使用和錯誤查找及修改。p1~p5任意模塊程序運行、完成相關(guān)力學(xué)計算和截面特性計算后,都自動轉(zhuǎn)入p0進行校核計算,直至結(jié)束。

文中給出p2和p0源程序以饗讀者,“平面鋼閘門結(jié)構(gòu)設(shè)計計算程序”完整的源程序從略。

3 p2和p0源程序

(1)p2豎直次梁程序

205:CLEAR

210:INPUT“QQ=”;QQ,“PW=”;PW,“L0=”;L0,“N=”;N, “EX=”;EX, “EY=”;EY

212:LPRINT“q=”;QQ:LPRINT “L0=”;L0:PRINT “PW=”;PW

215:Z=QQ*L0:R1=(2*Z+PW)/2:LPRINT “R1=R2=”;R1

220:QA=R1:LPRINT“Qmax=”;QA

225:MA=R1*L0-Z*L0/2:LPRINT “Mmax=”;MA:MX=MA-N*EY

230:INPUT “BM=”;BM,“D9=”;D9,“H2=”;H2,“DF=”;DF,“H3=”;H3,“T3=”;T3

235:AJ=BM*D9+H2*DF+H3*T3,Y0=(BM*D9*(H2/2+D9/2)+H3*T3*(H2/2+T3/2))/AJ: LPRINT“y0=”;Y0

240:YI=H2/2-Y0+D9

245:YA=H2/2+Y0+T3

250:IX=BM*D9*(YI-D9/2)∧2+H2∧3*DF/12+H3*T3*(YA-T3/2)∧2+H2*DF*Y0∧2

252:LPRINT “I×=”;IX

253:X0=0,IY=(BM∧3*D9+DF∧3*H2+H3∧3*T3)/12

254:LPRINT “X0=”;X0:LPRINT “Iy=”;IY

255:S=DF*(YA-T3)∧2/2+H3*T3*(YA-T3/2):LPRINT“Sx=”;S

260:IM=IX

265:GA=(2*L0)∧3*(PW/48+10*Z/384)/(2.1E6)

270:GOTO 1000

(2)p0通用校核程序

1000:INPUT “LN=”;LN

1002:R9=ABS(N/AJ+(MA-N*EY)*YA/IX+N*EX*X1/IY)

1003:R8=ABS(N/AJ-(MA-N*EY)*YA/IX-N*EX*X2/IY)

1004:IF R9>R8THEN1007

1005:R9=R8

1007:IF R9>1600 THEN LN

1010:LPRINT“R9=”;R9

1015:T9=QA*S/(IX*DF)

1020:IF T9>950 THEN LN

1025:LPRINT “T9=”;T9

1030:S9=SQR(R9∧2+3*T9∧2)

1035:IF S9>1760 THEN LN

1040:LPRINT “S9=”;S9

1045:FA=GA/IM

1050:INPUT “K0=”;K0

1055:IF FA>K0*L0 THEN LN

1060:LPRINT “fmax=”;FA:END

4 程序運用(實際算例)

筆者已將本程序成功用于多處水庫和水電站的各類平面閘門(工作閘門和檢修閘門)的設(shè)計計算,參見圖1、2下列截圖。

5 結(jié)語及其他

(1)該程序是一套成熟的平面鋼閘門門葉結(jié)構(gòu)設(shè)計計算程序,可以大幅度提高設(shè)計精度和效率,并且讓繁雜枯燥的設(shè)計計算變得輕松快捷。

篇5

采用多維分析法和時空分析法。多維分析法認(rèn)為,事物有若干性質(zhì),并由這些性質(zhì)構(gòu)成,分析事物的變化和發(fā)展,就是分析事物的性質(zhì)。作為一種方法,其將對事物的分析等價為對事物多質(zhì)的分析,沒有交叉互質(zhì)的一個性質(zhì)就是一個維,對事物多質(zhì)的分析方法就是多維分析。任何事物都擁有自身的時空,事物性質(zhì)的變化都必然是在事物的時空內(nèi)變化和發(fā)展,對事物性質(zhì)分析最本質(zhì)的方法就是在時空維上的分析。以計算機設(shè)計課程群為例,從時間維來看,問題分階段逐步展開、逐步解決。分階段即分程序設(shè)計課程、面向?qū)ο蟪绦蛟O(shè)計課程、數(shù)據(jù)結(jié)構(gòu)課程;逐步則是指從簡單到復(fù)雜,從語言到程序閱讀,再到程序設(shè)計的過程。在時間維上,程序設(shè)計問題的解有一個重要的觀察點,即程序閱讀。從空間維來看,程序設(shè)計=數(shù)據(jù)+算法+語言。其中,數(shù)據(jù)+算法為程序設(shè)計的核心[1]。空間維是兩維的,即數(shù)據(jù)維與算法維。程序設(shè)計課程解決離散數(shù)據(jù)與結(jié)構(gòu)化算法的設(shè)計問題,面向?qū)ο蟪绦蛟O(shè)計課程解決對象數(shù)據(jù)與對象互動算法,數(shù)據(jù)結(jié)構(gòu)課程解決數(shù)據(jù)結(jié)構(gòu)與算法。算法是數(shù)據(jù)的操作過程。計算機設(shè)計課程群中的課程數(shù)據(jù)形態(tài)具有差異,算法是對其一定形態(tài)數(shù)據(jù)的加工。從空間來看,程序設(shè)計問題的解有兩個重要觀察點:數(shù)據(jù)和算法。

2時間維分析

程序設(shè)計問題在課程群的時間維上,一般都能體現(xiàn)從簡單到復(fù)雜。在數(shù)據(jù)上從簡單的無結(jié)構(gòu)數(shù)據(jù)到有結(jié)構(gòu)的數(shù)據(jù),從簡單的無操作數(shù)據(jù)到有操作的對象數(shù)據(jù)。在程序設(shè)計上,從不可分解問題的簡單設(shè)計到可分解問題的復(fù)雜設(shè)計,從語言學(xué)習(xí)到程序設(shè)計學(xué)習(xí)。程序設(shè)計問題解在課程群各自獨立的課程的時間維上,沒有得到足夠和充分的展現(xiàn),嚴(yán)重影響了學(xué)生對問題的認(rèn)識,以至于學(xué)生無法掌握程序設(shè)計能力。如同要有充分的文學(xué)閱讀,才能為文學(xué)創(chuàng)作奠定基礎(chǔ),由于程序設(shè)計的復(fù)雜性,從語言學(xué)習(xí)再到程序設(shè)計學(xué)習(xí),才會使程序設(shè)計學(xué)習(xí)簡單化,程序設(shè)計問題解的學(xué)習(xí)也是能力的學(xué)習(xí),而非理論知識系統(tǒng)的學(xué)習(xí),需要有能解決實際問題的經(jīng)驗。經(jīng)驗分為直接經(jīng)驗和間接經(jīng)驗,程序設(shè)計的間接經(jīng)驗是他人設(shè)計的程序。閱讀程序就是學(xué)習(xí)程序設(shè)計的間接經(jīng)驗。閱讀程序作為程度設(shè)計的重要過渡橋梁,使學(xué)生在符合認(rèn)識與學(xué)習(xí)規(guī)律的條件下,充分掌握程序設(shè)計能力。程序設(shè)計的學(xué)習(xí)過程劃分為:語言、程序閱讀、程序設(shè)計。在解程序設(shè)計的過程中,將程序閱讀作為新的觀察點和分析平臺。程序閱讀就是對已知程序或程序段的閱讀,程序閱讀又分為3個步驟:理解程序結(jié)構(gòu)、模擬計算機執(zhí)行程序、上機驗證。程序閱讀有3種層次:第一種是能讀懂程序中所有語句和數(shù)據(jù),這是基礎(chǔ)層次,是其它層次掌握的條件和前提,屬于計算機語言;第二種是能讀懂程序設(shè)計中的技巧和方法;第三種是能讀懂程序設(shè)計中的設(shè)計思想[2]。

3空間維分析

3.1課程群的解空間與各課程的子空間

計算機設(shè)計課程群的解空間可即程序設(shè)計解空間分解為:結(jié)構(gòu)化的程序設(shè)計課子空間、面向?qū)ο蟪绦蛟O(shè)計課子空間、數(shù)據(jù)結(jié)構(gòu)課子空間,如圖1所示。計算機設(shè)計類課程群的解空間與它的三個子空間是整體與部分的關(guān)系。因此,一方面課程群的解空間由3門課程的解空間構(gòu)成。另一方面課程群的解空間具有抽象性和普遍性,3門課程的解空間呈現(xiàn)泛化。課程群的解空間具有程序設(shè)計最本質(zhì)的意義,對課程群中各門課程有著本質(zhì)的指導(dǎo)意義。課程群的解空間有數(shù)據(jù)維和算法維,程序設(shè)計課的解空間是由離散數(shù)據(jù)維和結(jié)構(gòu)化算法維構(gòu)成;面向?qū)ο蟪绦蛟O(shè)計課的解空間由對象數(shù)據(jù)維和對象互動的算法維構(gòu)成;數(shù)據(jù)結(jié)構(gòu)課的解空間由結(jié)構(gòu)數(shù)據(jù)維和結(jié)構(gòu)數(shù)據(jù)的算法維構(gòu)成。程序?qū)嵸|(zhì)就是對已知數(shù)據(jù)進行加工得到結(jié)果數(shù)據(jù),是數(shù)據(jù)與加工過程的相互作用。相比較程序設(shè)計解的二維而言,數(shù)據(jù)維是處于主要和核心位置,程序設(shè)計就是圍繞數(shù)據(jù)的加工處理。程序設(shè)計課與面向?qū)ο蟪绦蛟O(shè)計課的加工處理方式有所區(qū)別,程序設(shè)計采用結(jié)構(gòu)化的處理方法,如順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu);面向?qū)ο蟪绦蛟O(shè)計采用對象方法,如繼承、事件、多態(tài)等。對數(shù)據(jù)的分析至關(guān)重要,離散數(shù)據(jù)是與運算是分離的,主要分析數(shù)據(jù)的形態(tài),即常量、變量、表達(dá)式。其中變量是重點,體現(xiàn)了數(shù)據(jù)與存儲空間的聯(lián)系;面向?qū)ο蟪绦蛟O(shè)計的數(shù)據(jù)是對象的一部分,即數(shù)據(jù)成員;數(shù)據(jù)結(jié)構(gòu)程序設(shè)計的數(shù)據(jù)有結(jié)構(gòu),且重點在結(jié)構(gòu)上。

3.2各課程的數(shù)據(jù)分析

在結(jié)構(gòu)化的程序設(shè)計中,數(shù)據(jù)變量對應(yīng)一個存儲單元,有三層含義:一是表達(dá)物理存儲單元;二是表達(dá)存儲單元的存儲內(nèi)容;三是存儲內(nèi)容的讀寫性質(zhì)。必須全面完整理解和掌握此3個含義。例:intx數(shù)據(jù)變量定義,分配一個存儲單元;x=0;x<=10,數(shù)據(jù)變量體現(xiàn)存儲單元的存儲內(nèi)容:x++;cout<<x,數(shù)據(jù)變量讀寫反映了數(shù)據(jù)變量內(nèi)容的變化。關(guān)于面向?qū)ο蟪绦蛟O(shè)計(C#語言)的程序重點關(guān)注和描述對象數(shù)據(jù)成員的構(gòu)成、內(nèi)容變化和訪問限制。只有關(guān)注和分析有關(guān)聯(lián)的對象數(shù)據(jù)成員的關(guān)聯(lián)情況、對象數(shù)據(jù)成員與存儲空間的關(guān)系,以及與對象數(shù)據(jù)成員的一切有聯(lián)系的內(nèi)容,才能實現(xiàn)對數(shù)據(jù)的全面掌握。在此基礎(chǔ)上,了解和掌握以數(shù)據(jù)為加工處理的算法過程,才合乎程序設(shè)計能力培養(yǎng)的邏輯[4]。數(shù)據(jù)結(jié)構(gòu)(C語言)程序的重點是數(shù)據(jù)的邏輯結(jié)構(gòu)及定義性描述。例如:順序表就是利用連續(xù)存儲空間的線性關(guān)系來實現(xiàn)連續(xù)存儲空間中數(shù)據(jù)元素的線性關(guān)系,只有先從數(shù)據(jù)的邏輯結(jié)構(gòu)上理解,才能理解存儲實現(xiàn),分析數(shù)據(jù)的物理結(jié)構(gòu)以及兩者之間的關(guān)系,如圖3所示。數(shù)據(jù)定義是對實現(xiàn)數(shù)據(jù)邏輯結(jié)構(gòu)的計算機語言代碼的描述,在算法設(shè)計之前須要有充分的分析、表現(xiàn)、描述,以使算法設(shè)計有依據(jù)和目標(biāo)。在程序設(shè)計中,首先要分析數(shù)據(jù),充分、全面、清晰地分析數(shù)據(jù)后,再作算法分析和設(shè)計。在數(shù)據(jù)與算法的二維空間中,基于數(shù)據(jù)加工處理的算法才會自然合乎邏輯地體現(xiàn)出其過程。

4結(jié)語

篇6

關(guān)鍵詞:認(rèn)知教學(xué);組織;?;灰蚬挥嬎銠C程序設(shè)計

作者簡介:彭珍(1981-),女,山東東明人,華北科技學(xué)院計算機學(xué)院,講師。(北京 101601)吳立鋒(1978-),男,河北隆堯人,首都師范大學(xué)信息工程學(xué)院,講師。(北京100048)

基金項目:本文系華北科技學(xué)院教育科學(xué)研究2011年指導(dǎo)類課題“計算機程序設(shè)計課程教學(xué)方法的研究”、華北科技學(xué)院試題庫項目“《C++與面向?qū)ο蟪绦蛟O(shè)計》試題庫建設(shè)”、首都師范大學(xué)青年教師教學(xué)研究項目“以培養(yǎng)能力為核心的《ACCESS 數(shù)據(jù)庫》課程教學(xué)方法的研究與探索”的研究成果。

中圖分類號:G642     文獻標(biāo)識碼:A     文章編號:1007-0079(2012)11-0059-02

目前已有的問題教學(xué)、[1]任務(wù)驅(qū)動教學(xué)、[2]案例教學(xué)、[3]引導(dǎo)教學(xué)等都側(cè)重于教學(xué)形式與手段的變新與改革,[4]很少從教授內(nèi)容的本質(zhì)出發(fā),研究教學(xué)內(nèi)容的認(rèn)知規(guī)律。為此,本文基于教學(xué)賴以存在和發(fā)展的認(rèn)知機理,提出一種新的認(rèn)知教學(xué)方法,條理地、邏輯地、系統(tǒng)地組織教學(xué)內(nèi)容,符合學(xué)生學(xué)習(xí)思維的邏輯認(rèn)知過程。

“程序設(shè)計”是計算機領(lǐng)域中一門重要的軟件技術(shù),是其他軟件技術(shù)的基礎(chǔ)?!俺绦蛟O(shè)計”課程是伴隨著計算機應(yīng)用和程序設(shè)計語言的發(fā)展而發(fā)展起來的一門重要學(xué)科,已發(fā)展成為計算機專業(yè)中重要的專業(yè)必修課程,在高等教育中確立了不可缺少的公共基礎(chǔ)課的地位。作為使用和開發(fā)計算機的重要工具,程序設(shè)計課程具備統(tǒng)一的抽象與規(guī)律。

本文將這種認(rèn)知教學(xué)應(yīng)用于“計算機程序設(shè)計”課程的教學(xué)過程中,有組織、有規(guī)律地將該課程的教學(xué)內(nèi)容貫穿始終,為學(xué)生掌握程序設(shè)計方法、提高學(xué)生程序設(shè)計能力與邏輯思維能力打下堅實基礎(chǔ)。

一、認(rèn)知教學(xué)的概述

本文提出的認(rèn)知教學(xué)是基于Zadeh的認(rèn)知原理,Zadeh將人類的認(rèn)知概括為:[5]組織(organization)、粒化(granulation)和因果(causation)?!敖M織”指從部分合并為整體,“?;敝笇⒄w分解為部分,“因果”指原因和結(jié)果的關(guān)聯(lián)。前兩者可看作互擬的過程,因果結(jié)構(gòu)是一切知識的共性,它是對知識的一種本質(zhì)抽象,因果有直接因果關(guān)系和間接因果關(guān)系,也有潛在因果關(guān)系和真實因果關(guān)系。所謂潛在因果關(guān)系是指一個具有普遍適應(yīng)范圍的概括性的因果規(guī)律,表示給定一定的條件,原因X的滿足將引起結(jié)果Y的滿足;而真實的因果關(guān)系則是在一個特定情形下實際發(fā)生的事實,即X和Y事實上發(fā)生了,而且是因果相關(guān)的。在知識表示的層次上,教師所研究的是潛在因果關(guān)系,真實因果關(guān)系可以看作是潛在因果關(guān)系在某一特定情形下的一個實例。人類認(rèn)知事物是從事物的不同側(cè)面、不同層次上認(rèn)知事物的本質(zhì),將復(fù)雜的信息結(jié)構(gòu)化(粒化),然后研究在不同結(jié)構(gòu)層次上新事物具有的特性和不同側(cè)面或?qū)哟紊闲率挛锾卣髦g的關(guān)系,進而從本質(zhì)上全面認(rèn)知事物。

認(rèn)知教學(xué),就是按照人類認(rèn)知事物的規(guī)律進行教授知識,即將教學(xué)知識組織、?;?、因果化,從而使得學(xué)生抓住知識的本質(zhì)、全面地掌握知識。這里,組織可以理解為對知識宏觀的掌控,粒化是對知識微觀的演化,因果則是知識之間的關(guān)聯(lián)。因此,認(rèn)知教學(xué)能夠條理地、邏輯地、系統(tǒng)地組織教學(xué)內(nèi)容,是一種符合學(xué)生學(xué)習(xí)邏輯認(rèn)知過程的科學(xué)方法。

二、計算機程序設(shè)計課程

幾乎所有高等學(xué)校的每個專業(yè)的學(xué)生都要學(xué)習(xí)諸如C、VB或VF語言這樣的程序設(shè)計課程(必修課程),而且隨著各具特色的高級程序設(shè)計語言(C++、Java等)及網(wǎng)頁程序設(shè)計語言(JSP、等)的不斷涌現(xiàn),程序設(shè)計課程是高等教育中不可缺少的公共基礎(chǔ)課,而且已成為計算機專業(yè)的一門獨立必修專業(yè)課程。程序設(shè)計是大學(xué)生必備的一種計算機技能,更重要的是對其思維的特殊訓(xùn)練和對其智慧的重大挑戰(zhàn)。

“計算機程序設(shè)計”課程主要是學(xué)習(xí)如何用某種計算機語言編寫程序來解決問題。程序=數(shù)據(jù)結(jié)構(gòu)+算法,所以程序設(shè)計的本質(zhì)就是設(shè)計出合理的數(shù)據(jù)結(jié)構(gòu)與算法。

根據(jù)軟件工程理論,[6]程序設(shè)計大致可以分為結(jié)構(gòu)化程序設(shè)計(Structured Programming,SP)、面向?qū)ο蟪绦蛟O(shè)計(Object-Oriented Programming,OOP)、面向數(shù)據(jù)結(jié)構(gòu)的程序設(shè)計(Jackson System Development,JSP),國內(nèi)主要用的是前兩種程序設(shè)計方法。

同一類型的計算機程序設(shè)計有若干不同程序設(shè)計語言,同一類型的語言采用的數(shù)據(jù)結(jié)構(gòu)大致相同,比如結(jié)構(gòu)化程序設(shè)計語言采用的數(shù)據(jù)結(jié)構(gòu)絕大多數(shù)是基本數(shù)據(jù)類型,還有其他構(gòu)造類型如結(jié)構(gòu)體等;面向?qū)ο蟪绦蛟O(shè)計語言主要采用的數(shù)據(jù)結(jié)構(gòu)則是類,其中還涉及繼承機制等。因此,程序設(shè)計課程首先介紹的都是數(shù)據(jù)結(jié)構(gòu),在程序中體現(xiàn)在數(shù)據(jù)的定義上。

算法的設(shè)計與具體問題有著密切的關(guān)系,但無外乎是對數(shù)據(jù)結(jié)構(gòu)的操作,比如輸入、計算與輸出。其中計算最為復(fù)雜,可能是函數(shù),或標(biāo)準(zhǔn)的表達(dá)式語句,或帶有順序、選擇、循環(huán)結(jié)構(gòu)的混合。因此,程序設(shè)計課程中的重點和難點都在算法部分。

三、認(rèn)知教學(xué)在計算機程序設(shè)計課程中的應(yīng)用

根據(jù)計算機程序設(shè)計課程的抽象特征,擬從以下幾個方面將認(rèn)知教學(xué)應(yīng)用于計算機程序設(shè)計課程中。

按照數(shù)據(jù)結(jié)構(gòu)+算法的思路將計算機程序設(shè)計教學(xué)知識合理組織在一起,形成程序設(shè)計知識的宏觀體系結(jié)構(gòu);對宏觀架構(gòu)中的每一個知識點進行細(xì)化,即構(gòu)建出每一知識點的微觀結(jié)構(gòu);搭建宏觀知識點之間、微觀知識點之間以及相互的關(guān)聯(lián)。

以“C程序設(shè)計”課程為例,[7]圖1概括了C程序設(shè)計的所有知識點,形成了一個多層次、逐層深入的組織結(jié)構(gòu)。每一層次可以看作其上層的粒化,每一層次與其上層和下層都有直接或間接的因果關(guān)系,同層次知識點之間也存在因果關(guān)系。比如定義數(shù)據(jù)、輸入數(shù)據(jù)、計算數(shù)據(jù)和輸出數(shù)據(jù)構(gòu)成了程序的基本步驟,前一步是后一步的基礎(chǔ)和條件;比如定義數(shù)據(jù)中的基本數(shù)組類型是所有定義的基礎(chǔ),為了存儲多個有序數(shù)據(jù)(同一類型)形成了構(gòu)造性數(shù)據(jù)即數(shù)組;為了存儲不同類型的數(shù)據(jù)才有了構(gòu)造型數(shù)據(jù)即結(jié)構(gòu)體和共用體;為了便于表達(dá)更為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)及方便有效地使用數(shù)據(jù)提出了指針,所以在定義數(shù)據(jù)中各部分之間存在著關(guān)聯(lián)。

最底層中的知識點還可以進一步深入細(xì)化?!癈程序設(shè)計”課程中,有關(guān)數(shù)組的認(rèn)知體系以包含10個整型數(shù)據(jù)的一維(10*10二維)數(shù)組、字符數(shù)組為例,如圖2所示。數(shù)組認(rèn)知按照數(shù)組的組成和編程的思路分別從縱向和橫向展開。縱向坐標(biāo):一維數(shù)組、二維數(shù)組和字符數(shù)組,一維數(shù)組是二維與字符數(shù)組的基礎(chǔ),二維數(shù)組又是二維字符數(shù)組的基礎(chǔ);橫向坐標(biāo):定義、輸入、計算和輸出數(shù)組。特別地,(一維)字符數(shù)組的輸入/輸出的因果關(guān)系來看,它采用類似于一維數(shù)組的輸入/輸出方法,將輸入/輸出格式中的%d改為%c,進一步可以簡單地采用%s格式輸入/輸出(去除了循環(huán)結(jié)構(gòu)),更進一步采用函數(shù)gets/puts調(diào)用來完成。

四、結(jié)束語

科學(xué)的教學(xué)方法應(yīng)該遵循教學(xué)賴以存在和發(fā)展的認(rèn)知機理和學(xué)生學(xué)習(xí)思維的邏輯認(rèn)知過程,認(rèn)知教學(xué)即從牢牢抓住教學(xué)本質(zhì)出發(fā),深化知識的組織、粒化與因果關(guān)系,將所有知識融為一體,尤其對于程序設(shè)計,這類邏輯性強的課程,該方法更適合。本文以“C程序設(shè)計”課程為例,闡述了認(rèn)知的應(yīng)用,并通過實際教學(xué),驗證了該方法的有效性。

參考文獻:

[1]羅祖兵.教育學(xué)問題教學(xué):涵義、價值與操作[J].高等教育研究,2010,31(3):71-75.

[2]王春婷.淺談任務(wù)驅(qū)動教學(xué)法在計算機教學(xué)中的應(yīng)用[J].太原大學(xué)教育學(xué)院學(xué)報,2011,(2):103-105.

[3]趙月坤,高常.案例教學(xué)法在數(shù)學(xué)教學(xué)實踐中的應(yīng)用[J].中國成人教育,2011,(15):162-163.

[4]陳越,何欽銘.計算機專業(yè)研究型課程教學(xué)模式與創(chuàng)新能力培養(yǎng)的探索[J].計算機教育,2009,(24):99-101.

[5]Zadeh L.Some reflections on soft computing,granular computing and their roles in the conception,design and utilization of information/intelligent systems[J].Soft Computing,1998,(2):23-25.

篇7

關(guān)鍵詞:高級程序設(shè)計;專業(yè)課程;教學(xué)

中圖分類號:G642 文獻標(biāo)識碼:B

“高級程序設(shè)計”是一門重要的計算機專業(yè)課程,目的是通過對面向?qū)ο蟪绦蛟O(shè)計思想的把握,培養(yǎng)學(xué)生掌握用計算機分析問題、解決問題的思維方式。但是由于該課程內(nèi)容非常抽象,且實踐性特別強,對于初學(xué)者來說難度較大。同時由于課時限制,Console控制臺環(huán)境下的簡單實例難以體現(xiàn)出面向?qū)ο蟮膬?yōu)勢,基于語法的講解讓人感到乏味,許多學(xué)生覺得程序設(shè)計本身枯燥、難懂,高深莫測。以至于課程結(jié)束時,大部分同學(xué)對語法實現(xiàn)沒有問題,但面對實際問題卻不知道如何下手。如何在短時間內(nèi)建立學(xué)生的興趣,培養(yǎng)解決實際問題的能力,是工科教學(xué)中永恒的話題。

計算機的課程體系本身是一個整體,所有課程的結(jié)合都是為了理解并充分利用計算機這一現(xiàn)代化工具。在教學(xué)中,將各門課程分開是為了簡化,但在理解時仍應(yīng)將相關(guān)概念、應(yīng)用領(lǐng)域相結(jié)合。在教學(xué)中我們發(fā)現(xiàn),學(xué)生們剛開始接觸程序設(shè)計時,對變量定義、指針分配、數(shù)組訪問等的理解就比較困難。他們知道用變量來存取數(shù)據(jù),但很少關(guān)心這個數(shù)據(jù)究竟存放在內(nèi)存的什么地方,為什么指針必須先初始化才能使用。這時,不妨給學(xué)生講授一些內(nèi)存訪問的基本知識,讓他們建立起變量、指針與地址的對應(yīng)關(guān)系?,F(xiàn)在的問題是,教師對于程序設(shè)計多是從語法上加以講解,對于程序的運行效率、應(yīng)用領(lǐng)域、編程風(fēng)格極少涉及,許多概念都是在后續(xù)專業(yè)課的學(xué)習(xí)后才逐步理解,這給程序設(shè)計的初學(xué)者帶來了很大的障礙。如果在教學(xué)中以面向?qū)ο蟮膽?yīng)用為基礎(chǔ),以程序設(shè)計為主線,在重點介紹程序設(shè)計方法的同時將各門專業(yè)課知識融入其中,將會使學(xué)生從程序設(shè)計應(yīng)用的視角來理解這些專業(yè)概念,從而在解決實際問題時靈活應(yīng)用;消除對程序設(shè)計課程的枯燥感,達(dá)到事半功倍的效果。

1 “高級程序設(shè)計”的課程定位

隨著電子技術(shù)和芯片設(shè)計工藝的發(fā)展,計算機硬件一直按照摩爾定律發(fā)展,每18個月翻一番,處理速度越來越快,價格成本越來越低,從價值不菲、主要用于科學(xué)研究的大型計算機到現(xiàn)在人們?nèi)粘9ぷ魃钪须S處可見的個人PC。程序設(shè)計的目的就是為了充分利用這一現(xiàn)代化的工具,可靠、高效地完成任務(wù),因此程序設(shè)計其實是一種人機交互的方式,簡言之,就是用計算機能夠“理解”的語言,告訴它去執(zhí)行某項任務(wù)。當(dāng)然,這個“理解”需要編譯器的支持,將高級程序設(shè)計的語法描述進行編譯、連接等,變成計算機硬件能夠執(zhí)行的機器碼,具體編譯的細(xì)節(jié)在編譯原理課程中有重點的介紹。

程序設(shè)計是一種語言表達(dá),目的是為了人與計算機之間的溝通。因此程序設(shè)計通常有兩方面的特點:對于程序設(shè)計者,希望能夠精練、高效地說明問題;對于計算機,希望語言描述準(zhǔn)確,不會出現(xiàn)二義性。通過程序設(shè)計解決一個具體問題時,大致需要經(jīng)過下列步驟:首先從具體問題中抽象出一個適當(dāng)?shù)臄?shù)學(xué)模型,然后設(shè)計出解此數(shù)學(xué)模型的算法(Algorithm),該算法與數(shù)據(jù)結(jié)構(gòu)密切相關(guān),最后編寫程序、進行測試、調(diào)整優(yōu)化直至得到最終解答。尋求數(shù)學(xué)模型的實質(zhì)是分析問題,從中提取操作的對象,并找出這些操作對象之間的關(guān)系,然后用數(shù)學(xué)的語言加以描述。

另外,用程序設(shè)計解決問題時,需要充分、高效地利用現(xiàn)有的計算機資源。對于匯編語言程序設(shè)計來說,通常直接編寫底層的硬件驅(qū)動及管理程序訪問資源;對于C+ +面向?qū)ο蟮某绦蛟O(shè)計來說,通常立足于計算機硬件、操作系統(tǒng)的基礎(chǔ)之上,在編寫用戶應(yīng)用程序,如常用的各類工具軟件、Office系列等時,通常借助操作系統(tǒng)提供的API(application programming interface)函數(shù)來訪問資源,如用Create Window()來創(chuàng)建一個窗口,用getchar()來獲取鍵盤上的一個按鍵值等。操作系統(tǒng)的作用是管理全部的硬件資源、軟件資源及數(shù)據(jù)資源,并提供相關(guān)的API函數(shù)為程序設(shè)計者調(diào)用。

2操作系統(tǒng):計算機資源的管家

計算機可以管理哪些資源呢?操作系統(tǒng)告訴我們,總共要管理4種資源:(1)CPU資源:進程管理,處理機調(diào)度;(2)內(nèi)存資源:存儲管理;(3)I/O接口資源:外部設(shè)備管理;(4)文件資源:文件管理。如果需要訪問計算機資源,通常利用操作系統(tǒng)所提供的豐富的API函數(shù)來實現(xiàn),而無需寫驅(qū)動程序直接對資源進行訪問,應(yīng)用程序?qū)Σ僮飨到y(tǒng)的函數(shù)調(diào)用過程如圖1 所示。

箭頭①表示操作系統(tǒng)能夠管理系統(tǒng)資源,控制輸入輸出設(shè)備的工作,如文件存取、輸出顯示、聲卡發(fā)聲等;箭頭②表示操作系統(tǒng)能夠感知輸入設(shè)備的狀態(tài)變化,如鼠標(biāo)移動、鍵盤按下,并且能夠感知鼠標(biāo)移動的方向,具體按下的鍵值。設(shè)計應(yīng)用程序需要利用輸入輸出設(shè)備或其他計算機資源時,并不是由應(yīng)用程序直接訪問,而是借助操作系統(tǒng)。箭頭③表示程序設(shè)計時可以通知操作系統(tǒng)執(zhí)行某個具體的動作,如操作系統(tǒng)能夠控制聲卡發(fā)出聲音,但它并不知道應(yīng)該何時發(fā)出何種聲音,需要通過程序設(shè)計告知操作系統(tǒng)。箭頭④表示操作系統(tǒng)能夠?qū)⑤斎朐O(shè)備或其他資源的變化傳遞給應(yīng)用程序。如用戶在某個程序活動時按了一下鍵盤,操作系統(tǒng)能夠馬上感知這一事件,但并不決定如何作出反應(yīng),而是將這一事件轉(zhuǎn)交給應(yīng)用程序,由應(yīng)用程序決定執(zhí)行何種反應(yīng)。

理解了操作系統(tǒng)和應(yīng)用程序的關(guān)系后,對于面向?qū)ο蟪绦蛟O(shè)計中如何調(diào)用現(xiàn)有計算機資源或創(chuàng)建新的應(yīng)用,就有了十分明晰的思路。

3算法:程序設(shè)計的靈魂

在程序設(shè)計中,運行效率通常是一個決定性的指標(biāo),而程序運行是否高效,很大程度上取決于能否編寫出高效的算法。比如在游戲世界中,一只妖怪盯上了目標(biāo),并且它足夠聰明,會選擇一條最短路徑向目標(biāo)殺過去。為什么這只妖怪那么聰明?這就是尋找最短路徑算法的魔力。

算法是指完成某個特定任務(wù)所需要的具體步驟和方法。在程序設(shè)計領(lǐng)域,算法表現(xiàn)為一系列解決問題的清晰指令,對一定規(guī)范的輸入,能夠在有限時間內(nèi)獲得所要求的輸出,中國古代的珠算口決及其執(zhí)行規(guī)則就是算法的雛形。算法是計算機處理信息的本質(zhì),因為程序就是用算法告訴計算機按照確切的步驟執(zhí)行指定的任務(wù),如計算職工的薪水或打印學(xué)生的成績單等。程序設(shè)計中的算法應(yīng)用通常分成三個階段:分析問題、設(shè)計算法和實現(xiàn)算法。

算法設(shè)計的基本方法有遞推法、遞歸法、窮舉法、分治法、迭代法等。目前被設(shè)計出來而且應(yīng)用廣泛的算法有很多,如演化算法、蟻群算法、貪婪算法、遺傳算法和一些常用的排序算法等,每一種算法都對應(yīng)著多種不同的應(yīng)用。如在同一個動畫頁面中,近處的對象會擋住遠(yuǎn)處的對象,可以通過對不同的對象進行坐標(biāo)排序,然后按由遠(yuǎn)到近的順序排放而實現(xiàn)。常用的排序算法有四種:選擇排序、插入排序、冒泡排序和快速排序。下面是N個元素的冒泡算法C++程序?qū)崿F(xiàn)。

template < class T >

void bub_sort( T a[], int n )

{

int i,j,last;

i = n - 1;

while( i > 0 )

{

last = 0;

for( j = 0; j < i; j++ )

{

if( a[j+1] < a[j] )

{

T temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

last = j;

}

}

i = last;

}

}

算法中將每個元素想象成一個泡泡,從最底部的元素開始,將各相鄰的元素進行比較,若下面的元素大于上面的元素時,則把它們的值進行交換,即較大的元素“往上冒泡”。如此循環(huán)N-1次,即可實現(xiàn)從大到小的排序。

當(dāng)然,算法只是解決某類問題的步驟或方法,同一個算法可用不同的程序設(shè)計語言實現(xiàn),而且能夠根據(jù)不同的應(yīng)用目標(biāo)加以約束和優(yōu)化。算法設(shè)計與數(shù)據(jù)結(jié)構(gòu)密切相關(guān),算法無不依附于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率,在面向?qū)ο蟮某绦蛟O(shè)計中,二者是一個整體,不可分割。

4數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)資源的管家

數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式。討論數(shù)據(jù)結(jié)構(gòu)必須同時討論在該類數(shù)據(jù)上執(zhí)行的算法才有意義,通常情況下,精心選擇的數(shù)據(jù)結(jié)構(gòu)可以帶來最優(yōu)效率的算法。不同種類的數(shù)據(jù)結(jié)構(gòu)適合于不同種類的應(yīng)用,而部分甚至專門用于特定的作業(yè)任務(wù)。在程序設(shè)計中,根據(jù)不同的應(yīng)用需要,可以選擇不同的數(shù)據(jù)結(jié)構(gòu)。

如果有一堆相似數(shù)據(jù)需要管理,通常會選擇線性表。如單位人員的記錄、游戲世界里的道具包。線性表一般分為數(shù)組與鏈表兩類。數(shù)組里的元素以連續(xù)的內(nèi)存空間存放,因此可以用內(nèi)存地址檢索到對應(yīng)的數(shù)據(jù)元素,訪問元素很方便。但如果要進行插入/刪除數(shù)據(jù)元素,就要做一些內(nèi)存移動,效率比較低。而鏈表的數(shù)據(jù)元素存放在任意的物理內(nèi)存位置,相鄰的元素以指針作為“鏈扣”串連起來,可以更高效的插入/刪除數(shù)據(jù)元素。

隊列和堆??赡苁鞘褂妙l率最高的數(shù)據(jù)結(jié)構(gòu)。隊列是一種“先進先出(first-in first-out, FIFO)”的數(shù)據(jù)結(jié)構(gòu)。就好像是在銀行里排隊,排在前面的先服務(wù)。因此順序執(zhí)行的任務(wù)可以從一端依次壓進任務(wù)隊列里,要做任務(wù)時依次從另一端取出,哪個任務(wù)先接到就先做哪個任務(wù)。也許有些任務(wù)報酬更高,如果最求報酬最大化,就需要使用優(yōu)先級隊列。在插入元素時,優(yōu)先級高的元素插入隊列前面,把任務(wù)的報酬設(shè)成優(yōu)先級數(shù)據(jù)就可以了。

堆棧是一種“先進后出”的數(shù)據(jù)結(jié)構(gòu)。就好像是疊盤子,疊在最上面的盤子最先拿來使用。比如Word中的“撤消”按鈕,使用戶在編輯誤操作時不必驚慌,因為“撤消”功能可以撤消之前的操作。只要把用戶的操作壓入棧里,撤消操作就是從棧中彈出最近發(fā)生的操作,可以很方便地實現(xiàn)這個功能。

此外,樹型結(jié)構(gòu)和圖形結(jié)構(gòu)也是比較常用的、非線性的數(shù)據(jù)結(jié)構(gòu)。樹的實現(xiàn)與應(yīng)用比線性數(shù)據(jù)結(jié)構(gòu)復(fù)雜,但其應(yīng)用很廣泛,如Windows操作系統(tǒng)的文件管理。圖形結(jié)構(gòu)可以用于地圖數(shù)據(jù)的管理等。

5數(shù)據(jù)庫:智能化的大倉庫

在程序設(shè)計當(dāng)中,具有各種數(shù)據(jù)結(jié)構(gòu)的變量或?qū)ο笫遣豢扇鄙俚脑亍H绻麛?shù)據(jù)量比較小,直接使用內(nèi)存變量或文件存儲就可以了,但在當(dāng)前信息化的環(huán)境中,數(shù)據(jù)量通常是海量的,為了加快對數(shù)據(jù)的操作與訪問,同時保護數(shù)據(jù)的安全性,必須借助專門的工具,這就是數(shù)據(jù)庫。嚴(yán)格地說,數(shù)據(jù)庫是按照數(shù)據(jù)結(jié)構(gòu)組織、存儲和管理數(shù)據(jù)的倉庫。

例如,在企事業(yè)單位的日常管理工作中,常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就是數(shù)據(jù)庫的一個基本元素,可以通過不同的“視角”加以查看。如果建立了包含相關(guān)信息的多個表,我們就擁有了一個“數(shù)據(jù)倉庫”。在應(yīng)用程序的設(shè)計中,可以模擬現(xiàn)實世界,為不同的人員劃分相應(yīng)的權(quán)限,使他們可以根據(jù)需要隨時在權(quán)限范圍內(nèi)處理數(shù)據(jù),如查詢某職工的基本情況,添加新進的職工信息等。此外,在財務(wù)管理、生產(chǎn)管理中、倉庫管理時,也可以建立眾多的數(shù)據(jù)庫,以實現(xiàn)財務(wù)、倉庫、生產(chǎn)的自動化管理。

6結(jié)語

計算機的課程體系是實現(xiàn)完整應(yīng)用的一個整體,獨立的程序設(shè)計教學(xué)會使學(xué)生對許多概念的理解發(fā)生混淆,造成實際應(yīng)用的偏差。本文論述了將相關(guān)的專業(yè)課程概念融入C++程序設(shè)計的教學(xué)過程中,增強學(xué)生對程序設(shè)計概念的理解,并根據(jù)需要靈活應(yīng)用。當(dāng)然,面向?qū)ο蟮某绦蛟O(shè)計也是一門實踐性很強的課程,學(xué)生對所有概念的理解及應(yīng)用必須通過上機操作,在程序設(shè)計中不斷磨練才能提高。

參考文獻:

[1] 劉建華. 計算機語言類課程教學(xué)模式初探[J]. 高教論壇,2005,2(1):91-93.

[2] 鄭莉,董淵,張瑞豐. C++語言程序設(shè)計[M]. 北京:清華大學(xué)出版社,2005.

[3] 陳渝譯. 操作系統(tǒng):精髓與設(shè)計原理[M]. 北京:電子工業(yè)出版社,2006.

[4] 王曉東. 算法設(shè)計與分析[M]. 北京:清華大學(xué)出版社,2008.

篇8

表1  實心三角形的構(gòu)成表

行號i 空格數(shù)m 星號數(shù)n 1 4 1 2 3 3 3 2 5 4 1 7 5 0 9      分析表1,可以得出行號i與空格數(shù)m、星號數(shù)n如下的數(shù)學(xué)關(guān)系: m=5-i,n=2×i-1      則實心三角形的構(gòu)成規(guī)律可以描述為:第i行由(5-i)個空格和(2×i-1)個星號和一個回車符構(gòu)成。把行號i作為for語句的循環(huán)變量,輸出圖形程序的主要部分見程序段1。 采用上面的方法,可以使學(xué)生很容易編寫出類似的程序,其中的關(guān)鍵在于讓學(xué)生找出圖形中行號與每一行的空格數(shù)以及星號數(shù)的關(guān)系(對于圖1(b)、(c)需要把圖形分成幾個部分,再分析其中的構(gòu)成規(guī)律),這需要學(xué)生數(shù)學(xué)方面的知識,非編程本身的范疇了。 for(i=1;i<=5;i++) { /*輸出(5-i)個空格;*/ for(m=1;m<=5-i;m++)    printf(“ ”);   /*輸出(2*i-1)個星號;*/ for(n=1;n<=2*i-1;n++)    printf(“*”);   /*輸出回車符;*/ printf(“\n”); } 程序段1 實心三角形的主要程序

 3  數(shù)組中循環(huán)結(jié)構(gòu)的應(yīng)用

     在c語言中,for語句經(jīng)常與數(shù)組相結(jié)合,用于實現(xiàn)數(shù)組元素的賦值、輸入與輸出。對于初學(xué)者來說,更習(xí)慣于用順序結(jié)構(gòu)的語句來實現(xiàn)(如圖2左)。我們將圖2左的幾條語句作比較,可以看出在這5條語句中,不同的只有數(shù)組下標(biāo),那么就可以將這5條語句合并成一條for語句,將數(shù)組下標(biāo)換成for語句的循環(huán)變量i,而i的值從0增加到4。按照for語句的基本語法規(guī)則可以很容易的寫出圖2右的for語句。

     同樣,對于下面這個輸出二維數(shù)組元素的例子,也可以用上述辦法實現(xiàn),不過轉(zhuǎn)換過程比上例要復(fù)雜一些:經(jīng)過對比圖3左側(cè)方框中順序結(jié)構(gòu)的12條語句,可以發(fā)現(xiàn)也是只有數(shù)組下標(biāo)在變化,但是由于是二維數(shù)組,行下標(biāo)和列下標(biāo)同時都在變化,很顯然不能直接用一條簡單的for語句來實現(xiàn)(不是絕對不可以實現(xiàn),后面將會看到)。但是我們可以把這12條語句細(xì)分一下,3條語句為一組,而在同一組中的語句只有列下標(biāo)在變化,這時可以采用上例中的方法,將列下標(biāo)都用循環(huán)變量j來代替,得到圖3右上的形式。再次對比圖3右上的4條for語句,不同的是行下標(biāo),同樣用新的循環(huán)變量i來代替,合并后得到圖3右下最終二重for循環(huán)的語句。

   

     在上例中,常規(guī)的思路都采用二重for循環(huán)與二維數(shù)組相結(jié)合來實現(xiàn)對數(shù)組元素的訪問,實際上也可以使用一重for循環(huán)來實現(xiàn):無論如何變化,我們可以先確定的是,輸出語句printf肯定要執(zhí)行12次,如果用一重for循環(huán),那么循環(huán)變量i的值就要從0遞增到11。再分析數(shù)組行下標(biāo)m和列下標(biāo)n與循環(huán)變量i之間的關(guān)系,很顯然:i=m*3+n,按照整數(shù)除法的思想,行下標(biāo)m恰好是循環(huán)變量i整除3后的商,而列下標(biāo)n恰好是循環(huán)變量i整除3后的余數(shù),即:

篇9

關(guān)鍵詞:算法;結(jié)構(gòu)化程序設(shè)計;模塊化教學(xué);任務(wù)化

中圖分類號:G712 文獻標(biāo)識碼:B 收稿日期:2015-12-29

一、教學(xué)現(xiàn)狀

“C語言程序設(shè)計基礎(chǔ)”整個課程分為基礎(chǔ)知識和程序設(shè)計兩個大的模塊:基礎(chǔ)知識屬于純理論部分,主要介紹C語言的使用規(guī)則以及語法;程序設(shè)計部分需要通過實訓(xùn)的模塊化教學(xué)來講解。C語言知識點很多,很瑣碎,用模塊化理念來開展教學(xué),學(xué)生會感到知識點集中并且思路清晰。

二、模塊展示

整個課程是以模塊化設(shè)計為中心,將原來較為復(fù)雜的問題化簡為一系列簡單模塊的設(shè)計,也就是將―個大的計算任務(wù)劃分為一個個比較小的任務(wù)。在教學(xué)中,要注重把教學(xué)重心放在解決問題的算法分析上,培養(yǎng)學(xué)生分析與解決問題的能力,也注重培養(yǎng)學(xué)生養(yǎng)成規(guī)范代碼行文。

1.基礎(chǔ)篇

首先是引入,在這里運行幾個有趣的小程序以提高學(xué)生的興趣;其次要告訴學(xué)生C語言這門課程的重要性,即其為后續(xù)課程Java的基礎(chǔ)。在這個模塊主要是語法規(guī)則的講授,多采用案例和計算方法講授運算符和表達(dá)式,用貼近生活的案例來引出算法的應(yīng)用。在學(xué)生具備一定的程序設(shè)計能力的基礎(chǔ)上,有意識地在程序中有意識的錯誤設(shè)置,強調(diào)調(diào)試程序的重要性,讓學(xué)生充分體驗與掌握調(diào)試程序的方法,逐步提高學(xué)生獨立調(diào)試程序,并在調(diào)試過程中發(fā)現(xiàn)問題、解決問題的能力。

2.結(jié)構(gòu)化程序設(shè)計篇

對程序設(shè)計的三大結(jié)構(gòu)――順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)分模塊講授,每一個模塊講授完成,就配合做該模塊的練習(xí)題,并且進行必要的程序設(shè)計。整個實踐過程由淺入深、由簡單到復(fù)雜。在Visual Studio C++環(huán)境下,舉出幾個簡單的小程序例子演示給學(xué)生看,并逐一講解,引導(dǎo)學(xué)生自己去發(fā)現(xiàn)程序中存在的缺陷以及改進的方式。從熟悉C語言源程序到可執(zhí)行文件的整個操作流程,讓學(xué)生仿照所列舉的幾個程序模仿著編一個小程序。學(xué)生在正確完成程序設(shè)計算法的過程中,不但體會到了成就感,也豐富了自己的知識。

3.數(shù)據(jù)對象構(gòu)造

講授完經(jīng)典三大結(jié)構(gòu)以后,就對數(shù)組、函數(shù)、指針三個模塊進行講授。講授數(shù)組模塊的過程先給出若干程序案例,分析實現(xiàn)功能的算法,講授時以讀程序為主。解決的方法可能不唯一,如果能啟發(fā)學(xué)生多角度、多側(cè)面去尋求解決問題的辦法,則可激發(fā)學(xué)生思考的積極性,提高其學(xué)習(xí)興致。在C語言中一題多解的情況有很多,有意識地引導(dǎo)學(xué)生采用新思路和新方法解題,以培養(yǎng)學(xué)生在編程中的求異思維,而不是死記硬背,墨守成規(guī)。習(xí)題課采用讀程序與編寫程序相結(jié)合的方法,讓學(xué)生熟悉數(shù)組的使用和算法實現(xiàn)的相關(guān)知識。

函數(shù)模塊的講授以自定義函數(shù)為重點,講授其定義使用的語法,要求學(xué)生會編寫簡單的自定義函數(shù)。

指針模塊對程序設(shè)計沒有過多要求,只要求讀程序。講授最基本的指針定義和使用。重點突出指針在數(shù)組指向的時候的應(yīng)用。

最后一個模塊就是文件,主要講授文件的打開和訪問方式即可。并且案例化講授使用文件的代碼使用方法即可,對學(xué)生的編寫不作要求。

三、探索結(jié)論

對于高職新生,實現(xiàn)C語言教學(xué)的基礎(chǔ)化、實用化就可,不需要講授過多復(fù)雜和難以理解并且實用性不強的功能。有些知識點只需要理解,有些知識點必須掌握,按照模塊化基礎(chǔ)教學(xué)方案,學(xué)生思路清晰,易于掌握。C語言程序設(shè)計的教學(xué)要講究方法,通過這門課的學(xué)習(xí),不僅要讓學(xué)生掌握語言的基本規(guī)則,而且要切實培養(yǎng)學(xué)生分析問題、解決問題的能力,最終使學(xué)生明白,語法是有限的,可解決的問題是無限的。只有在分析實際向題的基礎(chǔ)上,以清晰的思路去設(shè)計算法,才能舉一反三,以不變應(yīng)萬變。程序設(shè)計的任務(wù)不只是編寫出一個能得到正確結(jié)果的程序,還應(yīng)考慮程序的質(zhì)量。

參考文獻:

[1] 張正瓊,黃文勝.C語言程序設(shè)計基礎(chǔ)教程[M].重慶:重慶大學(xué)出版社,2014.

篇10

軟件測試思維程序設(shè)計基礎(chǔ)教學(xué)改革《程序設(shè)計基礎(chǔ)》是各高校計算機專業(yè)開設(shè)的專業(yè)基礎(chǔ)課之一,大多數(shù)高校通過講授C或C++ 語言來鍛煉培養(yǎng)學(xué)生的邏輯思維能力、計算能力和編程能力,為以后學(xué)生學(xué)習(xí)其他程序設(shè)計類課程打下堅實的基礎(chǔ)。探討如何通過軟件測試思維的引入提高學(xué)生的編程興趣,增強領(lǐng)域知識對教學(xué)具有實際意義。

一、“程序設(shè)計基礎(chǔ)”課程教學(xué)現(xiàn)狀分析

當(dāng)前,大多數(shù)教師在教授該門課程時只重視語法和算法的講授,而不注重程序設(shè)計的綜合能力的培養(yǎng),學(xué)生沒有學(xué)習(xí)興趣,教學(xué)效果不好。分析造成該狀況的原因主要有以下三點:(1)缺乏融合軟件工程思維的程序設(shè)計基礎(chǔ)教材。經(jīng)調(diào)查發(fā)現(xiàn),大多數(shù)的面向普通本科的C/C++教材的內(nèi)容的編排都是傳統(tǒng)模式,以講解語法為主,在講解循環(huán)結(jié)構(gòu)、結(jié)構(gòu)體、鏈表等章節(jié)時融入了數(shù)據(jù)結(jié)構(gòu)、算法的知識,只有近幾年年出版的個別教材對內(nèi)容進行了改革,從案例角度、軟件工程的角度、算法的角度來進行講解,但這種教材使用范圍較小。(2)教師講授該課程的知識體系和思想意識落后。很多教師不喜歡改變原有的知識體系,因循守舊,只考慮把課程教完就萬事大吉,而沒有從學(xué)生角度考慮問題。(3)部分教師自身知識體系不完整。由于高校教師除了從事日常教學(xué)外還承擔(dān)著科研的任務(wù),每個人都有自己的研究領(lǐng)域,所以對自身不擅長的領(lǐng)域內(nèi)容欠缺或忽視,這也直接體現(xiàn)本門課程的教學(xué)中。

眾所周知,程序是構(gòu)成軟件的重要的組成部分,程序的正確性、健壯性問題關(guān)系到整個軟件的質(zhì)量。所以應(yīng)該培養(yǎng)學(xué)生編程能力的同時加強對軟件測試能力的培養(yǎng),增強對軟件和程序的宏觀認(rèn)識。

二、融入軟件測試思維的“程序設(shè)計基礎(chǔ)”課程教學(xué)改革措施

首先,教師在教學(xué)過程中應(yīng)將軟件工程中強調(diào)的“5W+1H”的思想注入到學(xué)生的思想意識中,在此可解釋為Why(程序的作用)、What(程序的功能)、Who(開發(fā)者)、When(開發(fā)時間)、Where(開發(fā)地點)、How(程序的算法),使學(xué)生建立軟件的概念,強調(diào)在編寫完程序后要選用恰當(dāng)?shù)臏y試數(shù)據(jù),進行足夠多的測試,保證程序的正確性、健壯性,當(dāng)測試達(dá)到要求后才能夠提交程序。

其次,將軟件測試的思想、方法融入到程序設(shè)計基礎(chǔ)課程的講授中。部分軟件測試思想與C/C++各知識點的結(jié)合列舉如下:

(1)將黑盒、白盒測試技術(shù)融入到選擇、循環(huán)結(jié)構(gòu)內(nèi)容中。白盒測試重點測試程序的內(nèi)部結(jié)構(gòu)是否正確,C/C++課程中的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)有多條路徑,在判定節(jié)點擁有多個判定條件,在講解該結(jié)構(gòu)時應(yīng)將白盒測試中的邏輯覆蓋思想融入其中。在完善程序時可采用等價劃分和邊界值分析兩種思想選取測試數(shù)據(jù),利用等價劃分技術(shù)分析數(shù)據(jù)有利于提高程序的健壯性。

(2)單元測試、集成測試與函數(shù)的結(jié)合??梢詫語言中的函數(shù)理解成模塊,每一個函數(shù)完成一個獨立的功能,編寫由多個函數(shù)構(gòu)成的程序時,應(yīng)該對每個函數(shù)進行單元測試,確認(rèn)每個函數(shù)的正確性,然后逐一集成,最終完成整個程序的測試。

(3)編寫程序時應(yīng)融入的軟件測試意識:在編寫C/C++程序時要讓學(xué)生知道絕對正確的程序是不存在的,再小的程序也存在著錯誤;在學(xué)生編寫完程序后應(yīng)讓學(xué)生組成小組,互相測試對方的程序,這也是軟件測試中第三方測試的作用;鼓勵創(chuàng)造性思維,提出不合理數(shù)據(jù)進行軟件測試。

三、教學(xué)效果分析

該教學(xué)思想已經(jīng)應(yīng)用于長春建筑學(xué)院14級信息安全專業(yè)學(xué)生的“程序設(shè)計基礎(chǔ)”課程教學(xué)。該課程開設(shè)于第一學(xué)期,學(xué)時均為84學(xué)時,其中理論42學(xué)時,上機42學(xué)時,選用的教材相同。信息1401為改革班,信息1402為傳統(tǒng)班。在2014-2015學(xué)年一學(xué)期《程序設(shè)計基礎(chǔ)》期末考試中,信息1401平均分73.3分,優(yōu)秀率6%,及格率72%;信息1402平均分54.71分,優(yōu)秀率0%,及格率52%。在2014-2015學(xué)年二學(xué)期的《程序設(shè)計基礎(chǔ)》課程設(shè)計中,信息1401優(yōu)秀4人,良好8人,中等15人,及格3人,不及格0人;信息1402優(yōu)秀2人,良好5人,中等17人,及格5人,不及格0人。

以上數(shù)據(jù)說明將軟件測試思想融入到程序設(shè)計課程的教學(xué)中可以提高教學(xué)效果,增強學(xué)生的學(xué)習(xí)興趣和學(xué)生解決問題的能力,尤其在第二學(xué)期的程序設(shè)計基礎(chǔ)課程設(shè)計中,信息1401班學(xué)生更能夠從整體上考慮整個系統(tǒng)功能的劃分,完成各部分程序的設(shè)計,整個系統(tǒng)的功能和性能更好,系統(tǒng)更穩(wěn)定。

四、結(jié)論

以上改革實踐證明,在講授程序設(shè)計基礎(chǔ)課程時,除了講授語法、算法之外,還應(yīng)該有意識的培養(yǎng)學(xué)生的測試能力,使學(xué)生對程序有更完整的認(rèn)識。在將軟件測試思想融入課程教學(xué)的同時要注意循序漸進,不能夠喧賓奪主,讓軟件測試的思想不知不覺進入到學(xué)生的意識中。希望的這種教學(xué)思想能夠為程序設(shè)計基礎(chǔ)課程教學(xué)注入新的活力。

參考文獻:

[1]田紅磊.基于計算思維的計算機程序設(shè)計課程教學(xué)改革.[J].課程教育研究,2015,(3):73-74.

[2]沈濟南,梁芳.程序設(shè)計類課程實踐教學(xué)方式改革研究[J].教育論壇,2014,(52):99-100.

[3]張進,葉慧婷.程序設(shè)計新型教學(xué)方法研究[J].中國現(xiàn)代教育裝備,2015,(1):104-106.