《Delphi程序設(shè)計(jì)實(shí)訓(xùn)教程》課件第3章_第1頁
《Delphi程序設(shè)計(jì)實(shí)訓(xùn)教程》課件第3章_第2頁
《Delphi程序設(shè)計(jì)實(shí)訓(xùn)教程》課件第3章_第3頁
《Delphi程序設(shè)計(jì)實(shí)訓(xùn)教程》課件第3章_第4頁
《Delphi程序設(shè)計(jì)實(shí)訓(xùn)教程》課件第3章_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章ObjectPascal程序設(shè)計(jì)語言

3.1ObjectPascal語言基礎(chǔ)

3.2語句

3.3過程與函數(shù)

3.4ObjectPascal的面向?qū)ο缶幊袒A(chǔ)

3.5本章小結(jié)

3.1ObjectPascal語言基礎(chǔ)

3.1.1Pascal程序的基本組成

【例3.1】計(jì)算半徑為r的圓的面積S。

programArea; {程序首部}

const {說明部分--數(shù)據(jù)描述}

pi=3.14159;

var

s,r:real;

begin

{執(zhí)行部分}

readln(r);

s:=pi*sqr(r);

writeln('s=',s);

end.

1.程序首部

例3.1的第一行稱為程序首部。program是保留字,之后是程序名(依據(jù)“標(biāo)示符"規(guī)則自行定義),最后以分號(hào)表示程序首部結(jié)束程序主體的開始。程序首部在一個(gè)TurboPascal(僅在TurboPascal中有效)程序中并非必須出現(xiàn),它是可選的。因此,在時(shí)間有限的情況下,如果在TurboPascal環(huán)境下編程則完全可以省略程序首部。

2.說明部分

說明部分用于定義和說明程序中用到的數(shù)據(jù),依次由單元說明、標(biāo)號(hào)說明、常量說明、類型說明、變量說明、函數(shù)或過程說明組成,說明的次序不能改變,但各個(gè)部分是可選的。一個(gè)簡單的Pascal程序也可以不包含說明部分。例3.1的第二行是常量說明,第三行是變量說明。

3.執(zhí)行部分

執(zhí)行部分描述了程序要執(zhí)行的操作。執(zhí)行部分必須以一個(gè)Pascal保留字begin開始,以保留字end后跟句點(diǎn)結(jié)束,其間是一些執(zhí)行具體操作的語句,并且以分號(hào)作為語句之間的分隔符。begin和end必須成對(duì)出現(xiàn),這是一個(gè)Pascal程序所必需的。緊跟end之后的句號(hào)表示執(zhí)行部分的結(jié)束,也表示整個(gè)程序的結(jié)束。此后的任何語句都無效。Pascal規(guī)定緊隨end之前出現(xiàn)的分號(hào)允許省略。如例3.1中從begin到end都是執(zhí)行(語句)部分。

3.1.2基本字符和符號(hào)

1.基本符號(hào)

A~Za~z0~9+-*/=<><=>=<>()[]

{}:=,;.:..'^

注意:Pascal語言除了能使用以上規(guī)定的基本符號(hào)外,不得使用任何其他符號(hào)。

2.保留字

保留字在Pascal語言中具有特定的含義,在進(jìn)行程序設(shè)計(jì)時(shí)不能被重新定義或進(jìn)行它用,必須了解它的含義,以便于正確地使用,否則會(huì)造成錯(cuò)誤。ObjectPascal語言中的保留字一共有65個(gè):

ObjectPascal語言是不區(qū)分大小寫的,所以像And、AND、and等都被看做是保留字。此外,ObjectPascal語言中還定義了39個(gè)指令字(Directives),它們也具有特殊的含義,如果用戶重新定義了這些指令字,在作用域內(nèi)它們就失去了原來的意義。這些指令字為:

盡管private、protected、public、published和automated都是指令字,也應(yīng)該將它們當(dāng)作關(guān)鍵字來看待,不要定義與它們同名的標(biāo)識(shí)符。在Delphi集成開發(fā)的代碼編輯器中,關(guān)鍵字和指令字將以粗體顯示。在定義標(biāo)識(shí)符時(shí)不要定義與這些粗體顯示的關(guān)鍵字和指令字一樣。

3.標(biāo)識(shí)符

1)標(biāo)識(shí)符的定義

標(biāo)識(shí)符是用來標(biāo)識(shí)程序、過程、函數(shù)、類型、符號(hào)常量、變量、對(duì)象等的名字的符號(hào)。

ObjectPascal語言中規(guī)定,標(biāo)識(shí)符由字母A~Z、a~z、下劃線和數(shù)字0~9組成。標(biāo)識(shí)符的命名有以下3條限制:

●首字符必須是字母或下劃線,不能是數(shù)字;

●標(biāo)識(shí)符不能和保留字相同;

缺省狀況下,Delphi只認(rèn)為標(biāo)識(shí)的前255個(gè)組成字符是有意義的。

