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

時(shí)間:2023-07-13 17:32:07

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

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

篇1

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

0、引言

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在程序設(shè)計(jì)基礎(chǔ)課程教學(xué)中,教師需要關(guān)注學(xué)生計(jì)算思維能力的培養(yǎng),將重點(diǎn)放在講解思路上,教學(xué)生如何對(duì)問題進(jìn)行抽象,還要介紹一些簡單的基礎(chǔ)算法和數(shù)據(jù)結(jié)構(gòu)。程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)的聯(lián)系過程必須做到循序漸進(jìn),若引入的數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)過難,會(huì)打擊學(xué)生的學(xué)習(xí)積極性。例如,教師講數(shù)組時(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è)計(jì)基礎(chǔ)教學(xué)中,只講遞歸函數(shù)的簡單應(yīng)用,而在數(shù)據(jù)結(jié)構(gòu)教學(xué)中,需要介紹遞歸函數(shù)的復(fù)雜應(yīng)用:棧、樹、八皇后問題、N個(gè)數(shù)的全排列等。圍繞“遞歸”這一重要知識(shí)點(diǎn),從易到難并結(jié)合課程本身特點(diǎn)進(jìn)行理論分析,將有益于整合課程教學(xué)內(nèi)容,引導(dǎo)學(xué)生循序漸進(jìn)地學(xué)習(xí)和思考。

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

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

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

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

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

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

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

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

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

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

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

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

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

4.7 引入OJ平臺(tái)。加強(qiáng)課程實(shí)踐環(huán)節(jié)

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

篇2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

某淘寶商城為鼓勵(lì)更多網(wǎng)友光臨本店,對(duì)新老網(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(“請(qǐng)輸入優(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);}

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

Main()

{float x,y;

Int t;

Printf(“請(qǐng)輸入優(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);}

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

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

參考文獻(xiàn):

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

篇3

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

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

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

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

中圖分類號(hào):G642

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

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

0 引 言

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

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

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

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

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

Collection接口定義了其上的3類操作:針對(duì)單個(gè)元素的基本操作、迭代器和Collection對(duì)象之間的批量操作。基本操作包括增加、刪除、判斷是否包含某個(gè)元素、判斷是否為空、容器中當(dāng)前元素的個(gè)數(shù)、清空等。批量操作包括:合并兩個(gè)Collection容器、從一個(gè)容器中移走一些元素、保留兩個(gè)容器中相同的元素、判斷一個(gè)容器中的元素是否完全包含在另外一個(gè)容器中等。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3 結(jié)語

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

參考文獻(xiàn):

[1]教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)教學(xué)指導(dǎo)委員會(huì),高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)公共核心知識(shí)體系與課程[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].計(jì)算機(jī)教育,2013(4): 58-61.

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

篇4

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

1 前言

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

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

2 程序開發(fā)

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

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

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

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

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

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

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

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 程序運(yùn)用(實(shí)際算例)

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

5 結(jié)語及其他

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

篇5

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

2時(shí)間維分析

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

3空間維分析

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

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

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

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

4結(jié)語

篇6

關(guān)鍵詞:認(rèn)知教學(xué);組織;?;?;因果;計(jì)算機(jī)程序設(shè)計(jì)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、結(jié)束語

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

參考文獻(xiàn):

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

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

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

[4]陳越,何欽銘.計(jì)算機(jī)專業(yè)研究型課程教學(xué)模式與創(chuàng)新能力培養(yǎng)的探索[J].計(jì)算機(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)鍵詞:高級(jí)程序設(shè)計(jì);專業(yè)課程;教學(xué)

中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

}

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

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

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

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

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

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

堆棧是一種“先進(jìn)后出”的數(shù)據(jù)結(jié)構(gòu)。就好像是疊盤子,疊在最上面的盤子最先拿來使用。比如Word中的“撤消”按鈕,使用戶在編輯誤操作時(shí)不必驚慌,因?yàn)椤俺废惫δ芸梢猿废暗牟僮?。只要把用戶的操作壓入棧?撤消操作就是從棧中彈出最近發(fā)生的操作,可以很方便地實(shí)現(xiàn)這個(gè)功能。

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

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

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

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

6結(jié)語

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

參考文獻(xiàn):

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

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

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

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

篇8

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

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

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

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

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

   

     在上例中,常規(guī)的思路都采用二重for循環(huán)與二維數(shù)組相結(jié)合來實(shí)現(xiàn)對(duì)數(shù)組元素的訪問,實(shí)際上也可以使用一重for循環(huán)來實(shí)現(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è)計(jì);模塊化教學(xué);任務(wù)化

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

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

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

二、模塊展示

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

1.基礎(chǔ)篇

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

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

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

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

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

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

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

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

三、探索結(jié)論

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

參考文獻(xiàn):

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

篇10

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

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

當(dāng)前,大多數(shù)教師在教授該門課程時(shí)只重視語法和算法的講授,而不注重程序設(shè)計(jì)的綜合能力的培養(yǎng),學(xué)生沒有學(xué)習(xí)興趣,教學(xué)效果不好。分析造成該狀況的原因主要有以下三點(diǎn):(1)缺乏融合軟件工程思維的程序設(shè)計(jì)基礎(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í)融入了數(shù)據(jù)結(jié)構(gòu)、算法的知識(shí),只有近幾年年出版的個(gè)別教材對(duì)內(nèi)容進(jìn)行了改革,從案例角度、軟件工程的角度、算法的角度來進(jìn)行講解,但這種教材使用范圍較小。(2)教師講授該課程的知識(shí)體系和思想意識(shí)落后。很多教師不喜歡改變?cè)械闹R(shí)體系,因循守舊,只考慮把課程教完就萬事大吉,而沒有從學(xué)生角度考慮問題。(3)部分教師自身知識(shí)體系不完整。由于高校教師除了從事日常教學(xué)外還承擔(dān)著科研的任務(wù),每個(gè)人都有自己的研究領(lǐng)域,所以對(duì)自身不擅長的領(lǐng)域內(nèi)容欠缺或忽視,這也直接體現(xiàn)本門課程的教學(xué)中。

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

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

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

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

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

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

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

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

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

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

四、結(jié)論

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

參考文獻(xiàn):

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

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

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