第2章Delphi語(yǔ)法基礎(chǔ)_第1頁(yè)
第2章Delphi語(yǔ)法基礎(chǔ)_第2頁(yè)
第2章Delphi語(yǔ)法基礎(chǔ)_第3頁(yè)
第2章Delphi語(yǔ)法基礎(chǔ)_第4頁(yè)
第2章Delphi語(yǔ)法基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章 Object Pascal語(yǔ)言基礎(chǔ)本章重點(diǎn)l 保留字和標(biāo)識(shí)符l 常量與變量l 數(shù)據(jù)類(lèi)型l 運(yùn)算符與表達(dá)式l 語(yǔ)句l 過(guò)程與函數(shù)Delphi的編程語(yǔ)言是Object Pascal,即面向?qū)ο蟮腜ascal語(yǔ)言。自Delphi 7 開(kāi)始,Object Pascal語(yǔ)言改稱(chēng)為 Delphi 語(yǔ)言。第1節(jié) 保留字和標(biāo)識(shí)符一、保留字保留字是由系統(tǒng)使用的具有特殊含義的單詞(如And、If、For、Var等),詳見(jiàn)教材1617頁(yè)表2.1。二、指令符指令符也是由系統(tǒng)使用的具有特殊含義的單詞(如Public、Private等),詳見(jiàn)教材17頁(yè)表2.2。三、標(biāo)識(shí)符標(biāo)識(shí)符(Identifiers)用于表示常

2、量、變量、域(字段)、類(lèi)型、屬性、過(guò)程、函數(shù)、程序、單元、庫(kù)和包(packages)的名稱(chēng)。Object Pascal標(biāo)識(shí)符的聲明和使用應(yīng)遵循以下規(guī)定:· 長(zhǎng)度任意,但僅前255個(gè)字符有效。· 首字符必須是字母或下劃線(xiàn)。· 不能含有空格,中間的字符可以是字母、數(shù)字和下劃線(xiàn)。· 不能使用保留字(reserved words)作為標(biāo)識(shí)符。· 不區(qū)分大小寫(xiě),例如sName與sname等價(jià)。第2節(jié) 注釋三種注釋形式: 注釋內(nèi)容 (* 注釋內(nèi)容 *)/ 注釋內(nèi)容注意:如果注釋符之后緊跟一個(gè)美元符號(hào)$(如$R *.res),表示該語(yǔ)句是一條編譯指令,它與普

3、通的注釋不同,通常由Delphi自動(dòng)生成,用于設(shè)置編譯過(guò)程,不要修改或刪除它。第3節(jié) 常量和變量一、常量1. 普通常量如:123,-100,3.14,'abc',True等。2. 符號(hào)常量符號(hào)常量用保留字Const聲明,格式如下:Const 常量名 = 表達(dá)式;例如:Const PI = 3.1415926535897932385; College = '山東教育學(xué)院'; Numeric = '0'.'9' / 數(shù)字字符集合 Alpha = 'A'.'Z', 'a'.'z&#

4、39; / 英語(yǔ)字母集合 AlphaNum = Alpha + Numeric; / 集合的并2. 變量變量聲明的格式:var 變量名表 :類(lèi)型;例如:var X, Y, Z: Double; I, J, K: Integer; S1, S2: String; Digit: 0.9; / 子界類(lèi)型 Flag: Boolean;單元級(jí)或全局變量可以在聲明時(shí)初始化(每個(gè)聲明語(yǔ)句僅限一個(gè)變量)。例如:var x: Integer = 0; S: string = 'abc'第4節(jié) 數(shù)據(jù)類(lèi)型本節(jié)要點(diǎn)l 簡(jiǎn)單類(lèi)型l 字符串類(lèi)型l 類(lèi)型相容與類(lèi)型映射l 掌握集合類(lèi)型的聲明和應(yīng)用l 掌握數(shù)組

5、類(lèi)型的聲明l 了解記錄類(lèi)型概述1. 數(shù)據(jù)類(lèi)型分類(lèi)Object Pascal的數(shù)據(jù)類(lèi)型可分為以下幾類(lèi):· 簡(jiǎn)單類(lèi)型:包括有序類(lèi)型(整型、字符型、布爾型、枚舉型和子界型)和實(shí)數(shù)類(lèi)型。· 字符串類(lèi)型· 結(jié)構(gòu)類(lèi)型:包括集合、數(shù)組、記錄、文件、類(lèi)、類(lèi)引用和接口類(lèi)型。· 指針類(lèi)型· 過(guò)程類(lèi)型· 可變類(lèi)型2. 預(yù)定義類(lèi)型與自定義類(lèi)型有些數(shù)據(jù)類(lèi)型是在Object Pascal中預(yù)先定義好的,編譯器能夠自動(dòng)識(shí)別,無(wú)須編程者定義即可直接使用(如整型、實(shí)型、字符型、字符串型等)。這些數(shù)據(jù)類(lèi)型屬于預(yù)定義類(lèi)型(predefined types),或稱(chēng)內(nèi)置類(lèi)型(

6、built-in types)。另外一些數(shù)據(jù)類(lèi)型在使用前必須由編程者定義(如枚舉、子界、結(jié)構(gòu)類(lèi)型等),這些數(shù)據(jù)類(lèi)型屬于自定義類(lèi)型(user-defined types)。自定義類(lèi)型需用type保留字聲明:type 自定義類(lèi)型名稱(chēng) = 類(lèi)型;一、簡(jiǎn)單類(lèi)型(Simple)包括有序類(lèi)型和實(shí)數(shù)類(lèi)型。特點(diǎn):一個(gè)簡(jiǎn)單類(lèi)型的變量只存儲(chǔ)單一值,它占用的內(nèi)存大小相對(duì)固定。1. 有序類(lèi)型有序類(lèi)型(Ordinal types)包括整數(shù)、字符、布爾、枚舉和子界類(lèi)型。有序類(lèi)型定義一組有序的值,其中除第一個(gè)值以外均有一個(gè)惟一的前接值(predecessor),除最后一個(gè)值以外均有一個(gè)惟一的后繼值(successor)。每