在ObjectPascal語言中,標(biāo)識(shí)符也不區(qū)分大小寫,所以標(biāo)識(shí)符Myname、MyName、myname、myName和MYNAME被認(rèn)為是同一個(gè)標(biāo)識(shí)符。總體上來說,這是Pascal的一大優(yōu)點(diǎn),因?yàn)樵诖笮懨舾械恼Z言中,許多語法錯(cuò)誤是由不正確的大小寫引起的。

Pascal語言的大小寫不敏感也有例外,如控件包中的Register過程必須以大寫字母R開始,一些API函數(shù)調(diào)用參數(shù)也必須按要求大小寫等。

在ObjectPascal語言中,標(biāo)識(shí)符也不區(qū)分大小寫,所以標(biāo)識(shí)符Myname、MyName、myname、myName和MYNAME被認(rèn)為是同一個(gè)標(biāo)識(shí)符。總體上來說,這是Pascal的一大優(yōu)點(diǎn),因?yàn)樵诖笮懨舾械恼Z言中,許多語法錯(cuò)誤是由不正確的大小寫引起的。

Pascal語言的大小寫不敏感也有例外,如控件包中的Register過程必須以大寫字母R開始,一些API函數(shù)調(diào)用參數(shù)也必須按要求大小寫等。

保持大寫使用的一致性是值得提倡的好習(xí)慣,盡量保持大寫使用的一致性,可以提高代碼的可讀性。一個(gè)常用的方法是將每個(gè)標(biāo)識(shí)符的第一個(gè)字母大寫;標(biāo)識(shí)符若由幾個(gè)詞組合而成(中間不能插入空格),每個(gè)詞的第一個(gè)字母應(yīng)大寫,例如:

MyLongIdentifier

MyVeryLongAndAlmostStupidIdentifier

保持大寫使用的一致性是值得提倡的好習(xí)慣,盡量保持大寫使用的一致性,可以提高代碼的可讀性。一個(gè)常用的方法是將每個(gè)標(biāo)識(shí)符的第一個(gè)字母大寫;標(biāo)識(shí)符若由幾個(gè)詞組合而成(中間不能插入空格),每個(gè)詞的第一個(gè)字母應(yīng)大寫,例如:

MyLongIdentifier

MyVeryLongAndAlmostStupidIdentifier

2)標(biāo)識(shí)符的分類

(1)標(biāo)準(zhǔn)標(biāo)識(shí)符:指Pascal語言預(yù)先定義的標(biāo)識(shí)符,具有特殊含義。

以下列舉了Pascal語言部分常用的標(biāo)準(zhǔn)標(biāo)識(shí)符:

標(biāo)準(zhǔn)常量FalseMaxintTrue

標(biāo)準(zhǔn)類型BooleanCharRealInteger

標(biāo)準(zhǔn)函數(shù)AbsArctanChrCosEofEolnExpLnOddOrdPredRoundSinSqrSqrtSuccTrunc

標(biāo)準(zhǔn)過程DisposeGetNewPackPagePutReadReadlnResetRewriteUnpackWriteWriteln

標(biāo)準(zhǔn)文件

InputOutput

(2)用戶自定義標(biāo)識(shí)符:由用戶根據(jù)需要定義。

●選用的標(biāo)識(shí)符不能和保留字相同。

語法上允許預(yù)定義的標(biāo)準(zhǔn)標(biāo)識(shí)符作為用戶定義的標(biāo)識(shí)符使用,但最好還是不要用。

3.1.3常量與變量

1.常量

(1)常量:在某個(gè)程序的整個(gè)過程中其值不變的量。

(2)常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:

CONST

常量名=常量值;

...

常量名=常量值;根據(jù)常量定義的語法,下面的常量定義是有效的:

CONST

pi=3.14;

a=12;

常量的類型由定義它的常量值的類型決定。例如上述常量的定義中,隱含說明a是整型,r是實(shí)型。

(3)常量定義部分必須以保留字const開頭,可以包含一個(gè)或幾個(gè)常量定義,而且每個(gè)常量均以分號(hào)結(jié)束。

(4)Pascal類型常量。類型常量又稱變量常數(shù),它是一個(gè)全局變量,只不過在編譯時(shí)用指定的值預(yù)初始化,使程序在開始運(yùn)行時(shí)具有指定的初值,在運(yùn)行中仍然可修改。它是Pascal的一個(gè)擴(kuò)充特性,類型常量的定義與標(biāo)準(zhǔn)Pascal規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式為:

CONST

常量名:簡單類型=值;

【例3.2】

CONST

COUNTER:INTEGER=0;

FLAG:BOOLEAN=true;

INDEX:0..100=0;

LEFT:INTEGER=40;

2.變量

(1)變量:在某個(gè)程序中的運(yùn)行過程中其值可以發(fā)生改變的量。

(2)變量說明:變量說明出現(xiàn)在說明部分。它的語法格式是:

VAR

變量名:類型;

...

變量名:類型;

