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