7、個(gè)值都有一個(gè)序號(hào),在多數(shù)情況下,若某值的序號(hào)為n,則其前接值的序號(hào)為n-1,后繼值的序號(hào)為n+1。整數(shù)類(lèi)型值的序號(hào)是其本身;子界類(lèi)型保留其基類(lèi)型的序號(hào);其他類(lèi)型中第一個(gè)值的默認(rèn)序號(hào)為0,后續(xù)值序號(hào)依次加1。枚舉類(lèi)型的聲明可以覆蓋默認(rèn)值。以下是操作有序類(lèi)型的常用預(yù)定義函數(shù):函數(shù)參數(shù)返回值Ord有序表達(dá)式表達(dá)式值的序號(hào)Pred有序表達(dá)式表達(dá)式值的前接值Succ有序表達(dá)式表達(dá)式值的后繼值High有序類(lèi)型標(biāo)識(shí)符或變量類(lèi)型中的最高值Low有序類(lèi)型標(biāo)識(shí)符或變量類(lèi)型中的最低值High和Low亦可用于短縮字符串類(lèi)型和數(shù)組。例如:Byte 類(lèi)型的最高值為255,因此,High(Byte)返回255。2的后繼值是

8、3,因此Succ(2)返回3。標(biāo)準(zhǔn)過(guò)程Inc和Dec分別使有序變量的值加1和減1。例如,Inc(I) 與 I := Succ(I) 等價(jià);若I為整型變量,則Inc(I)相當(dāng)于I := I + 1。(1)整數(shù)類(lèi)型· 通用整型:類(lèi)型數(shù)值范圍格式Integer-2147483648.2147483647有符號(hào) 32-bitCardinal0.4294967295無(wú)符號(hào) 32-bit· 基本整型:類(lèi)型數(shù)值范圍格式Shortint-128.127有符號(hào) 8-bitSmallint-32768.32767有符號(hào) 16-bitLongint-2147483648.2147483647有符

9、號(hào) 32-bitInt64-263.263-1有符號(hào) 64-bitByte0.255無(wú)符號(hào) 8-bitWord0.65535無(wú)符號(hào) 16-bitLongword0.4294967295無(wú)符號(hào) 32-bit(2)字符類(lèi)型類(lèi)型占用字節(jié)數(shù)存儲(chǔ)內(nèi)容Char1存儲(chǔ)一個(gè)ANSI字符AnsiChar1存儲(chǔ)一個(gè)ANSI字符WieChar2存儲(chǔ)一個(gè)Unicode字符Char為通用類(lèi)型。常用函數(shù):Chr函數(shù):Chr(65)返回'A',與#65等價(jià)?!?”常用于生成控制字符。例如,下面的表達(dá)式表示在兩個(gè)字符串之間插入回車(chē)換行符:'字符串1'#13#10'字符串2'(3

10、)布爾類(lèi)型類(lèi)型占用字節(jié)數(shù)False序號(hào)True序號(hào)Boolean101ByteBool10非0WordBool20非0LongBool40非0Boolean為首選類(lèi)型。注意:上表后兩列中的0、1、非0只是序號(hào),而不是布爾值本身。在Object Pascal中,布爾表達(dá)式不能與整數(shù)或?qū)崝?shù)轉(zhuǎn)換。例如,若X是一個(gè)整型變量,則以下語(yǔ)句將產(chǎn)生編譯錯(cuò)誤:if X then .;可以用以下語(yǔ)句:if X <> 0 then .; (4)枚舉類(lèi)型(Enumerated types)枚舉類(lèi)型是一組有序的標(biāo)識(shí)符。枚舉類(lèi)型沒(méi)有固定的范圍,須由程序員定義。這種需要編程者定義的數(shù)據(jù)類(lèi)型稱(chēng)為“自定義類(lèi)型”。聲

11、明:type 枚舉類(lèi)型名 = (標(biāo)識(shí)符列表);例如:typeTMyColor = (mcRed, mcGreen, mcBlue);Answer = (ansYes, ansNo);var Color1, Color2: TMyColor; Ans1: Answer;(標(biāo)識(shí)符列表)本身起著類(lèi)型名的作用,因此亦可直接聲明變量:var Color1, Color2: (mcRed, mcGreen, mcBlue);(5)子界類(lèi)型(Subrange types)子界類(lèi)型是某一有序類(lèi)型值的子集。子界類(lèi)型屬于自定義類(lèi)型?;?lèi)型(base type):在子界、集合、數(shù)組、指針等自定義類(lèi)型聲明中引用的數(shù)據(jù)