其中,保留字VAR表示開始一個(gè)變量說明部分。變量名是一個(gè)用逗號(hào)隔開的標(biāo)識(shí)符序列,冒號(hào)后面的類型是變量的類型,每個(gè)變量說明均以分號(hào)結(jié)束。

根據(jù)變量定義的語法,下面的變量定義是有效的:

VAR

A,B,C:INTEGER;

M,N:REAL;

注意:變量名不允許重復(fù)說明。

【例3.3】

VAR

I,J,K:INTEGER;

A,K:REAL;

M,N,I:INTEGER;

其中存在兩個(gè)標(biāo)識(shí)符重復(fù)說明的錯(cuò)誤:變量I和K各被重復(fù)說明了兩次。

3.1.4數(shù)據(jù)類型

數(shù)據(jù)是程序設(shè)計(jì)的一個(gè)重要內(nèi)容,其重要特征——數(shù)據(jù)類型確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運(yùn)算。

Pascal提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以分為三大類:簡單類型、構(gòu)造類型和指針類型。其中簡單類型可以分為標(biāo)準(zhǔn)類型(整型、實(shí)型、字符型和布爾型)和自定義類型(枚舉型和子界型),構(gòu)造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類型。這些數(shù)據(jù)類型中除了指針類型是動(dòng)態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù)據(jù)類型中簡單類型都是有序類型,除了實(shí)型以外的簡單類型都是順序類型。所謂順序類型,就是它們的值不僅是有序的而且還有順序號(hào)。

1.簡單類型

1)整數(shù)類型

整數(shù)類型簡稱整型,用標(biāo)準(zhǔn)類型名INTEGER來表示。TurboPascal支持五種整型,它們是shortint(短整型)、integer(整型)、longint(長整型)、byte(字節(jié)型)和word(字類型),每一種類型規(guī)定了相應(yīng)的整數(shù)取值范圍以及所占用的內(nèi)存字節(jié)數(shù)(見表3-1)。

表3-1Pascal語言中整型變量所分配的內(nèi)存字節(jié)數(shù)

及其數(shù)值的表示范圍

2)實(shí)數(shù)類型

實(shí)數(shù)類型簡稱實(shí)型,用標(biāo)準(zhǔn)類型名REAL來表示。

Pascal支持五種實(shí)型,它們是real(基本實(shí)型)、single(單精度實(shí)型)、double(雙精度實(shí)型)、extended(擴(kuò)展實(shí)型)和comp(裝配實(shí)型),每一種類型規(guī)定了相應(yīng)的實(shí)數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達(dá)到的精度(見表3-2)。

表3-2Pascal語言中實(shí)型變量所分配的內(nèi)存字節(jié)數(shù)

及其數(shù)值的表示范圍

實(shí)數(shù)有兩種表示方式。一種是日常習(xí)慣使用的含有小數(shù)點(diǎn)的十進(jìn)位表示法,例如-12.5,0.0001,-0.25,10.0。另一種是符點(diǎn)表示法,又叫科學(xué)表示法,例如

9.1e-28表示9.1*10-28,-1e-7表示-1*10-7。

3)布爾型

布爾類型又稱邏輯型,用標(biāo)準(zhǔn)類型名BOOLEAN來表示。布爾型的值只有兩個(gè):False(布爾假)和True(布爾真),并且False可用0表示,True可用1表示。False和True都是預(yù)定義常數(shù)標(biāo)識(shí)符,可以直接用于布爾類型數(shù)據(jù)的運(yùn)算中,并且規(guī)定True>False。

在程序設(shè)計(jì)語言里,布爾值的產(chǎn)生與條件的判斷是聯(lián)系在一起的。關(guān)系運(yùn)算符的兩邊可以是整型或?qū)嵭蛿?shù)據(jù),也可以是同為字符型或同為布爾型的數(shù)據(jù),運(yùn)算的結(jié)果產(chǎn)生一個(gè)布爾值。關(guān)系運(yùn)算表達(dá)的是一種二值條件,即要么成立,要么不成立,例如,-3>-2的取值是False,3>2的取值是True。

4)字符型

字符型用標(biāo)準(zhǔn)類型名CHAR來表示。字符型數(shù)據(jù)對(duì)象的值是系統(tǒng)內(nèi)定的字符集中的一個(gè)字符。字符型必須用單引號(hào)括起來,字母作為字符型時(shí),大小寫是不等價(jià)的,并且字符型只允許單引號(hào)中有一個(gè)字符。

5)枚舉類型

枚舉類型是一個(gè)以標(biāo)識(shí)符標(biāo)識(shí)的有序整型常數(shù)的集合,這些常數(shù)是該類型變量可取的合法值。聲明枚舉類型的語法如下:

typetypeName=(val1,...,valn);

其中,typeName和vali是有效的標(biāo)識(shí)符,typeName是枚舉類型,vali是枚舉量的標(biāo)識(shí)符。例如:

typeTWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

這些枚舉量不能再定義為其他標(biāo)識(shí)符。當(dāng)用Ord函數(shù)分別對(duì)其取值時(shí),將得到0、1、2、3、4、5、6。

