前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇結(jié)構(gòu)化程序設(shè)計范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
關(guān)鍵詞:程序設(shè)計教學;實例拓展法;結(jié)構(gòu)化程序
0 引言
在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計課程中,教師往往按照知識點的先后順序和難易程度講解程序的基本結(jié)構(gòu)。在課堂上也只是列舉一些典型例題來引導學生理解所講內(nèi)容,例子之間可能沒有內(nèi)在的邏輯關(guān)系。因此,常常造成學生只能靠死記硬背學習程序結(jié)構(gòu)的各種語句,不能真正理解為什么使用這樣的方法編寫程序,無法達到靈活應(yīng)用的教學目的。為此,在教學過程中,應(yīng)該選取更加合適且具有合理的邏輯關(guān)系的例子,便于學生深入理解相關(guān)知識。
1 實例拓展法的原理
實例拓展法屬于教學模式的一種,其顯著表現(xiàn)是教師的教和學生的學,都是圍繞實例來完成,使得學生通過積極主動地運用學習資源,進行自主探索和互相協(xié)作學習,在完成教師教的實例同時,產(chǎn)生新的實例的一種學習實踐活動。它有利于培養(yǎng)學生的自主學習能力和獨立分析問題、解決問題的能力,尤其適用于計算機課程的教學。
2 實例拓展法的應(yīng)用
下面以VB程序設(shè)計課程為例,來說明教學過程中如何選擇合適的實例,以便于學生的拓展學習。所用實例分為兩大類,一類在教師課堂講解時使用,另一類在學生上機練習時使用。
1)課堂講解所用實例。
課堂實例的精心設(shè)計是教學設(shè)計的關(guān)鍵。實例的安排應(yīng)考慮學生心智發(fā)展水平、不同年齡階段的知識經(jīng)驗以及生活中的實際需求。實例的拓展難度應(yīng)該由淺入深,讓大部分學生通過思考都能完成,并且要能夠充分包含所講授的知識點,能夠很清楚地說明問題。
結(jié)構(gòu)化程序設(shè)計的課程內(nèi)容主要包括5大部分:順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組應(yīng)用與過程設(shè)計。在教學過程中一定要遵循課程內(nèi)容之間內(nèi)在的邏輯關(guān)系,由淺入深、循序漸進地講解。
下面列舉出講解結(jié)構(gòu)化程序時所用的實例,程序代碼從略。
例1順序結(jié)構(gòu)程序舉例:輸入圓的半徑,計算圓的面積。介紹程序的基本組成,包括數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出3個部分。
例2選擇結(jié)構(gòu)程序舉例:對例1進行拓展,讓學生思考,如果輸入的半徑小于0時該如何處理。引入選擇結(jié)構(gòu)的if語句。
例3選擇結(jié)構(gòu)程序舉例:通過鍵盤任意輸入三個數(shù),求它們的最大值和最小值。介紹if語句的兩種格式(單行格式和多行格式)。
例4選擇結(jié)構(gòu)程序舉例:求分段函數(shù)的值。介紹兩種多分支結(jié)構(gòu)的語句格式(if語句和Select Case語句)。
例5循環(huán)結(jié)構(gòu)程序舉例:在窗體上顯示1-10之間的奇數(shù)。引入循環(huán)結(jié)構(gòu)For…Next語句。
例6循環(huán)結(jié)構(gòu)程序舉例:對例5進行拓展,讓學生思考,如何實現(xiàn)求1-10之間的奇數(shù)之和。
例7循環(huán)結(jié)構(gòu)程序舉例:對例6進行拓展,求1+3+5+7+…的值不超過100時的最大奇數(shù)。引入循環(huán)結(jié)構(gòu)Do…Loop語句。
例8數(shù)組應(yīng)用舉例:對例3進行拓展,讓學生思考,如何實現(xiàn)求10個數(shù)的最大值和最小值。引入數(shù)組的概念和靜態(tài)數(shù)組的使用方法。
例9數(shù)組應(yīng)用舉例:對例8進行拓展,讓學生思考,如何實現(xiàn)求任意多個數(shù)的最大值和最小值。引入動態(tài)數(shù)組的使用方法。
例10過程設(shè)計舉例:對例3進行拓展,將求三個數(shù)的最大值和最小值分別定義成兩個函數(shù),并調(diào)用函數(shù)。引入過程的概念以及Function過程(即函數(shù))的建立和使用方法。
例11過程設(shè)計舉例:對例10進行拓展,將求三個數(shù)的最大值和最小值分別定義成兩個Sub過程,并調(diào)用Sub過程。引入Sub過程的建立和使用方法,并與Function過程進行對比。
以上的實例主要是在引入相關(guān)概念和講解程序基本原理時使用的,需要在多個課時中講解。根據(jù)所講內(nèi)容的課時安排,可適當補充其他實例,更加詳細地講解相關(guān)知識,也可以補充一些比較有趣實用的綜合例子,如制作計算器、打印九九乘法表、求素數(shù)、求水仙花數(shù)和完全數(shù)等,以擴展學生的思路和眼界。
2)實驗練習所用實例。
上機實踐是學生鞏固課堂所學知識的必要階段,是檢驗學生學習效果的有效手段,對提高學生的自主學習能力和實際操作能力具有極其重要的作用[2]。為了讓學生能夠有效利用上機練習的寶貴時間,教師需要給學生提供一些與課堂講解實例有關(guān),而且比較典型的練習題,讓學生通過思考去獨立完成,這樣可以使學生深入理解所學知識,靈活掌握編程技術(shù)。
下面列舉出以上課堂講解部分對應(yīng)的上機練習所用實例,程序代碼從略。
練習1順序結(jié)構(gòu)程序練習:輸入圓柱體的底面半徑和高,計算圓柱體的體積。讓學生練習數(shù)據(jù)輸入、數(shù)據(jù)處理和數(shù)據(jù)輸出三部分的相關(guān)語句。
練習2選擇結(jié)構(gòu)程序練習:輸入兩個數(shù),按從大到小的順序輸出這兩個數(shù)。讓學生練習選擇結(jié)構(gòu)程序的相關(guān)語句。
練習3選擇結(jié)構(gòu)程序練習:輸入一個學生成績,判斷其所在的等級(大于90為優(yōu)秀,大于80為良好,大于60為及格,小于60為不及格)。讓學生練習選擇結(jié)構(gòu)程序的相關(guān)語句。
練習4循環(huán)結(jié)構(gòu)程序練習:求1-2+3-4+5-6+……+99-100的值。讓學生練習循環(huán)結(jié)構(gòu)程序的相關(guān)語句。
練習5循環(huán)結(jié)構(gòu)程序練習:輸出1~100之間的偶數(shù),并顯示為10個數(shù)一行。讓學生練習循環(huán)結(jié)構(gòu)程序的相關(guān)語句。
練習6循環(huán)結(jié)構(gòu)程序練習:輸入多個學生成績,計算平均成績,要求當輸入一1時停止計算。讓學生練習循環(huán)結(jié)構(gòu)程序的相關(guān)語句。
練習7數(shù)組應(yīng)用練習:先隨機生成30個0-1000之間的隨機數(shù),再求這一組數(shù)的最大值和最小值。讓學生練習數(shù)組的定義和使用。
練習8數(shù)組應(yīng)用練習:先隨機生成30個0~1000之間的隨機數(shù),再顯示這一組數(shù)中的所有奇數(shù),每10個數(shù)一行。讓學生練習數(shù)組的定義和使用。
練習9過程設(shè)計練習:定義一個求階乘的函數(shù)Fact,并調(diào)用函數(shù)求任意輸入的一個數(shù)N的階乘N!。讓學生練習Function過程(函數(shù))的建立和使用。
練習10過程設(shè)計練習:定義一個求階乘的Sub過程Fact,并調(diào)用該過程求任意輸入的一個數(shù)N的階乘N!。讓學生練習Sub過程的建立和使用。
在上機練習時,教師應(yīng)當遵循以下原則:盡量讓學生自己完成拓展實例及創(chuàng)新實例,要給學生留出思考、探索、醒悟的時間,并把握好信息反饋,及時了解學生的學習進展及存在問題,在恰當?shù)臅r候予以點撥。
3 教學效果
筆者通過多年的教學實踐工作進行總結(jié)和檢驗,發(fā)現(xiàn)使用實例拓展法教學之后,學生從學習興趣、課堂反應(yīng)到作業(yè)成績以及考試成績等各方面都有了明顯的提高和改善,學生能夠從中學到自己需要的知識,并真正將其轉(zhuǎn)化為實際應(yīng)用,設(shè)計出實用的小軟件來,對于他們將來學習其他知識和提高計算機操作水平都有很大的促進作用。
以下為近四年來采用實例拓展法教學之后學生的出勤率、作業(yè)成績和考試成績的對比圖表。通過圖表可以看到,通過教學方法的改進,學生的學習積極性和學習效果整體有了明顯提高。
4 結(jié)語
關(guān)鍵詞:PLC;結(jié)構(gòu)化;給排水
1 引言
隨著現(xiàn)代工業(yè)發(fā)展進程的不斷加快,工業(yè)自動化控制技術(shù)發(fā)揮著越來越大的作用,PLC控制系統(tǒng)的應(yīng)用也日益廣泛。PLC程序設(shè)計的水平優(yōu)劣往往決定著工程能否及時竣工投產(chǎn),工業(yè)設(shè)備能否充分發(fā)揮其設(shè)計生產(chǎn)能力。傳統(tǒng)的PLC編程方式程序繁瑣冗長,結(jié)構(gòu)不清晰,不利于控制程序在多個項目中的重復使用。如何迅速、優(yōu)質(zhì)地編制符合不同設(shè)備工藝特點,參數(shù)的PLC程序,對工業(yè)控制系統(tǒng)的及時完工,提高自動化控制水平具有較大的意義。本文結(jié)合給排水行業(yè)常用設(shè)備及工藝程序的編寫,對結(jié)構(gòu)化編程在PLC中的應(yīng)用進行了初步的探索,取得了較理想的效果。
2 PLC程序設(shè)計方法簡介
常見的程序設(shè)計方法分為三種:線性化方法、模塊化方法以及結(jié)構(gòu)化方法[1]。
線性化編程方法:將所有的程序代碼全部放在一個程序塊中,如對S7-300/400來說,在OB1中寫入數(shù)據(jù)采集、設(shè)備控制、臺時統(tǒng)計等全部用戶程序。該方法與PLC所代替的繼電器控制電路類似,系統(tǒng)按照順序處理各條指令。它適用于小型設(shè)備配套PLC的編程,對于大中型項目則顯得程序結(jié)構(gòu)不清晰,同時由于需要對不同設(shè)備編制大量類似的代碼,導致代碼冗長,難以調(diào)試和維護。
模塊化編程方法:將程序根據(jù)不同功能需求分成不同的塊,每個功能的控制指令在各自的塊內(nèi),OB1按順序調(diào)用每個塊。該方法程序結(jié)構(gòu)清晰,便于調(diào)試和維護,但僅將功能按塊分配,加以有條件的調(diào)用,故雖然CPU效率得到提高,但代碼冗長、調(diào)試困難的缺點未得到明顯改善。
結(jié)構(gòu)化編程方法:將復雜的自動化任務(wù)分割成過程相關(guān)的功能或可多次處理的小任務(wù),以提供可以用于類似任務(wù)的通用的程序代碼,這樣更易于控制復雜任務(wù)。而這些小任務(wù)以相應(yīng)的程序段表示,稱為塊。只需要在調(diào)用程序塊時針對不同的設(shè)備和工藝流程代入不同的參數(shù)或地址,即可實現(xiàn)不同設(shè)備的控制,無須多處重復輸入相同功能的代碼。當需要對功能進行修改時只需要修改程序塊即可,提高了編程的效率和可靠性。
3 結(jié)構(gòu)化編程方法設(shè)計實例
在實際應(yīng)用中,在對給排水行業(yè)通用設(shè)備和工藝進行詳細分析的基礎(chǔ)上,針對典型設(shè)備和工藝分別編制了水泵、儀表、閥門、泵站水泵調(diào)度、自動加藥等不同的控制模塊,使高效開發(fā)PLC程序在給排水行業(yè)的應(yīng)用成為可能。下面以變頻水泵及泵站的水泵調(diào)度為例來介紹結(jié)構(gòu)化編程方法。
3.1 變頻水泵功能塊
變頻水泵是給排水行業(yè)最常見的設(shè)備,其調(diào)用如圖2所示。
圖2為變頻水泵控制塊的調(diào)用實例,該FB的輸入輸出參數(shù)如圖3示。
功能塊接口參數(shù)共分為三種類型:輸入(INPUT);輸出(OUTPUT);輸入輸出(IN_OUT)。其中輸入?yún)?shù)主要有:遠程信號,上電信號,運行信號,水泵故障,電回路故障,變頻器故障,頻率輸入等;輸出參數(shù)主要有:開停控制,頻率控制輸出,實際運行頻率等;輸入輸出類型參數(shù)主要有:變頻電機狀態(tài),變頻電機控制命令,電機臺時及開停次數(shù)統(tǒng)計,頻率設(shè)定值等。
輸入輸出類型參數(shù)可由人工或自控程序在功能塊外部進行賦值,也可由本功能塊內(nèi)部邏輯進行修改。其中的State、Command等參數(shù)均為WORD類型,其每一位分別代表了不同的含義。
該功能塊包含了除電流外的變頻水泵常見的絕大部分信號處理及控制功能,對于部分實際工程中未使用的參數(shù),可通過直接設(shè)置默認值或空置的方式進行處理。水泵電流可通過專門的模擬量處理程序塊進行數(shù)據(jù)轉(zhuǎn)換和上下限報警判斷,當電流超過上下限設(shè)定值時發(fā)出報警信號(過流、欠流)傳送給變頻水泵功能塊,從而實現(xiàn)水泵的電流超限保護功能。
3.2 泵站水泵調(diào)度功能塊
污水廠一般具有進水泵房、中間提升泵站、出水泵房等工藝段,其水泵控制模式基本相同,都是根據(jù)液位的變化來調(diào)節(jié)運行的水泵頻率和臺數(shù),調(diào)泵時又要考慮單臺設(shè)備的運行臺時和啟停間隔等因素。其基本原理介紹如下:
泵站的液位控制一般采用根據(jù)液位分段啟停泵的模式,不同的液位分別對應(yīng)當前需要開泵的臺數(shù),同時具備死區(qū)保護功能,停泵液位設(shè)定值比啟泵液位設(shè)定值略低,以防止特殊情況下水泵的頻繁啟停[2]。
水泵的啟停選擇需要考慮以下幾個條件:
(1)熱備狀態(tài)。PLC首先檢測水泵上電情況,遠程狀態(tài),控制模式,故障情況等,當以上條件均滿足時認為該泵處于熱備狀態(tài),可被自控程序進行開停調(diào)度。
(2)平衡調(diào)泵。累計運行時間最短的泵優(yōu)先被啟動,運行時間最長的泵優(yōu)先停止,使每臺泵運轉(zhuǎn)時間大致相等。當運行時間相同時,按泵的順序啟停。
(3)啟動間隔保護。控制程序使每一臺泵每小時起動次數(shù)少于6次,兩次起動間隔≥10分鐘,且不論何種情況,不同時起動2臺及2臺以上水泵。
在實際應(yīng)用中,根據(jù)分段啟泵原理以及低水位保護等條件編制泵站自控功能塊,計算當前需要開泵臺數(shù)。根據(jù)上述三條件,編制了水泵啟停調(diào)度選擇功能塊,用于選擇當前需要啟動的水泵編號。兩功能塊配套使用,可快速完成泵站自動調(diào)泵程序的編制工作。限于篇幅,本處不再詳述其具體實現(xiàn)過程。
關(guān)鍵詞:算法;結(jié)構(gòu)化程序設(shè)計;模塊化教學;任務(wù)化
中圖分類號:G712 文獻標識碼:B 收稿日期:2015-12-29
一、教學現(xiàn)狀
“C語言程序設(shè)計基礎(chǔ)”整個課程分為基礎(chǔ)知識和程序設(shè)計兩個大的模塊:基礎(chǔ)知識屬于純理論部分,主要介紹C語言的使用規(guī)則以及語法;程序設(shè)計部分需要通過實訓的模塊化教學來講解。C語言知識點很多,很瑣碎,用模塊化理念來開展教學,學生會感到知識點集中并且思路清晰。
二、模塊展示
整個課程是以模塊化設(shè)計為中心,將原來較為復雜的問題化簡為一系列簡單模塊的設(shè)計,也就是將―個大的計算任務(wù)劃分為一個個比較小的任務(wù)。在教學中,要注重把教學重心放在解決問題的算法分析上,培養(yǎng)學生分析與解決問題的能力,也注重培養(yǎng)學生養(yǎng)成規(guī)范代碼行文。
1.基礎(chǔ)篇
首先是引入,在這里運行幾個有趣的小程序以提高學生的興趣;其次要告訴學生C語言這門課程的重要性,即其為后續(xù)課程Java的基礎(chǔ)。在這個模塊主要是語法規(guī)則的講授,多采用案例和計算方法講授運算符和表達式,用貼近生活的案例來引出算法的應(yīng)用。在學生具備一定的程序設(shè)計能力的基礎(chǔ)上,有意識地在程序中有意識的錯誤設(shè)置,強調(diào)調(diào)試程序的重要性,讓學生充分體驗與掌握調(diào)試程序的方法,逐步提高學生獨立調(diào)試程序,并在調(diào)試過程中發(fā)現(xiàn)問題、解決問題的能力。
2.結(jié)構(gòu)化程序設(shè)計篇
對程序設(shè)計的三大結(jié)構(gòu)――順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)分模塊講授,每一個模塊講授完成,就配合做該模塊的練習題,并且進行必要的程序設(shè)計。整個實踐過程由淺入深、由簡單到復雜。在Visual Studio C++環(huán)境下,舉出幾個簡單的小程序例子演示給學生看,并逐一講解,引導學生自己去發(fā)現(xiàn)程序中存在的缺陷以及改進的方式。從熟悉C語言源程序到可執(zhí)行文件的整個操作流程,讓學生仿照所列舉的幾個程序模仿著編一個小程序。學生在正確完成程序設(shè)計算法的過程中,不但體會到了成就感,也豐富了自己的知識。
3.數(shù)據(jù)對象構(gòu)造
講授完經(jīng)典三大結(jié)構(gòu)以后,就對數(shù)組、函數(shù)、指針三個模塊進行講授。講授數(shù)組模塊的過程先給出若干程序案例,分析實現(xiàn)功能的算法,講授時以讀程序為主。解決的方法可能不唯一,如果能啟發(fā)學生多角度、多側(cè)面去尋求解決問題的辦法,則可激發(fā)學生思考的積極性,提高其學習興致。在C語言中一題多解的情況有很多,有意識地引導學生采用新思路和新方法解題,以培養(yǎng)學生在編程中的求異思維,而不是死記硬背,墨守成規(guī)。習題課采用讀程序與編寫程序相結(jié)合的方法,讓學生熟悉數(shù)組的使用和算法實現(xiàn)的相關(guān)知識。
函數(shù)模塊的講授以自定義函數(shù)為重點,講授其定義使用的語法,要求學生會編寫簡單的自定義函數(shù)。
指針模塊對程序設(shè)計沒有過多要求,只要求讀程序。講授最基本的指針定義和使用。重點突出指針在數(shù)組指向的時候的應(yīng)用。
最后一個模塊就是文件,主要講授文件的打開和訪問方式即可。并且案例化講授使用文件的代碼使用方法即可,對學生的編寫不作要求。
三、探索結(jié)論
對于高職新生,實現(xiàn)C語言教學的基礎(chǔ)化、實用化就可,不需要講授過多復雜和難以理解并且實用性不強的功能。有些知識點只需要理解,有些知識點必須掌握,按照模塊化基礎(chǔ)教學方案,學生思路清晰,易于掌握。C語言程序設(shè)計的教學要講究方法,通過這門課的學習,不僅要讓學生掌握語言的基本規(guī)則,而且要切實培養(yǎng)學生分析問題、解決問題的能力,最終使學生明白,語法是有限的,可解決的問題是無限的。只有在分析實際向題的基礎(chǔ)上,以清晰的思路去設(shè)計算法,才能舉一反三,以不變應(yīng)萬變。程序設(shè)計的任務(wù)不只是編寫出一個能得到正確結(jié)果的程序,還應(yīng)考慮程序的質(zhì)量。
參考文獻:
[1] 張正瓊,黃文勝.C語言程序設(shè)計基礎(chǔ)教程[M].重慶:重慶大學出版社,2014.
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);算法;軟件設(shè)計
【中圖分類號】TP311.12-4;G642
一、數(shù)據(jù)結(jié)構(gòu)與算法概述
1.1數(shù)據(jù)結(jié)構(gòu)
數(shù)據(jù)結(jié)構(gòu)是一門研究數(shù)據(jù)的邏輯結(jié)構(gòu)和存儲結(jié)構(gòu)(物理結(jié)構(gòu))以及它們之間的關(guān)系的學科,且為該結(jié)構(gòu)定義相應(yīng)的運算設(shè)計相應(yīng)的算法。這里的數(shù)據(jù)是指可輸入到計算機能被程序處理的符號的集合。其中,數(shù)據(jù)的邏輯結(jié)構(gòu)是指數(shù)據(jù)之間邏輯關(guān)系的描述,邏輯結(jié)構(gòu)的分類有線性結(jié)構(gòu)、樹形結(jié)構(gòu)和圖結(jié)構(gòu)。數(shù)據(jù)的存儲結(jié)構(gòu)是指數(shù)據(jù)在計算機中存儲結(jié)構(gòu),也稱為物理結(jié)構(gòu),在程序設(shè)計語言中,數(shù)據(jù)結(jié)構(gòu)直接反映在數(shù)據(jù)類型上,比如一個整型變量就是一個節(jié)點,根據(jù)類型給他分配內(nèi)存單元。
1.2算法
1.2.1算法是由基本運算及規(guī)定的運算順序所構(gòu)成的完整的解題步驟。計算機算法與數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系,算法最終依附于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接影響算法的選擇和運行效率。運算是計算機完成的,這就要設(shè)計計算機在操作時對相的一些操作模式,如插入、刪除和修改的算法。也就是說,數(shù)據(jù)結(jié)構(gòu)還需要給出每種結(jié)構(gòu)類型所定義的各種運算的算法。
1.2.2算法與數(shù)據(jù)結(jié)構(gòu)研究的目的簡單地說就是優(yōu)化代碼,提高程序執(zhí)行效率。比如,把一堆無順的數(shù)據(jù)通過一個算法實現(xiàn)順序排列實現(xiàn)方法太多太多,但是也許運行速率最快的占用的存儲空間很大也許運行速率不是很快的占用的存儲空間卻很小,所以要通過算法與數(shù)據(jù)結(jié)構(gòu)分析。
二、數(shù)據(jù)機構(gòu)經(jīng)典算法的選擇
選擇經(jīng)典算法的重要性,PASCAL語言的創(chuàng)始人、著名的計算機科學家N.沃思說得好“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,足以見得算法在程序設(shè)計中的重要地位。在合理的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)上,算法是對數(shù)據(jù)結(jié)構(gòu)的操作(運算),是數(shù)據(jù)處理的核心。數(shù)據(jù)結(jié)構(gòu)中所講的基本數(shù)據(jù)結(jié)構(gòu)有線性表、堆棧、隊列、數(shù)組、樹、二叉樹、圖以及相應(yīng)的算法。一個算法是建立在某種數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上,一個算法不可能脫離數(shù)據(jù)結(jié)構(gòu)而孤立存在。只有通過分析算法,才能真正掌握某種數(shù)據(jù)結(jié)構(gòu)。一個經(jīng)典算法往往能起到以一當十、以點帶面的關(guān)鍵作用。選擇好經(jīng)典算法后下一步就是要對其展開綜合分析,下面以具體的算法為例進行討論。
三、利用經(jīng)典算法說明基本原理
3.1經(jīng)典算法應(yīng)能體現(xiàn)某個數(shù)據(jù)結(jié)構(gòu)的基本特征
我們知道線性表順序存儲時其優(yōu)點是能夠?qū)γ總€數(shù)據(jù)元素隨機訪問,存儲密度高,其缺點是插入、刪除操作時需要移動大量的數(shù)據(jù)元素,操作效率低。“向有序(由小到大或由大到小)的線性表(順序存儲)插入一個新的數(shù)據(jù)元素”,這一經(jīng)典算法集中反映了線性表順序存儲的這些特點。
分析:將一個值為X的數(shù)據(jù)元素插入到有序(由小到大或由大到小)的線性表(順序存儲)中,可以分兩步進行,首先查找到值為X的數(shù)據(jù)元素在線性表中應(yīng)有的位置,采用從頭到尾循環(huán)比較的方法確定其位置I,然后,將第I個以后的全部數(shù)據(jù)元素向后移動一個存儲單元,最后將值為X的數(shù)據(jù)元素存放到第I個位置上,線性表元素個數(shù)增1。
【算法1】
PROCEDUREINSERT(V,m,n,X)
//將值為X的數(shù)據(jù)元素插入到V數(shù)組中,(線性表順序存貯在V中)m為最多元素個數(shù),n為當前實際元素個數(shù)IF(m=n)THEN{“OVERFLOW”;RETURN}FORI=1TOnDO
IF(X〈V(I))THENBREAK
FORJ=nTOIBY-1DOV(J+1)=V(J)V(I)=X
n=n+1
RETURN
分析:【算法1】的優(yōu)點是簡單,便于理解,缺點是:①循環(huán)體內(nèi)有提前退出語句,不利于結(jié)構(gòu)化程序設(shè)計;②確定新數(shù)據(jù)元素位置和移動數(shù)據(jù)元素分兩步進行,有重復操作,可以改進之,將兩步合并一步完成,即將循環(huán)比較與移動數(shù)據(jù)元素同時進行。從線性表的尾部開始向前循環(huán)比較,比新數(shù)據(jù)元素大者后移,直到小于等于時停止。
【算法2】
PROCEDUREINSERT(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】中循環(huán)條件,當循環(huán)結(jié)束后I=0或V(I)〈=X,新數(shù)據(jù)元素的位置為I+1,【算法1】的時間復雜度為0(2n),而【算法2】的時間復雜度為0(n),效率提高一倍。循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計中最基本最核心的部分,歸納循環(huán)條件是關(guān)鍵。【算法2】能進一步推廣。
3.2利用經(jīng)典算法學習算法設(shè)計
經(jīng)典算法能給學習者以啟示、示范作用。分析:可以將【算法2】用于對線性表(順序存儲)排序算法中。在直接插入排序算法中,其算法思想是從第2個數(shù)據(jù)元素開始直到第n個數(shù)據(jù)元素,逐一插入到已有序的子線性表中。【算法3】
PROCEDURESORT(V,n)
FORI=2TOnDO
{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】其結(jié)構(gòu)分為雙重循環(huán),外循環(huán)完成逐一取數(shù)據(jù)元素,即取第I個數(shù)據(jù)元素,內(nèi)循環(huán)完成將第I個數(shù)據(jù)元素插入到前I-1個已有序的子線性表中。內(nèi)循環(huán)完成的功能可以獨立成為一個子函數(shù)(子過程),可以借用【算法2】。這正是結(jié)構(gòu)化程序設(shè)計思想的體現(xiàn),即主程序完成任務(wù)的劃分,說明“做什么”,子函數(shù)(子過程)完成任務(wù)的具體實現(xiàn),說明“如何做”。結(jié)構(gòu)化程序設(shè)計方法采取“分解”的手段來控制系統(tǒng)的復雜性,將大系統(tǒng)劃分為若干個相對獨立的、功能單一的子模塊。一方面子函數(shù)(子過程)可以實現(xiàn)軟件的重用性,在不同的程序段有相同的處理過程時調(diào)用子函數(shù)(子過程),減少軟件開發(fā)的工作量;另一方面子函數(shù)(子過程)對具體的實現(xiàn)技術(shù)細節(jié)進行隱藏,便于開發(fā)人員集中精力把握軟件開發(fā)的核心和主要問題,降低了軟件開發(fā)難度,從而保證軟件質(zhì)量。
四、結(jié)束語
對于計算機科學來說,算法的概念至關(guān)重要。通俗的講,算法是指解決問題的一種方法或一個過程,在眾多的算法中選擇好少量的經(jīng)典算法對于研究數(shù)據(jù)結(jié)構(gòu)以及解決實際問題至關(guān)重要。掌握好經(jīng)典算法的原理和規(guī)律,將對計算機程序設(shè)計開發(fā)起到事半功倍的作用。
參考文獻:
【關(guān)鍵詞】課程設(shè)計;C#程序
一、課程性質(zhì)和任務(wù)
《C#程序設(shè)計》是計算機軟件技術(shù)專業(yè)(.net開發(fā)方向)一門專業(yè)技能課 ,是C# winForm 應(yīng)用程序和 Web應(yīng)用程序設(shè)計的前導課程,是.net開發(fā)方向的核心基礎(chǔ)課程。通過本課程的學習,學生應(yīng)掌握 C# 語言的基本語法,程序設(shè)計的基本思想、基本概念和基本方法,進一步熟悉面向過程程序設(shè)計,掌握面向?qū)ο蟪绦蛟O(shè)計的思想,能對一般問題進行分析和面向?qū)ο蟪橄螅鶕?jù)UML圖編寫面向?qū)ο蟮腃# 程序。
二、課程教學目標
知識教學目標:
掌握C#語言的基本語法、語句;掌握C#中的數(shù)據(jù)類型、運算符和表達式;熟練掌握順序、分支和循環(huán)三種基本的程序控制結(jié)構(gòu);掌握結(jié)構(gòu)、枚舉的定義,并靈活使用;熟練掌握數(shù)組的定義、初始化和數(shù)組的基本操作;熟練掌握函數(shù)的定義和調(diào)用;掌握面向?qū)ο笙嚓P(guān)概念:類、對象、類的封裝、繼承、多態(tài)等特性和使用;掌握接口和抽象類的定義,并靈活使用;掌握集合、多態(tài)狀態(tài)下的類型和值的比較、類型的轉(zhuǎn)換、泛型;掌握事件與委托的概念與使用。
能力培養(yǎng)目標:
掌握結(jié)構(gòu)化程序設(shè)計的基本思想和方法;掌握面向?qū)ο蟪绦蛟O(shè)計的基本思想和方法。能夠?qū)陀^世界進行抽象,并編寫出面向?qū)ο蟪绦颍皇炀氝\用C#語言的編輯調(diào)試環(huán)境,能編寫常用的C#應(yīng)用程序。
思想教育目標:
培養(yǎng)學生吃苦耐勞與敬業(yè)精神、團隊精神;培養(yǎng)學生具有實事求是的學風和嚴謹?shù)墓ぷ鲬B(tài)度;
培養(yǎng)學生分析問題和解決問題的能力。
三、教學內(nèi)容和要求
(一)理論教學模塊
第一章 C# 簡介
1.教學要求
了解什么是.NET Framework,什么是C#,理解.NET Framework的運作流程,了解C#的主要特性,以及C#的現(xiàn)代編程語言特性。
2.教學內(nèi)容
C#和.NET Framework的含義,.NET Framework的工作原理和特別之處,C# 的功能。
第二章 編寫C#程序
1.教學要求
掌握使用Visual Studio 2005創(chuàng)建C#程序的方法,掌握使用Visual Studio 2005創(chuàng)建基本控制臺界面的C#程序的方法,掌握C#程序的基本結(jié)構(gòu),熟悉控制臺輸入、輸出方法,了解C#基本語句、注釋等要求,理解命名空間。
2.教學內(nèi)容
Visual Studio 2005的基礎(chǔ)知識,編寫簡單的控制臺應(yīng)用程序,編寫Windows Form應(yīng)用程序。
第三章 變量和表達式
1.教學要求
掌握C#的基本語法,理解C#程序的基本結(jié)構(gòu),掌握簡單數(shù)據(jù)類型的定義和使用,包括整型、浮點型、小數(shù)型、布爾型,掌握變量的定義,熟悉camelCase和PascalCase變量命名法,了解數(shù)據(jù)類型轉(zhuǎn)換,掌握常量,熟悉表達式及運算符實現(xiàn)數(shù)據(jù)的計算。
2.教學內(nèi)容
C#的基本語法,簡單數(shù)據(jù)類型,變量及其用法,表達式及其用法。
第四章 流程控制
1.教學要求
了解C#中的布爾類型的定義與使用方法,理解位運算,掌握分支語句,包括if和switch,掌握循環(huán)語句(包括for、while、do while),學會分析問題,并使用分支和循環(huán)解決。
2.教學內(nèi)容
布爾邏輯的含義及其用法,位運算的含義及其用法,分支語句,循環(huán)語句。
第五章 復雜的變量類型處理
1.教學要求
掌握枚舉類型的定義和使用,掌握結(jié)構(gòu)類型的定義和使用,掌握一維、二維數(shù)組的使用,理解隱式和顯式類型轉(zhuǎn)換,掌握.NET對字符串的處理常見功能,包括字符串的查找、替換、格式化、調(diào)整等。
2.教學內(nèi)容
枚舉的定義與使用,結(jié)構(gòu)體的定義與使用,數(shù)組的定義與使用,類型轉(zhuǎn)換,字符串處理。
第六章 函數(shù)
1.教學要求
掌握函數(shù)的定義和使用,理解可變參數(shù)函數(shù),函數(shù)的參數(shù),包括值參數(shù)、引用參數(shù)和輸出參數(shù),理解變量作用域概念,變量在不需要它們的代碼塊中可以隱藏起來,掌握結(jié)構(gòu)化程序設(shè)計的方法和步驟。
2.教學內(nèi)容
定義和使用簡單函數(shù),通過參數(shù)在函數(shù)之間傳送數(shù)據(jù),變量的作用域,結(jié)構(gòu)化程序設(shè)計。
第七章 程序調(diào)試和異常處理
1.教學要求
掌握VS2008中程序調(diào)試方法,包括中斷模式和非中斷模式,使用try...catch... finally處理程序異常。
2.教學內(nèi)容
VS中的調(diào)試方法,程序異常處理語句。
第八章 面向?qū)ο蟪绦蛟O(shè)計入門
1.教學要求
掌握類的定義,包括類成員的訪問級別、函數(shù)定義及重載,掌握對象的使用,理解面向?qū)ο蟮幕舅枷耄貏e是封裝性。
2.教學內(nèi)容
什么是面向?qū)ο缶幊蹋惖亩x,對象的使用,面向?qū)ο蟮幕舅枷搿?/p>
第九章 類的定義和使用
1.教學要求
掌握構(gòu)造函數(shù)的定義和使用,理解面向?qū)ο蟮睦^承性,掌握類中虛成員的定義和重寫,理解類型的上傳,了解類的層次結(jié)構(gòu)和基類object,掌握類中屬性的定義和使用,并理解其實現(xiàn)的封裝性好處,了解靜態(tài)類和類的靜態(tài)成員,掌握運算符的重載。
2.教學內(nèi)容
構(gòu)造函數(shù),面向?qū)ο蟮睦^承性,類的其他成員,包括屬性、靜態(tài)成員、運算符的重載等。
第十章 類的高級使用
1.教學要求
掌握抽象類和接口,理解兩者的區(qū)別和適用情況,理解面向?qū)ο蟮亩鄳B(tài)性及其原理,掌握面向接口的編程。
2.教學內(nèi)容
抽象類和接口的使用,創(chuàng)建類庫,理解面向?qū)ο蟮亩鄳B(tài)性,使用面向接口的編程。
第十一章 集合、比較和轉(zhuǎn)換及泛型
1.教學要求
掌握ArrayList集合,掌握自定義集合的方法,掌握多態(tài)狀態(tài)下類型和值的比較及類型的轉(zhuǎn)換,
掌握泛型的使用。
2.教學內(nèi)容
ArrayList的使用,自定義集合,比較和轉(zhuǎn)換,泛型。
第十二章 事件的定義和使用
1.教學要求
掌握委托及事件的定義和使用,理解事件和委托的區(qū)別,了解線程的使用。