計算機課件第2章 Delphi的編程語言_第1頁
計算機課件第2章 Delphi的編程語言_第2頁
計算機課件第2章 Delphi的編程語言_第3頁
計算機課件第2章 Delphi的編程語言_第4頁
計算機課件第2章 Delphi的編程語言_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

KZS、,

第2章"Delphi的編程語言

2.1保留字和標識符

2.2ObjectPascal的數(shù)據(jù)類型

2.3常量和變量的定義

2.4運算符和表達式

2.5語句

2.6過程與函數(shù)

2.7實驗4

第2章Delphi的偏程語多?一

2.1保留字和標識符

2.1.1保留字和標準指令符

保留字(ReservedWords)是由系統(tǒng)規(guī)定的具有特定意義

和特定用途的單詞。這些單詞在編程中不能被重新定義或作

為其他用途。ObjectPascal中的保留字有65個,表2-1列出

了Delphi中的保留字。

指令符((Directives)也是由系統(tǒng)規(guī)定的具有特定意義的單

詞。但是它們可以被重新定義,重新定義后,在該定義的作

用域之內(nèi),它們就失去了原來的意義,而采用了新的含義限

ObjectPascal中的指令符有39個,具體見相關(guān)工具書。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

表2-1ObjectPascal中的保留字

andarrayasasmbegin

caseclassconstconstructordestructor

dispinterfacedivdodowntoelse

endexceptexportsfilefinalization

finallyforfunctiongotoif

implementationininheritedinitializationinline

interfaceislabellibrarymod

nilnotobjectofor

outpackedprocedureprogramprqperty

raiserecordrepeatresourcestringset

shlshrstringthenthreadvar

tottytypeunituntil

usesvarwhilewithxor

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.1.2標識符

標識符(Identifiers)是用來表示常量、變量、屬性、對象、

類型、過程、函數(shù)、單元、對象等語法實體的名稱的符號。

ObjectPascal中的標識符的命名規(guī)則如下。

標識符可以由字母(A?Z、a?z)、數(shù)字(0?9)和下劃線

組成。

標識符必須由字母或下劃線開頭。

標識符的長度不應(yīng)該超過255個字符,如果超過,則只

有前255個字符有效。

不能使用保留字作為自定義標識符,盡量不要使用指令

字作為自定義標識符。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

需要注意的是:在ObjectPascal中,標識符不區(qū)分大、

小寫,例如,標識符Abe和標識符abc被認為是同一個標識

符。

另外,在Delphi庫文件中還預(yù)先定義了一些標識符,如

標準數(shù)學(xué)函數(shù)Sqrt與Sin,標準數(shù)據(jù)類型Boolean和Char等,

在編程時,應(yīng)該盡量避免使用這些標識符作為自定義的標識

符,以免引起混淆。

在使用標識符的時候,必須首先聲明,否則在編譯時,

系統(tǒng)會顯示錯誤信息,提示該標識符沒有定義。

delphi程序設(shè)計基礎(chǔ)教程

第章的偏程語音

1i2Delphi、

2.1.3注釋

注釋是關(guān)于程序或程序段的含義或功能的文字說明。它

在程序中不會被執(zhí)行,僅作說明用。好的編程風(fēng)格是在程序

的相應(yīng)位置加上適當(dāng)?shù)淖⑨?,以增加程序的可讀性。

ObjectPascal支持以下3種類型的注釋。

⑴大括號:“{”和

(2)小括號和星號的組合:“(*”和“*),

(3)雙斜線:

其中,前兩種注釋方法必須成對使用,可用于多行注釋,

即注釋符號開頭到注釋符號結(jié)尾之間的內(nèi)容都是注釋。雙斜

線風(fēng)格的注釋只能用于單行,即雙斜線后到該行結(jié)尾的內(nèi)容

為注釋。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏移語音、

【例2.1】3種注釋的用法。

ProgramPhello;

{本程序用于說明注釋的用法}

Uses

Forms,

Umainin'Umain.pas'{frmHello};〃單元模塊說明

{$R*.res}

Begin

Application.Initialize;〃主程序開始

Application.CreateForm(TfrmHello,fnnHello);//創(chuàng)建主窗體

Application.Run;(*啟動主程序,將控制權(quán)交給主窗體*)

End.//主程序結(jié)束

delphi程序設(shè)計基礎(chǔ)教程

第章的偏程語音

1i2Delphi、

2.1.4控制臺程序中的屏幕輸入和輸出

【例2.2】控制臺HelloWorld程序。

(1)生成控制臺程序工程。在主菜單上選擇【File]->

[New]->[Other],彈出[NewItems]對話框,選擇

[ConsoleApplication]類型。系統(tǒng)將自動生成工程文件(在

控制臺程序中工程文件也就是主程序文件)的框架代碼。

(2)在代碼編輯器中begin和end之間輸入如下代碼:

Writeln('Hello,Delphiworld!!);

Readln;

第一行是將字符串輸出到標準輸出設(shè)備,第二行是等待

鍵盤輸入,此處的作用是讓程序暫停運行,以便觀察效果。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程箱音、

(3)選擇菜單[File]->[SaveAll],或者在工具欄上

單擊日按鈕,彈出【保存工程】對話框,選擇保存的路徑,

再輸入工程文件名PhelloConsole.dpr,單擊【保存】按鈕即

可。

(4)選擇菜單【Run]->[Run]或單擊工具欄上的》