在默認(rèn)的情況下,枚舉值是從0開始的有序整數(shù),在實(shí)際編程的過程中,可以越過這種限制,根據(jù)需要指定標(biāo)識(shí)符表中的值。例如:

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

一些枚舉類型的值只有兩種可能的值,如下聲明:

typeSampleEnum=(val1,val2,val3=0);

SampleEnum中val1、val2、val3的Ord函數(shù)值分別為0、1、0,即Ord(val1)與Ord(val3)相同。

枚舉量的取值范圍為0~255。

6)子界類型

子界類型的聲明形式如下:

type

類型標(biāo)識(shí)符=上界值..下界值;

其中,上、下界值是某種已定義的有序類型的值,上界值小于或等于下界值。例如:

type

TAge=18..60; //TAge是一個(gè)整型的子界類型

type

Caps='A'..'Z';//Caps是一個(gè)字符型的子界類型

子界類型變量的值是有序的,對(duì)其進(jìn)行增/減量操作都要在其定義范圍內(nèi)。

2.構(gòu)造類型

1)數(shù)組類型

數(shù)組類型數(shù)據(jù)表示的是同種類型數(shù)據(jù)的集合。數(shù)組類型的數(shù)據(jù)是排列有序的,每個(gè)數(shù)據(jù)元素都有一個(gè)唯一的索引號(hào)。與集合類型不同的是,數(shù)組類型的數(shù)據(jù)可以重復(fù)。數(shù)組類型分為靜態(tài)數(shù)組和動(dòng)態(tài)數(shù)組。

(1)靜態(tài)數(shù)組:在聲明時(shí)指定了數(shù)組的大小。

定義靜態(tài)數(shù)組的語法形式如下:

type

數(shù)組類型標(biāo)識(shí)符號(hào)=array[indexType1,...,indexTypen]ofbaseType;

其中,indexType是有序類型,indexType通常是以Integer為子界的,也可以是其他有序類型的子界;baseType聲明元素的數(shù)據(jù)類型;數(shù)組由同一類型的數(shù)據(jù)元素組成。

例如:

type

Tarr1=Array[1..10]ofInteger;

Tarr2=Array[1..3,1..5]ofChar;

var

a:Tarr1; //聲明變量a是Tarr1類型數(shù)組

b:Tarr2; //聲明變量b是Tarr2類型數(shù)組

也可以聲明變量時(shí)直接定義數(shù)組的類型,如:

vara:Array[1..10]ofInteger;

數(shù)組元素的訪問是通過數(shù)組名后面加上方括號(hào)和下標(biāo)值來訪問的,如a[1]:=10;。

(2)動(dòng)態(tài)數(shù)組:在定義時(shí)并沒有確定數(shù)組的大小或長度,而是在訪問之前用SetLength過程為數(shù)組動(dòng)態(tài)或重新分配其存儲(chǔ)空間。

定義動(dòng)態(tài)數(shù)組的語法形式如下:

Var數(shù)組類型標(biāo)識(shí)符:arrayofbaseType;

例如:

varDynArr:arrayofInteger; //聲明DynArr為元素是整型的動(dòng)態(tài)數(shù)組

也可以先定義類型,再聲明變量,如:

typeTdynIntArr=arrayofinteger;

varDynArr:TdynIntArr;語句SetLength(DynIntArr,10);為動(dòng)態(tài)數(shù)組DynIntArr分配10個(gè)元素的存儲(chǔ)空間,下標(biāo)從0到9(動(dòng)態(tài)數(shù)組的下標(biāo)總是從0開始)。如要釋放動(dòng)態(tài)數(shù)組占用的存儲(chǔ)空間,可以將nil賦值給該動(dòng)態(tài)數(shù)組變量,或調(diào)用過程SetLength(DyIntArr,0)實(shí)現(xiàn)。

多維動(dòng)態(tài)數(shù)組通過使用嵌套的“arrayof...”結(jié)構(gòu)實(shí)現(xiàn),例如:

typeTGrid=arrayofarrayofString;//定義二維動(dòng)態(tài)字符串?dāng)?shù)組類型Tgrid

2)集合類型

格式:setofbaseType;

其中baseType是集合中元素的類型或值域。

ObjectPascal中規(guī)定了基類型只能是不超過256個(gè)有序值的集合,集合的元素的序數(shù)值必須介于0和255之間。例如:

type

TsetA=setofInteger; //錯(cuò)誤

TsetB=setof255..300; //錯(cuò)誤

TsetC=setofWideChar; //錯(cuò)誤

TsetD=setof10..50; //正確

TsetE=setofchar; //正確

3)記錄類型

記錄類型描述一組不同類型的數(shù)據(jù)元素集合,每個(gè)數(shù)據(jù)元素稱為“域”。在定義一個(gè)記錄類型時(shí),需要指定每個(gè)數(shù)據(jù)域的數(shù)據(jù)類型。定義記錄類型的語法如下:

type

記錄類型標(biāo)識(shí)符=record

