版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
DELPHI程序設計基礎教程 第五章高級數(shù)據(jù)類型.第五章高級數(shù)據(jù)類型本章學習導讀5.1枚舉類型5.2子界類型5.3集合類型5.4數(shù)組5.5記錄類型5.6指針本章小結2023/2/3.本章學習導讀本章介紹了枚舉、子界、集合、數(shù)組、記錄、指針這幾種常用高級數(shù)據(jù)類型的使用。這些高級數(shù)據(jù)類型能夠描述和擴展定義較復雜的數(shù)據(jù)的存儲類型,通過結構類型,程序中可以存儲結構復雜的數(shù)據(jù)。2023/2/3.5.1枚舉類型枚舉類型就是一種用戶自定義數(shù)據(jù)類型,它是通過枚舉的方式將該類型中的值用標識符的形式一一列舉出來。枚舉類型是一個以標識符標識的有序整型常數(shù)的集合,這些常數(shù)是該類型變量可取的合法值。定義和變量聲明枚舉類型定義的格式如下:type<類型名稱>=(<標識符1>,<標識符2>,…,<標識符n>);其中type是定義枚舉類型的保留字,“類型名稱〞即用戶自定義的枚舉類型變量的名稱,枚舉值表示該種類型的值,又稱為枚舉常量,這些枚舉值規(guī)定了枚舉類型的值域。2023/2/3.5.1枚舉類型運算枚舉類型的值是枚舉常量,因此對枚舉類型的運算實際是對枚舉常量的運算。如有以下函數(shù)運算:Ord(Mon)=1//返回有序類型表達式的序號,Mon的序數(shù)值為1Pred(Mon)=Sun//返回有序類型的先行數(shù),Mon的先行值是SunSucc(Mon)=Tue//返回有序類型的后繼數(shù),Mon的后繼值是Tue枚舉常量可以進行比較,即可進行關系運算,返回結果為true或false,如:Sun<>Mon//結果為false〔因為0>1為false)2023/2/3.5.2子界類型子界類型也是一種用戶自定義數(shù)據(jù)類型,它是由整型、字符型、枚舉型、布爾型中某兩個常量制定的該類型的值區(qū)域。定義和變量聲明子界類型定義的格式如下:type <類型名稱>=<常量1>…<常量2>;運算例5-1:順序讀入年、月、日,輸出該日期是這一年的第幾天〔子界類型的使用)。2023/2/3.5.3集合類型集合類型是一組相同類型元素的組合,即一組相對對象的整體,每個對象都稱為集合的一個元素。集合類型通常用于檢查一個值是否屬于一個特定集合。定義和變量聲明集合類型是ObjectPascal允許用戶定義的一個結構數(shù)據(jù)類型,它使用戶可以運用通常的集合運算。例如:交集、并集和差集。集合類型是一些同類型元素的集合,這些基類型元素可以是整型、布爾型、字符型、枚舉型或子界類型。它通常的作用是用來檢驗某個元素是否被包含在一個集合當中。集合類型聲明的格式如下:type集合類型標識符=setof基類型;2023/2/3.5.3集合類型變量集合取值變量集合的取值是用"["和"]"括起來,中間為用逗號隔開的若干個集合的元素。如:[]空集[1,2,3]['a','e','i','o','u']運算賦值運算集合的并、交、差運算集合的關系運算2023/2/3.5.3集合類型例5-2:輸入一系列字符,對其中的數(shù)字字符、字母字符和其它字符分別計數(shù)。輸入'?'后結束。2023/2/3.5.4數(shù)組5.4.1靜態(tài)數(shù)組5.4.2動態(tài)數(shù)組5.4.3查找5.4.4排序5.4.5數(shù)組參數(shù)2023/2/3.5.4數(shù)組數(shù)組類型數(shù)據(jù)是一種用戶定義的結構數(shù)據(jù)類型,它是一些具有相同數(shù)據(jù)類型的元素的集合。逗號隔開的下標類型個數(shù)表示數(shù)組的維數(shù)。根據(jù)數(shù)組的維數(shù)可以將數(shù)組分為一維數(shù)組、二位數(shù)組以及多維數(shù)組,每一維度的下標指明了元素的數(shù)目。其下標類型必須是有序的,包括了除長整型以外的所有有序類型以及長整型的子界類型,如整型、字符型、布爾型、枚舉型、子界型等。數(shù)組類型數(shù)據(jù)表示的是同種類型數(shù)據(jù)的集合。數(shù)組類型的數(shù)據(jù)是排列有序的,每個數(shù)據(jù)元素都有一個唯一的索引號。與集合類型不同的是,數(shù)組類型的數(shù)據(jù)可以重復。數(shù)組類型分為靜態(tài)數(shù)組和動態(tài)數(shù)組。2023/2/3.5.4.1靜態(tài)數(shù)組一維靜態(tài)數(shù)組靜態(tài)數(shù)組在程序的初始化時就已經(jīng)分配好內存單元,在聲明時指定了數(shù)組的大小。數(shù)組類型定義的格式如下:type{<類型標識符>=array[下標1..下標2]of基類型};var<數(shù)組變量表>:<類型標識符>;例5-3:從數(shù)組中找出最大的一個元素,并指出它是哪一個元素。例5-4:將一個十進制自然數(shù)轉換成二進制數(shù)。2023/2/3.5.4.1靜態(tài)數(shù)組二維靜態(tài)及多態(tài)靜態(tài)數(shù)組一維靜態(tài)數(shù)組只有一個下標,而二維靜態(tài)數(shù)組有兩個下標,多維靜態(tài)數(shù)組則有多個下標,可以用來表示一個矩陣或空間。多維靜態(tài)數(shù)組定義的格式如下:type{類型標識符=array[下標11..下標12]ofarray[下標21..下標22]…ofarray[下標n1..下標n2]of基類型};也可以定義為:type{類型標識符=array[下標11..下標12,下標21..下標22,…,下標n1..下標n2]of基類型};例5-5:讀入5個學生的學號和成績,計算他們的平均分,若比平均分高10分的等第為A,若比平均分高小于10分的等地為B,若低于平均分,則等第為C,輸出他們的成績和等第。2023/2/3.5.4.2動態(tài)數(shù)組動態(tài)數(shù)組在使用前并沒有說明數(shù)組的大小,只是在程序運行當中,根據(jù)需要為數(shù)組開辟相應的內存空間進行存儲。一維動態(tài)數(shù)組 一維動態(tài)數(shù)組定義的格式如下:type{類型標識符=arrayof基類型};二維及多維動態(tài)數(shù)組二維及多維動態(tài)數(shù)組定義的格式如下:type{數(shù)組類型標識符=arrayofarrayof…arrayof基類型};2023/2/3.5.4.2動態(tài)數(shù)組例5-6:有N張牌,記為1,2,...,N,應當怎樣排放,才能使:打開第一張是1,然后報兩張依次放在末尾;打開上面一張,剛好是2;再依次報三張放在末尾,打開上面一張,剛好是3;如此繼續(xù)下去,直至打開最后一張是N。寫一個程序解決這個問題。2023/2/3.5.4.3查找順序查找順序查找也稱線性查找,是一種最簡單的查找技術,它順序地查閱各個數(shù)據(jù)記錄,直到找到所要的一個數(shù)據(jù)記錄,或抵達終點宣告查找失敗。例5-7:假設有n個記錄a[1],a[2],…,a[n],順序地存放在一記錄數(shù)組a中,其中,第i個記錄的鍵碼值為a[i].key?,F(xiàn)在已給一個關鍵數(shù)據(jù)x,將x依次與r[1].key,a[2].key,…進行相等比較,當找到第一個r[1].key=x,則查找成功,回送下標i;否則,查找失敗,回送0。2023/2/3.5.4.3查找二分查找二分查找也稱折半查找。二分查找不像順序查找那樣從第一個記錄開始逐個順序搜索,而是每次把要找的關鍵數(shù)據(jù)與中間位置的鍵碼值進行比較。例5-8:設有序記錄數(shù)組a中每個記錄的鍵碼值按升序排列為a[1].key,a[2].key,…a[m].key,…,a[n].key。其中,n為記錄個數(shù),當i<j時有a[i]≤a[j]。開始時,中間位置的序號為m=(n+1)/2,相應記錄的鍵碼值為a[m].key。將已給的關鍵數(shù)據(jù)x與a[m].key比較,有三種可能的結果:x<a[m].key。x=a[m].key。x>a[m].key。重復上述過程,當最后只剩下一個記錄,而且此記錄不是要找的記錄,則宣告失敗。2023/2/3.5.4.4排序排序的方法有很多種,我們這里只簡單介紹兩種:選擇排序和冒泡排序。選擇排序選擇排序的基本思想是:首先從要排序的數(shù)中選中最大的數(shù),將它放在第一個位置,然后從剩下的數(shù)中選中最大的數(shù)放在第二個位置,如此繼續(xù),直到最后從剩下的兩個數(shù)中選中最大的數(shù)放在倒數(shù)第二個位置,剩下的一個數(shù)放在最后位置,完成排序。例5-9:輸入20個數(shù),將它們從大到小的次序排列以后輸出。2023/2/3.5.4.4排序冒泡排序冒泡排序的基本思想時:依次比較相鄰的兩個數(shù),將大數(shù)放在前面,小數(shù)放在后面。即首先比較第一個和第二個數(shù),將大數(shù)放前,小數(shù)放后。然后比較第二個數(shù)和第三個數(shù),將大數(shù)放前,小數(shù)放后。如此繼續(xù),直到比較最后兩個數(shù),將大數(shù)放前,小數(shù)放后,此時第一次比較結束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復以上過程,仍從第一對數(shù)開始比較〔因為可能由于第二個數(shù)和第三個數(shù)的交換,使得第一個數(shù)不再大于第二個數(shù)),將大數(shù)放前,小數(shù)放后,已知比較到最小數(shù)前的一對相鄰數(shù),將大數(shù)放前,小數(shù)放后,第二次比較結束,在倒數(shù)第二個數(shù)中得到一個新的最小數(shù)。如此繼續(xù),直到最后一次比較,只比較第一對數(shù),大數(shù)放前,小數(shù)放后,從而最終完成排序。例5-10:輸入20個數(shù),用冒泡排序將它們從大到小的次序排列以后輸出。2023/2/3.5.4.5數(shù)組參數(shù)數(shù)組在所有的編程語言中都是一個很重要的數(shù)據(jù)類型,是一個應用和廣泛的技術。數(shù)組可以作為函數(shù)或過程的參數(shù),但要注意在對數(shù)組參數(shù)進行聲明中不能包含數(shù)組索引類型的聲明。2023/2/3.5.5記錄類型記錄類型(record)可以由不同類型的元素組成,這些元素稱為域。在記錄類型中為每個域指定了一個名稱和數(shù)據(jù)類型。數(shù)據(jù)類型可以是對象Pascal語言中預定義的類型,可以是相同的數(shù)據(jù)類型,也可以是不同的數(shù)據(jù)類型;這些數(shù)據(jù)可以是數(shù)值型的,也可以是非數(shù)值型的;還可以包括也可以是程序員自定義的類型。定義和變量聲明記錄類型的定義方式如下:typerecordTypeName=recordfieldList1:type1;…fieldListn:typen;end2023/2/3.5.5記錄類型定義和變量聲明域為記錄類型的元素。記錄的每個域都有名稱,不同域的數(shù)據(jù)類型可以各不相同,這一點是數(shù)組所不能做到的。引用記錄變量的元素采用以下標記法:直接引用,其形式為:記錄變量名.域名使用with開域語句,其形式為:with記錄變量名do語句記錄的應用例5-11:該例說明了記錄類型的定義與使用,同時也對with語句進行了說明。2023/2/3.5.6指針5.6.1指針的聲明5.6.2指針的賦值5.6.3無類型指針5.6.4字符指針類型5.6.5指針的動態(tài)使用2023/2/3.5.6.1指針的聲明在pascal中,指針變量(也稱動態(tài)變量)存放某個存儲單元的地址;也就是說,指針變量指示某個存儲單元。在定義指針類型數(shù)據(jù)時,要說明它所指向變量的類型。指針類型的定義形式如下:Type指針類型名稱=^基類型;(typepointerTypeName=^type)例5-12:該例對指針的定義和使用進行了說明。(見教材)2023/2/3.5.6.2指針的賦值對指針所指向的變量可以進行指針的基類型所允許的全部操作。對指針變量本身,除可用New、Dispose過程外,允許下列操作:具有同一基類型的指針變量之間相互賦值例5-13:把x變量的值賦給指針p的變量??梢越o指針變量賦nil值nil是Pascal的關鍵字,它表示指針的值為"空"。例5-14:給指針p賦空值,程序見教材。2023/2/3.5.6.3無類型指針無類型指針是指在指針變量聲明時不指明其基類型的指針類型,無類型指針用類型標識符pointer聲明。例如,以下定義的變量p可以指向任何變量類型。Varp:pointer;2023/2/3.5.6.4字符指針類型有一種特殊的指針,我們稱為字符指針,可以用來操作以零作為結束的字符串。在了解以零作為結束的字符串,我們必須先了解一種不固定長度的數(shù)組,但它有固定的形式,即:Array[0..x]ofchar;這種數(shù)組的索引從0開始,因此也可把它稱為以“0為基數(shù)的字符數(shù)組”,它通常用來保存以零作為結束的字符串。字符指針是事先定義好的指針類型,其中基本的字符指針類型有兩種,即PAnsiChar和PWideChar。PAnsiChar是指向AnsiChar類型的值的指針,而PWideChar則是指向WideChar類型的指針。還有一種通用的字符指針PChar,代表指向Char類型的值的指針。例5-15:使用三種特殊的指針類型,完成加減運算。2023/2/3.5.6.5指針的動態(tài)使用開辟動態(tài)存儲單元在pascal中,指針變量的值一般是通過系統(tǒng)分配的,開辟一個動態(tài)存儲單元必須調用標準過程new。new過程的調用的一般格式:New(指針變量)功能:開辟一個存儲單元,此單元能存放的數(shù)據(jù)的類型正好是指針的基類型,并把此存儲單元的地址賦給指針變量。2023/2/3.5.6.5指針的動態(tài)使用釋放動態(tài)存儲單元dispose語句的一般格式:dispose(指針變量)功能:釋放指針所指向的存儲單元,使指針變量的值無定義。動態(tài)存儲單元的引用在給一個指針變量賦以某存儲單元的地址后,就可以使用這個存儲單元。引用動態(tài)存儲單元一般格式:<指針變量>^例5-16:設有下列說明:varp:^i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省武漢市(2024年-2025年小學五年級語文)統(tǒng)編版小升初真題(下學期)試卷及答案
- 高中化學 第四章 非金屬及其化合物教案及練習 新人教版必修
- 購買課件分享教學課件
- 高二物理全套教案(上學期)人教大綱版,從第16單元到第31單元成套
- DB11T 1080-2014 硬泡聚氨酯復合板現(xiàn)抹輕質砂漿外墻外保溫工程施工技術規(guī)程
- 河南省駐馬店市上蔡縣2023-2024學年五年級上學期期中英語試卷
- 山西省呂梁市交城縣2024-2025學年七年級上學期期中考試生物學試題(含答案)
- 便鞋市場發(fā)展預測和趨勢分析
- 嬰兒服裝市場需求與消費特點分析
- 護膚藥劑產(chǎn)業(yè)規(guī)劃專項研究報告
- 《民法典》醫(yī)療損害責任篇培訓PPT
- 海洋貨物運輸概述授課課件
- 胰島素的種類及使用 新課件
- 中醫(yī)兒科脾胃病辨證治療課件
- 《扣好人生第一粒扣子》教學設計
- 小學四年級家長會精品課件完美版
- 《傳感器原理及應用》全套教學課件
- 文物與博物館學課件
- 少兒羽毛球培訓方案
- 部編版語文六年級上冊作文總復習課件
- 短暫性腦缺血發(fā)作培訓課件
評論
0/150
提交評論