前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的結構化程序設計主題范文,僅供參考,歡迎閱讀并收藏。
結構程序化設計方法如下:
結構化程序設計方法是按照模塊劃分原則以提高程序可讀性和易維護性、可調性和可擴充性為目標的一種程序設計方法。在結構化的程序設計中,只允許三種基本的程序結構形式,它們是順序結構、分支結構、(包括多分支結構)和循環結構,這三種基本結構的共同特點是只允許有一個流動入口和一個出口,僅有這三種基本結構組成的程序稱為結構化程序。結構化程序設計適用于程序規模較大的情況,對于規模較小程序也可采用非結構化程序設計方法。
(來源:文章屋網 )
關鍵詞:研究;計算機編程思想;結構化程序設計思想;面向對象的程序設計思想;AOP編程思想
中圖分類號:TP3文獻標識碼:A文章編號:1007-9599 (2012) 05-0000-02
隨著經濟社會的發展,信息技術也迎來了前所未有的快速發展,計算機編程的應用范圍也愈加廣泛。而其中的編程思想,作為一個主要條件,可以使編程人員編出更好的程序,本文分析了目前編程界最為主流的兩種計算機編程思想,同時和將要興起的新技術AOP,與OOP相比,其影響力巨大。因此,本文分析了其編程思想以及優越性,還闡述了開發步驟。
一、計算機編程思想研究
(一)結構化程序設計
對于結構化編程思想,其為面對繁雜任務的時候,防止混亂的一種編程思想,重視將程序結構進行規范化,要按照大腦極易理解的方式,合理組織繁雜問題的求解過程。針對此編程思想,編程者應該遵循結構形式,進行程序的設計及編寫,保證程序的正確結構,方便地進行程序正確性的證明,該思想重點有以下幾點內容:
運用由頂往下逐漸細化的方法。因為結構化編程運用了功能抽象與模塊分解,其能合理地把繁雜程序任務分解為容易處理及控制的一些子任務,隨后實施級別更細的任務分類,保證最終分出的子任務均是進行獨立編程的子程序模塊。隨后根據某些調用以及結構關系,將子程序模塊進行合理組織,最終得出需要的程序。根據結構化程序設計思想,得出的程序具有如下好處:很好的結構、每個模塊之間有著簡單清楚的關系、在各個模塊內,均有基本單元構成。因此,得出的程序清楚易讀,良好的可理解性,正確性還易驗證,維護、調試以及修改容易進行。出現了結構化編程思想,使之前軟件開發存在的混亂狀況消除,編程人員編寫的程序存在優越的結構。還因為運用“自頂向下以及逐步細化”的方法,使人們智力合理地組織起來,對軟件工程化研發是有益的。所以程序維護以及設計工作效率得以提升。
若干基本結構構成程序,對于任意的大型程序,均包括三種基本結構,這些基本結構使某個結構化的程序得以順序地組成。主要有順序、選擇以及循環結構這三種基本結構。軟件界的具體實踐以及結構化定理已證明,對于任意繁雜問題的程序設計,均可運用順序結構、選擇結構以及循環結構構成,同時還具備下面一些特征:僅一個入口及出口;在結構內,沒有死循環,在程序內,以上三種基本結構的順序執行關系得以構成。
根據功能,能把大型程序劃分為若干基本功能模塊。一些子模塊一起構成各個模塊,每個模塊在功能方面互相獨立,各個功能模塊均有進行計算機控制以及數據處理的功能。盡量使模塊間的聯系簡潔。最終將模塊根據某些層次關系,實施組織,繁雜程序的功能得以構成。
(二)面向對象的程序設計
針對面向對象的程序設計,其編程思想是運用消息、對象、類、繼承以及封裝等這些基本概念,實施程序設計。為使結構化程序設計方法處理不了的代碼重用這些問題得以解決,便給出了面向對象程序設計技術,面向對象的程序設計編程思想包括如下特點:面向對象的特點之一就是封裝,其為類與對象概念的重要特征。封裝給模塊帶來了比較良好的獨立性,程序修改與維護起來較為簡單。抽象包括數據與過程抽象。繼承性使軟件的可重用性這個問題得到良好處理。多態性使應用程序函數的同名這類問題得到良好解決。
面向對象的編程思想存在很多優越性,其減少了程序開發時間,提升了可靠性,開發出來的程序更有強壯性,維護起來更容易。面向對象編程因為具有較高的可重用性,針對應用程序,能積極運用成熟的類庫,進而使軟件開發效率得以極大提高,所以,軟件界對這種面向對象的編程思想進行提倡運用。日益增多的編程人員認可并運用了面向對象的編程思想,同時結構化編程思想在進行具有比較強功能性的軟件設計里,其指導作用仍然得以發揮。實際上,以上兩種編程思想沒有互相隔離,卻是相互支持、聯系的。在如今的軟件界,進行面向對象程序設計的時候,具有公認的編程公式:其一為對象=算法十數據結構,其二為程序=對象+對象,通過公式,能觀察出以上兩種編程思想的關系及區別。進行面向對象的程序設計時候,仍然不能脫離完成算法的結構化程序設計,其中的結構化程序設計還是編寫對象進行操作的重要所在。
二、AOP編程思想研究
(一)AOP將系統視為關注點
其實它為GOF(Observer Design Pattern)設計模式的一種持續,進行了被調用者與調用者間解耦的強調,給開發人員帶來進行橫切關注點-Crosscutting Concern描述的合理機制,還可以把橫切關注點主動地織入-weaving于面向對象的軟件系統內,確保橫切關注點模塊化得以實現,進行方面-Aspect代碼的合理劃分,橫切關注點顯得極易進行處理。開發人員進行編譯的時候,插入、更改或者除去系統的方面,更可能重用系統的方面。由于開發環境各不相同,關于概念也會有所不同。
(二)針對的問題
AOP通常基于進行業務處理中的切面實施提取,進行處理的時候,其面對著其中的一個步驟或者哪個環節,以確保整個邏輯中每個部分間低耦合性產生的隔離作用。針對動詞方面,其重視的為橫向的,即為整個邏輯中一個方面或者某個片段,例如:權限以及日志管理,一般情況下,其進行某些軟件系統自身東西的關注。并非面向對象進行業務邏輯的關注。運用有效松散方式,使系統間的耦合度這些問題減少,方面即為它的模塊化單位。
(三)軟件性能
1.代碼擴展性
對于AOP,因為方面模塊并不了解橫切關注點,因此極易進行新方面的增加,并投入新功能。同時,把新的模塊加到系統中的時候,已經存在的方面會自動橫切進入,確保系統容易擴展。
2.代碼冗余度
運用最小的耦合進行各個關注點的有效處理,保證雖然為橫切關注點,還是模塊化。如此實現的系統,它的代碼冗余不大。進行模塊化實現,促使系統的維護與理解更為容易。
3.代碼重用性
AOP將各個方面變成為獨立模塊,在模塊間,其為松散耦合。能使用其它獨立的日志寫入器取代此時的,進而將日志合理地寫入數據庫中,保證與各種日志寫入要求相符。正確實現松散耦合,經常象征著代碼重用性更為良好。
(四)AOP的開發程序
基于面向對象編程-OOP這種方法,AOP才得以改進,其為具有創新性的一種軟件開發方法。一般具有如下的幾個開發程序:
1.方面分解
進行分解,要得出橫切關注點。在這個步驟中,將系統級的橫切關注點與核心模塊級關注點進行合理分離。
2.關注點實現
進行關注點的獨立實現,將各個需求映射成為代碼,編譯器隨后將其翻譯成為一些可執行代碼。能依靠另外的編程范型,把其當作前提,確保基礎范型具有的優勢還得以保留。比如:AOP能利用OOP當作基礎范型,直接地將OOP擅長處理普通關注點的優勢引用來。利用如此的實現,一般的獨立關注點能利用OOP技術,其和過程型語言為很多OOP語言的基礎相似。關注點實現因為按照指定過程這一形式產生,能運用C、C++或者Java這些傳統語言。
3.方面的重新組合
在此步驟中,方面集成器進行某個模塊單元的建立,也就是方面,進行重組標準的指定,常把重組過程稱為結合或者織入,運用合適的信息進行最終系統的組建。
AOP實現能夠運用許多方式進行織入的實現,進行源碼至源碼的變換,進行各方面源碼的預處理,織入過的源碼得以出現,再將織入過的源碼傳到編譯器,最終可執行代碼得以生成。運用此方式,基于Java的一個AOP實現,能將很多方面變換為Java源代碼,隨后通過Java編譯器,將其變換為字節碼,還能處于字節碼級別進行織入的執行,實際上,字節碼自身也為一種源碼。同時,對于底層中的執行系統Java虛擬機,還能設計成為對AOP支持。基于Java的AOP實現要是運用此方式,能在虛擬機中,把織入規則載入,隨后就之后載入的類均利用此規則,實際上,其能進行just-in-time方面織入的執行。
三、總結
由于編程實踐的一直開展,編程思想就會產生,產生的各種新編程思想,均對編程實踐進行合理指導,且均使計算機軟件開發的質量與速度得以提升。在當今,AOP實現與語法尚未進行完全規范,其為基于OOP以后的編程思想的一種創新,其能選用OOP當作基礎范型,具有讓人無法抗拒的好處,業界會進行認可、接受,但是還要更深刻地探究其中存在的問題。
參考文獻:
[1]李明.C++程序設計[M].北京:中央廣播電視大學出版社,2008:l96-198
關鍵詞:C語言;算法為先;教學模式
中圖分類號:G642 文獻標識碼:B
1引言
為適應社會和經濟的信息化需要,掌握計算機技術顯得尤為重要。C語言以它結構化豐富、靈活性大、可移植性強、效率高等優點,被廣大高校作為計算機專業基礎課,以及許多非計算機專業學習程序設計的首選課。但是又由于C語言涉及的概念復雜,規則繁多,數據類型和運算符豐富等特點,使許多初學者望而生畏。很多文獻致力于研究好的教學方法,幫助學生掌握C語言語法及上機技巧,這在一定程度上改善了教學效果,但是學生的學習熱情仍然缺乏積極主動。本文通過分析算法在C語言教學中的重要作用,進一步探討算法的教學方法,目的是從根本上激發學生的學習熱情,降低學習難度。
2C語言教學中常見問題分析
算法設計、基本語法規則、程序調試是C語言教學的核心內容。算法注重解決某一問題采用的方法步驟,語法注重語言規范,用規范的C語言描述的算法必須通過上機調試才能實現,三個核心內容緊密聯系。然而在教學環節中,教材內容基于語法體系,通常采用課堂講語法、上機調程序的教學模式,忽視了算法在教學中的積極作用,殊不知過細的語法知識易使學生失去興趣,靈活的編輯環境讓學生望而卻步,學生的學習熱情很難調動起來。
2.1語法細節易使學生失去學習興趣
通常C語言是學生接觸的第一門程序設計語言,任何程序主要由數據和操作兩部分組成,圍繞這一特點,C語言教學內容可歸納為:算法,數據結構,程序結構三部分。算法是編程的指導思路;數據結構是數據的組織形式,可細分為基本數據類型,構造類型,指針類型、位運算;程序結構是操作語句的組織形式,具體包括預處理,函數,順序結構,選擇結構,循環結構。雖然C語言知識結構清晰,但是它是面向過程的編程語言,具有靈活的編程格式及豐富的運算符和函數,如果對語法細節不熟悉,以及相關概念混淆不清,很難編出正確的程序。教師往往投入較多課時,講解C語言語法,而繁多的語法細則,不僅使學生難于記憶,而且容易誤導學生的編程思路。例如scanf函數的應用:
scanf函數的一般使用形式為:scanf(格式控制,地址表列)。
格式控制是用雙撇號括起來的字符串,它包含兩種 信息:
(1)%和格式字符,如%d,%c,%s等,它的作用是按指定的格式輸入數據;
(2) 普通字符,即在數據輸入時,需要原樣輸入的 字符。
地址表列由若干個地址組成,通常是變量的地址或字符串的首地址。輸入多個數據時,空格,回車鍵,跳格鍵為默認分隔符。
如:“scanf(“%d%d%d”,&a,&b,&c);”語句,運行時輸入:689L,可得到變量a,b,c的值。如果輸入語句變為:“scanf(“%d,%d,%d” ,&a,&b,&c);”,僅添加了兩個逗號,仍按以上方式輸入,則會出錯。原因在于格式控制部分出現的普通字符“,”,在數據輸入時要原樣輸入,正確的輸入方式為:6,8,9L。可見C語言語法格式非常靈活。
運用scanf函數輸入字符時,又出現特殊性。
如:“scanf(“%c%c%c” ,&c1,&c2,&c3);”語句,運行時輸入:abcL,目的是將a賦給c1,b賦給c2,c賦給c3。用“printf(“%c,%c,%c”, c1,c2,c3);”語句輸出,結果卻為a,,b。出錯原因在于:%c格式字符不需要空格作為輸入字符的間隔。正確的輸入為:abcL。
然而,用scanf函數輸入多個字符串時,空格又成為有效的分隔符。
如:“scanf(“%s%s%s” ,c1,c2,c3);”語句,其中c1,c2,c3為字符數組名,若輸入數據:How are you? L,則c1數組的數據是“How”; c2數組是“are”;c3數組是“you?”。若將語句改為“scanf(“%s”,c1);”,輸入字符串:How are you? L,用“printf(“%s”,c1);”輸出,則只顯示How,與原意不同。如果一定要將帶空格的字符串輸入到字符數組c1,需要用到另一個輸入函數,如“gets(c1) ;”。
雖然任何一個C程序輸入數據,都可能用到scanf函數,但是它靈活的編程格式,往往使初學者在具體運用時舉棋不定,忘卻抓住編程題目的實質性要求。教材中還有許多值得注意和思考的語法細節,學生編程時,如果缺乏解題思路的引導,常因語法的困擾而失去編程興趣。
2.2編程環境易讓學生望而生畏
上機操作是學習程序設計的必備環節,學生可以驗證語句的正確性,測試程序的功能,進一步增強對語法知識的理解和記憶。但是C語言編輯環境的一些特點,又讓學生望而生畏。
首先,編輯環境基于DOS,不像其它可視化語言有友好的交互界面,加之初學者對語法知識不熟悉,編程時稍有不慎就會出錯。如經常字母大小寫不分;語句末尾忘加“;”;關系運算符“= =”誤用為賦值運算符“=”等。初學者對出錯提示缺乏了解,不知道錯在哪里,更無從改正,經常一個小小的錯誤導致整個程序無法運行。
其次,C語言編譯程序對語法檢測不像其它高級語言那么嚴格,這種風格雖然給編程留下“靈活的余地”,卻常導致一些非語法性和非算法性的隱型錯誤。比如程序:
main ( )
{
int a,b;
a = 32767;
b = a+1;
printf(“%d”,b);
}
運行結果為-32768,不正確,原因在于發生了溢出。系統運行時并不報錯,程序中潛伏的隱型錯誤,給編程帶來很多麻煩,增加了調試難度,對編程者提出更高要求,只有他們較全面地掌握了計算機知識,才可能檢查出錯誤。然而初學者往往只懂得編程的一部分知識,這使他們感到C語言編程即抽象又復雜。如果沒有濃厚的興趣驅動,很容易在不知所措中放棄編程。
2.3算法為先,激發學習熱情
“C語言”課程長期沿襲傳統教學模式,以語法體系為脈絡展開教學,重視語法細節和操作技巧,忽視算法對編程的指導作用,學生見木不見林,容易失去興趣,經過一個學期的學習,除了掌握一些零星的語法外,收獲甚微,面對具體的編程問題,無從下手。從事軟件開發的人都知道,軟件開發過程包括:可行性研究,需求分析,概要設計,詳細設計,編碼,測試,維護等幾個階段。重點在于先設計,后編碼,并且整個開發環節需要不斷查閱資料,反復調試修改,最終才能設計出可運行的軟件,單靠記憶和背誦一些語法知識,根本無法適應實際需要。
在教學過程中,正確處理語法與算法的關系,是提高編程能力的關鍵。算法是程序設計的靈魂,沒有正確的算法,計算機解決不了任何問題,語言只是實現算法的工具,要從算法實現的角度來介紹語言,而不是用語言來套用算法。程序設計課程本身是綜合性較強的一門課,注重由設計算法到書寫程序并進行調試的整個過程,它要求學生首先明晰結構化程序設計思路,知道怎么做,其次要求學生用扎實的語法知識實現編程,最后通過上機調試保證程序正確運行。然而,這個過程并非一帆風順,會遇到許多意想不到的困難,需要耐心與毅力,只有具備真正的興趣和強烈的好奇心,才容易完成。
經過研究與實踐,教師在教學中如果注重算法為先,從算法實現的角度來介紹語法,那么不僅可以加深學生對語法知識的理解,增強語言應用能力,而且通過構造算法,培養了學生的邏輯思維,增強了學生分析和解決問題的實踐能力。學生面對新的問題,會從程序設計思想的角度出發,先設計算法,在迫切想要實現的好奇心下,克服學習語法和調試程序的各種困難,變被動為主動。著名計算機科學家Dijkstra曾提到:“學編程是一個由新奇到熟悉循序漸進的過程”,繼而又說:“在這種激進的新奇中含有愉悅的嘗試”。
3算法教學建議
由上分析可知,C語言教學目標不僅僅是要求學生掌握語法規則或再現簡單程序,更重要的是要求學生具備編程實踐能力。傳統教學方式,學生形成以語言為中心的思維模式,編程能力差。教師應引導學生逐步形成以算法為中心的思維模式,提高編程能力。但是算法的學習和掌握并不是一蹴而就,必須依靠平時訓練和知識積累,以下提幾點學習建議。
3.1以結構化程序設計思想為核心,開拓算法設計思路
學習的認知規律是將復雜問題簡單化,以便于初學者理解和接收。C語言程序設計遵循結構化程序設計方法,該方法提高了程序的可讀性,方便了程序的調試和維護,最重要的是該方法不拘泥于算法多變的外觀形式,總結出算法結構的內在規律。學生掌握了這種規律,面對新的問題,很容易進行知識結構的遷移,復雜的編程問題將變得簡單。
結構化程序設計包括結構化算法設計和結構化編程。由順序、選擇、循環三種基本結構(或基本結構的簡單變形),按由上到下的順序排列,組成的算法稱為結構化算法。已經證明,結構化算法可以解決任何問題。對于特別復雜的編程項目,可以先采用自頂向下、逐步細化的分析方法,或采用模塊化設計方法,把大任務分解為容易求解的若干子任務,分而治之。對于非結構化算法,還可以用等價的結構化算法替換。在設計好一個結構化算法之后,就可以進行結構化編程,C語言提供了與三種基本結構相對應的語句,進行結構化編程也并非難事。
由上可知,既然基本結構的順序組合,可以表示任何復雜的算法結構,并且基本結構易于用C語句實現,那么學生只要深刻理解并熟練掌握這三種基本結構,就會提高設計算法和編寫程序的能力。表1對算法的三種基本結構進行了總結。
說明:算法的表示方法很多,其中N-S流程圖最適于表示結構化算法。表1列出了算法的三種基本結構以及相應的N-S流程圖和語句的主要表示形式,學生通過該表很容易理解算法,N-S圖,編程三者之間的關系。
教師要向學生說明,任何復雜算法都是由這三種基本結構構成,構造算法其實很容易,大家之所以覺得困難,是因為沒有深刻理解A、B代表的含義。正如表中提到:A、B較靈活,既可以代表選擇結構也可以代表循環結構,選擇結構中還可以再套用一個循環,循環結構中還可以再嵌套循環或選擇……由于A、B代表含義不同,可能構造出各種各樣不同的N-S圖,教師邊闡述,邊在黑板上繪制,開拓學生的思維空間。最后總結:能構造多少N-S圖,就可能存在多少算法;順序、選擇、循環是三塊基本的積木,形式多樣的算法是由它們搭建而成,用于解決實際問題。這種教學方式,以簡單的N-S圖為切入點,學生很容易發現N-S圖的多樣性,算法的多樣性,實際問題的多樣性之間的聯系,從而激發設計算法的濃厚興趣。
正確的解題算法將減少程序的邏輯錯誤,算法用N-S圖描述出來后,利用相應的C語句,學生很容易編寫出程序的主體代碼,至于其它編程細節,可以引導學生查閱資料。這樣,學生對語法的學習由被動變為主動。精心培植的幼苗,一定期盼開花結果,學生經過一番努力,編寫出的程序代碼,也一定希望能用計算機實現,于是上機調試也變得既有目的性,挑戰性又有趣味性。
3.2案例式教學,一題多解,培養設計算法的邏輯思維
C語言是實踐性很強的一門課程,學生除了掌握結構化程序設計方法外,還必須進行大量編程訓練。通常情況下,一個程序是用哪種語言實現的并不重要,關鍵在于算法設計的優劣。計算機科學家N. Wirth教授提出了一個著名公式:算法+數據結構=程序,由此可見程序設計的本質在于先設計出解決問題的算法。
教學初期,學生對語法知識了解甚少,教師可以根據每節課的教學目標和內容,精選程序例題,將重點放在算法的設計思路和方法上,逐步培養學生建立正確的思維模式。學生設計算法時,常犯的錯誤是,不會從計算機角度出發,分析實際問題內在的邏輯關系,而習慣于按照人的思維方式設計求解過程,算法往往無法用計算機操作實現。因此改變學生思維習慣,培養邏輯分析能力,尤為重要。
實踐證明,對同一問題,設計多種有效算法,并對算法進行優化選擇,有利于培養學生邏輯思維。通過一題多解,既拓展了學生的解題思路,增強了學生對同類問題求解的熟練程度,同時又潛移默化地培養了學生思維的科學性、嚴謹性。通常,不同問題間存在某種共性,一些基本算法掌握熟練后,學生很容易舉一反三解決不同問題,樹立起編程的信心。
例如通過一題多解,讓學生熟練三個數由大到小排序的算法,進而引導學生對一組無序數據進行排列,用N-S圖描述算法,更能反映出不同問題之間的聯系和區別。
再如典型例題:用100元錢買100只雞,每只公雞5元,每只母雞3元,每3只小雞1元,要求每種雞至少買一只,而且必須是整只,問各種雞各買多少只?
對該問題設計多種算法,既幫助學生熟悉了循環語句,同時通過對各種算法進行評價,學生又深刻體會到算法設計的優劣對程序執行效率的影響。經過這種長期訓練,學生求解問題時,不僅會注意算法的正確性,也會注重思維的嚴謹性。一題多解既培養了學生創造性思維,又訓練了邏輯思維,是提高算法設計能力的有效方法。
3.3算法帶動語法學習,全面提高編程能力
在編程訓練過程中,學生不僅要積累設計正確,高效算法的經驗,而且隨著課程內容的不斷豐富,還要能將各種算法轉化為可執行程序,完成整個結構化程序設計過程。
以往教學模式過多重視語句命令格式,教學內容繁瑣,學生需要識記的知識多,并且不易體會其用途,容易失去學習興趣。如果在教學過程中,教師采用一些方法,充分利用學生對算法的理解和掌握,激發學習語法的興趣,將取得好的教學效果。
首先,面對編程問題,如果學生明晰解題思路,在結構化程序設計思想的指導下,會很快設計出算法的N-S圖。由前可知,算法是由順序、選擇、循環三種基本結構構成,表1只是簡單地列出了三種基本結構的C語句實現,教師應廣泛搜集并認真挑選典型例題,幫助學生全面掌握三種基本結構的各種語法表示。這樣,學生根據算法的N-S圖,就會很容易編寫出程序的主體代碼。
其次,教學初期,采用案例式教學,注重培養學生的算法設計能力,學生的語法知識比較薄弱,若要求他們將算法的N-S圖完全轉換成計算機語言,會遇到較多困難。如果教師能認真解析C語言知識,將教學內容有機組織起來(見2.1所述),再現在學生面前,那么學生在迫切想要實現算法的心理之下,借助腦海中的知識體系,會很容易尋找到相關章節,查閱還未曾系統學習的語法內容,獨自完成編程過程。這樣既增強了學生的學習自主性,學生在解決問題的同時,又深刻體會到語句的用途和功能,從而激發出強烈的編程興趣。
最后,建議教師按照總體教學目標組織教學,制定每節課的語法教學任務,針對教學任務挑選例題,通過對案例的分析講解,一方面幫助學生積累設計算法的經驗;另一方面,加強學生對算法所涉及語法內容的理解,掌握和應用,學生只有正確理解并熟練掌握每一個基本概念,編程時才會少犯語法錯誤,從而減少不必要的程序調試,逐漸樹立編程的信心。
4結束語
C語言是計算機基礎教育的重要組成部分,教學目標在于培養學生的編程能力。多年來,教學模式一直圍繞語法體系,學生學習興致不高,分析和解決實際問題的能力差。經過多年教學與實踐,本文倡導算法為先的教學模式,以結構化程序設計思想為指導,通過案例式教學,提高學生算法設計能力;利用學生對算法的理解和掌握促進語法學習,進而提高學生將算法轉換為計算機語言的能力;算法和編程能力的提高,將有效減少程序中的邏輯錯誤和語法錯誤,降低調試難度。由此可見,算法為先的教學模式,有利于提高學生的程序設計水平。
參考文獻:
[1] 譚浩強. C語言程序設計[M]. 北京:清華大學出版社,2000.
[2] Edsger W. Dijkstra. On the Cruelty of Really Teaching Computing Science[J]. Comm.ACM,1989(32):1398-1404.
【關鍵詞】數據結構;算法;軟件設計
1.經典算法的選擇
選擇經典算法的重要性,PASCAL語言的創始人、著名的計算機科學家N.沃思說得好“程序=數據結構+算法”,足以見得算法在程序設計中的重要地位。在合理的數據結構基礎上,算法是對數據結構的操作(運算),是數據處理的核心。在《數據結構》中介紹的基本數據結構有線性表、堆棧、隊列、數組、樹、二叉樹、圖以及相應的算法。一個算法是建立在某種數據結構的基礎上,一個算法不可能脫離數據結構而孤立存在。只有通過學習算法,才能真正掌握某種數據結構。可以說學習《數據結構》的過程基本上是學習各種算法的過程。在眾多的算法中有簡單的、有復雜的、有容易的、有難度大的,在有限的學時情況下,不可能也沒有必要逐一講解每一個算法。大多數的算法,要靠學生自己理解消化。在這種情況下,如何選擇少量的經典算法進行分析講解,顯得尤其重要。一個經典算法往往能起到以一當十、以點帶面的關鍵作用。通過經典算法的分析,一方面讓學生加深對數據結構基本理論的理解另一方面讓學生學習程序設計方法。
選擇好經典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進行討論。
2.利用經典算法說明基本原理
2.1 經典算法應能體現某個數據結構的基本特征
我們知道線性表順序存儲時其優點是能夠對每個數據元素隨機訪問,存儲密度高,其缺點是插入、刪除操作時需要移動大量的數據元素,操作效率低。“向有序(由小到大或由大到小)的線性表(順序存儲)插入一個新的數據元素”,這一經典算法集中反映了線性表順序存儲的這些特點。
分析:將一個值為X的數據元素插入到有序(由小到大或由大到小)的線性表(順序存儲)中,可以分兩步進行,首先查找到值為X的數據元素在線性表中應有的位置,采用從頭到尾循環比較的方法確定其位置I,然后,將第I個以后的全部數據元素向后移動一個存儲單元,最后將值為X的數據元素存放到第I個位置上,線性表元素個數增1。
【算法1】
PROCEDURE INSERT(V,m,n,X)
//將值為X的數據元素插入到V數組中,(線性表順序存貯在V中)m為最多元素個數,n為當前實際元素個數
IF (m=n) THEN{“OVERFLOW”; RETURN}
FOR I=1 TO n DO
IF (X〈V(I))THEN BREAK
FOR J=n TO I BY -1 DO V(J+1)=V(J)
V(I)=X
n=n+1
RETURN
分析:【算法1】的優點是簡單,便于理解,缺點是:
①循環體內有提前退出語句,不利于結構化程序設計;
②確定新數據元素位置和移動數據元素分兩步進行,有重復操作,可以改進之,將兩步合并一步完成,即將循環比較與移動數據元素同時進行。從線性表的尾部開始向前循環比較,比新數據元素大者后移,直到小于等于時停止。
【算法2】
PROCEDURE INSERT(V,m,n,X)
IF(m=n)THEN{“OVERFLOW”;RETURN}
I=n
WHILE (I〉=1)AND (V(I)〉X)DO {V(I+1)=V(I);I=I-1}
V(I+1)=X
n=n+1
RETURN
分析:注意【算法2】中循環條件,當循環結束后I=0或V(I)〈=X,新數據元素的位置為I+1,【算法1】的時間復雜度為0(2n),而【算法2】的時間復雜度為0(n),效率提高一倍。循環結構是結構化程序設計中最基本最核心的部分,歸納循環條件是關鍵。【算法2】能進一步推廣。
2.2 利用經典算法學習算法設計
經典算法能給學習者以啟示、示范作用。
分析:可以將【算法2】用于對線性表(順序存儲)排序算法中。在直接插入排序算法中,其算法思想是從第2個數據元素開始直到第n個數據元素,逐一插入到已有序的子線性表中。
【算法3】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
{ Y=V(I)
J=I-1
WHILE (J〉=1) AND (V(J)〉Y) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y }
RETURN
分析:【算示3】其結構分為雙重循環,外循環完成逐一取數據元素,即取第I個數據元素,內循環完成將第I個數據元素插入到前I-1個已有序的子線性表中。內循環完成的功能可以獨立成為一個子函數(子過程),可以借用【算法2】。這正是結構化程序設計思想的體現,即主程序完成任務的劃分,說明“做什么”,子函數(子過程)完成任務的具體實現,說明“如何做”。結構化程序設計方法采取“分解”的手段來控制系統的復雜性,將大系統劃分為若干個相對獨立的、功能單一的子模塊。一方面子函數(子過程)可以實現軟件的重用性,在不同的程序段有相同的處理過程時調用子函數(子過程),減少軟件開發的工作量;另一方面子函數(子過程)對具體的實現技術細節進行隱藏,便于開發人員集中精力把握軟件開發的核心和主要問題,降低了軟件開發難度,從而保證軟件質量。在利用【算法2】時要稍加修改,見【算法4】。
【算法4】
PROCEDURE INSERT(V,I,X)
//將值為X的數據元素插入到已有序的前I-1個數據元素中
J=I-1
Y=X
WHILE (J〉=1) AND (V(J)〉X) DO {V(J+1)=V(J);J=J-1}
V(J+1)=Y
RETURN
相應的主程序也要作修改,見【算法5】
【算法5】
PROCEDURE SORT(V,n)
FOR I=2 TO n DO
INSERT(V,I,V(I))
RETURN
3.結束語
在眾多的算法中選擇好少量的經典算法對于教好、學好《數據結構》至關重要;經典算法要有助于學生理解對應的數據結構,經典算法的分析要側重于程序設計能力的提高。
參考文獻
[1]歐建圣.數據結構教學研究――經典算法的綜合分析[J].武漢工程職業技術學院學報,2004,16(1):58-60.
C語言 結構化程序設計 循環結構 效率
一、引言
學習和應用計算機高級程序設計語言的人都知道,在這些語言中為實現結構化程序設計,一般都會采用三種最基本的結構,即順序結構、選擇結構和循環結構。因此,掌握這三種基本結構的使用方法,是學習和掌握高級程序設計語言課的基礎。這三種基本結構中,順序結構和選擇結構和我們平常的思維習慣相似。因此,最容易理解和掌握;而循環結構是這三種基本結構中最復雜的一種結構,與我們日常的思維習慣不盡相同,因此理解起來相對來說比較困難。但是,幾乎所有的程序都離不開循環結構,利用它可以簡化程序、提高工作效率。因此,學習和應用高級程序設計語言的人又必須要掌握循環結構。但是,通過本人近幾年的教學發現,大多數學生在學到循環結構一段時間后,干脆將這門課給放棄了,原因是他們覺得循環結構太難理解了。用順序結構和選擇結構做一個小程序還可以,用循環結構實在難理解。鑒于這個原因,本人將日常授課中總結出來的一點心得從初學者的角度寫出來,希望能對即將和正在學習高級程序設計語言課的人有所幫助。當然,我們在這里是以C語言為例來說的,其實這方面的知識對其他語言比如Visual Basic語言等同樣適用。
在C語言中,循環結構主要是由For語句、While語句、Do-While語句三種結構來實現的。而在這三種循環結構語句中又以for語句的應用更為廣泛。因為for語句在其開頭語句中就已經包含了循環變量的初始值、循環變量的終止值、循環的判斷條件以及循環變量的變化趨勢等這些內容,因此在編寫其循環體時,只用考慮其循環體應該包含的主要功能就行了,而不用在For語句之前對循環變量的初始值進行過多地考慮,同樣也不用在循環內部考慮其循環變量如何變化。對大多數有程序設計經驗的人來說,使用for語句實現循環結構是一件輕而易舉的事情。但是,對于沒有經驗的初學者來說,要想將for語句的作用及使用方法掌握住也不是一件容易的事情,更不用說While語句、Do-While語句的使用了。因此,本文從初學者的角度,闡述了C語言中循環結構的幾種典型應用。
二、用循環結構輸出幾何圖形
在教學過程中,不管開設哪一種高級程序設計語言課,只要一講到循環結構,大多數老師幾乎不約而同地選擇輸出簡單的幾何圖形來作為講解循環結構的最好實例。
對于這種類型的題目,初學者往往最容易想到的方法就是采用多條輸出語句來完成程序的設計。雖然這種方法很快能夠實現所要效果,但其缺陷也是很明顯的:缺乏靈活性、程序修改起來不方便,也不符合程序設計的思想。比如,我想讓大家輸出8行,每行36個“*”。這個時候,我們就不得不在輸入“*”的時候特別仔細,因為一不小心可能個數就不對了。
但是,這樣的問題如果用循環語句來實現的話,程序不但可以簡化多,并且可以很靈活地將其修改成我們想要的效果。
因此,在講解這一類圖形時,授課教師最好引導學生按照正常的程序設計思想,先分析圖形的組成結構,找出其中變化的規律,然后按照所找到的規律用循環結構來編寫出相對應的程序代碼,這樣一旦要求有一點點變化不用大篇幅地修改程序,而只用找到關鍵的幾個地方修改一下就可以了。教師在講解的過程中,可以舉一反三,多次修改、讓學生反復練習,直到他們理解為止。
現在,我們來具體分析一下該圖形,看看它有什么樣的特點,然后我們利用For循環將它的程序代碼編寫出來。
三、結束語
以上關于循環結構的使用基本上都是在程序設計教學過程中的一些體會與總結,可能比較膚淺,但是對于初學者來說,掌握這些知識還是有必要的。在進行課程教學的過程中,將自己在學習過程中得到的一些好的方法傳授給學生,讓他們從中去實踐、體會,從而引起他們更大的學習興趣是必要的。如何讓一名初學者盡快擺脫日常的思維定式,更加透徹地理解和掌握程序設計中的基本思想,領會程序設計的精髓,是高級語言程序設計這門課程在講授過程中,應該時刻注意的問題。更希望學生在學習的過程中不只是從老師這里拿一些現成的經驗去使用,更重要的是讓學生學會自己去發現問題、解決問題,總結出一些更好的程序設計方法,為以后進行軟件開發與設計打下良好的基礎。
參考文獻:
[1]譚浩強.C程序設計(第三版)[M].清華大學出版社,2005.
[2]蘇運霖.計算機程序設計藝術第1卷?基本算法[M].北京:國防工業出版社,2002.
[3]譚浩強.C語言程序設計(第二版)[M].北京:清華大學出版社,1999.
關鍵詞:教學探索;程序設計;Scratch
中圖分類號:G642 文獻標識碼:A
1 引言(Introduction)
1.1 基礎薄弱
目前,中小學的信息化教育內容參差不齊,有的學校可能會有程序設計的教學,有的學校則以Word、Excel操作為主,對程序設計的入門不重視[1]。很多剛進入大學的學生在程序化的思維方式方面還比較弱,要入高級程序設計語言的門還有很長的路要走。
1.2 課時較少
通常程序設計入門以C語言或C++語言為教學內容。作為一種實踐性較強的語言,在一個學期中要完成程序設計概念和語法的教學,又要在有限的時間里完成編程調試訓練。如果學生沒有一定的基礎和自學能力,就很難適應這種節奏。
1.3 抽象帶來的問題
語法、算法等抽象的教學內容將降低學生的學習興趣,而學習興趣對教授與學習兩方面都非常重要。有的學生不能通過考核經常就跌入補考和重修的循環。程序設計入門作為核心課程,這個課程出了問題將給計算機專業的后續課程帶來很多不好的影響,比如本專業學生對程序設計和其他專業技能缺乏信心以及實踐能力。
2 程序設計課程的前導課程(Leading program of
programming classes)
學生在程序設計課程中,一方面要努力熟悉算法抽象、程序控制等一些全新的概念,一方面會遇到很多語法錯誤,必須要學習如何調試程序,理論加上實踐可能都是前所未有的挑戰。前導課程應帶來有趣味的內容,為學生補充各種必要的基礎概念,如抽象、邏輯、流程等,告訴學生如何在現實世界和計算機世界之間建立起一座橋梁。這樣的課程會對程序設計教學有很大幫助。
3 Scratch簡介(Introduction of scratch)
Scratch是美國麻省理工學院(MIT)媒體實驗室開發的一套“程序語言”,利用這個軟件可以輕輕松松地創造出互動式故事、動畫、游戲、音樂等令人驚嘆的作品,是一套簡單又有趣的軟件[2]。
Scratch采用拖曳、組合的方式來設計程序。它是可視化的程序語言,具有所見即所得的功能。設計Scratch作品的過程是學生學習用計算機進行思考、分析、解決問題的過程,還能進行團隊建設方面的實踐。
Scratch把程序命令歸為幾大部分:包括動作、外觀、聲音、畫筆、變量、事件、控制等,并用顏色來分類。學生只需要了解各部分模塊的功能,按照自己的想法拖到腳本窗口,并按一定規則堆積在一起,最后在瀏覽窗口就能根據命令腳本直接運行。通過可視化操作學生可以搭建起自己的程序,輕易地把自己的想法表達為計算機的程序。在這個抽象的過程中不用過分操心語法錯誤等問題。
圖1為Scratch設計界面,左上為程序運行場景,左下為程序中設計的主體對象。一個項目可以有多個動畫主體(可以是動物人物或其他一些對象),中間是可視化程序模塊,右邊是程序窗口,利用鼠標可以把中間的程序模塊拖入右邊的程序窗口,經過修改參數、安排程序模塊的順序和嵌套等工作,就完成了程序編制,接著程序可以在瀏覽器中執行。
4 Scratch對程序設計教學的支持(Supports to
programming classes)[3]
4.1 抽象
現實世界的問題如何抽象為計算機世界的模型?第一步可以從學習抽象為計算機里的對象開始。我們把需要處理的內容抽象為Scratch的動畫主體,比如一個人物或一個物體。動畫主體可以具有各種行為,比如在平面中移動。如圖2是一個負責動作的程序模塊,能控制動畫主體平移到坐標(100,200)處,其中白色的部分為可以修改的坐標值。
4.2 結構化程序
Scratch具有可以拖曳的結構化模塊。設計時候只需要把模塊拖入場景中,就可以實現循環或選擇的程序結構,并且能實現循環和選擇的嵌套,制作需要的程序流程。圖3演示了循環結構的程序模塊,repeat后面的循環次數可以修改,可以看到循環程序模塊和循環體中的其他程序模塊的顏色是不同的,它們屬于不同的功能分類。
Fig.4 Block to control choosing
其中使用的橙色模塊i是Scratch的變量模塊。Scratch程序能夠使用數字和字符串變量。變量可用來控制某個圖形的大小或個數,變量還能具有不同的作用域。由此我們向學生展示了變量存儲值、變量值影響程序結果以及變量的作用域等概念。
Scratch具有列表的結構,列表可以存儲數值或字符串。列表可以具有作用域,可以獲得列表的長度。列表項具有添加、刪除、插入等操作,并能通過下標獲取特定的列表項。列表可以幫助學生學習數組的概念。
Scratch的結構化程序設計是可視化的,調試簡單,能幫助學生把精力集中在程序結構上,而不需要為語法錯誤分心。
4.3 面向對象
Scratch能夠設置動畫主體,可以視為對象模塊。不同的動畫主體具有獨特的屬性,可操作自己的變量,能完成獨特的任務。在后續課程中這些概念很容易引申為對象及其屬性和行為的概念,這是面向對象程序設計的基礎。圖5為迷宮程序的設計,其中球體是一個對象,而終點方塊的是另一個對象。我們可以利用鍵盤移動球體,當碰到方塊對象時后者能做出贏得游戲的反應。球體對象在移動過程中碰到障礙則會產生反彈。
5 Scratch作為程序設計教學前導課程的實踐
(Experiments in programming classes)
在參考文獻[4]中提到的學校已經嘗試使用Scratch平臺作為計算機專業課程的前導課程。學校把學生分為兩部分,一部分基礎薄弱的學生在第一個學期先參加Scratch課程,到第二個學期才開始學習高級程序設計語言。而另一部分基礎良好的學生則在第一個學期就開始學習高級程序設計。
最終學過Scratch的學生,盡管基礎薄弱,他們的最終成績在通過率和平均成績方面都超過基礎良好的學生,并且在精通程序、喜愛專業課程、參與專業實踐等方面都有更好的表現。這些學生專業成績更好,對專業更熱愛,對程序設計更有信心。
6 結論(Conclusion)
程序設計是一種具有創造性的工作,它具有一定的抽象性,而且需要使用數學的方法去描述一些問題。這使得在語言程序設計的課程教學中,必須打破原有的教學模式和知識體系[5]。我們探索不同的方式幫助學生入門,Scratch可能是一個良好的平臺,它的可視化特性,對結構化程序設計的支持,都能幫助學生在實踐中培養計算機思維方式,為程序設計入門打下堅實基礎,為后續課程的挑戰做好準備。另一方面程序設計教學的困境也要需要在考核模式方面進行改革,激勵學生重視創新和實踐。
參考文獻(References)
[1] 張傳科.如何讓抽象的設計變得精彩――LOGO程序設計與
Scratch[J].中國信息技術教育,2010,(5):29-31.
[2] 陳捷.Scratch語言簡介及應用[J].電腦知識與技術,2009,5(26):
7439-7440.
[3] 朱,鄭曉妹.C語言程序設計教學前導課程研究[J].軟件導
刊,2014,13(4):160-162.
[4] M.Rizvi,T.Humphries,D.Major,M.Jones,and H.Lauzun.A
NewCS0 Course for At-Risk Majors[C].The Proceedings of
the 24th IEEE-CS Conference on Software Engineering
Education and Training,Honolulu,Hawaii,May 2011: 314-323.
[5] 劉興林.大學工科C語言程序設計教學探索與實踐――以五
邑大學為例[J].軟件工程師,2014,17(5):39-40.
關鍵詞:Visual Basic;程序設計;上機操作
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)26-1741-04
Research on Improving the Capacity of VB Computer Operations
LIU Ai-hua
(Department of Computer Engineering,Nanjing Institute of Technology,Nanjing 211167,China)
Abstract: In recent years, many colleges and universities have been Visual Basic computer programming as a Non-computer professional public basic course, many provinces and cities of our country have also been Visual Basic(hereinafter referred to VB) into the subjects of computer rank examination certificate grade 2. In years of VB teaching, the writer found that Non-computer professional students feel quite difficult in computer operation during the learning VB, because the school hours of VB is too limited and content of VB knowledge points is too more. To solve the main issues of prejudicing students to raise the capacity of VB computer operations, the writer analyses of the knowledge points of the theory and the main points of computer operations.
Key words: visual basic; computer programming; computer operations
1 引言
如果把計算機世界看成是一種現代信息交流的平臺或環境,那么程序設計語言就是這種世界溝通的語言。Visual Basic程序在GUI設計、繪圖、制表、運算、通信和多媒體開發方面本身就具有簡單易行、功能強大等優點,近年來由于ASP和的流行,VB作為簡單的入門語言更是非常適合作為初學面向對象程序設計的教學語言。目前許多高等院校將Visual Basic程序設計作為非計算機專業的公共基礎課,國家和許多省市也將Visual Basic(以下簡稱VB)納入計算機二級考試的科目。非計算機專業的學生學習VB的需求主要有兩個方面:一是用VB編程解決實際問題,特別是跟自己專業相關的畢業設計問題;二是參加計算機等級考試,獲得證書,為將來就業贏得更多的機會。盡管學生的學習熱情很高,但是VB的上機操作能力普遍不高,從VB等級考試反映出筆試通過率明顯高于機試就能明顯看出。主要原因在于VB課程的學時較少,內容太多和學習C語言相比,VB既要學習結構化程序設計中編程知識,如三種基本結構(順序、選擇和循環)、數組、過程、文件等;還要學習面向對象的程序設計知識,如各種控件的屬性、方法和事件等。筆者在平時的教學過程中注意到了制約學生上機能力提高的主要問題,給出理論上的知識點和上機時的操作要領。
2 難點1:理解App.Path的含義,掌握新建、打開、保存、重命名文件等操作
很多同學保存文件時不注意觀察路徑,保存后就不知道文件存在哪里了,原因就是路徑的概念不清楚。所以在保存之前應該要清楚新建的工程保存在哪個分區的那個文件夾下(就是路徑)。如果不理解App.Path的含義,學習圖片文件的加載(LoadPicture)、數據文件的讀入和寫出都會感覺很難;相反,如果開始多花一點時間理解了App.Path,并且掌握了常用文件的基本操作,學習文件部分的內容就會比較容易理解。
1) App.Path代表的是應用程序所在的目錄(路徑),決定了文件操作如“另存為”、“打開”時出現的對話框的默認路徑。
啟動VB后“新建”工程,此時的App.Path就是VB的安裝路徑。如果安裝在C分區,通常就是“C:\Program Files\Microsoft Visual Studio\VB98”,如圖1所示;如果安裝在D分區,就是”D:\……\VB98”。
如果第一次保存工程,就會出現“文件另存為”對話框,其中的默認路徑就是…VB98,如圖2所示。
2) App.Path會隨著文件的操作如“另存為”、“打開”路徑而變化,相應操作的默認路徑也就在變化。
一般程序不要保存到…VB98,而是保存在某個指定的路徑下,比如“D:\liuah\VB\VB等級考試\上機題\djks01”,就需要在“保存對話框”中更改路徑,然后將新建的工程保存為老師或者試題要求的名稱,如“djks001”,擴展名根據保存類型自動添加。如果保存成功,此時的App.Path就是文件的保存路徑,如圖3所示。
保存過文件后,如果做過修改,可以再按下保存按鈕,此時不會出現“文件另存為”對話框,而是直接保存對文件所作的修改;如果需要重新保存,就要用“文件”“另存為”,此時“文件另存為”的默認路徑應該是什么呢?――就是“D:\liuah\VB\VB等級考試\上機題\djks01”,如圖4所示。
如果啟動VB后不是“新建”而是直接打開“現存”工程,或者從“文件”“打開”文件如上述工程djks001.vbp,App.Path也就是你所打開文件的路徑。此時你如果再打開“另存為”對話框,默認路徑就是上圖中的路徑。
3) 難點小結:上機操作時,首先建立工程存放的文件夾(即明確路徑),然后打開VB應用環境,新建工程。建好之后不要急于編程,而是先將工程文件和自動建立的窗體文件保存到自己的文件夾中(此時App.Path已經改變),然后再開始設計界面、編寫代碼。編程結束之后,不要急于調試,而是先按“保存”按鈕(常用工具欄上的磁盤圖標)更新文件中的內容,防止程序運行中出現“死機”重啟后文件的內容還是最開始的內容。調試中可能還有改動,最后運行成功再保存一下保證文件的內容最新。
這就是“三先三再”――先建路徑再建工程,先保存文件再編程,先更新文件再調試。
3 難點2:理解VB的工作狀態、常見錯誤提示的含義,掌握簡單的調試方法
大多數學生不注意VB的工作狀態,出現錯誤時的調試能力比較弱。作為教師應該“授人以漁”,而不是“授人以魚”,像個救火隊員,到處幫學生解決簡單的調試問題。課堂上可以設置一些常見的錯誤,然后用“斷點-單步跟蹤”法來調試程序;上機幫學生解決問題時,不要直接指出錯誤,也要用調試方法,逐步培養學生的自主調試能力。
1) 注意觀察VB的三種模式:設計模式、運行模式、中斷模式:VB的應用環境有設計模式、 運行模式 、中斷模式,通過標題欄來觀察區分,如圖5所示。[設計]模式用于界面設計、屬性設置和代碼編寫,按下“啟動”按鈕,進入[運行]模式,如果按下“結束”按鈕則回到設計模式,按下“中斷”按鈕或出錯則進入“中斷”即[break]模式。主要在中斷模式[break]下調試程序――修改代碼、檢查數據等。
2) 注意觀察出錯時的提示內容,總結常見錯誤的解決辦法:常見的錯誤提示主要分為語法錯誤和邏輯錯誤。
語法錯誤一般是由于編輯代碼時的輸入失誤,通常有明確的提示并且代碼顯示高亮。比如“變量未定義”、“缺少方法或者數據成員”等。解決辦法是編寫代碼最好都用小寫字體,如果是已經定義的變量或者正確的屬性和方法,就會自動首字母大寫。檢查時只要查沒有大寫的(定義變量時,要養成良好習慣如首字母大寫、見名知意)。
邏輯錯誤一般是由于運算符使用不當、循環缺少變化或者算法思路不正確,通常運行后結果不對但是沒有明確的提示。解決辦法是利用調試窗口(立即窗口、本地窗口、監視窗口),設置斷點和逐語句跟蹤檢查相關的變量、屬性和表達式的值是否正確。
簡單的調試方法――“斷點-單步跟蹤”法:在中斷模式下,在代碼窗口選擇懷疑出錯的語句設置斷點(按下F9),然后運行到斷點語句處(該語句沒有執行,觀察左側小箭頭為當前行標記)停下,進入中斷模式,前面執行過的語句中的變量、屬性、表達式的值可以查看(變量和屬性可以用鼠標指向直接查看,表達式可以在立即窗口用“?”,即Print語句查看)。如果要繼續跟蹤斷點以后的語句執行,按下F8,配合“本地”視圖可以觀察表達式變化的動態情況如圖6所示。調試結束以后要取消斷點,在代碼窗口用光標點擊斷點語句再按下F9,斷點就消失了。
3) 難點小結:課堂上一般都會提到VB的模式、“斷點-單步跟蹤”法和立即、本地、監視視圖等內容,但是學生真正重視和運用這些調試方法關鍵是老師在無論課堂和上機實驗調試程序時都要不斷地運用這些方法,引導和提示學生去觀察問題所在。特別是講到數組、過程、變量作用域等內容時,利用“斷點-單步跟蹤”法和視圖(主要是本地視圖)時,學生理解效果非常好,學習調試的興趣被極大地激發起來。
4 難點3:理解面向對象和面向過程的主要難點,掌握程序設計的常用技術
VB編程涉及面向對象和面向過程即結構化程序設計兩個方面。主要難點包括能設計出符合操作規律的界面,并且能在合適的事件過程中添加能實現所要求功能的代碼,并且逐步優化使得代碼具有一定的可讀性、通用性、可復用性。
1) 理解對象的三要素――屬性、方法和事件,設計出符合操作規律的界面。
選擇學生常見的程序界面例如用戶登錄、查詢等等作為VB教學的引例。筆者經常使用的引例就是包含兩個窗體、一個模塊的工程,可以實現簡單的用戶身份檢查,登錄成功后可以查詢圖書的名稱,點擊查詢按鈕后可以返回圖書在列表框中是否存在;找到則顯示相應的序號,如圖7所示。這個引例基本貫穿于整個VB的教學,講解到文件時,可以將圖書信息存放于文件中;講解到數據庫時,可以將圖書信息建成數據庫中的表,利用SQL語句實現查詢。
當然作為初步接觸程序設計的學生首先需要理解面向對象程序設計的特點即程序=對象+消息。通過FORM的Caption、Picture等屬性,Hide、Show等方法,Command Button的click事件來介紹對象的三要素。然后引導他們模仿著日常生活、網上所見到的程序界面來建立界面中的對象控件、設置對象的屬性、選擇合適的對象的事件過程并且添加上代碼即編程。這個過程就是面向對象程序設計的主要步驟。
2) 理解三種基本結構――順序、選擇和循環,掌握結構化程序設計的一般思路。
事件過程中添加代碼,實現常用的例如數值計算、數據查詢等處理功能,這部分主要依靠面向過程的程序設計語句來實現。
首先需要理解面向過程即結構化程序設計的基本語句結構――順序、選擇和循環。順序結構主要實現數據的初始化、計算、消息的顯示即數據的輸入和輸出;選擇結構實現不同的數據轉向不同的處理;循環結構是計算機高效率處理的關鍵,可以實現大量數據的重復處理。通過引例中的用戶身份檢查、查詢可以找到這三類結構的語句。
然后遵循結構化程序設計的一般思路――數據的輸入、數據處理、數據輸出,選擇合適的數據輸入方式、數據處理算法、數據輸出方式,反饋出事件驅動后的結果。
3) 理解數組、過程和文件,設計出可讀性、通用性較好的代碼。
學習好數組的關鍵是要理解數組中的下標變量是從數組名開始的一片連續空間,而前面學習的變量都是沒有聯系的獨立變量,所以可以利用循環變量作為下標變量,實現對一組數據有規律的處理。
過程引入的目的是提高有特定功能的代碼段的復用率,例如查詢、排序等。
文件引入的目的是實現數據的快速讀寫,綜合了循環、數組、過程等內容。在這里重點介紹順序文件的操作。
文件操作的基本思路就是三步曲:打開文件-讀寫數據-關閉文件
① 打開文件:Open ?(什么路徑下的文件名)For ?(什么操作) As ?(什么文件號)
第1個?:例如當前路徑下的文件“in.txt”,就是App. Path & " in.txt "
第2個?:如果從給定的文件中讀入數據,就是For Input;如果將數據存入某個文件,就是For Output;
第3個?:文件號一般從#1開始,如果已經打開#1時還需要緩沖區,就用#2。
② 關閉文件:Close ?(Open中對應的文件號比如#1)
③ 讀寫數據:通常是順序文件中的數據的讀出和寫入。一般分以下三種情況
如果是字符串整體讀入文本框或寫入文件,則直接使用Input、Print(或Write)語句:
Open App.Path & "\in123.txt" For Input As 1
Input #1, StrText‘讀入數據
Close #1
Text1.Text = StrText
Open App.Path & "\out123.txt" For Output As 1
Print #1, Text1. Text ‘數據寫入文件
Close #1
如果是已知數據的個數和類型,則使用For語句和Input、Print(或Write)語句:
Open App.Path & "\" & "in0831.txt" For Input As #1
For i = 1 To 20
Input #1, Arr1(i)
Next i
Close #1
或者邊讀邊寫:
Open FileIn For Input As #1
Open FileOut For Output As #2
For i = 1 To 8
Input #1, rec.Num, rec.Name, rec.Score
Write #2, rec.Num, rec.Name, rec.Score
Next i
Close
如果是未知數據的個數,則使用Do-Loop循環、EOF函數和Input、Print(或Write)語句。EOF()函數為True表示讀到了文件的結尾。
Open App. Path & "\" & StrM For Input As #1
Open App. Path & "\" & StrN For Output As #2
Do While Not EOF(1)
Input #1, g
N = N + 1
S = S+ g
Loop
Close #1
S = S/N
Write #2, S
Close #2
注意:比較Print和Write輸出格式的區別。
Print語句的輸出和窗體、圖片框類似,只是在輸出內容前添加在那個文件號中輸出。數據項之間是空格可以有標準格式(逗號”,”分隔)和緊湊格式(分號”;”分隔)。
例如Num、Name、Score。其中Name為字符串類型,定長為10
Print #2, rec.Num, rec.Name, rec.Score‘標準格式,輸出的效果為如圖8
Print #2, rec.Num;rec.Name ;rec.Score ‘緊湊格式,輸出的效果為如圖9
Write語句的輸出只有緊湊格式,并且數據項之間有逗號(“,”)分隔,字符串會自動添加雙引號。
例如:Write #2, rec.Num, rec.Name, rec.Score輸出的效果如圖10
5 結束語
以上介紹了提高上機操作能力的重點理論知識和操作要點。除了課堂教學中的引導以外,在上機實踐的時候能及時幫助學生掌握調試技能,感受到調試通過后成功的喜悅,從而排除對編程的畏難情緒,建立對程序設計的興趣也是非常的重要。再一次重申本文開頭的觀點,如果把計算機世界看成是一種現代信息交流的平臺或環境,那么VB程序設計語言就是這種世界最為容易入門的語言。所以學好VB,并且能真正在各領域加以運用,這才是學習的初衷。
參考文獻:
[1] 龔沛曾.Visual Basic程序設計簡明教程[M].2版.北京:高等教育出版社,2003.
關鍵詞:專業課;常用軟件;結構化;原型法;形式化;設計
中圖分類號:G718.5;G710 文獻標志碼:A 文章編號:1008-3561(2016)36-0013-01
當前,普遍采用的軟件設計方法有結構化分析與設計方法 (SD/SA)、Jackson(JSP/JSD)系統開發方法、原型法、生命周期方法等多種方法。為了更好地展現各種方法的特性,本文從設計思想、設計步驟或流程、優缺點等方面對各軟件設計方法進行了相應對比和分析,為軟件設計教學工作提供一定的參考。
一、結構化分析與設計方法(SD/SA)
結構化分析方法又稱作SD方法或SA方法,它是通過把現實世界逐一描繪為各種數據在信息系統中的一種流動,同時在數據不斷流動過程中進行數據和信息之間的轉化。基本思想可描述為:基于一種將功能逐一分解的設計模式,不斷把復雜和綜合問題逐層進行分解,以便對問題進行簡化――自頂向下,逐層細化,從而將復雜的程序結構劃分為多個功能完全不相關或者獨立的小模塊,最終達到最簡化的過程。優點:比較直觀、應用簡單、容易理解,目前已經獲得了較為成功的實踐經驗,在市場推廣方面有較大的優勢。不足:首先,因為從抽象思維出發對模塊進行細化,所以得到的子模塊方案各異,共性較低;其次,由于對問題理解上的偏差,導致繼承性較為困難;再次,該方法的自適應能力相對較弱,其設計的軟件重用率不高,從而延緩了開發周期;最后,設計文檔時常出現與表示體系不一致的現象。
二、Jackson(JSP/JSD)系統開發方法
Jackson開發方法分為JSP和JSD兩種。(1)JSP開發方法。JSP方法是一種面向數據結構的程序設計方案。其基本思路是按照輸入、輸出和內部信息的三種數據結構形式進行設計,從而把對數據結構的描述轉變成一種程序結構的描述方案,因此可實現通過數據結構來反映程序結構的方法。其基本思想可描述為:首先采用自頂向下的思想按功能對系統進行劃分,并逐步求出各子問題的解,將軟件開發流程視為軟件的生命周期,最終建立一種所謂的瀑布模型。基本實現步驟可描述為:分析、設計、編碼、測試、運行及后期維護。優點:簡單易學;準入門檻底,對設計者的要求不高。不足:難以滿足規模較大的軟件系統設計,且JSP方法難以對付結構沖突問題。因此,該法僅適用于小型程序的開發。(2)JSD方法。此方法稱作杰克遜系統開發方法,它以事件的驅動為中心,將相連的順序組合構成程序進程,系統設計模型可進一步抽象成若干條以通信方式進行相聯的進程。基本設計思想描述為:首先通過仿真來理解并描述客觀事實,其次添加相應輸出功能,最后通過某種收到實現系統間的轉換。方法實現步驟為:實體的動作分析過程實體結構分析定義初始模型功能描述決定系統時間特性硬件和軟件實現。優點:實現了同類軟件和客觀世界間的關系研究,并確定了各類軟件系統和軟件現實決策間的界限。不足:對客觀現實同類軟件間的相互關系認識不夠完整,有待提升;構造的軟件實現結構較為復雜,有待簡化;對軟件結構的相關描述不完善;JSD在實現階段較為費時和復雜,且需要手動實現。
三、原型法
原型法可分為示例型和漸增型兩大類。其實現思路為:利用設計程序自動生成軟件工程運行環境,以便構造出簡化的實際系統模型,從而便于軟件開發人員和用戶間進行有效交流,大大提高了設計的靈活性。該方法實現過程要求迅速,否則便失去了意義。開發基本步驟可大致分為四步:系統簡化原型實現系統修改最終實現。優點:能適應各種模糊不清和變化不定的用戶需求。不足:需要具備較強的知識理論基礎,同時需要以相應的硬件環境作支撐。
四、生命周期法
生命周期法學也把軟件開發過程分為若干獨立階段。在軟件實現過程中,各階段分別完成一定任務,并實現最終的軟件配置程序/文檔。在完成各階段性任務過程中,可運用結構分析(SA)技術、結構設計(SD)技術和其他相關輔助工具。在編程過程中,使用了SP(結構化程序設計)語言,在各階段結束時需要進行細致的復審過程,只有各項參數合格后才能進行下一步驟的工作。因此,該方法將軟件的生命周期依次分為系統需求分析、系統設計、系統實現、系統測試、系統維護五大階段。優點:該方法采取了自頂向下、逐步求精的設計思想;模塊化設計過程中,運用了結構化程序設計方法,采用了嚴格的復審及測試程序,保障了軟件的可維護性。不足:對時變系統不太適用,開發出的軟件穩定性、可重用性和可維護性都比較差。
五、結束語
總之,以上各種軟件設計方法均存在一定的優勢和缺陷。因此,相關專業的師生在設計時,應根據設計的主客觀條件進行相應的選擇,提高設計能力,充分利用自身和環境優勢完成軟件的設計。
參考文獻:
摘 要:Visual FoxPro是技工院校計算機專業的基礎專業課程,也是開設最廣泛的數據庫類課程。通過這門課程的學習,可以為技校生獲得就業必備的計算機等級證書以及具有相應的專業素質打下基礎。因此,教師在實訓教學過程中運用案例法進行教學具有特殊的現實意義。
關鍵詞 :案例 數據庫 應用
由于技工院校處于本科、高職院校與中專院校的夾層地帶,教學理論的難度與深度不如本科與高職院校,單純的實操能力培養不如中專院校。經過幾年的實踐,我們發現要使技工院校的計算機專業建設走出困境,就必須大膽進行課程體系改革,為此,筆者所在技師學院一方面不斷根據招聘企業的專業技能要求調整計算機專業課程體系的內容,刪除、淘汰一些過時的課程,增加一些新技術課程;另一方面在實訓教學中引入案例法,從學生學習的興趣點培養入手,在加強學生基本的實操能力訓練的基礎之上,逐步加大程序設計能力的培養,收到良好的教學效果。筆者就以Visual FoxPro6.0數據庫技術與應用為例,簡述案例法在教學中的實際運用。
一、案例教學法的內涵
案例教學法就是在教學過程中,教師通過設置一個難易適中的案例,引導學生循序漸進地展開探究活動,從而在活動的過程中潛移默化地培養學生發現問題、分析問題、解決問題的能力。這種教學方法對技校計算機專業教學來說具有特殊的意義,一是技校生受身心發展狀況的制約,邏輯思維能力不強,而采用具體案例,就更加直觀、形象,更容易激發學生的學習興趣;二是便于教師組織、開展教學,教師通過案例,可以隨時發現學生對于所講授的內容掌握的情況,從而調整教學進度與難度,保證教學效果的優化;三是有利于學生程序設計能力的培養。學生通過一個具體案例問題的分析、解決,很容易舉一反三,由此及彼,這樣就刺激了學生的“發散思維”,這為他們今后走向企業必經的獨立工作與獨立思考打下了基礎。
二、Visual FoxPro6.0數據庫技術與應用課程的內容
數據庫技術是從20世紀60年代末開始發展起來的計算機軟件技術,隨著網絡技術、多媒體技術的不斷發展,數據庫技術在各領域得到越來越多地應用。Visual FoxPro作為20世紀90年代興起的高級數據庫管理軟件,它是一種完善的編程及數據管理語言,在小型數據庫系統開發中得到了廣泛應用。而Visual FoxPro6.0是一種32位關系數據庫管理系統,它在20世紀80年代流行的Xbase系列軟件基礎上增加了新的功能特性,性能不斷完善,技術不斷提高。作為關系數據庫管理系統,Visual FoxPro6.0提供了一個集成化開發環境,使數據的組織和操作變得方便、簡單,它不僅支持傳統的結構化程序設計,還支持面向對象程序設計,適合開發小型數據庫應用系統,適合計算機與非計算機專業學生學習。根據教育部計算機基礎教育白皮書的要求,數據庫應用技術不僅是計算機專業的必修課程,也是非計算機專業“1+X”課程體系中第二層次的重要方向之一。
三、案例法在Visual FoxPro實訓教學中的實踐探索
由于技工院校計算機專業數據庫應用課程的教學目標定位于培養技校生信息技術應用素質,注重數據庫基礎知識和基本理論的融會貫通,強調數據庫應用能力的培養。因此,案例教學法的采用必須兼顧科學性與實用性,一方面教學內容緊扣Visual FoxPro知識的體系結構,在介紹Visual FoxPro基礎知識后,逐步深入地講解數據庫與表操作、查詢與視圖、SQL的應用、數據與數據運算、程序設計基礎、表單及控件的應用、菜單設計、報表設計、項目管理等內容,深入淺出地向學生講解程序、軟件、軟件開發方法、結構化程序設計、面向對象設計等概念,為學生的專業學習打下扎實的理論基礎;另一方面將案例貫穿整個教學過程。在教學的第一個環節就引入案例—“學生管理系統”,后續的教學內容圍繞該案例展開,最終完成整個案例的實現。這樣就使教學充分體現了案例教學的特點。由于案例經過精心設計,選擇學生比較熟悉,比較有代表性的“學生管理系統”,整個教學內容講述這個綜合應用的案例,每一個知識點提出具體的任務和要求,形成一個小的、具體的案例,這樣就形成案例與任務共同驅動教學展開的良好情境,也更有利于技校生循序漸進地掌握數據庫應用的相關知識。
四、小結