程序設計的結構范文

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

導語:如何才能寫好一篇程序設計的結構,這就需要搜集整理更多的資料和文獻,歡迎閱讀由公務員之家整理的十篇范文,供你借鑒。

程序設計的結構

篇1

關鍵詞:程序設計基礎;數據結構;計算思維;教學銜接

0、引言

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

1、課程教學內容和教學目標

程序設計基礎課程是學生接觸的第一門專業基礎課,也是進行計算機編程的入門課程。課程的教學目標是使學生掌握程序設計的基本方法,培養其擁有良好的程序設計風格、較強的軟件開發能力以及一定的計算思維能力,為后續課程打下良好的基礎。

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

2、兩門課程間的關系

從程序與數據結構本身的關系來說,一個好的程序離不開合適的數據結構,而數據結構中算法的實現離不開具體的程序設計。在計算機類專業的課程體系中,數據結構和程序設計基礎課程雖然獨立開設,但是它們之間的聯系是緊密的。在課程設置上,程序設計基礎是數據結構的前導課程,兩門課程一脈相承,不可分割。

學生對程序設計基礎課程的掌握程度、具備的計算思維和編程能力,直接關系到以程序設計語言實現算法的數據結構課程的教學效果。數據結構課程通過創造性思維的訓練,重點突出數據抽象與程序抽象能力的培養,從而進一步提升學生的計算思維能力和編程能力,但兩門課程在實際教學中存在一些問題,主要原因是課程設置、教學內容、教學方法和教學實踐方式等多方面存在缺陷。經分析,對程序設計基礎和數據結構課程進行知識整合和內容銜接,采用適當的教學方式,改進教學實踐是探討和研究的主要內容。

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

3.1 兩門課程教學內容的脫離

目前,在實際教學中,程序設計基礎和數據結構課程雖然關系緊密,但是一直被設定為兩門完全獨立的課程,而且教師在制訂教學大綱和教學目標時容易忽視兩門課程問的聯系,在教學過程中出現一些盲區,要么兩門課程在教學內容上出現不同程度的交叉,要么出現知識銜接的斷層,令學生對兩門課程的內在聯系沒有整體概念和認識,從而導致不能深入系統地學習相關知識。尤其是先行課程序設計基礎的教學內容和課程案例完全脫離了數據結構課程,使數據結構中最頻繁使用的知識和內容在程序設計基礎課程中甚少提及,不能為數據結構課程的講解打下扎實的程序設計基礎。

3.2 程序設計編程語言與數據結構實現語言不一致

程序設計基礎課程所教授的編程語言與數據結構教材或實驗所使用的實現語言不一致,如將C++語言作為程序設計基礎的教授語言,而在數據結構的實現上選擇c語言或Java語言,以至于數據結構的理論教學與具體上機編程實現脫節,嚴重影響了上機實驗和課程設計環節。

3.3 程序設計方法與數據結構實現方法不一致

程序設計基礎課程中或注重面向過程的程序設計方法,或注重面向對象的程序設計方法,但在數據結構課程中卻很難利用前導課程中學到的程序設計方法實現相關的數據結構和算法,從而影響了學生對數據結構課程知識的應用與實現。另一方面,學生在學習過程中沒有充分理解數據結構課程的作用和實際意義,以至于在實際項目和問題中不知使用什么方法(面向過程或面向對象)分析解決問題,不知如何運用數據結構知識解決實際問題。

3.4 前導課程對后續課程實踐環節的影響

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

3.5 缺少計算思維能力的培養,缺乏理論知識與實際應用的聯系

提高學生計算思維能力是程序設計基礎和數據結構課程共同的目標。計算思維是抽象的多個層次上的思維,而抽象是表達實際的方法。然而,現行教學方法過多關注程序設計和數據結構知識點的講解,缺乏對學生思維能力的培養。

如果缺乏理論聯系實際,那么將影響學生計算思維的培養。數據結構中的知識又太抽象,如果缺乏相應的實際案例對抽象知識加以應用,那么就會導致學生不知道怎樣將所學的知識應用到實際中,缺乏具體問題具體分析和解決的能力。

