




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第十一課記錄類型在前面幾章中我們用到了整型、實型、布爾型、字符型的數(shù)據(jù)。以上數(shù)據(jù)類型是由pascal規(guī)定的標準數(shù)據(jù)類型,只要寫integer、real、boolean、 char,pascal 編譯系統(tǒng)就能識別并按這些類型來處理。pascal還允許用戶定義一些類型,這是其它一些語言所沒有的,這就使得pascal 四、記錄類型 在程序中對于組織和處理大批量的數(shù)據(jù)來說,數(shù)組是一種十分方便而又靈活的工具,但是數(shù)組在使用中有一個基本限制,這就是:一個數(shù)組中的所有元素都必須具有相同的類型。但在實際問題中可能會遇到另一類數(shù)據(jù),它是由性質(zhì)各不相同的成份組成的,即它的各個成 份可能具有不同的類型。例如,有關(guān)一
2、個學(xué)生的數(shù)據(jù)包含下列項目: 學(xué)號字符串類型 姓名字符串類型 年齡整型 性別字符型 成績實型數(shù)組 Pascal給我們提供了一種叫做記錄的結(jié)構(gòu)類型;在一個記錄中,可以包含不同類型的并且互相相關(guān)的一些數(shù)據(jù)。 (一)記錄類型的定義 在pascal中,記錄由一組稱為“域”的分量組成,每個域可以具有不同的類型,記錄類型定義的一般形式: record :; :; : : : : :; end; 說明:域名也稱域變量標識符, 應(yīng)符合標識符的語法規(guī)則;在同一個記錄中類型中,各個域不能取相同的名,但在不同的記錄類型中,兩個類型中的域名 可以相同記錄類型的定義和記錄變量可以合并為一個定義,如: type date=
3、record year:1900.1999; month:1.12; day:1.31 end; var x:date; 可以合并成: var x: record year:1900.1999; month:1.12; day:1.31 end; 對記錄的操作,除了可以進行整體賦值, 只能對記錄的分量域變量進行。 域變量的表示方法如下: 記錄變量名.域名 如前面定義的記錄X,其3個分量分別為:x.year;x.month;x.day 域變量的使用和一般的變量一樣, 即域變量是屬于什么數(shù)據(jù)類型,便可以進行那種數(shù)據(jù)類型所允許的操作。 (二)記錄的嵌套 當(dāng)一個記錄類型的某一個域類型也是記錄類型的時候
4、,我們說發(fā)生了記錄的嵌套,看下面的例子: 【例6】某人事登記表可用一個記錄表示,其中各項數(shù)據(jù)具有不同的類型,分別命名一個標識符。而其中的“出生年月日”又包括三項數(shù)據(jù),還可以用一個嵌套在內(nèi)層的記錄表示。 具體定義如下: typesexs=(male,female); date=record year:1900.1999; month:1.12; day:1.31; end; personal=record name:string15; sex:sexs; birthdate:date; home:string40; end; 【例7】設(shè)計一個函數(shù)比較兩個dates日期類型記錄變量的遲早。 設(shè)函數(shù)
5、名、形參及函數(shù)類型定義為: AearlyB(A,B:dates):boolean; 函數(shù)的形參為兩個dates類型的值參數(shù)。當(dāng)函數(shù)值為true 時表示日期A早于日期B,否則日期A遲于日期B或等于日期B。顯然不能對、兩個記錄變量直接進行比較,而要依具體的意義逐域處理。 源程序如下: program ex6_7; type dates=record year:1900.1999; month:1.12; day:1.31 end; var x,y:dates; function AearlyB(A,B:dates):boolean; var earln:boolean; begin early:=
6、false; if (A.yearB.year) then early:=true; if (A.year=B.year)and(A.monthB.month) then early:=true; if (A.year=B.year)and(A.month=B.month)and(A.dayB.day) then early:=true; AearlyB:=early; end;of AearlyB begin write(Input DATE X(mm-dd-yy):)readln(X.month,X.day,X.year); write(Input DATE Y(mm-dd-yy):)re
7、adln(Y.month,Y.day,Y.year); if AearlyB(X,Y) then writeln(Date X early!) else writeln(Date X not early!); end. (三)開域語句 在程序中對記錄進行處理時,經(jīng)常要引用同一記錄中不同的域,每次都按6.4.1節(jié)所述的格式引用,非常乏味。為此Pascal提供了一個with語句,可以提供引用域的簡單形式。 開域語句一般形式: with do 功能:在do后的語句中使用with后的記錄的域時, 只要直接寫出域名即可,即可以省略圖10.2.2中的記錄變量名和.。 說明:一般在with后只使用一個記錄變
8、量名。如: write(Input year:); readln(x.year); write(Input month:); readln(x.month); write(Input day:); readln(x.day); 可以改寫成: with x do begin write(Input year:);readln(year); write(Input month:);readln(month); write(Input day:);readln(day); end; 設(shè)x,y是相同類型的記錄變量,下列語句是非法的: with x,y do.; with后接若干個記錄名時,應(yīng)是嵌套的關(guān)
9、系。如有記錄說明: var x:record i:integer; y:record j:0.5; k:real; end; m:real end; 可以使用: with x do begin read(i); with y do read(j,k); readln(m); end; 或簡寫為: with x,y do readln(i,j,k,m); 【例8】讀入10個日期,再對每個日期輸出第二天的日期。輸入日期的格式是月、日、年,如9301993,輸出的格式為10/1/1993分析:可用一個記錄變量today表示日期。 知道一個日期后要更新為第二天的日期,應(yīng)判斷輸入的日期是否為當(dāng)月的最后一
10、天,或當(dāng)年的最后一天。 源程序如下: program ex6_8; type date=record month:1.12; day:1.31; year:1900.1999; end; var today:array1.10of date; i:integer; maxdays:28.31; begin for i:=1 to 10 do 輸入10個日期 with todayi do readln(month,day,year); for i:=1 to 10 do with todayi do求第i個日期中月份最后一天maxdays begin case month of 1,3,5,7,
11、8,10,12:maxdays:=31; 4,6,9,11 :maxdays:=30; 2 :if(year mod 400=0) or( year mod 4=0) and(year mod 1000) then maxdays:=29 else maxdays:=28; end; if day=maxdays then begin day:=1; if month=12 then begin month:=1;year:=year+1; end else month:=month+1; end else day:=day+1; writeln(month,/,day,/,year); en
12、d; end. 五、應(yīng)用實例 【例9】編制用篩法求1-n(n200)以內(nèi)素數(shù)的程序分析:由希臘著名數(shù)學(xué)家埃拉托色尼提出的所謂“篩法”,步驟如下: 將所有候選數(shù)放入篩中; 找篩中最小數(shù)(必為素數(shù))next,放入集合primes中; 將next的所有倍數(shù)從篩中篩去; 重復(fù)直到篩空。 編程時,用集合變量sieve表示篩子,用集合primes存放所有素數(shù)。 源程序如下: program ex10_3; const n=200; var sieve,primes:set of 2.n; next,j:integer; begin sieve:=2.n;將所有候選數(shù)放入篩中 primes:=;素數(shù)集合置空
13、 next:=2; repeat 找篩sieve中最小一個數(shù) while not(next in sieve) and(next=n)do next:=succ(next); primes:=primes+next;將最小數(shù)放入素數(shù)集合中 將這個素數(shù)的倍數(shù)從篩中刪去 j:=next; while j=n do begin sieve:=sieve-j; j:=j+next; end until sieve=; j:=0; for next:=2 to n do打印出所有素數(shù) if next in primes then begin write(next:5); j:=j+1; if j mod 10=0 then writeln; end; writeln; end. 練習(xí)1一家水果店出售四種水果,每公斤的價格是:蘋果1.50元,桔子1.80元,香蕉2.0,菠蘿1.60元。編一個程序,使售貨員只要從鍵盤輸入貨物的代碼及重量,計算機便能顯示貨物的名稱、單價、重量及總價。 2輸入一個英語句子,以句號為結(jié)束標志, 統(tǒng)計句子中元音字母出現(xiàn)的次數(shù),把句子所有輔音字母組成一個集合,并把這些輔音字母打印出來。 3編程序建立某班25人的數(shù)學(xué)課程成績表,要求用數(shù)組類型和記錄類型,其成績表格式如下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025新疆西北興業(yè)城投集團有限公司崗位招聘26人筆試參考題庫附帶答案詳解
- 裝表接電工考試題及參考答案
- 2025小紅書乙巳蛇年CNY【大家的春節(jié)】專項招商方案-38正式版
- 2025年氯鉑酸項目發(fā)展計劃
- 2025中國儲備糧管理集團有限公司信息化運維中心招聘14人筆試參考題庫附帶答案詳解
- 《單片機原理及接口技術(shù)-基于C51+Proteus仿真(第二版)》全套教學(xué)課件
- 人教版高中地理選擇性必修1第二章第一節(jié)第1課時內(nèi)力作用與外力作用課件
- 2025年非公路礦用車項目合作計劃書
- 工程機械操作安全培訓(xùn)
- 超市節(jié)假日活動促銷方案
- 2024版心肺復(fù)蘇急救知識培訓(xùn)
- 酒店開業(yè)前期宣傳方案(2篇)
- G -B- 16914-2023 燃氣燃燒器具安全技術(shù)條件(正式版)
- 壓瘡的分期與護理(模板)
- 2024年遼寧醫(yī)藥職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫必考題
- JB-QGL-TX3016AJB-QTL-TX3016A火災(zāi)報警控制器安裝使用說明書
- 《臺海危機》課件
- 部編版小學(xué)語文一年級下冊第三單元大單元教學(xué)設(shè)計教材分析
- MOOC 數(shù)據(jù)庫系統(tǒng)(中):建模與設(shè)計-哈爾濱工業(yè)大學(xué) 中國大學(xué)慕課答案
- 2024年湖南食品藥品職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 2024年江蘇醫(yī)藥職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析
評論
0/150
提交評論