按鈕,運行程序,運行結(jié)果如圖2.1所示。

圖2.1控制臺應(yīng)用程序運行結(jié)果

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.2ObjectPascal的數(shù)據(jù)類型

ObjectPasca皮持豐富的數(shù)據(jù)類型,大致可分為6大類。

(1)簡單類型:包括有序類型和實數(shù)型。其中有序類型

是指整數(shù)類型、字符類型、布爾類型、枚舉類型以及子界類

型。

(2)字符串類型。

(3)結(jié)構(gòu)類型:包括集合類型、數(shù)組類型、記錄類型、

文件類型、類類型、類引用類型、接口類型等。

(4)指針類型。

(5)過程類型。

(6)可變類型。

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.2.1簡單數(shù)據(jù)類型

簡單數(shù)據(jù)類型包括整型、字符型、布爾型、枚舉型、子

界型和實型。其中,整型、字符型、布爾型、枚舉型和子界

型這5種被稱為有序數(shù)據(jù)類型(Ordinal)。有序數(shù)據(jù)類型定義

了一個有序的值的集合,其中的每一個值,除了第一個之外,

都有一個唯一的直接前驅(qū);每一個值,除了最后一個之外,

都有一個唯一的直接后繼。也就是說,每個值都有一個序號,

可以比較兩個有序數(shù)據(jù)類型的大小,而且可以求出給定有序

值的前驅(qū)和后繼,或者計算它們的最大值和最小值。

對于有序數(shù)據(jù)類型,常用的操作函數(shù)見表2-2。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

表2-2有序數(shù)據(jù)類型的常用操作函數(shù)

函數(shù)參數(shù)返回值

Dec有序數(shù)據(jù)類型變量變量減1后的值

Inc有序數(shù)據(jù)類型變量變量加1后的值

Pred有序表達式表達式前驅(qū)的值

Suce有序表達式表達式后繼的值

Ord有序表達式有序表達式的值

Low有序類型標識符或有序類型變量該類型的最小值

High有序類型標識符或有序類型變量該類型的最大值

Odd有序表達式判斷是否為奇數(shù)

delphi程序設(shè)計基礎(chǔ)教程

j(第2章Delphi的偏移語含、

【例2.3】有序類型函數(shù)的用法。

var

MyTest:Byte;〃定義一個Byte類型的變量MyTest

begin

MyTest:=6;

Writeln。變量的上限是:[High(Byte));〃顯示Byte類型的上限是255

WritelnC變量的上限是:*,Low(Byte));〃顯示Byte類型的下限是0

WHtelnCMyTest的序號是:[Ord(MyTest));//顯示變量MyTest的序號是6