3.6 教師本身知識結構欠缺,上機實踐指導教師數量不足

授課教師知識結構的缺乏將導致一些現實問題:如果程序設計基礎的教師不懂數據結構,那么其自然不會將相關知識引入課堂,同時也缺乏用所教授的語言具體實現數據結構中結構和算法的能力;如果數據結構的教師缺乏相關編程語言知識,那么就會給上機輔導帶來困難。同時,兩門課程具有很強的實踐性,若上機實踐輔導教師不足,將不利于學生編程能力的提升以及相關軟件大賽學生的培養和輔導。

針對以上實際教學中存在的問題,可知為提高程序設計基礎與數據結構課程的教學效果,根據計算機類專業這兩門課程教學內容和目標,對兩門課程進行知識整合和內容銜接的必要性,對課程銜接的方法和思路等進行探討勢在必行。同時,課程教學不僅要關注知識的傳授,還要培養學生主動獲取知識并綜合已有知識創造新知識的能力。

4、程序設計基礎和數據結構課程銜接的新方法和思路

4.1 做好兩門課程教學內容的融合和銜接

教師需緊密結合計算機類專業的培養目標,精心設計程序設計基礎和數據結構課程的教學內容,既要滿足課程的專業基礎性,又要滿足后續課程學習的需要,嚴密制訂教學大綱,做好程序設計基礎與數據結構教學內容的銜接以及相關教材的選定。

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

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

同時,教師要對程序設計基礎課程內容進行適當補充和擴充,如增加c++函數模板、類模板的相關知識,為將泛型程序設計、c++的STL引人數據結構課程奠定知識基礎,縮小教學知識與實際運用的距離,提高學生的動手編程能力和知識運用能力。

4.2 保證程序設計編程語言與數據結構實現語言的一致

程序設計基礎課程所教授的編程語言要與數據結構教材或實驗所使用的編程語言一致,這樣不僅能大大提高學生的編程能力,還有利于數據結構課程的上機實現。

4.3 將面向對象思想引入程序設計與數據結構中

隨著程序設計方法從傳統的結構化程序設計演化到面向對象程序設計,數據結構在面向對象程序設計中也將成為面向對象的數據結構,且將隨著程序設計理論和技術的發展而不斷變化發展。在程序設計基礎課程中講授面向對象的編程語言如c++語言,既可以實現面向過程的數據結構,又能實現面向對象的數據結構。數據結構課程采用面向對象的觀點講授并以C++語言作為算法的描述工具,從而強化數據結構基本知識和面向對象高級程序設計基本能力的雙基訓練以及實際動手能力培養。在設計數據結構實踐項目時,將面向對象的程序設計思想、面向對象的程序設計語言和數據結構課程教學內容恰當地融合,有效整合兩門課程中的重疊部分,突出各自的側重點,符合當前軟件設計思想和軟件開發趨勢。

4.4 加強課程中計算思維能力的培養

在程序設計和數據結構的教學方法上,將面向語法為中心的教學逐漸轉變為面向問題求解的教學,從問題出發采用適當的數據結構,將其抽象成解決問題的算法描述,用程序設計語言實現問題求解,使課程從過去的僅講授孤立的知識點,轉變為講授計算思維和問題求解的過程,從而達到突出思維方法訓練的目的。在程序設計基礎和數據結構授課時盡量將理論聯系實際,將知識點解釋和應用為身邊容易理解的真實案例。例如,講“圖”時,可以把現在流行的復雜網絡、社交網絡引入其中;講解“隊列”時,可將春節買票引入其中,讓學生從身邊的例子理解理論知識的具體應用。對有些案例可以提倡“一題多解”,不局限于一種數據結構、解題思路和實現方法,通過一題多問、一題多解帶動學生探索、比較、尋求更好的解決途徑,達到學生分析解決問題能力的提高和計算思維能力的培養。

4.5 提升教師能力,配備充足的上機輔導教師

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

4.6 依托程序設計競賽,提高學生的編程能力