12、類(lèi)型。注意:區(qū)分基類(lèi)型(base type)與基本類(lèi)型(Fundamental type)。聲明:type 子界類(lèi)型名 = 下界.上界;例如: 聲明一個(gè)枚舉類(lèi)型 type TColors = (Red, Blue, Green, Yellow, Orange, Purple, White, Black); 定義子界類(lèi)型,它的“基類(lèi)型”是上面聲明的枚舉類(lèi)型TColors type TMyColors = Green.White;又如:typeTGrade = 0.100; /基類(lèi)型是整數(shù)類(lèi)型TLetter = 'A'.'Z' /基類(lèi)型是字符類(lèi)型var MyGrad

13、e: TGrade; MyLetter: TLetter;“下界.上界”本身起著類(lèi)型名的作用,因此可直接聲明變量:var x, y: 1.200;注意:為子界類(lèi)型的變量賦值時(shí),不應(yīng)超出其上下界。2. 實(shí)數(shù)類(lèi)型類(lèi)型數(shù)值范圍有效位數(shù)字節(jié)通用Real5.0×10-3241.7×1030815168基本Real482.9×10-391.7×103811126Single1.5×10-453.4×1038784Double5.0×10-3241.7×1030815168Extended3.6×10-49511.1&

14、#215;104932192010Comp-263+1263-119208Currency-922337203685477.5808922337203685477.5807192083. 日期和時(shí)間在Delphi內(nèi)部采用實(shí)數(shù)(Double)存取日期和時(shí)間信息。為了便于使用,Delphi在系統(tǒng)單元(System.pas)中定義了TDateTime數(shù)據(jù)類(lèi)型(映射為Double)。該類(lèi)型數(shù)據(jù)的整數(shù)部分代表日期(0=1899年12月30日),小數(shù)部分代表時(shí)間(時(shí)刻÷24),可以分別進(jìn)行算術(shù)運(yùn)算。以下是系統(tǒng)定義的常用日期時(shí)間函數(shù):l Date:返回當(dāng)前系統(tǒng)日期l Time:返回當(dāng)前系統(tǒng)時(shí)間l

15、Now:返回當(dāng)前系統(tǒng)日期和時(shí)間以下函數(shù)將日期時(shí)間型數(shù)據(jù)轉(zhuǎn)換為字符串:function DateTimeToStr(DateTime: TDateTime): string; /日期和時(shí)間function DateToStr(Date: TDateTime): string; /日期function TimeToStr(Time: TDateTime): string; /時(shí)間以下函數(shù)將日期時(shí)間格式的字符串轉(zhuǎn)換為日期時(shí)間型數(shù)據(jù):function StrToDateTime(const S: string): TDateTime;function StrToDate(const S: string

16、): TDateTime;function StrToTime(const S: string): TDateTime;二、字符串類(lèi)型類(lèi)型最大長(zhǎng)度存儲(chǔ)空間格式ShortString255字符2256 BANSI 字符AnsiString231字符4 B2GBANSI 字符WideString230字符4 B2GBUnicode 字符保留字string默認(rèn)為AnsiString類(lèi)型。例如:變長(zhǎng)字符串:var S1, S2: string;定長(zhǎng)(短)字符串(最大長(zhǎng)度255):var MyString: string100;提示:l 標(biāo)準(zhǔn)函數(shù)Length可以獲取字符串的長(zhǎng)度。l 對(duì)字符串中的單個(gè)字符