域1:類型1;

域2:類型2;

域n:類型n;

end;

例如:

type

TPerson=record

name:String[10];

id:String[15];

sex:Boolean;

age:Byte;

height,weight:Real;

end;

3.指針類型

指針類型的變量存儲(chǔ)的是內(nèi)存地址,利用指針可以靈活地訪問內(nèi)存中的數(shù)據(jù)。

指針類型的聲明格式如下:

type指針類型標(biāo)識(shí)符=^數(shù)據(jù)類型;

指針可以指向任何數(shù)據(jù)類型。System和SysUtils單元聲明了許多常用的標(biāo)準(zhǔn)指針。

(1)指針取值運(yùn)算符^:取指針(地址)所指向單元的數(shù)據(jù)。

(2)指針的關(guān)系運(yùn)算符<、<=、>、>=、=、<>:判斷兩個(gè)同種類型的指針的位置大小。例如,P1、P2指針,P1在P2之前,則P2>=P1為True,P1<>P2為True。

(3)移動(dòng)指針運(yùn)算:調(diào)用過程Inc(指針類型變量,偏移量N),使指針依據(jù)其所指數(shù)據(jù)類型往后偏移N個(gè)數(shù)據(jù)單元;調(diào)用過程Dec(指針類型變量,偏移量N),使指針往前偏移N個(gè)數(shù)據(jù)單元。

4.字符串類型

和傳統(tǒng)Pascal語言不同,ObjectPascal語言專門提供了預(yù)定義的字符串?dāng)?shù)據(jù)類型,可以方便地表示字符串,實(shí)現(xiàn)存儲(chǔ)、處理字符串等操作。

字符串類型(String)主要包括表3-3中的字符串類型。

表3-3ObjectPascal語言中的字符串類型

WideString和AnsiString類似,只不過是基于WideChar字符集(Unicode字符集),用來存儲(chǔ)Unicode字符。ObjectPascal語言引入這種類型,主要是為了支持OLE編程。

可以用如下的方式來聲明相應(yīng)的字符串變量:

Var

Str1:ShortString;

Str2:AnsiString;

Str2:WideString;但是在一般情況下,當(dāng)我們聲明一個(gè)變量為字符串類型時(shí)使用String保留字。例如:

Var

Str:String;

缺省時(shí),String類型就是AnsiString類型。在Delphi中,眾多組件的屬性使用了String類型,如每個(gè)組件的Caption屬性、Edit組件中的Text屬性等。同時(shí),Delphi中封裝了眾多的String類型字符串的操作過程和函數(shù),因此應(yīng)盡量使用String類型。

3.1.5運(yùn)算符和優(yōu)先級(jí)

1.運(yùn)算符

1)算術(shù)運(yùn)算符

算術(shù)運(yùn)算符如表3-4所示。

表3-4算

術(shù)

運(yùn)

【例3.4】

3/4結(jié)果是實(shí)數(shù)0.75

3.0/4.0結(jié)果是實(shí)數(shù)0.75

3DIV4結(jié)果是整數(shù)0

3MOD4結(jié)果是整數(shù)3

6/2

結(jié)果是實(shí)數(shù)

3.02)邏輯運(yùn)算符

表3-5邏

運(yùn)

表3-6布爾運(yùn)算規(guī)則表

3)關(guān)系運(yùn)算符

表3-7關(guān)

運(yùn)

【例3.5】

5>6 結(jié)果是False

8>6 結(jié)果是True

‘A’=‘a(chǎn)’ 結(jié)果是

False

3)類運(yùn)算符

類運(yùn)算符as和is對(duì)類或?qū)嵗M(jìn)行操作。

2.優(yōu)先級(jí)

各種運(yùn)算符的優(yōu)先級(jí)如表3-8所示。

表3-8各種運(yùn)算符的優(yōu)先級(jí)

3.表達(dá)式

(1)算術(shù)表達(dá)式。算術(shù)表達(dá)式是由算術(shù)運(yùn)算符連接常量、變量、函數(shù)的式子。算術(shù)表達(dá)式中各個(gè)運(yùn)算符的次序?yàn)椋?)→函數(shù)→*,/,DIV,MOD→+,-。

(2)布爾表達(dá)式。Pascal提供給布爾表達(dá)式的基本操作有邏輯運(yùn)算和關(guān)系運(yùn)算。

3.2語

3.2.1賦值語句

賦值語句是最簡單的語句,其一般形式為:

變量:=表達(dá)式

賦值語句的作用是計(jì)算表達(dá)式的值,并賦給變量。對(duì)于任何一個(gè)變量必須首先賦值,然后才能引用,否則,未賦初值的變量將以一個(gè)隨機(jī)值參與運(yùn)算。另外,賦值號(hào)兩邊的類型必須相同,但表達(dá)式值為整數(shù)時(shí),它可自動(dòng)化為實(shí)型后賦給該實(shí)型變量,即符合賦值相容。

【例3.5】關(guān)于賦值的例子——互換a、b變量的值。