依托全國軟件大賽、ACM大賽等程序設計競賽,將競賽題目引入程序設計基礎和數據結構課堂中。此類題目強調考查學生對各種算法的應用能力,綜合性較強,非常適合輔助學生學習和體會數據結構的妙用,提升學生分析和解決實際問題的能力,引導學生將所學知識準確而靈活地運用到實際生活中,大大提高學生的實踐動手和程序設計能力,促進其知識的融會貫通。另外,通過競賽等多種活動可以為學生提供展現程序設計能力的舞臺,激發學生學習的主動性,培養其計算思維能力。

例如,在教授程序設計基礎時,講完邏輯表達式和多重循環結構后,可以將大賽中的邏輯推理題目引入教學中并引出常見的解題方法和思路一枚舉法,從而加深對枚舉法的認識。通過采用數據結構中的雙向鏈表和線性數組兩種方式實現大賽中常見的約瑟夫環問題。

4.7 引入OJ平臺。加強課程實踐環節

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

篇2

關鍵詞:結構化程序設計 數據結構 算法 設計技巧

近年來,計算機程序設計技術已從結構化程序設計技術逐步向對象程序設計技術過渡,特別是當設計一個較大規模的應用程序時,面向對象設計思路成為首選。縱觀計算機軟件技術的發展,在局部功能的實現上及功能模塊的設計上,結構化程序設計仍然有其不可替代的獨特魅力。在結構化程序設計中(以C語言為例),巧妙地運用一些設計技巧,對增強程序的穩定性和可靠性,簡化程序操作步聚,提高程序的運行效率十分有效。

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

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

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

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

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

一、通過引申法廓清思路,選準目標

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

二、利用框架法培養全局思維和算法的整體設計能力

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

三、借助求異法引導新思路,啟迪新思維

結構化程序設計方法的基本思路是:把一個復雜的問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍內。一個固定的問題,解決的方法可能不唯一,如果能啟發人們多角度、多側面去尋求解決問題的辦法,則可激發思考的積極性,提高其學習興致。對一個初學計算機語言的人來說,最重要的就是要有正確的程序流程概念,不僅要懂得,而且要靈活應用。由此可見,用結構化方法設計的結構是清晰的,有利于編寫出結構良好的程序。在C語言中一題多解的情況有很多,有意識地引導新思路,鼓勵新方法,以培養人們在編程中的求異思維,而不是死記硬背,墨守成規。結構化程序設計強調程序設計風格和程序結構的規范化,提倡清晰的結構。

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

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

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

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

Main()