Wi1teln('MyTest的前驅(qū)是:",Pred(MyTest));〃顯示變量MyTest的

前驅(qū)是5

Writeln((MyTest的后繼是:',Succ(MyTest));〃顯示變量MyTest的

后繼是7

WHteln('MyTest是奇數(shù):'Qdd(MyTest));〃顯示變量MyTest不

是奇數(shù)

Readln;

end.

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

1.整型(Integer)

整型數(shù)據(jù)類型描述了整個數(shù)字集合的一個子集。從跨平

臺方面而言,可以將整型分為通用整型和基本整型兩類?;?/p>

本類型(Fundamental)不管是什么操作系統(tǒng)和硬件,其格式

和取值范圍都一樣;而通用類型(Generic)的取值范圍和格式

會隨著操作系統(tǒng)和硬件等平臺的不同而改變,而且可能隨著

編譯器實現(xiàn)的不同而有所差異。雖然通用類型有可能會導(dǎo)致

兼容性的問題,但是它能夠提供優(yōu)化的性能,可以最好地發(fā)

揮CPU和操作系統(tǒng)的性能,因此建議盡量使用通用類型。

通用的整型是Integer,基本整型包括Shortint、Longint

和Int64,它們在所有ObjectPascal語言中都保持一致,而

不依賴于操作系統(tǒng)和硬件。一般情況下,通用整型已經(jīng)能夠

滿足大多數(shù)的應(yīng)用,只有在數(shù)據(jù)范圍超過了其取值范圍時才

使用其他的數(shù)據(jù)類型。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

表2-3給出了32位的Delphi編譯器所支持的各種

整型的存儲格式和取值范圍。

表2-3整型的存儲格式和取值范圍

類型名稱字節(jié)數(shù)取值范圍

短整型Shortint8位符號數(shù)-128-127

長整型Longint32位符號數(shù)-2147483648~2147483647

64位整型Int6464位符號數(shù)一263?263T

整型Integer32位符號數(shù)-2147483648—2147483647

通常情況下,對整型數(shù)據(jù)所做的算術(shù)運算將返回

一個Integer類型,它等效于32位的Longint。只有當(dāng)操作數(shù)中

包含一個或多個Int64的數(shù)據(jù)時,才返回一個Int65類型的運算

結(jié)果。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語含、

下面的例子說明了這種情況。

var

IJnteger;

J:lnt64;

■■■

l:=High(lnteger);//l=2147483647

J:=l+1;

運行結(jié)果是-2147483648,而不是2147483648。

由于I是Integer類型,因止匕1+1的運算結(jié)果仍然是Integer

類型,而該結(jié)果超過了Integer類型的取值范圍,所以無法得

到正確結(jié)果。要得到正確結(jié)果,應(yīng)該將整型變量I強制類型轉(zhuǎn)

換為Int64,即:

J:=lnt64(l)+1;

delphi程序設(shè)計基礎(chǔ)教程

第2章Delphi的偏程箱音、

另外需要注意的是,當(dāng)變量的值為該數(shù)據(jù)類型的最大值

時,如果增加其值,將會溢出,并返回到其取值范圍的最小

值;當(dāng)變量的值為該數(shù)據(jù)類型的最小值時,如果減少其值,

將返回到其取值范圍的最大值。下面的例子說明了這種情況。

VarkShortint;

l:=High(Shortint);

l:=l+1;

程序運行后I的值為一128。

但是,如果編譯器允許范圍檢查的話,這段程序?qū)a(chǎn)生

一個運行期的錯誤。要打開范圍檢查,可以單擊【Project】

菜單中的[Option]命令,在系統(tǒng)彈出彷[ProjectOption]

對話框的[Compiler)選項卡中選中[RangeChecking]

艮口可。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏移語音、

2.字符型(Character)

字符型是存儲單個字符數(shù)據(jù)的類型。表2-4描述

TObjectPascal中支持的字符型數(shù)據(jù)。其中基本字符類型是

AnsiCharWideChar,通用字符類型是Char,相當(dāng)于基本字

符類型的AnsiChar。

表2-4字符型的存儲格式和取值范圍

類型名稱字節(jié)數(shù)取值范圍

Ansi字符

AnsiChar1擴展ANSI字符集

寬字符型WideChar2UniCode字符集

字符型Char1擴展ANSI字符集

delphi程序設(shè)計基礎(chǔ)教程

Y(第2多Delphi的偏彩語多f

UniCode字符集和擴展ANSI字符集所占用的字節(jié)數(shù)不同,

而UniCode字符集的前256個字符和ANSI字符集相同。因為

各種字符類型所需的字節(jié)數(shù)不盡相同,所以要獲得字符型變

量的大小時,最好采用SizeOf函數(shù)。

常量字符可用代表它們的符號表示,如也可以用

數(shù)字符號表示,如#78。后者還可以用Chr函數(shù)表示,Chr函

數(shù)返回數(shù)字對應(yīng)于AnsiChar或WideChar中的字符值,如

Chr(78)返回值為小寫字母k。函數(shù)Ord則可以做相反的轉(zhuǎn)換,

用于獲得字符在其字符集中的序號。

下面列出了一些常用的特殊字符。

#9:跳格(Tab鍵)。

#10:換行。

#13:回車(Enter鍵)。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

類似于整型數(shù)據(jù),當(dāng)編譯器不進行范圍檢查時,字符型

的數(shù)據(jù)如果在其取值范圍的最小值時做減1的操作,將會溢

出,得到取值范圍的最大值;如果在月取值范圍的最大值時

做加1操柞,將首得到取值范圍的最不值。下面端例程弛

了這種情況。

varkinteger

Letter:char;

begin

Letter:二High(Letter);〃Lette「的值為取值范圍的最大值

Forl:=1to66do

Inc(Letter);//Letter的值從。依次增加到65

Writein(Letter);

Readln;

end;

最終Letter的值為A,它對應(yīng)于ASCAII碼的65。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語音、

3.布爾型(Boolean)

布爾型數(shù)據(jù)用于邏輯運算,表示真或假的情況。

布爾型變量的值為系統(tǒng)預(yù)定義的常量True和False。見表2-5。

表2-5布爾型格式和取值范圍

類型名稱字節(jié)數(shù)取值

布爾型Boolean1True或False

布爾類型也屬于有序類型,當(dāng)其值為False時,

其序數(shù)為“0”,當(dāng)其值為True時,其序數(shù)為“1”。

需要注意的是,在Delphi中,布爾類型的表達式

不能換算為整型值,下面的例子說明了這個問題。

delphi程序設(shè)計基礎(chǔ)教程

i?第2章Delphi的偏程箱音、

varkinteger;

begin

|:=2-

ifIthen

Writeln(l);

Readln;

end;

在C語言中,這種寫法是可以的,表示當(dāng)I的值不為。時

則輸出I,但是在Delphi中,將產(chǎn)生一個編譯錯誤,系統(tǒng)會提

示此處必須要求一個布爾類型的表達式。可以將if語句修改

IfI<>0then...;

這里的1<>0是一個表達式,其值為布爾類型,同樣可以

實現(xiàn)原來的目的。

delphi程序設(shè)計基礎(chǔ)教程

第章的偏移語音

1j2Delphi、

4.枚舉型(Enumerated)

枚舉類型采用列舉出該類型所有可能取值的方式定義了

一個有序的值的集合。其定義的語法格式為

type

v類型名>=(值1,值2,…,值n);

其中,類型名和每個值都必須是合法的標識符。例如,

不能將數(shù)字1、2、3作為枚舉類型的值,因為合法的標識符

不能以數(shù)字開頭。

例如:

Type

Weekday=(Sunday,Monday,Tuesday,Wednesday,

Thursday,Friday,Saturday);

delphi程序設(shè)計基礎(chǔ)教程

j(第2章Delphi的偏程語畬、

這里定義了一個名為Weekday的枚舉型,其可能的值在

括號中,如Sunday、Monday、Tuesday等。

枚舉類型也是有序類型,因此,在定義中列出的每個值

都有其對應(yīng)的序數(shù),每個值的序數(shù)是由其被列出的順序決定

的,而與值本身的含義無關(guān),可以使用Ord函數(shù)得到。如

Ord(Sunday)將會得到0,Ord(Monday)將會得至U1,以此類

推,Ord(Saturday)的值為6。

注意:默認情況下,枚舉值是從0開始的有序整數(shù),但是可

以通過直接賦值的方式打破這種限制。例如:

typeMyColor=(red=2,yellow=3,green=6,white=7);

這時,Ord(red)的值為2,Ord(white)的值為7。

delphi程序設(shè)計基礎(chǔ)教程

丫『第2章Delphi的偏程語多]

除了采用前面介紹的方式定義枚舉類型的變量之外,還

可以將枚舉類型的定義和枚舉類型變量的聲明合并在一起,

例如:

var

l:(red=2,green=6,white=7,black=9);

但是用這種方法定義枚舉類型變量之后,就不能夠聲明

其他使用這些枚舉常量定義的相同范圍的枚舉型變量,例如:

varCoIori:(red=2,green=6,white=7,black=9);

varColor2:(red=2,green=6,white=7,black=9);

一這樣定義兩個枚舉型變量將產(chǎn)生一個編譯錯誤。系統(tǒng)會

提不類似于"Identifierredeclare于'recT這樣的錯誤。

也就是說,枚舉類型一旦聲明,此枚舉類型的任一元素

都不能再重復(fù)被聲明為其他枚舉類型的元素之一,這會導(dǎo)致

編譯錯誤。

delphi程序設(shè)計基礎(chǔ)教程

第2津Delphi的偏程語言.一]

5.子界型(Subrange)

子界類型定義了某種類型的取值范圍,是另一種有序類

型(稱為基類型)的子集。子界類型是以“低..高”的形式構(gòu)成

的,其中的“低”和“高”要求是基類型的常量表達式,并

且低值要小于高值。子界類型所有的取值都必須在最低值和

最高值之間。子界類型定義的語法格式為

Type

v類型名>=起始值..終止值;

例如:下面的聲明語句定義了1個枚舉類型day和2個子界類

型day1,number。

type

day=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);

day=Sun..Wed;

dumber=O..1OO;

delphi程序設(shè)計基礎(chǔ)教程

*j第2章Delphi的偏彩語多?

使用子界類型,需注意以下幾點。

(1)子界類型的上界和下界必須是同一類型,并且是有

序類型,如整型、布爾型、字符型或枚舉類型等,不能是實

數(shù)類型或其他無序類型。

(2)子界類型的上界和下界不僅可以是常數(shù),也可以是

能夠計算出具體值的常數(shù)表達式。

(3)子界類型的下限的序數(shù)值不能超過其上限值。

6.實型(Real)

實數(shù)類型是帶有小數(shù)部分的數(shù)值,用于存儲實數(shù)。有6

種不同的實數(shù)類型,它們在范圍精確度、大小等方面都不相

同。實數(shù)類型包括Real48、Single、Double、Extended>

Comp和Currency。通常使用的Real與Double類型是等價的。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.2.2字符串類型

字符串類型包括String、AnsiString和WideString

這3種類型,見表2-6。String類型中的每個元素都是AnsiChar

類型,不以NULL作為結(jié)束標記;AnsiString類型也是基于

AnsiChar類型,可被動態(tài)分配存儲空間,字符個數(shù)幾乎不受

限制,以NULL作為結(jié)束標記;WideString與AnsiString類似,

只是所包含的字符是WideChar類型字符。習(xí)慣上使用String的

默認為AnsiString類型。

表2-6字符串類型

類型最大長度所需內(nèi)存存儲的字符

String255個字符2?256BAnsiChar

AnsiString231個字符4B-2GBAnsiChar

WideString23。個字符4B?2GBWideChar

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程箱音、

說明一個字符串變量時,應(yīng)指明該字符串的大小,例如:

typeString1:string[20];

varMyString:String1;

其中,變量MyString被說明成最多可以包含20個字符。

字符串的默認大小為255。給字符串賦值可以直接使用單引

號括起的字符串,例如:

MyString:二'tony';

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.2.3結(jié)構(gòu)類型

結(jié)構(gòu)類型在內(nèi)存中存儲一組相關(guān)的數(shù)據(jù)項,而不是像簡

單數(shù)據(jù)類型那樣單一的數(shù)值。ObjectPascal結(jié)構(gòu)類型包括集

合類型、數(shù)組類型、記錄類型、文件類型、類類型、類引用

類型、接口類型等。

這里,只介紹集合類型、數(shù)組類型、記錄類型和類類型。

1.集合類型

集合類型是指一群相同類型元素的集合,這些類型必須

是有限類型,元素的類型可以為Integer、Boolean>Char>

枚舉型或子界型等。當(dāng)要檢查一個值是否屬于一個特定集合

時,集合類型非常有用。

delphi程序設(shè)計基礎(chǔ)教程

1i第2章Delphi的偏移語音、

2.數(shù)組類型

數(shù)組是某種數(shù)據(jù)類型的有序組合,其中每一個元素的值由其相對位

置來指定,可以在數(shù)組的某個位置上放置數(shù)據(jù),并在需要時使用這些數(shù)

據(jù)。下面的類型說明了一個Real型的數(shù)組變量。

Var

titleStrl:Array[1..10]ofReal;

上例中,數(shù)組類型的標識符是TlleStrl,下標類型是整型,共有10

個元素,元素下標從1?10,每一個元素類型都是Real類型。我們也可

以把數(shù)組定義為類型。

type

TdoubleArray=Array[1..10]ofDouble;

則變量說明改為:"

Var

X:TdoubleArray;

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

3.記錄類型

記錄是一系列相關(guān)的變量,這些變量被稱為域,它們放

在::起,作為一個整體使用。它是用戶程序可以成組訪問的

一群數(shù)據(jù)的集合。

記錄中可以包含多個數(shù)據(jù)域,每一個域都有自己的數(shù)據(jù)

類型,我們既可以單獨訪問這些域,也可以把記錄作為一個

整體來使用,例如:

Type

Temployee=Record;

Name:String[20];

EmpNoJnteger;

Salary:Double;

End;

在上面例子中記錄Temployee類型就含有3個域。在定

義了記錄類型后,用戶就可以說明記錄行的變量。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

4.類類型

在Delphi的編程中,類是非常重要的一種數(shù)據(jù)結(jié)構(gòu)類型。

它不僅包含數(shù)據(jù)的域(Field),也包含作為方法的過程和函數(shù)。

在Delphi中,當(dāng)用戶向窗體中加入一個控件,也就是向窗體

類中加入了一個域;每一個控件也是類,每當(dāng)用戶建立一個

事件句柄使得控件可以響應(yīng)一個事件時,系統(tǒng)會自動地在窗

體中加入一個方法。

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.2.4指針類型

指針類型對程序員來說可能是最復(fù)雜和最靈活的數(shù)據(jù)類

型。

在Delphi中創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)時,首先要分配內(nèi)存空間。