vara,b:integer;

...

a:=3;b:=2;

a:=a+b;

b:=a-b;

a:=a-b3.2.2復(fù)合語句

復(fù)合語句是由若干語句組成的序列,語句之間用分號(hào)“;”隔開,并且以begin和end括起來,作為一條語句。復(fù)合語句的一般形式為:

begin

語句1;

語句2;

...

語句n;

end

【例3.6】變量值的交換。

programjiaohuan;

var

a,b,t:integer;

begin

a:=10;b:=20;

begin

t:=a;

a:=b;

b:=t;

end;

writeln(‘a(chǎn)=’,a,‘b=’,b){輸出a,b的值}

end;

end.3.2.3控制語句

ObjectPascal的控制語句有if和case兩個(gè)。

1.if語句

if語句是由一個(gè)布爾表達(dá)式和兩個(gè)供選擇的操作序列組成的。if語句運(yùn)行時(shí)根據(jù)布爾表達(dá)式的值,選取其中之一的操作序列執(zhí)行。有兩種形式的if語句:

(1)if布爾表達(dá)式then語句;

(2)if布爾表達(dá)式then語句1

else語句2;

當(dāng)布爾表達(dá)式的值為真時(shí),執(zhí)行then后面的語句;值為假時(shí)有兩種情況:要么什么也不做,要么執(zhí)行else后面的語句。注意else前面沒有分號(hào),因?yàn)榉痔?hào)是兩個(gè)語句之間的分隔符,而else并非語句。如果在該處添了分號(hào),則在編譯的時(shí)候就會(huì)認(rèn)為if語句到此結(jié)束,而把else當(dāng)作另一句的開頭,輸出出錯(cuò)信息。

【例3.7】求y=f(x),當(dāng)x>0時(shí),y=1;當(dāng)x=0時(shí),y=0;當(dāng)x<0時(shí),y=-1。

programlianxi;

varx,y:real;

begin

ifx>0theny:=1;

ifx=0theny:=0;

ifx<0theny:=-1;

writeln('y=',y);

end.【例3.8】當(dāng)x>0時(shí),計(jì)算x*x,并且輸出x和x*x。

programlianxi2;

varx,x1:real;

begin

readln('x=',x); {輸入x的值}

ifx>0then

begin

x1:=x*x;

writeln('x*x=',x1);

writeln('x=',x);

end;

else

writeln('error');

end.

2.case語句

case語句是由一個(gè)表達(dá)式和眾多可選擇的操作序列組成的。運(yùn)行時(shí),根據(jù)表達(dá)式的求值結(jié)果,在眾多的分支中選取一個(gè)分支執(zhí)行。其形式為:

case表達(dá)式of

常量1:語句1;

常量2:語句2;

...

常量n:語句n;

else語句n+1;{可選項(xiàng)}

end;表達(dá)式只能是順序類型(除了實(shí)型以外的簡單類型),其值必須唯一確定并且和表達(dá)式類型相同。case語句執(zhí)行和表達(dá)式值相匹配的case常數(shù)所指向的那條語句,如果沒有相匹配的值,則執(zhí)行else部分(如果有的話)或者什么也不做。在else前面的語句末尾有分號(hào),這是和if語句不同的。每一個(gè)常量是一個(gè)或多個(gè)用逗號(hào)分開的、具有相同類型的常數(shù)值。

【例3.9】根據(jù)學(xué)生的成績給予相應(yīng)的等級(jí),對(duì)應(yīng)關(guān)系如下:

90—100A

80—89B

60—79C

60以下D

programchengji;

var

s:real;

ch:char;

begin

write('inputthescore:');

readln(s);

if(s>=0)and(s<=100)then

casesdiv10of

10,9:ch:='B';

8:ch:ch='B';

7,6:ch='C';

elsech:='D';

end;

writeln(s,'--',ch);

end.3.2.4循環(huán)語句

1.while語句

while語句用于“當(dāng)滿足某一條件時(shí)進(jìn)行循環(huán)”的情況。while語句的語法格式為:

while布爾表達(dá)式do語句;

do后面的語句為循環(huán)體,布爾表達(dá)式起循環(huán)條件控制的作用。只要布爾表達(dá)式的值為True便重復(fù)地執(zhí)行循環(huán)體,直到該布爾表達(dá)式的值為False時(shí)才結(jié)束循環(huán)。也就是說while循環(huán)屬于當(dāng)型循環(huán)。為了能使while重復(fù)終止,循環(huán)體中一定要有影響布爾表達(dá)式的操作,否則該循環(huán)就是一個(gè)死循環(huán)。

【例3.10】計(jì)算從0到某個(gè)數(shù)之間所有奇數(shù)的和。

programjishu;

varodds,limit,sum:integer;

begin

readln(limit);

sum:=0;

odds:=1;

whileodds<=limitdo

begin

sum:=sum+odds;

odds:=odds+2;

end;

writeln(sum);

end.

2.repeat語句