{float x,y;

printf(“請輸入優惠購額款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(“網友應付優惠后款額Y為:y);}

顯然,這段程序冗長,一旦情況有變化,難以擴展。轉換為switch語句結構后,程序就變得相對簡單:

Main()

{float x,y;

Int t;

Printf(“請輸入優惠購額款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(“網友應付優惠后款額Y為:y);}

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

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

參考文獻:

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

篇3

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

摘要:針對計算機類本科專業數據結構課程與Java面向對象程序設計課程之間的銜接問題,分析數據結構中集合、線性表、樹和圖等知識點與Java Collections框架之間的映射關系,提出按照數據結構中學生建立的知識體系組織Collections框架的教學,說明面向數據結構知識體系的Java課程教學實施方法。

關鍵詞 :數據結構;Java;Collections框架;課程銜接

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

中圖分類號:G642

基金項目:河北省精品課程建設項目“數據結構”。

作者簡介:董東,男,副教授,研究方向為數據挖掘及應用,dongdong@hebtu.edu.cn。

0 引 言

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

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

1 JDK中的數據結構

數據結構是數據元素之間的關系。從概念和實現兩個角度,可將數據結構分為數據的邏輯結構和數據的存儲結構。按照數據元素之間前驅和后繼關系來分,數據的邏輯結構可分為以下4種:集合( Set)、線性表(List)、樹(Tree)和圖(Graph)。數據的存儲結構主要包括數據元素本身的存儲以及數據元素之間關系表示。數據元素之間的關系在計算機中主要有兩種不同的表示方法:順序映像和非順序映像,并由此得到兩種不同的存儲結構:順序存儲結構和鏈式存儲結構。

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

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

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

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

實現類TreeSet<E>可以確保集合元素處于排序狀態,TreeSet并不是根據元素的插入順序進行排序,而是根據元素的實際值來進行排序的。TreeSet采用紅黑樹的數據結構對元素進行排序,并要求添加進TreeSet中的對象必須實現CompareTo<E>接口。

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

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

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

Java JDK中沒有直接提供樹和圖的接口和實現類,但是可以通過研究TreeMap的源代碼學習操作樹的一般編寫模式。綜上,數據結構與Java面向對象程序設計兩門課程內容的銜接見表1。

2 面向數據結構銜接的java課程實施方案

Java面向對象程序設計為1學期的課程。總課時為講授54學時、實驗32學時。其中,與數據結構知識點緊密相關的Java Collections框架部分為講授6學時、實驗4學時。在講授環節,按照表1列出的順序進行。在實驗環節完成與授課內容相關的驗證性實驗。在課程設計實踐環節,要求學生使用Java設計常見算法,然后閱讀JDK提供的源代碼進行對照。具體方案如圖1所示。

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

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

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

Map是一種典型的名值對類型,它提供一種Key-Value對應保存的數據結構。客戶程序通過Key值來訪問對應的Value,這個接口并沒有繼承Collection這接口;而其他的類或者接口,不管是List、Set、Stack等都繼承或實現了Collection。

TreeMap和HashMap算是Java集合類里面比較有難度的數據結構。HashMap元素存取的時間復雜度一般是O(l),而TreeMap內部對元素的操作復雜度為O(logn)。TreeMap記憶了順序,TreeSet內部的實現使用了TreeMap。

3 結語

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

參考文獻:

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

[2]嚴蔚敏,吳偉民,數據結構(C語言版)[M].北京:清華大學出版社,1997: 5-7.

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

[4]沈華.數據結構、算法和程序之間關系的探討[J].計算機教育,2013(4): 58-61.

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

篇4

【關鍵詞】 閘門 結構設計 計算 程序

1 前言

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

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

2 程序開發

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

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

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

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

(4)為使編程者思路清晰,程序操作者使用方便,該程序采用了模塊化設計,程序共分六大功能模塊,包括p0:通用校核;p1:水平次梁;p2:豎直次梁;p3:主(頂)梁;p4:底次梁;p5:邊梁。因一般設計中,頂、主梁結構完全相同,差異只是是否承受梁頂水柱壓力,故程序將主梁和頂梁合并在一個模塊中。

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

文中給出p2和p0源程序以饗讀者,“平面鋼閘門結構設計計算程序”完整的源程序從略。

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 程序運用(實際算例)

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

5 結語及其他

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

篇5

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

2時間維分析

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

3空間維分析

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

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

3.2各課程的數據分析

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

4結語

篇6

關鍵詞:認知教學;組織;粒化;因果;計算機程序設計

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

基金項目:本文系華北科技學院教育科學研究2011年指導類課題“計算機程序設計課程教學方法的研究”、華北科技學院試題庫項目“《C++與面向對象程序設計》試題庫建設”、首都師范大學青年教師教學研究項目“以培養能力為核心的《ACCESS 數據庫》課程教學方法的研究與探索”的研究成果。

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

目前已有的問題教學、[1]任務驅動教學、[2]案例教學、[3]引導教學等都側重于教學形式與手段的變新與改革,[4]很少從教授內容的本質出發,研究教學內容的認知規律。為此,本文基于教學賴以存在和發展的認知機理,提出一種新的認知教學方法,條理地、邏輯地、系統地組織教學內容,符合學生學習思維的邏輯認知過程。

“程序設計”是計算機領域中一門重要的軟件技術,是其他軟件技術的基礎。“程序設計”課程是伴隨著計算機應用和程序設計語言的發展而發展起來的一門重要學科,已發展成為計算機專業中重要的專業必修課程,在高等教育中確立了不可缺少的公共基礎課的地位。作為使用和開發計算機的重要工具,程序設計課程具備統一的抽象與規律。

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

一、認知教學的概述

本文提出的認知教學是基于Zadeh的認知原理,Zadeh將人類的認知概括為:[5]組織(organization)、粒化(granulation)和因果(causation)。“組織”指從部分合并為整體,“粒化”指將整體分解為部分,“因果”指原因和結果的關聯。前兩者可看作互擬的過程,因果結構是一切知識的共性,它是對知識的一種本質抽象,因果有直接因果關系和間接因果關系,也有潛在因果關系和真實因果關系。所謂潛在因果關系是指一個具有普遍適應范圍的概括性的因果規律,表示給定一定的條件,原因X的滿足將引起結果Y的滿足;而真實的因果關系則是在一個特定情形下實際發生的事實,即X和Y事實上發生了,而且是因果相關的。在知識表示的層次上,教師所研究的是潛在因果關系,真實因果關系可以看作是潛在因果關系在某一特定情形下的一個實例。人類認知事物是從事物的不同側面、不同層次上認知事物的本質,將復雜的信息結構化(粒化),然后研究在不同結構層次上新事物具有的特性和不同側面或層次上新事物特征之間的關系,進而從本質上全面認知事物。

認知教學,就是按照人類認知事物的規律進行教授知識,即將教學知識組織、粒化、因果化,從而使得學生抓住知識的本質、全面地掌握知識。這里,組織可以理解為對知識宏觀的掌控,粒化是對知識微觀的演化,因果則是知識之間的關聯。因此,認知教學能夠條理地、邏輯地、系統地組織教學內容,是一種符合學生學習邏輯認知過程的科學方法。

二、計算機程序設計課程

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

“計算機程序設計”課程主要是學習如何用某種計算機語言編寫程序來解決問題。程序=數據結構+算法,所以程序設計的本質就是設計出合理的數據結構與算法。

根據軟件工程理論,[6]程序設計大致可以分為結構化程序設計(Structured Programming,SP)、面向對象程序設計(Object-Oriented Programming,OOP)、面向數據結構的程序設計(Jackson System Development,JSP),國內主要用的是前兩種程序設計方法。

同一類型的計算機程序設計有若干不同程序設計語言,同一類型的語言采用的數據結構大致相同,比如結構化程序設計語言采用的數據結構絕大多數是基本數據類型,還有其他構造類型如結構體等;面向對象程序設計語言主要采用的數據結構則是類,其中還涉及繼承機制等。因此,程序設計課程首先介紹的都是數據結構,在程序中體現在數據的定義上。

算法的設計與具體問題有著密切的關系,但無外乎是對數據結構的操作,比如輸入、計算與輸出。其中計算最為復雜,可能是函數,或標準的表達式語句,或帶有順序、選擇、循環結構的混合。因此,程序設計課程中的重點和難點都在算法部分。

三、認知教學在計算機程序設計課程中的應用

根據計算機程序設計課程的抽象特征,擬從以下幾個方面將認知教學應用于計算機程序設計課程中。

按照數據結構+算法的思路將計算機程序設計教學知識合理組織在一起,形成程序設計知識的宏觀體系結構;對宏觀架構中的每一個知識點進行細化,即構建出每一知識點的微觀結構;搭建宏觀知識點之間、微觀知識點之間以及相互的關聯。

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

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

四、結束語

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

參考文獻:

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

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

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

[4]陳越,何欽銘.計算機專業研究型課程教學模式與創新能力培養的探索[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

關鍵詞:高級程序設計;專業課程;教學

中圖分類號:G642 文獻標識碼:B

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

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

1 “高級程序設計”的課程定位

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

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

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

2操作系統:計算機資源的管家

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

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

理解了操作系統和應用程序的關系后,對于面向對象程序設計中如何調用現有計算機資源或創建新的應用,就有了十分明晰的思路。

3算法:程序設計的靈魂

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

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

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

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;

}

}

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

當然,算法只是解決某類問題的步驟或方法,同一個算法可用不同的程序設計語言實現,而且能夠根據不同的應用目標加以約束和優化。算法設計與數據結構密切相關,算法無不依附于具體的數據結構,數據結構直接關系到算法的選擇和效率,在面向對象的程序設計中,二者是一個整體,不可分割。

4數據結構:數據資源的管家

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

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

隊列和堆棧可能是使用頻率最高的數據結構。隊列是一種“先進先出(first-in first-out, FIFO)”的數據結構。就好像是在銀行里排隊,排在前面的先服務。因此順序執行的任務可以從一端依次壓進任務隊列里,要做任務時依次從另一端取出,哪個任務先接到就先做哪個任務。也許有些任務報酬更高,如果最求報酬最大化,就需要使用優先級隊列。在插入元素時,優先級高的元素插入隊列前面,把任務的報酬設成優先級數據就可以了。

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

此外,樹型結構和圖形結構也是比較常用的、非線性的數據結構。樹的實現與應用比線性數據結構復雜,但其應用很廣泛,如Windows操作系統的文件管理。圖形結構可以用于地圖數據的管理等。

5數據庫:智能化的大倉庫

在程序設計當中,具有各種數據結構的變量或對象是不可缺少的元素。如果數據量比較小,直接使用內存變量或文件存儲就可以了,但在當前信息化的環境中,數據量通常是海量的,為了加快對數據的操作與訪問,同時保護數據的安全性,必須借助專門的工具,這就是數據庫。嚴格地說,數據庫是按照數據結構組織、存儲和管理數據的倉庫。

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

6結語

計算機的課程體系是實現完整應用的一個整體,獨立的程序設計教學會使學生對許多概念的理解發生混淆,造成實際應用的偏差。本文論述了將相關的專業課程概念融入C++程序設計的教學過程中,增強學生對程序設計概念的理解,并根據需要靈活應用。當然,面向對象的程序設計也是一門實踐性很強的課程,學生對所有概念的理解及應用必須通過上機操作,在程序設計中不斷磨練才能提高。

參考文獻:

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

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

[3] 陳渝譯. 操作系統:精髓與設計原理[M]. 北京:電子工業出版社,2006.

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

篇8

表1  實心三角形的構成表

行號i 空格數m 星號數n 1 4 1 2 3 3 3 2 5 4 1 7 5 0 9      分析表1,可以得出行號i與空格數m、星號數n如下的數學關系: m=5-i,n=2×i-1      則實心三角形的構成規律可以描述為:第i行由(5-i)個空格和(2×i-1)個星號和一個回車符構成。把行號i作為for語句的循環變量,輸出圖形程序的主要部分見程序段1。 采用上面的方法,可以使學生很容易編寫出類似的程序,其中的關鍵在于讓學生找出圖形中行號與每一行的空格數以及星號數的關系(對于圖1(b)、(c)需要把圖形分成幾個部分,再分析其中的構成規律),這需要學生數學方面的知識,非編程本身的范疇了。 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  數組中循環結構的應用

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

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

   

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

篇9

關鍵詞:算法;結構化程序設計;模塊化教學;任務化

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

一、教學現狀

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

二、模塊展示

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

1.基礎篇

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

2.結構化程序設計篇

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

3.數據對象構造

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

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

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

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

三、探索結論

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

參考文獻:

[1] 張正瓊,黃文勝.C語言程序設計基礎教程[M].重慶:重慶大學出版社,2014.

篇10

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

一、“程序設計基礎”課程教學現狀分析

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

眾所周知,程序是構成軟件的重要的組成部分,程序的正確性、健壯性問題關系到整個軟件的質量。所以應該培養學生編程能力的同時加強對軟件測試能力的培養,增強對軟件和程序的宏觀認識。

二、融入軟件測試思維的“程序設計基礎”課程教學改革措施

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

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

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

(2)單元測試、集成測試與函數的結合。可以將C語言中的函數理解成模塊,每一個函數完成一個獨立的功能,編寫由多個函數構成的程序時,應該對每個函數進行單元測試,確認每個函數的正確性,然后逐一集成,最終完成整個程序的測試。

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

三、教學效果分析

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

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

四、結論

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

參考文獻:

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

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

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