分配的內(nèi)存空間用于存儲數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)。而指針就是指

向分配空間的內(nèi)存地址。使用指針可以使程序不必每次需要

時都去分配,只要申請一次,其他過程或函數(shù)使用同一塊內(nèi)

存空間時,只需使用該內(nèi)存空間的地址即可。

在運算上,指針變量與一般變量無區(qū)別,如"p:=q;"。

當(dāng)要引用指針所指向的變量時,必須在指針后使用下

面是一個帶有指針類型聲明的例子。

delphi程序設(shè)計基礎(chǔ)教程

i?第2章Delphi的偏程箱音、

Type

WordPtr=AWord;

RealPtr=AReal;

PersonType=Record;

LastName:String;

FirstName:String;

AgeJnteger;

End;

PersonPointer=APersonType;

上例中,聲明了3個指針類型,一個是WordPtr指向

AWord,一個是RealPtr指向AReal,還有一個是

PersonPointer指向一個標識符,而該標識符標識一個記錄

類型。

delphi程序設(shè)計基礎(chǔ)教程

第章的偏移語音

1i2Delphi、

2.2.5過程與函數(shù)類型

過程類型變量相當(dāng)于指針的角色,它可以指向一個過程

或函數(shù),并且可以作為另一過程或函數(shù)的參數(shù)使用。其定義