repeat語句用于“重復(fù)執(zhí)行循環(huán)體,一直到指定的條件為真時(shí)為止”。語法格式為:

repeat

語句1;

語句n;

until布爾表達(dá)式;

repeat重復(fù)基本上有和while重復(fù)一樣的描述循環(huán)計(jì)算的能力,但有一些不同:在repeat語句的結(jié)構(gòu)中,布爾表達(dá)式求值在計(jì)算操作之后;而在while語句中,布爾表達(dá)式求值在計(jì)算操作之前,也就是說repeat至少執(zhí)行一次循環(huán)體。while語句循環(huán)體語句只能是一條語句,因此,當(dāng)重復(fù)動(dòng)作包含多個(gè)語句時(shí),要用begin和end使它變成一個(gè)復(fù)合語句。而repeat語句的保留字repeat和until能夠起語句括號(hào)的作用,可以包含多個(gè)語句而無須begin和end。repeat語句中,當(dāng)布爾表達(dá)式為True時(shí)結(jié)束循環(huán);而while語句中,當(dāng)表達(dá)式為False時(shí)才結(jié)束循環(huán)。當(dāng)描述由計(jì)算操作后的情況確定重復(fù)是否繼續(xù)進(jìn)行的計(jì)算時(shí),通常用repeat語句描述。

【例3.11】用repeat語句編寫求s=1+2+3+...+100的程序片段為:

s:=0;

n:=1;

repeat

s:=s+n;

n:=n+1;

untiln>100;

3.for語句

for語句用來描述已知重復(fù)次數(shù)的循環(huán)結(jié)構(gòu)。for語句有兩種形式:

(1)for控制變量:=初值to終值do語句;

(2)for控制變量:=初值downto終值do語句;

第一種形式的for語句是遞增循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否小于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動(dòng)將控制變量的值改為它的后繼值,并重新判斷是否小于或等于終值。當(dāng)控制變量的值大于終值時(shí),退出for循環(huán),執(zhí)行for語句之后的語句。第二種形式的for語句是遞減循環(huán)。首先將初值賦給控制變量,接著判斷控制變量的值是否大于或等于終值,若是,則執(zhí)行循環(huán)體,在執(zhí)行了循環(huán)體之后,自動(dòng)將控制變量的值改為它的前趨值,并重新判斷是否大于或等于終值。當(dāng)控制變量的值小于終值時(shí),退出for循環(huán),執(zhí)行for語句之后的語句。for語句中的初值、終值、控制變量的數(shù)據(jù)都必須是順序類型。當(dāng)初值和終值確定后,重復(fù)的次數(shù)就確定不變了,并且控制變量在重復(fù)語句內(nèi)不能施加任何賦值操作。

【例3.12】計(jì)算1+2+3+...+99+100的值。

programjia;

varn,sum:integer;

begin

sum:=0;

fori:=1to100do

sum:=sum+i;

writeln(sum);

end.以上程序還可以寫成如下形式:

programjia;

varn,sum:integer;

begin

sum:=0;

fori:=100downto1do

sum:=sum+i;

writeln(sum);

end. 3.3過

數(shù)

3.3.1過程

給某個(gè)語句序列組成的子程序賦予一個(gè)適當(dāng)?shù)拿?。程序中凡是需要出現(xiàn)這個(gè)語句序列的地方,都可以簡單地寫上子程序的名字。這種完成一個(gè)操作的子程序稱為過程;子程序的定義稱為過程說明。過程說明由過程首部和過程體組成,其形式如下:

procedure過程名(形式參數(shù)列表);{過程首部}

說明部分;

begin

語句1;

語句2;

...

語句n;

end;{語句結(jié)束}

end;{過程結(jié)束}

【例3.13】輸出兩個(gè)數(shù)中最大值的過程。

procedurelargest(a,b:integer);

begin

ifa>bthenwriteln(a)

elsewriteln(b);

end;

上面largest過程由兩個(gè)類型為整型的形式參數(shù)(a,b)向過程傳入兩個(gè)需要比較大小的數(shù)。

3.3.2函數(shù)

假如調(diào)用一個(gè)過程,結(jié)果只產(chǎn)生一個(gè)值,我們也可以把過程說明寫成函數(shù)說明。函數(shù)說明形式如下:

function函數(shù)名(形式參數(shù)列表):函數(shù)類型;{函數(shù)首部}

說明部分;

begin

語句1;

語句2;

...

語句n;

end;{語句結(jié)束}

end;{函數(shù)結(jié)束}過程執(zhí)行的結(jié)果可以通過變量返回一個(gè)或多個(gè)數(shù)據(jù)值,還可以完成一系列操作。概言之,過程執(zhí)行的結(jié)果是產(chǎn)生一個(gè)效果,而函數(shù)返回一個(gè)函數(shù)值。過程調(diào)用是一句獨(dú)立的語句,而函數(shù)的調(diào)用方式出現(xiàn)在表達(dá)式中。

【例3.14】計(jì)算|X|的函數(shù)。

functionjdz(x:real):real;

varz:integer;

begin