17、可以通過(guò)其位置序號(hào)存取。例如:S11表示字符串S1中的第1個(gè)字符。l 字符串常量?jī)?nèi)的兩個(gè)連續(xù)的單引號(hào)代表一個(gè)被引用的單引號(hào)。例如:'It''s a football.' It's a football.'''' '三、結(jié)構(gòu)類(lèi)型特點(diǎn):結(jié)構(gòu)類(lèi)型(Structured types)的變量可含有多個(gè)值,它占用的內(nèi)存大小不固定。1. 集合(Set)類(lèi)型集合是一組特定同類(lèi)有序類(lèi)型(稱(chēng)為基類(lèi)型)值的元素,這些元素沒(méi)有內(nèi)在的順序。集合中最多可有256個(gè)基類(lèi)型值,每個(gè)值的序號(hào)必須在0255之間。(1)集合類(lèi)型的聲明和應(yīng)用聲明:typ

18、e 集合類(lèi)型名 = set of 基類(lèi)型;由于集合類(lèi)型中元素的個(gè)數(shù)及其序號(hào)受限,因此,通常用子界聲明集合類(lèi)型。例如:type TMonth = set of 1.12;/ 聲明集合類(lèi)型,基類(lèi)型為整數(shù)類(lèi)型子界.var M1, M2:TMonth;/ 聲明集合變量亦可用set of . 結(jié)構(gòu)直接聲明變量:var M1: set of 1.12;/ 聲明集合變量.M1:=1,3,5,7,8,10,12;/ 為集合變量賦值以下是set of . 結(jié)構(gòu)的幾個(gè)示例:set of 'a'.'z'set of Byteset of (Club, Diamond, Heart,

19、Spade)set of Char若需判斷某集合中是否有某個(gè)成員,用in操作符。例如:if 5 in M1 then .(2)集合構(gòu)造器(Set constructors)集合構(gòu)造器代表一組集合類(lèi)型的值,格式為: 項(xiàng)1, ., 項(xiàng)n 其中每一項(xiàng)既可以是代表基類(lèi)型中某個(gè)值的表達(dá)式,也可以是用兩個(gè)句點(diǎn)(.)隔開(kāi)的成對(duì)表達(dá)式。例如:5, 6, 7, 8等價(jià)于:5.8又如:'A'.'Z', 'a'.'z', '0'.Chr(9 + 48)集合構(gòu)造器可以為同類(lèi)型的集合型變量賦值,亦可進(jìn)行集合運(yùn)算。集合類(lèi)型可以是空集,用一對(duì)方

20、括號(hào)表示。注意:即使某集合中只有一個(gè)元素,也必須使用方括號(hào)。2. 數(shù)組(Array)類(lèi)型數(shù)組由一組具有索引(下標(biāo))的同類(lèi)型元素組成。(1)一維靜態(tài)數(shù)組 聲明type 數(shù)組類(lèi)型名 = array下標(biāo)類(lèi)型 of 基類(lèi)型;其中,下標(biāo)類(lèi)型必須是有序類(lèi)型,常用整數(shù)子界。例如:Type MyArray = array1.100 of Integer;.var Arr1: MyArray;亦可直接聲明數(shù)組變量:var Arr2: array1.50 of Integer;High和Low函數(shù)可分別返回?cái)?shù)組的上下界。VarArrayHighBound函數(shù)和VarArrayLowBound函數(shù)分別返回變體型數(shù)組

21、的上下界。 數(shù)組類(lèi)型與賦值數(shù)組的賦值相容規(guī)則要求相互賦值的數(shù)組必須屬于同一類(lèi)型(即類(lèi)型同一)。Delphi采用數(shù)據(jù)類(lèi)型名稱(chēng)等價(jià)(name-equivalence)規(guī)則,具有類(lèi)型名作用的語(yǔ)法結(jié)構(gòu)(如“array1.10 of Integer”)每出現(xiàn)一次均代表不同的數(shù)據(jù)類(lèi)型。因此以下代碼編譯時(shí)將無(wú)法通過(guò):var Int1: array1.10 of Integer; Int2: array1.10 of Integer; /Int1 和 Int2 屬于不同類(lèi)型 .Int1 := Int2; /出錯(cuò)可以按以下形式聲明數(shù)組變量:var Int1, Int2: array1.10 of Integer

22、;或者先聲明數(shù)組類(lèi)型標(biāo)識(shí)符,然后用該標(biāo)識(shí)符聲明數(shù)組變量:type IntArray = array1.10 of Integer;var Int1: IntArray; Int2: IntArray;(2)二維靜態(tài)數(shù)組聲明:type 數(shù)組類(lèi)型名 = array下標(biāo)1, 下標(biāo)2 of 基類(lèi)型;例如:type TMatrix = array1.10, 1.50 of Real;(3)動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組的長(zhǎng)度不固定聲明:type 數(shù)組類(lèi)型名 = array of 基類(lèi)型;亦可直接聲明數(shù)組變量:var MyArr1: array of Integer; 若重復(fù)array of可生成多維動(dòng)態(tài)數(shù)組。例如,聲

23、明一個(gè)二維動(dòng)態(tài)數(shù)組變量:var MyArr2: array of array of Integer; 聲明動(dòng)態(tài)數(shù)組變量后,用SetLength函數(shù)設(shè)置數(shù)組長(zhǎng)度。語(yǔ)法:SetLength(數(shù)組變量,長(zhǎng)度);例如:設(shè)置一維動(dòng)態(tài)數(shù)組MyArr1為10個(gè)元素,索引號(hào)為09SetLength(MyArr1, 10);設(shè)置二維動(dòng)態(tài)數(shù)組MyArr2的長(zhǎng)度,第一維3個(gè)元素,第二維4個(gè)元素SetLength(MyArr2, 3, 4);3. 記錄(Record)類(lèi)型記錄是一組不同類(lèi)型的元素,每個(gè)元素稱(chēng)為一個(gè)域或字段。聲明記錄類(lèi)型時(shí)為每個(gè)域指定一個(gè)名稱(chēng)和類(lèi)型。語(yǔ)法:type 記錄類(lèi)型名 = record /不加分

24、號(hào) 域名1: 類(lèi)型1; . 域名n: 類(lèi)型n;end;例如:type TStudent = record /不加分號(hào) sNo: string20; sName: string20; sSex: string2; sAge: integer;end;.var Stud: TStudent;/ 聲明記錄類(lèi)型變量對(duì)記錄類(lèi)型變量的訪(fǎng)問(wèn)格式:記錄類(lèi)型變量.域例如:Stud.sNo:=1001;Stud.sName:=張三;用With語(yǔ)句訪(fǎng)問(wèn):with Stud do begin sNo:=1002; sName:=李四; sSex:=男; sAge:= 20; end;用case保留字可以在記錄類(lèi)型內(nèi)定

25、義可變部分(variant part)4. 記錄類(lèi)型和動(dòng)態(tài)數(shù)組綜合示例見(jiàn)教材3438頁(yè)【例2-4】。5. 指針類(lèi)型(Pointer)(1)指針類(lèi)型定義聲明:type 指針類(lèi)型名 = 基類(lèi)型;(2)指針類(lèi)型操作示例:1 var2 X, Y: Integer; / X 和 Y 為 Integer 變量3 P: Integer; / P指向 Integer 數(shù)據(jù)4 begin5 X := 17; / 為 X 賦值6 P := X; / 將 X 的地址賦予 P7 Y := P; / 取 P 所指地址的內(nèi)容賦予 Y8 end;在上述代碼中:第2行將X和Y聲明為Integer型變量。第3行將P聲明為指向I

26、nteger數(shù)值的指針。第5行為X賦值。第6行將X的地址賦予P。第7行取P所指地址中的數(shù)據(jù)賦予Y。注意:符號(hào)“”有兩個(gè)作用。當(dāng)它位于類(lèi)型標(biāo)識(shí)符之前時(shí),表示指向該類(lèi)型變量的指針;位于指針變量之后時(shí),表示取出該指針?biāo)傅刂分械膬?nèi)容。 操作符操作符用于獲得操作數(shù)的地址,構(gòu)造指向其后操作數(shù)的指針。 New過(guò)程N(yùn)ew過(guò)程創(chuàng)建一個(gè)新的動(dòng)態(tài)變量,并將它的內(nèi)存地址賦給一個(gè)指針變量。語(yǔ)法:New(指針類(lèi)型變量) Dispose過(guò)程Dispose過(guò)程釋放由New過(guò)程為動(dòng)態(tài)變量所分配的內(nèi)存。語(yǔ)法:Dispose(指針類(lèi)型變量)(3)無(wú)類(lèi)型指針無(wú)類(lèi)型指針用類(lèi)型標(biāo)識(shí)符Pointer聲明,它可以指向任意數(shù)據(jù)類(lèi)型,有“萬(wàn)能

27、”(versatile)指針之稱(chēng)。var P: Pointer;注意:對(duì)無(wú)類(lèi)型指針變量不能做取值操作,在此類(lèi)變量之后放置“”符號(hào)將引發(fā)編譯錯(cuò)誤。若需訪(fǎng)問(wèn)Pointer變量所引用的數(shù)據(jù),應(yīng)將該變量映射為另一有類(lèi)型指針,然后對(duì)后者取值。第5節(jié) 運(yùn)算符與表達(dá)式本節(jié)要點(diǎn)l 常用運(yùn)算符l 運(yùn)算符的優(yōu)先級(jí)由常量、變量、函數(shù)、運(yùn)算符以及括號(hào)連接起來(lái)的有意義的式子稱(chēng)為表達(dá)式。一、賦值運(yùn)算符:=二、算術(shù)運(yùn)算符*、/、div(整除)、mod(取余)、。三、邏輯運(yùn)算符not、and、or、xor。四、關(guān)系運(yùn)算符=、<>、>、<、>=、<=。五、位運(yùn)算符not、and、or、xor

28、、shl(左移)、shr(右移)。六、指針運(yùn)算符(取地址,在變量名左側(cè))、(取內(nèi)容,在指針變量右側(cè))、<>。七、集合運(yùn)算符+(并)、-(差)、*(交)、<=(包含于)、>=(包含)、=(相等)、<>(不相等)、in(屬于)其中 +、-、* 的運(yùn)算結(jié)果為集合,其他運(yùn)算符的運(yùn)算結(jié)果為邏輯值。八、其他運(yùn)算符1. 字符串運(yùn)算符+2. 類(lèi)運(yùn)算符is、as九、運(yùn)算符的優(yōu)先級(jí)分類(lèi)運(yùn)算符優(yōu)先級(jí)單目, not最高乘除*, /, div, mod, and, shl, shr, as第二加減+, -, or, xor第三關(guān)系=, <>, <, >, &l

29、t;=, >=, in, is最低注意:邏輯運(yùn)算符分布在不同級(jí)別,并且優(yōu)先級(jí)高于關(guān)系運(yùn)算符,因此,在邏輯表達(dá)式中應(yīng)當(dāng)用括號(hào)將邏輯運(yùn)算符兩側(cè)的操作數(shù)括起來(lái)。例如:(X = Y) or (X = Z)第6節(jié) 語(yǔ)句本節(jié)要點(diǎn)l 聲明語(yǔ)句l 簡(jiǎn)單語(yǔ)句與復(fù)合語(yǔ)句l 條件控制語(yǔ)句l 循環(huán)語(yǔ)句一、聲明語(yǔ)句1. Delphi中的“塊”(補(bǔ)充)塊(Blocks)是Delphi中的一個(gè)特殊術(shù)語(yǔ),前面討論的標(biāo)識(shí)符聲明和各種語(yǔ)句都被組織到“塊”中。塊由一系列聲明(變量、常數(shù)、類(lèi)型、過(guò)程、函數(shù))和一個(gè)復(fù)合語(yǔ)句構(gòu)成。在塊中,所有聲明必須出現(xiàn)在塊的起始處。塊的格式如下:聲明部分begin 語(yǔ)句系列end塊是程序、函數(shù)或

30、過(guò)程聲明的組成部分。每個(gè)程序、函數(shù)或過(guò)程聲明均含有一個(gè)塊。2. 聲明的位置在Delphi中,聲明(類(lèi)型、常量、變量等)語(yǔ)句只能出現(xiàn)在以下特定位置:l 塊的起始處(begin之前);l 單元接口區(qū)(interface)的起始處(uses子句之后);l 單元實(shí)現(xiàn)區(qū)(implementation)的起始處(uses子句之后)。3. 關(guān)于作用范圍標(biāo)識(shí)符(如常量、變量、過(guò)程名或函數(shù)名)只能在其聲明的作用范圍(作用域,Scpope)中使用。聲明的位置決定其作用范圍。在程序、函數(shù)或過(guò)程聲明內(nèi)聲明的標(biāo)識(shí)符,其作用范圍從聲明的位置開(kāi)始,并且局限于聲明它的塊中。在單元的接口部分聲明的標(biāo)識(shí)符,其作用范圍包括本單元以

31、及使用該單元的其他單元或程序。作用范圍較窄的標(biāo)識(shí)符,特別是在函數(shù)或過(guò)程中聲明的標(biāo)識(shí)符稱(chēng)為局部(local)標(biāo)識(shí)符;作用范圍較寬的標(biāo)識(shí)符稱(chēng)為全局(global)標(biāo)識(shí)符。二、簡(jiǎn)單語(yǔ)句與復(fù)合語(yǔ)句1. 賦值語(yǔ)句變量:= 表達(dá)式;2. 復(fù)合語(yǔ)句(補(bǔ)充)復(fù)合語(yǔ)句(Compound statements)是用begin和end括起來(lái)的一組語(yǔ)句,通常出現(xiàn)在塊中。例如:begin Z := X; X := Y; Y := Z;end;此外,復(fù)合語(yǔ)句亦常出現(xiàn)在單句形式的結(jié)構(gòu)化語(yǔ)句中(如if、for、while等),其地位相當(dāng)于一條語(yǔ)句。例如:begin I := 10; while I > 0 do beg

32、in . I := I - 1; end;end;三、條件控制語(yǔ)句1. If語(yǔ)句(1)語(yǔ)法if 條件 then 語(yǔ)句1 else 語(yǔ)句2;“條件”是一個(gè)結(jié)果為邏輯值的表達(dá)式。注意: 在then和else之間不能出現(xiàn)分號(hào)(復(fù)合語(yǔ)句內(nèi)者除外)。若語(yǔ)句1為復(fù)合語(yǔ)句,并且其后有else子句,則復(fù)合語(yǔ)句的end后亦不能出現(xiàn)分號(hào)。 在嵌套的if語(yǔ)句中,else與最接近它的if配對(duì)。 為了避免語(yǔ)法格式出錯(cuò),提高代碼輸入速度,可在輸入“if”后,按Ctrl+J鍵,從彈出的列表中選擇所需代碼框架模板。(2)示例例1:if x >= 0 then y := x;例2:if x >= 0 then y:

33、= xelse x := y;例3:if x >= 0 then begin y := 1; z := 2; end / 不加分號(hào)else begin y := 3; z := 4; end;例4:if x > 0 then y := 1 / 無(wú)分號(hào)else if x = 0 then y := 0 / 無(wú)分號(hào) else y := -1; / if語(yǔ)句結(jié)束,有分號(hào)例5:在單行文本框(Edit)中限制用戶(hù)輸入合法數(shù)據(jù)。例如,有時(shí)只允許用戶(hù)輸入數(shù)字(如郵政編碼、職工編號(hào)等),可在文本框的OnKeyPress事件過(guò)程中用以下代碼過(guò)濾掉鍵盤(pán)輸入的非數(shù)字字符:procedure TForm1

34、.Edit1KeyPress(Sender: TObject; var Key: Char);begin OnKeyPress事件中的Key參數(shù)傳送的是用戶(hù)按鍵的ASCII碼字符。 in為集合運(yùn)算符,#8為退格鍵,Key:= #0表示取消按鍵 if not (Key in '0'.'9', #8) then Key := #0;end;2. Case語(yǔ)句(1)語(yǔ)法case 選擇表達(dá)式 of 值表1:語(yǔ)句1; . 值表n:語(yǔ)句n; else 語(yǔ)句n+1;end;說(shuō)明:“選擇表達(dá)式”必須是有序類(lèi)型,不能是字符串類(lèi)型?!爸当怼币?guī)定如下: 可以是數(shù)字、已聲明的常數(shù)或能夠

35、直接得出值的表達(dá)式(如2+3*5),且必須是與“選擇表達(dá)式”相容的有序類(lèi)型。不能是變量。除了下列函數(shù)外,不得使用其他函數(shù):Abs、Chr、Hi、High、Length、Lo、Low、Odd、Ord、Pred、Round、SizeOf、Succ、Trunc。 可以是滿(mǎn)足上述標(biāo)準(zhǔn)的子界類(lèi)型,如:1.100。 可以是滿(mǎn)足上述標(biāo)準(zhǔn)的項(xiàng)目列表,如:0,10.20,30,50.60。 每一個(gè)值必須惟一,子界或項(xiàng)目列表不能重疊?!罢Z(yǔ)句”是以分號(hào)分隔的語(yǔ)句序列。若某個(gè)值表中的值與選擇表達(dá)式相等,則執(zhí)行該值表冒號(hào)后的語(yǔ)句,然后直接跳轉(zhuǎn)到end后面的語(yǔ)句。如果有else子句,當(dāng)各值表中沒(méi)有與選擇表達(dá)式相等的值時(shí),

36、則執(zhí)行else后面的語(yǔ)句n+1。(2)示例var Sc: Integer; Gr: string;.case Sc of 0.59: Gr:= '不及格' 60.79: Gr:= '及格' 80.89: Gr:= '良' 90.100: Gr:= '優(yōu)'else ShowMessage('成績(jī)輸入錯(cuò)誤。'); / 顯示消息對(duì)話(huà)框end;四、循環(huán)控制語(yǔ)句1. For循環(huán)(1)語(yǔ)法兩種形式:for 循環(huán)變量:= 初值 to 終值 do 循環(huán)體;/ 循環(huán)變量每次加1for 循環(huán)變量:= 初值 downto 終值 do 循

37、環(huán)體;/ 循環(huán)變量每次減1說(shuō)明:l 循環(huán)體可以是一個(gè)簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。l 在循環(huán)體中不得改變循環(huán)變量值。l 循環(huán)變量必須是有序類(lèi)型,且與初值和終值類(lèi)型相同。l 循環(huán)結(jié)束后循環(huán)變量的值自動(dòng)設(shè)置為不確定的值。l 初值和終值僅在循環(huán)開(kāi)始前計(jì)算一次。(2)示例var i, sum: Integer;.sum:= 0;for i:= 1 to 100 do / 求1+2.+100 sum:= sum + i;2. While循環(huán)(1)語(yǔ)法while 條件 do 循環(huán)體;條件為真時(shí)循環(huán)。循環(huán)體可以是一個(gè)簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句。(2)示例var i, sum: Integer;.i:= 1;sum:= 0;w

38、hile i<= 100 do begin sum:= sum + i; i:= i+1; end;3. Repeat循環(huán)(1)語(yǔ)法repeat 循環(huán)體 until 條件;條件為真時(shí)停止循環(huán)。循環(huán)體可以是多條語(yǔ)句。至少執(zhí)行一次循環(huán)體。(2)示例var i, sum: Integer;.i:= 1;sum:= 0;repeat sum:= sum + i; i:= i+1;until i > 100;五、其他語(yǔ)句1. Break語(yǔ)句Break語(yǔ)句用于退出循環(huán)。該語(yǔ)句必須出現(xiàn)在循環(huán)語(yǔ)句的循環(huán)體中。例如:var i, sum: Integer;.sum:= 0;for i:= 1 to

39、100 do / 求1+2.+100begin sum:= sum + i; if sum > 2000 then break; / 若總和大于2000,退出循環(huán)end;2. Continue語(yǔ)句Continue語(yǔ)句用于結(jié)束本次循環(huán),直接進(jìn)入下一次循環(huán)。該語(yǔ)句必須出現(xiàn)在循環(huán)語(yǔ)句的循環(huán)體中。例如:求1100中的偶數(shù)之和。var i, sum: Integer;.sum:= 0;for i:= 1 to 100 dobegin Odd函數(shù)用于判斷某數(shù)是否為奇數(shù),若i為奇數(shù),直接進(jìn)入下一次循環(huán) if Odd(i) then continue; sum:= sum + i;end;3. exit

40、語(yǔ)句該語(yǔ)句用于退出當(dāng)前程序塊,通常位于分支語(yǔ)句中。4. halt語(yǔ)句該語(yǔ)句使程序異常終止,返回到操作系統(tǒng)。若要使程序正常終止,可以調(diào)用全局對(duì)象Application的Terminate方法。六、With語(yǔ)句with語(yǔ)句的作用主要是用來(lái)簡(jiǎn)化代碼。例如下面的代碼:Form1.Canvas.Pen.Width:=2;Form1.Canvas.Pen.Color:=clRed;可以用with語(yǔ)句簡(jiǎn)化為:with Form1.Canvas.Pen dobegin Width:=2; Color:=clRed;end;第7節(jié) 過(guò)程和函數(shù)本節(jié)要點(diǎn)l 過(guò)程與函數(shù)的聲明l 過(guò)程與函數(shù)的調(diào)用l 參數(shù)過(guò)程和函數(shù)統(tǒng)稱(chēng)

41、為例程(routines)。函數(shù)有返回值,過(guò)程無(wú)返回值。一、過(guò)程和函數(shù)的聲明(1)過(guò)程聲明procedure 過(guò)程名(參數(shù)表); / 過(guò)程首部 局部變量聲明;begin 過(guò)程體語(yǔ)句end;(2)函數(shù)聲明function 函數(shù)名(參數(shù)表): 返回值類(lèi)型; / 函數(shù)首部 局部變量聲明;begin 函數(shù)體語(yǔ)句end;(3)關(guān)于函數(shù)的返回值在函數(shù)中,函數(shù)名本身相當(dāng)于一個(gè)特殊變量,在函數(shù)體內(nèi)對(duì)函數(shù)名賦值即可為函數(shù)指定返回值。可以對(duì)函數(shù)名賦值多次,但只有最后一次被作為返回值。此外,Delphi為所有函數(shù)聲明了一個(gè)隱含變量Result,對(duì)該變量賦值亦可指定返回值。例如,以下兩個(gè)函數(shù)聲明等價(jià):function

42、 WF: Integer;begin WF := 100;end;function WF: Integer;begin Result := 100;end;注意:在函數(shù)體內(nèi),僅當(dāng)函數(shù)名出現(xiàn)在賦值語(yǔ)句(賦值號(hào))的左側(cè)時(shí),才與隱含變量Result的作用相同,即指定返回值。如果函數(shù)名出現(xiàn)在其他位置,則被當(dāng)作本函數(shù)的遞歸調(diào)用處理。Result無(wú)論出現(xiàn)在何處,它的作用只是一個(gè)含有返回值的變量,在函數(shù)體內(nèi)可以對(duì)Result本身進(jìn)行操作。(4)過(guò)程和函數(shù)的作用范圍過(guò)程和函數(shù)的作用范圍取決于其聲明的位置,若在其聲明位置之前調(diào)用它們,將會(huì)引發(fā)錯(cuò)誤。因此,在單元的實(shí)現(xiàn)部分,如果不進(jìn)行特殊處理,應(yīng)當(dāng)先聲明被調(diào)過(guò)程或

43、函數(shù),后聲明主調(diào)過(guò)程或函數(shù)。如果需要擴(kuò)展自定義過(guò)程或函數(shù)的作用范圍,可以預(yù)先聲明過(guò)程或函數(shù)的首部(或稱(chēng)原型、標(biāo)題)。方法如下: 使用forward指令在單元實(shí)現(xiàn)部分的編譯指令$.之后(若有uses子句,應(yīng)在它之后),聲明帶有forward指令(超前聲明)的函數(shù)或過(guò)程的首部,格式如下:procedure 過(guò)程名(參數(shù)表); forward; / 過(guò)程forward聲明或:function 函數(shù)名(參數(shù)表): 返回值類(lèi)型; forward; / 函數(shù)forward聲明在forward聲明之后的某個(gè)位置進(jìn)行定義聲明(defining declaration),定義不帶forward指令的函數(shù)體或過(guò)程

44、體。注意:在超前聲明和定義聲明之間不允許出現(xiàn)變量(var)和常量(const)聲明區(qū)。用forward指令聲明的函數(shù)或過(guò)程僅供本單元調(diào)用。 在單元的接口部分聲明函數(shù)或過(guò)程的首部在接口部分聲明函數(shù)或過(guò)程的首部,然后在實(shí)現(xiàn)部分進(jìn)行定義聲明。用這種方法聲明的函數(shù)或過(guò)程可供本單元以及使用本單元的其他單元和程序調(diào)用。在接口部分不能使用forward指令。采用上述兩種方法時(shí),定義聲明中可以省略參數(shù),亦可省略函數(shù)的返回值類(lèi)型。二、過(guò)程和函數(shù)的調(diào)用過(guò)程調(diào)用:過(guò)程名(參數(shù)表);函數(shù)調(diào)用:函數(shù)名(參數(shù)表)在默認(rèn)情況下,函數(shù)調(diào)用既可以出現(xiàn)在表達(dá)式中,亦可像過(guò)程調(diào)用一樣作為一個(gè)語(yǔ)句使用(此時(shí)忽略返回值)。三、參數(shù)De

45、lphi中的參數(shù)傳遞分為4種方式:值參數(shù)、變量參數(shù)、常量參數(shù)和輸出參數(shù)。值參數(shù)為默認(rèn)方式,其余三種分別用保留字var、const和out標(biāo)識(shí)。1. 值參數(shù)值參數(shù)(Value parameters)簡(jiǎn)稱(chēng)值參,是默認(rèn)的參數(shù)傳送方式(傳值)。值參改變時(shí)不影響實(shí)參值。例如:function MyFuncVal(X: Integer): Integer;begin X := X * 2; Result := X;end;2. 變量參數(shù)變量參數(shù)(Variable parameters)簡(jiǎn)稱(chēng)變參,又稱(chēng)引用參數(shù)(傳址),在形參前使用var關(guān)鍵字聲明。由于變參與實(shí)參共用同一內(nèi)存地址,因此實(shí)參值將隨變參變化。例如

46、:function MyFuncRef(var X: Integer): Integer;begin X := X * 2; Result := X;end;注意:過(guò)程或函數(shù)調(diào)用時(shí),與變參對(duì)應(yīng)的實(shí)參不允許使用常量或表達(dá)式。3. 常量參數(shù)常量參數(shù)(Constant parameters)類(lèi)似于局部常量或只讀變量,在形參前使用const關(guān)鍵字聲明。調(diào)用過(guò)程或函數(shù)時(shí),實(shí)參、形參均不改變,可保護(hù)變量值不被改變。使用常量參數(shù)可以?xún)?yōu)化代碼的編譯。在過(guò)程體或函數(shù)體內(nèi)不允許對(duì)常量參數(shù)賦值??梢詫⒊A繀?shù)作為實(shí)參傳遞給另一個(gè)過(guò)程或函數(shù),但對(duì)應(yīng)的形參必須是值參或常量參數(shù),而不能是變參。下面通過(guò)示例說(shuō)明常量參數(shù)的使用規(guī)則。以下函數(shù)的形參為值參:function FuncVal(X: Integer): Integer; / X為值參begin X := X * X; Result := X;end;以下函數(shù)的形參為變參:function FuncRef(var X: Integer): Integer; / X為變參begin X := X * X; Result := X;end;以下函數(shù)的形參為常量參數(shù),在函數(shù)體內(nèi)調(diào)用了上面已聲明的函數(shù)。請(qǐng)注意常量參數(shù)的使用規(guī)則:fun

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論