的方式如下例:

Type

TProcedure=procedure;

TlntegerFunction=Function:Integer;

TStringProcedure=Procedure(constS:String);

Var

Proc:Tprocedure

IntF:TintegerFunction

StrP:TstringProcedure

delphi程序設(shè)計基礎(chǔ)教程

第2章Delphi的偏程箱音、

任何一個過程變量都可以取nil值,但試圖通過一個具有nil值的過程

變量來調(diào)用一個函數(shù)或過程是錯誤的,因為它不指向任何函數(shù)或過程。

所以可以先用Avssigned函數(shù)來對此過程變量進行測試,然后再使用過

程變量調(diào)用函數(shù)或過程。也就是說必須先把一個過程或函數(shù)通過賦值語

句賦給這個過程類型變量,舉例如下。

Var

F:Function(X,Y):Integer;

I:Integer

FunctionFunAdd(X,Y:Integer):Integer;

Begin

Result:=X+Y;

End;

ProcedureTform1.ButtonClick(Sender:Tobject);

Begin

F:=FunAdd;

IfAssigned(F)ThenI:=F(2,3);

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

過程類型也可作為參數(shù),例如:

Type

TlntegerFunction=Function:Integer;

ProcedureProc(F:TintegerFunction);

其中,Proc是一個過程,F(xiàn)是這個過程的參數(shù)。而參數(shù)F的類