ifx>=0thenz:=x

elsez:=-x;

end;

jdz:=z;

end;第一行為函數(shù)首部,它指明函數(shù)名、函數(shù)形參信息和函數(shù)值的數(shù)據(jù)類型。如上面求x絕對(duì)值的函數(shù)首部,函數(shù)名是jdz;它有一個(gè)值參數(shù)x為實(shí)型;函數(shù)值的數(shù)據(jù)類型為實(shí)型。Pascal規(guī)定一個(gè)函數(shù)只能求出一個(gè)簡單值,所以函數(shù)值的類型只能是任何非結(jié)構(gòu)類型。

除函數(shù)首部和過程首部的句法略有差別外,函數(shù)體和過程體完全相同。但函數(shù)體中至少要有一條語句對(duì)函數(shù)名賦值,如函數(shù)jdz中有語句“jdz:=z”。函數(shù)每次求值至少要執(zhí)行這樣一條語句,為計(jì)算求得一個(gè)值,返回時(shí)就把這個(gè)值帶回調(diào)用的地方。

3.4ObjectPascal的面向?qū)ο缶幊袒A(chǔ)

3.4.1對(duì)象與類的定義

面向?qū)ο缶幊淌钱?dāng)前流行的編程技術(shù),它解決了傳統(tǒng)面向過程編程帶來的許多問題。面向過程編程所有的功能都包含在幾個(gè)代碼模塊中(常常是一個(gè)代碼模塊)。而使用OOP(面向?qū)ο蟪绦蛟O(shè)計(jì))技術(shù),常常要使用許多代碼模塊,每個(gè)模塊都提供特定的功能,每個(gè)模塊都是獨(dú)立的。這種模塊編程方法提供了非常大的多樣性,大大增加了代碼的重用機(jī)會(huì)。

例如,我們可以將計(jì)算機(jī)程序考慮為一個(gè)房子,如果使用面向過程編程,這棟房子就是一個(gè)單元,如果你想為房子換個(gè)門窗,就必須替換整個(gè)單元,重新建造一棟房屋。如果使用OOP技術(shù),就可以在建造時(shí)將房屋設(shè)計(jì)成一個(gè)個(gè)獨(dú)立的模塊(對(duì)象)。如果需要換玻璃,只需要選擇門窗,調(diào)換玻璃即可;如果需要改變風(fēng)格,只需要重新調(diào)整房屋的顏色和布局即可。這就是OOP編程的優(yōu)勢(shì)。

可以說,對(duì)象是OOP技術(shù)的關(guān)鍵。那么,什么是對(duì)象呢?

對(duì)象是OOP應(yīng)用程序的一個(gè)重要組成部件,這個(gè)組成部件封裝了部分應(yīng)用程序,這部分應(yīng)用程序可以是幾個(gè)過程、數(shù)據(jù)或更抽象的實(shí)體。

簡單來說,對(duì)象是數(shù)據(jù)和代碼封裝的統(tǒng)一體,對(duì)象非常類似于前面介紹的記錄類型的變量。但與記錄類型不同的是,對(duì)象不但能夠包含數(shù)據(jù)成員(字段),還能夠包含函數(shù)和過程(方法),這些數(shù)據(jù)和方法被統(tǒng)稱為類的成員。

Delphi中的對(duì)象是從類型中創(chuàng)建的,就像前面的變量一樣。對(duì)象的類型在OOP中有一個(gè)特殊的名稱:類。對(duì)象與類是OOP中極其重要的兩個(gè)概念,要注意,類和對(duì)象是兩個(gè)完全不同的東西,它們之間的關(guān)系就像類型與變量的關(guān)系。

下面介紹對(duì)象中的幾個(gè)基本概念。

●字段:字段就是對(duì)象中的數(shù)據(jù)成員,它可以是一組任何Delphi支持的類型變量的集合,比如integer、string、數(shù)組等。字段用來標(biāo)志對(duì)象的狀態(tài),因?yàn)橥粋€(gè)類的不同對(duì)象可能在屬性和字段中存儲(chǔ)了不同的值。在這一點(diǎn)上它與記錄類型的變量是一致的。

屬性:屬性和字段一樣,都可以訪問對(duì)象中包含的數(shù)據(jù)。字段和屬性都可以輸入,所以可以把信息存儲(chǔ)在字段和屬性中。同時(shí),屬性與字段又是有差異的,屬性不能直接訪問數(shù)據(jù)。有些屬性是只讀的,只能查看它們的值,而不能改變它們。

●方法:方法是用于表示對(duì)象中的過程或函數(shù),它用于訪問對(duì)象的功能。與字段和屬性一樣,方法可以是共有的或私有的,從而根據(jù)需要限制外部的訪問。

●對(duì)象的生命周期:每個(gè)對(duì)象都有一個(gè)明確定義的生命周期,即從使用類定義開始一直到刪除它為止。

實(shí)際上,Delphi中幾乎所有東西都是對(duì)象,盡管有時(shí)它們處在Delphi完美的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論