型是一個過程類型,由過程類型的聲明而知,它是一個無參

數(shù)的函數(shù),并且返回一個整型數(shù)。實際上就是這個無參數(shù)的

函數(shù)返回的整數(shù)值作為Proc過程的參數(shù)。

事實上,程序員很少使用過程變量來調(diào)用過程或函數(shù),

因為更多的時候可直接使用要調(diào)用的過程名或函數(shù)名即可,

所以有關(guān)過程類型變量的使用更多的是在指向類對象的方法

上。

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.2.6可變類型

有時要對一些數(shù)據(jù)類型變化的數(shù)據(jù)進行操作,并且在編

譯期間不能確定數(shù)據(jù)的類型,這時就可以使用可變類型的數(shù)

據(jù)。這些數(shù)據(jù)的數(shù)據(jù)類型可以在運行期間進行改變,但是它

們比固定類型的數(shù)據(jù)占用更多的空間和更多的操作時間。另

外,可變類型不能包含記錄型、集合類型、靜態(tài)數(shù)組、文件

類型、類、指針類型以及長整型等數(shù)據(jù)類型。

可變類型變量聲明的語法格式為:

var變量名表:Variant;

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語音一]

2.3常量和變量的定義

2.3.1常量

常量是在程序的運行過程中不發(fā)生變化的量。說明常量

時,不需要指定其數(shù)據(jù)類型,需給出具體的值。編譯器會根

據(jù)值確定正確的類型。常量分為兩種。

⑴一般常量。如123,-10,-19.56,“abc”,

TRUE等都是一般常量。

(2)符號常量。在實際編程時,有時會反復(fù)使用一些相

同的值。例如,在一個計算運費的程序中,單位價格標準

(假設(shè)為0.20元/kg.km)可能會使用多次,一旦標準調(diào)整,將

要在程序中對多處進行修改,這樣不僅工作量大、效率低,

而且容易漏掉。在應(yīng)用程序開發(fā)中,通常定義一個符號常量

來表示這些反復(fù)使用的相同量來解決上述問題。

delphi程序設(shè)計基礎(chǔ)教程

第2章Delphi的偏彩語音、

在ObjectPascal中,用const關(guān)鍵字來聲明常量。語法格式

如下:

const常量名二表達式;

例如:

const

pi=3.14;

m=20;

st='lamastudent.';

n=m+10;

說明:

(1)常量在說明時就被賦予了一個值,在程序執(zhí)行過程

中是不可改變的。

(2)等號的右邊只能出現(xiàn)一般常量、已聲明的常量或者

常量表達式。

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.3.2變量

變量是程序代碼中代表一個內(nèi)存地址的標識符,而此地

址中的內(nèi)容在程序代碼執(zhí)行時可以被改變。在使用變量前必

須對它進行說明,即對它進行命名,并說明它的類型。系統(tǒng)

根據(jù)變量的數(shù)據(jù)類型為每一個變量分配一定的內(nèi)存空間。用

戶可以通過變量名對內(nèi)存單元進行讀或?qū)憽?/p>

在ObjectPascal中,用var關(guān)鍵字聲明變量。語法格式

如下:

var變量名表:類型名;

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

說明:

(1)類型名是ObjectPascal中任何有效的數(shù)據(jù)類型。

(2)變量名表中的變量與變量之間用逗號分隔開,變量與類

型名之間用冒號分隔,例如:

vari,j:Integer;//定義2個整型變量i和j

(3)當(dāng)有幾個連續(xù)的變量聲明語句時,可以不必在每個聲明

語句前都用保留字var,只需在最開始處使用var,例如:

var

x,y:real;〃定義2個實型變量x和y

k,j:integer://定義2個整型變量k和j

flag:boolean:〃定義1個邏輯型變量flag

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.4運算符和表達式

ObjectPascal中的運算符可以分為算術(shù)運算符、邏輯運

算符、關(guān)系運算符、位運算符、指針運算符和集合運算符等。

每種運算符結(jié)合其操作數(shù)的數(shù)據(jù)類型能夠?qū)崿F(xiàn)特定的功能。

而表達式是由常量、變量、數(shù)值、運算符和函數(shù)調(diào)用等

按照一定的語法規(guī)則組合起米的,可以用于確定賦給一個變

量的值、計算函數(shù)或過程的簍數(shù),或判斷一個條件結(jié)

寸O

ObjectPascal中的運算符按照優(yōu)先級的不同可以分為5級,

見表2-7。

需要注意的是,在ObjectPascal中,“and”和“or”運算

符的優(yōu)先級比關(guān)系運算符高,因此,對于表達式“avband

c<d\編譯器會首先編譯“and”運算符,由此導(dǎo)致編譯錯誤。

因此,應(yīng)該把該裝運式用小拈號括超萊,即:(avb)and(cvd,。

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

表2-7ObjectPascal中運算符的優(yōu)先級

級另1」運算符

第一級(最高級)A

第二級@not

第三級*/divmodandasshlshr

第四級+—orxor

第五級(最低級)=<><><=>=inis

另外,同一種運算符用于不同的操作數(shù)時,其作

用也可能不同,例如,“十”運算符可以用來計算兩個數(shù)字的和,

還可以用來連接兩個字符串,當(dāng)用在集合類型的運算中時,還

可以表示求兩個集合的并集,因此,必須要結(jié)合操作數(shù)來理解

運算符的作用。

按照操作數(shù)的個數(shù)不同,可以將運算符分為單目

運算符和雙目運算符兩類,其中,只有八、@、not是單目運算

符,其他都是雙目運算符。________________________________

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.4.1算術(shù)運算符

算術(shù)運算符(+、一、*、/、div、mocO都是雙目運算符,

其作用是對兩個操作數(shù)進行加、減、乘、除、整除和取模運

算。比較特殊的是和“一”運算符,它們也可以作為單

目運算符來使用,即放在操作數(shù)的前面,表示正數(shù)和負數(shù)。

需要注意區(qū)別的是”和“div”,“/”運算符用于進行浮

點除運算,其操作數(shù)既可以是整型也可以是實型,而運算結(jié)

果是實型;“div”運算符用于進行整除運算,要求兩個操作

數(shù)都是整型,運算結(jié)果為經(jīng)過四舍五入后得到的整數(shù)值;取

?!癿od”運算符也要求兩個操作數(shù)都是整型,運算結(jié)果為兩

數(shù)相除后的余數(shù)。這3個運算符都要求第二個操作數(shù)的值不

能為0。

例如:

5/2=2.55div2=25mod2=1

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語音、

2.4.2邏輯運算符

邏輯運算符(not、and、or、xor)的作用是進行

邏輯運算,其操作數(shù)類型都要求是邏輯型,運算結(jié)果也是邏

輯型。其中,not運算符的作用是邏輯取反;and運算符的作

用是邏輯與;or運算符的作用是邏輯或;xor運算符的作用是

邏輯異或。表2-8給出了邏輯運算的規(guī)則。

表2-8邏輯運算符的運算規(guī)則

操作數(shù)not(操作數(shù)

操作數(shù)2andorxor

11)

TrueTrueFalseTrueTmeFalse

TrueFalseFalseFalseTrueTrue

FalseTrueTrueFalseTrueTrue

FalseFalseTrueFalseFalseFalse

delphi程序設(shè)計基礎(chǔ)教程

第2章Delphi的偏程箱音、

在ObjectPascal中,對于由and和or組成的表達式支持

兩種求值方式,即完全求值方式和部分求值方式。

完全求值是對表達式中的每一個運算對象都進行計算,

而不管是否已經(jīng)可以得出結(jié)果。而部分求值是嚴格按照從左

到右進行計算,如果表達式已經(jīng)有了結(jié)果,則停止計算。這

種求值方式可以節(jié)省計算時間,在編寫程序時,可以將最能

決定表達式結(jié)果的運算對象放在表達式的前面。例如下面的

表達式:

(a>b)or(c<d)

當(dāng)a=5,b=3時,由于“a>b”的結(jié)果為True,因此,可以

得出表達式的結(jié)果必定為True,而不必考慮c和d的值。如果

采用部分求值的方式,則”(cvd)”就不用計算了。

delphi程序設(shè)計基礎(chǔ)教程

第章的偏移語音

1i2Delphi、

2.4.3關(guān)系運算符

關(guān)系運算符(=、<>>V、>、<=>>=)反映的是兩個操作

數(shù)之間的關(guān)系,其操作數(shù)可以是一般的數(shù)據(jù)類型,但運算結(jié)

果只能是True和False兩種邏輯型。

需要注意的是,在ObjectPascal中,判斷不等使用的運

算符是“<>",而其他語言,如C語言中,使用的是“!二,

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語含、

2.4.4位運算符

位運算符(not、and、or、xor、shl、shij的作

用是對整型數(shù)據(jù)進行按位操作,其運算結(jié)果也是整型。位運

算符的作用見表2-9。

表2-9位運算符的作用

運算符作用舉例

not按位取反notx

and按位與xandy

or按位或xory

xor按位異或xxory

shr按位右移xshry

shl按位左移xshly

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

2.4.5指針運算符

指針運算符(八、+、-、=、v>)的作用是對指針類

型的數(shù)據(jù)進行操作,各指針運算符的作用見表2-10。

表2-10指針運算符的作用

運算

作用操作數(shù)類型結(jié)果類型

A取指針地址的內(nèi)容指針指針指向內(nèi)容的類型

@返回操作數(shù)的地址地址

delphi程序設(shè)計基礎(chǔ)教程

第章的偏移語音

1i2Delphi、

2.4.6集合運算符

集合運算符(+、一、*、=、<>、in、<=>>=)的

作用是對集合類型的數(shù)據(jù)進行操作,各集合運算符的作用見

表2-11。

表2-11集合運算符的作用

運算結(jié)果類

作用操作數(shù)類型

符型

十取兩個集合的并集集合型集合型

—取兩個集合不同的元素,即差集合型集合型

*取兩個集合共同的元素,即交集合型集合型

=判斷兩個集合是否相等集合型布爾型

<>判斷兩個集合是否不等集合型布爾型

判斷左邊集合與右邊集合是否有從屬關(guān)

In集合型布爾型

v=判斷左邊集合是否是右邊集合的子集集合型布爾型

>=判斷左邊集合是否是右邊集合的母集集合型布爾型

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含一]

2.5語句

2.5.1簡單語句

常見的簡單語句有賦值語句、過程和函數(shù)調(diào)用語句以及

goto語句3種。

1.賦值語句

在ObjectPascal中賦值語句使用的賦值符號是表

示將賦值符號右邊表達式的值賦給左邊的變量,這與其他語

言中的賦值符號是不同的,例如C語言中賦值使用“二",而

在ObjectPascal中“二”是關(guān)系運算符,表示判斷是否相等。

需要注意的是,賦值符號左邊必須是變量,不能是常量

或者表達式。

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語音、

2.goto語句

通過goto語句可以在程序中非常方便地從一個地方直接

跳轉(zhuǎn)到另一個地方,一般是通過goto語句將程序的執(zhí)行轉(zhuǎn)移

到由某個特定標號標識的語句。從結(jié)構(gòu)化程序設(shè)計的角度來

考慮,盡量不要使用goto語句。

goto語句的語法格式為:

goto標號;

在使用goto語句之前,要首先聲明出現(xiàn)在goto語句中的

標號,并且聲明語句一定要與goto語句處于同一個程序塊中。

另外,不能用got。語句從一個過程跳轉(zhuǎn)到另一個過程中。過

多地使用got。語句,會使得程序在運行過程中頻繁地跳來跳

去,使整個程序變得混亂無序。建議在編程時,盡量不要使

用goto語句。

delphi程序設(shè)計基礎(chǔ)教程

第2多Delphi的偏程語含

2.5.2條件語句

條件語句通過條件檢測,判斷是否執(zhí)行該條件語句中包

含的語句。在ObjectPascal中,條件語句有兩種基本形式:

if語句和case語句。

1.if語句

if語句有兩種基本形式。

if條件表達式then語句

if條件表達式then語句1else語句2

對于前者而言,僅當(dāng)條件表達式的值為真,即條件滿足

時,語句才執(zhí)行;對于后者,當(dāng)條件表達式的值為真時,執(zhí)

行語句1,為假時,執(zhí)行語句2。

delphi程序設(shè)計基礎(chǔ)教程

?i第2津Delphi的偏程語含

【例2.4]編程實現(xiàn)如下分支功能。

"x2+2x(x>0)

y=y

L1-2X(x<0)

x,y:integer;

begin

readln(x);

ifx>=0then

y:=x*x+2*x;

else

y:=1-2*x;

writeln('y=',y);

readln;

end.

delphi程序設(shè)計基礎(chǔ)教程

jj第2章Delphi的偏程語含

注意:

(1)條件表達式的值必須是布爾類型的,結(jié)果只能為True或False。

而語句既可以是簡單語句,也可以是復(fù)合語句。

(2)在第二種形式的語句中,語句1的結(jié)尾不能有分號,否則,編

譯器會提示語法錯誤。實際上,if…then...else是一條語句,因此,不

能在語句中間添加分號。

(3)if語句可以多重嵌套,即if語句中條件為真或假時,要執(zhí)行的

語句也可以是一個語句。

2.case語句

case語句與if語句功能相似,但case語句執(zhí)行的是對一

個結(jié)果的多種分支進行判斷,由case語句中的表達式的值

來決定具體執(zhí)行哪個操作。當(dāng)if語句非常復(fù)雜的時候,可以

考慮用case語句來代替它。

delphi程序設(shè)計基礎(chǔ)教程

?j第2章Delphi的偏程語含

case語句的語法格式為:

caseSwitchExpressionof

easel:Expression1;

case2:Expression2;

■■■

caseN:Expressionn;

else

Statement;

end;

delphi程序設(shè)計基礎(chǔ)教程

j(第2章Delphi的偏彩語畬、

執(zhí)行case語句時,首先計算出SwitchExpression表達式

的值,然后判斷Sw讓chExpression表達式的值與下面的

easel?caseN的哪一個癰同,如果有相同的,則執(zhí)行該

case值后對應(yīng)的語句;如果都不相同,則執(zhí)行else之后的語

句。其中,else和它之后的語句可以省略,省略后的格式為:

caseSwitchExpressionof

easel:Expression1;

case2:Expression2;

■■■

caseN:Expressionn;

end;

delphi程序設(shè)計基礎(chǔ)教程

1?第2章Delphi的偏程語音、

注意:

(1)Sw讓chExpression應(yīng)該是一個有序類型的表達式(如

整型、字符型、布爾型、子界類型等),不能是實型或字符

串類型。

(2)caseN的值也應(yīng)該是一個有序類型的值。而且每個值

必須是常量,且必須是唯一的。

delphi程序設(shè)計基礎(chǔ)教程

?j第2章Delphi的偏程語含

【例2.5]本例說明了case語句的用法。

var

kinteger;

begin

readln(i);

caseIof

1:writeln('one');

2:writeln('two');

3:writeln('three');

else

writeln('OtherNumber');

end;

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論