




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第第2章章 object pascal語言的語法基礎(chǔ)語言的語法基礎(chǔ)2.1 符號集符號集2.2 語句語句2.3 常用函數(shù)與過程常用函數(shù)與過程2.4 異常處理異常處理2.5 小結(jié)小結(jié)習(xí)題二習(xí)題二2.1 符 號 集任何一種程序設(shè)計語言都具有自己的符號集。符號集由字母、數(shù)字、特殊字符、關(guān)系運算符、賦值運算符等組成。2.1.1 字符集字符集object pascal語言的字符集使用的是ascii碼的字符集,它包括英文字母、數(shù)字、特殊字符和字符組合作為特殊符號等。1英文英文包括26個大小寫英文字母,即“az”和“az”。2數(shù)字數(shù)字包括09這10個數(shù)字。3特殊字符除了英文字母和數(shù)字外的其他字符都屬于特殊字符
2、。(1)可見的特殊字符。 1)單個字符作為特殊符號:如+ - * / # $ & ( ) = : ; .。 2)字符組合作為特殊符號:是指由兩個字符組成并表示一定的特殊意義,如/ = := (. .) “” (* *)。(2)不可見的特殊字符??崭褡址╝scii碼值為32)和不可見的ascii控制字符(ascii碼值為031),常見的有“enter”符,其ascii碼值為13。其中,有些字符是等價的,例如:“”等價于“(*”,“”等價于“*)”,“”等價于“(”,“”等價于“)”。注意:(1)object pascal語言對英文字母的大小寫不敏感,即“a”等價于“a”,但是字符串中的
3、大小寫字母應(yīng)該區(qū)分清楚。一般是將標識符的首字母大寫,其余的小寫。(2)! “ % ? _ | 不屬于特殊字符。2.1.2 標識符標識符標識符(identifiers)是用來表示常量、常數(shù)、類型、屬性、過程、函數(shù)、單元和程序等語法成分的符號。標識符分為標準標識符和用戶自定義標識符兩類。1標準標識符標準標識符具有一定的意義,是事先分配給標準類型、標準常量、標準過程、標準函數(shù)和標準文件使用的標識符。(1)標準類型:integer,string,char。(2)標準常量:true,false。(3)標準過程:get,pack,put。(4)標準函數(shù):abs,spr,sin,cos,date。(5)標準
4、文件:output,input。2用戶自定義標識符用戶根據(jù)程序的需要可以自定義標識符,如常量、變量、過程和函數(shù),用戶自定義標識符須注意以下幾點:(1)必須由字母或者下劃線開頭,后跟字母、數(shù)字或者下劃線。(2)標識符的長度可以是任意的,但只有前255個字符有效。(3)標識符中不允許有空格符。(4)標識符的定義盡可能地避免與標準標識符相同,不能與保留字相同。正確的標識符:d122,d122d,_122ddd,_dd_122和dd_122等。錯誤的標識符:122dd,122_dd,dd 122,dd122和dd等。2.1.3 保留字與命令符保留字與命令符保留字與命令符是delphi保留的完成特定功能
5、的字符串。1保留字保留字是系統(tǒng)規(guī)定的具有特殊意義、特殊用途的字符串,它不能被用戶重新定義或者作為其他標識符使用。object pascal語言中的保留字如表2.1所示。表2.1 object pascal語言中的保留字除了上述的保留字外,在對象定義類型時,private,protected,public,published和automated也可作為保留字,而其他情況下作為命令符。2命令符命令符又稱為指令字。命令符和保留字的區(qū)別是命令符只有在特殊的情況下才有意義,一般情況下可以被用戶定義為變量使用,程序不會出現(xiàn)錯誤,但是程序的條理不清晰。object pascal語言中的命令符如表2.2所示。
6、表2.2 object pascal語言中的命令符2.1.4 常量和變量常量和變量在一段程序中,有兩種不同類型的數(shù)據(jù),即常量和變量。它們的區(qū)別是在程序執(zhí)行過程中其值是否發(fā)生改變。1常量常量是在程序執(zhí)行過程中其值一直保持不變的量。使用常量的好處是代碼簡潔、修改代碼容易。常量可分為直接常量、符號常量和類型常量。(1)直接常量:在程序中直接引用的常數(shù),如整型常數(shù)、實型常數(shù)、字符型常數(shù)、字符串型常數(shù)和布爾型常數(shù)。 1)整型常數(shù)即整數(shù),包括正整數(shù)、負整數(shù)和零。如2005,+2005,2005。 2)實型常數(shù)即實數(shù),包括定點實數(shù)和浮點實數(shù)。定點實數(shù)即帶有小數(shù)點形式的實數(shù),如0.005,0.325,25.3
7、2,+25.32,0.0;浮點實數(shù)即以科學(xué)計數(shù)形式表示的實數(shù),如5.68e13,+2.65e+3, 6.255e5。 3)字符型常數(shù)是由單撇號“”括起的字符,如f ,f,2,#。 4)字符串型常數(shù)是由單撇號“”括起的字符串,如delphi,delphi 8.0和程序設(shè)計。 5)布爾型常數(shù)僅有兩個值,即true和false。true表示邏輯判斷的結(jié)果為真;false表示邏輯判斷的結(jié)果為假。(2)符號常量:它是以標識符形式出現(xiàn)的常量。使用符號常量可以使程序簡潔,修改容易。如果在一段程序中同一個常數(shù)反復(fù)出現(xiàn),此時可以定義一個標識符來表示此常數(shù),這個標識符稱為符號常量。定義常量的語法格式如下:cons
8、t常量名1=常量值1;常量名n=常量值n;其中,const是常量聲明的保留字,是常量定義字段的開始;常量名是常量的標識符,即常量的名稱;常量值是直接常量或者自定義符號常量組成的表達式。例如:const x=15; y=x+3; message=我喜歡delphi;注意:(1)保留字const可以單獨成行,也可以寫成const x=15;。為了使程序的結(jié)構(gòu)更加清晰,建議使用第一種書寫形式。(2)在程序中不可以給常量賦值,否則delphi編譯器將出錯。(3)類型常量:具有數(shù)據(jù)類型的符號常量稱為類型常量,其類型可以定義為標準數(shù)據(jù)類型或高級數(shù)據(jù)類型。定義類型常量的語法格式如下:const常量名:類型名
9、=常量值;例2.1 常量的聲明。程序代碼如下:const pi:real=3.14; max:integer=89555; dd:string4=name;2變量變量是程序的最基本要素之一,變量是在程序執(zhí)行過程中其值可以改變的量。它是程序中某個內(nèi)存地址的標識符,變量中可以存放數(shù)值、字符和字符串等。(1)變量的組成。 1)變量名:即變量的標識符,調(diào)用變量時直接調(diào)用變量名。 2)變量類型:字符型、字符串型和整型等。 3)變量值:即某一變量所代表的內(nèi)存單元中的數(shù)據(jù)值。(2)變量的聲明。變量聲明的基本語法格式如下:var變量名1:類型名1;變量名n:類型名n;其中,var是變量聲明的保留字;變量名是變
10、量的標識符,即變量名稱;類型名是任何有效的數(shù)據(jù)類型。例如:var x:integer; y:double; z:string;當(dāng)定義多個相同類型的變量時,定義的語法格式如下:變量名1,變量名2,變量名n:類型名;變量名之間用逗號隔開。例如:var a,b,c:integer;一般情況下,變量聲明要使用保留字var。但有時在類中聲明變量時可以不使用保留字var。例2.2 變量聲明不需要保留字var。程序代碼如下:type tform1 = class(tform) button1: tbutton; edit1: tedit; procedure formcreate(sender: tobje
11、ct); procedure button1click(sender: tobject); private d:string; /此處定義變量不需要保留字var private declarations public public declarations end;(3)變量的使用。在程序中變量必須先聲明,后使用。通常先定義變量,然后初始化變量,初始化變量即給變量賦值,然后在程序中使用變量。變量初始化的一般格式如下:var 變量名:類型名=常量表達式;例如:vari:integer=12; /變量聲明i,并初始化為12(4)變量的作用域。變量的作用域是指變量的作用范圍。根據(jù)作用域范圍的類別變量
12、分為公有變量與私有變量、全局變量與局部變量。 1)公有變量與私有變量。在單元接口(interface)部分聲明的變量屬于公有變量,可以被其他單元引用。如果某些變量從一個單元傳到另一個單元,則需要用公有變量。在單元的實現(xiàn)(implementation)部分聲明的變量屬于私有變量,此變量只能在本單元中使用,不能被其他單元引用。 2)全局變量與局部變量。全局變量又稱為全程變量,作用域是整個程序。在子程序之前,單元的實現(xiàn)部分之后聲明的變量可以為本單元任何一個子程序使用。而局部變量是在一定區(qū)域范圍內(nèi)使用的變量,如果一個子程序使用,則其他子程序不能使用。全局變量占用內(nèi)存空間時間較長,貫穿了整個程序的始終;
13、局部變量則隨著子程序運行的結(jié)束而釋放內(nèi)存空間。所以在一般情況下,不要把變量定義為全局變量。例2.3 公有變量與私有變量,全局變量與局部變量的應(yīng)用。單元文件1的程序代碼如下:unit unit1;interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, borland.vcl.stdctrls, system.componentmodel; var name1:string;/公有變量可以在單元2中使用,name是命令符,所以定義變量使用name1type t
14、form1 = class(tform) edit1: tedit; button1: tbutton; procedure button1click(sender: tobject); private private declarations public public declarations end;var form1: tform1;implementationuses unit2;/引用unit2 var sex:string; /全局變量$r *.nfmprocedure tform1.button1click(sender: tobject); var age:integer;/
15、局部變量begin name1:=edit1.text ;/把輸入的值賦給變量name1 form2.show ;end;end.單元文件2的程序代碼如下:unit unit2;interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, system.componentmodel, borland.vcl.stdctrls;type tform2 = class(tform) button1: tbutton; label1: tlabel; procedur
16、e button1click(sender: tobject); private private declarations public public declarations end;var form2: tform2;implementationuses unit1;/與公有變量name1配合使用$r *.nfmprocedure tform2.button1click(sender: tobject);beginlabel1.caption :=name1;/調(diào)用單元1中的變量并顯示end;end.注意:當(dāng)全局變量和局部變量重名時,局部變量的優(yōu)先級高于全局變量。在局部變量使用的范圍內(nèi),程
17、序使用局部變量則不使用全局變量。2.1.5 數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)是描述客觀世界的字符、數(shù)字和所有輸入到計算機中并能被程序加工、運算的符號集。數(shù)據(jù)類型是描述變量的表示形式和取值范圍及數(shù)據(jù)能夠參加的各種運算。在object pascal語言中變量聲明必須確定變量的類型。在object pascal語言中,用戶可以根據(jù)需要定義自己需要的數(shù)據(jù)類型。object pascal語言具有豐富的數(shù)據(jù)類型,包括簡單類型、結(jié)構(gòu)類型、指針類型、過程類型、可變類型,如圖2.1.1所示。1簡單類型簡單類型可分為有序類型、實數(shù)類型、字符串類型和日期時間類型四大類。(1)有序類型又包括整數(shù)類型、字符類型、布爾類型、枚舉類型
18、和子界類型。 圖2.1.1 數(shù)據(jù)類型 1)整數(shù)類型:它是全體整數(shù)的統(tǒng)稱,包括所有的正整數(shù)、負整數(shù)和零。整數(shù)類型可分為基本整數(shù)類型和通用整數(shù)類型。 基本整數(shù)類型包括shortint,smallint,longint,int64,byte,word和longword等類型,基本整數(shù)類型的名稱、類型、長度和取值范圍如表2.3所示。表2.3 基本整數(shù)類型通用整數(shù)類型包括integer和cardinal兩種。它們的長度都是32位,其區(qū)別是integer類型表示有符號整數(shù);cardinal類型表示無符號整數(shù)。通用整數(shù)類型的名稱、類型、長度和取值范圍如表2.4所示。表2.4 通用整數(shù)類型不同的整數(shù)類型占用內(nèi)
19、存空間的大小也不同,所以在定義整數(shù)變量時要根據(jù)自己的需要選擇合適的整數(shù)數(shù)據(jù)類型,定義的太小將出現(xiàn)內(nèi)存溢出,太大會造成內(nèi)存空間的浪費。例如,編一個循環(huán)10次的程序,用byte類型定義變量就足夠了。適用于整數(shù)類型的運算如下:算術(shù)運算:+,*,div,mod。關(guān)系運算:=,=,。在delphi中,不同變量類型之間的運算有可能出錯,當(dāng)位數(shù)少的向位數(shù)多的方向賦值時不會出錯,反過來就要出錯。例2.4 變量聲明的應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tobject);var i:integer;/定義i是整型變量 j:byte;/定義j是字節(jié)型變量b
20、egin j:=255; i:=j;/不會出錯 i:=5985;j:=i;/超出了j的取值范圍,出錯end; 2)字符類型:所有ascii碼都屬于字符類型,一般的字符只占用1個字節(jié)的內(nèi)存空間。字符類型可分為ansichar和widechar。ansichar是單字節(jié)字符,占用1個字節(jié),它是ansi字符集中的字符;widechar占用2個字節(jié)的空間(即16位),是unicode字符集中的字符。char是一般字符類型,即通用類型。在不同的cpu和不同的操作系統(tǒng)下占用的內(nèi)存空間不同,可能是1個字節(jié),也可能是2個字節(jié)。字符數(shù)據(jù)類型的名稱、類型、長度和取值范圍如表2.5所示。ansi字符集是ascii字
21、符集的擴展,每個字符占用1個字節(jié),即8位。unicode字符集中前256個字符是ansi字符集,最常用的字符類型是char類型。表2.5 字符數(shù)據(jù)類型適用于字符類型的運算符如下:關(guān)系運算:=,=,。 3)布爾類型:它是最簡單、最常用的數(shù)據(jù)類型之一,用于邏輯運算,布爾類型的值等于兩個預(yù)先定義的常量標識符true,false。布爾類型可分為3種基本類型,即bytebool,wordbool和longbool,其通用類型是boolean。布爾數(shù)據(jù)類型的名稱、類型、長度和取值范圍如表2.6所示。bytebool和boolean類型占用內(nèi)存空間為1個字節(jié);wordbool類型占用內(nèi)存空間為2個字節(jié);lo
22、ngbool類型占用內(nèi)存空間為4個字節(jié)。在一般編程時最好使用boolean,而bytebool,wordbool,longbool主要用于其他語言和windows環(huán)境兼容。表2.6 布爾數(shù)據(jù)類型適用于布爾類型的運算符如下:關(guān)系運算:=,=,。邏輯運算:and,or,not。關(guān)于布爾數(shù)據(jù)類型的邏輯運算,例如,設(shè)a,b是兩個變量,兩者之間進行的邏輯運算結(jié)果如表2.7所示。表2.7 a,b邏輯運算 4)枚舉類型:它是通過列舉表示其值的標識符來定義的有序集合。有時需要變量引用一個固定集合中的值,如一周七天,week可以表示sunday,monday,tuesday,saturday。此種情況就要用枚舉
23、類型。使用枚舉類型用戶可以定義一組具有特殊意義的值,最多可定義255個子項。枚舉類型的定義格式如下:type類型定義符=標識符1,標識符2,標識符n;其中,type是定義枚舉類型的保留字;類型定義符是枚舉變量的名稱;標識符1,標識符n是自定義的一組有意義的標識符,且n必須小于等于255。例如:type week=(sunday,monday,tuesday,wednesday,thursday,friday,saturday);week被定義為枚舉類型,括號中的值稱為枚舉常量。即可以使用枚舉類型week定義變量。例如:var d:week;/定義d是week類型的變量也可以同時定義枚舉類型和變
24、量聲明。例如:var d:(sunday,monday,tuesday,wednesday,thursday,friday,saturday); d:=sunday; /對枚舉類型變量d賦值注意:枚舉類型不能進行輸入、輸出操作。 5)子界類型:它是在有序類型的取值范圍內(nèi)重新定義部分取值范圍。枚舉類型需要把所有的項逐一寫出來,當(dāng)數(shù)量較少時不太復(fù)雜,而當(dāng)數(shù)量較多時枚舉類型非常煩瑣。例如,定義1100之間的整數(shù),使用枚舉類型:1,2,3,100,要寫100個數(shù),這不是用戶所想要的。此種情況用子界類型定義非常簡單,子界類型的定義格式如下:type 子界類型=常量下界.常量上界;var 子界類型變量:子
25、界類型;其中,常量下界和常量上界必須是同一種有序類型,常量下界要小于等于常量上界,下面通過一個例子來說明子界類型。例如:type num=1.15; letter=a.z;var i:num;因此,子界類型必須要求是有序類型,如整型、布爾型、字符型、枚舉型等。而無序類型不能作為子界類型的元素。對num賦值應(yīng)為在115之間的整數(shù),超出這個范圍編譯器將提示出錯。(2)實數(shù)類型:又稱為浮點類型,包括整數(shù)部分和小數(shù)部分。實數(shù)不是有序類型,因為它的值域是無限的,主要用于數(shù)值較大或者精度較高的運算。運算時占用大量的cpu資源,運算的速度也低于整型。實數(shù)類型包括以下幾種基本類型,double,real48,
26、single,extended,currency和real,它們之間的區(qū)別主要是取值范圍、占用空間的大小不同。實數(shù)類型的類型、名稱、取值范圍、有效數(shù)字和長度如表2.8所示。表2.8 實數(shù)類型除此之外,還有comp也屬于實數(shù)類型,但很少使用。其中double,real48,single,extended,currency為基本類型;real為一般類型。注意:(1)extended類型比real類型的精度高,但是它與其他語言或者操作平臺的兼容性較差,盡可能的避免使用。(2)real類型與double類型是等價的。(3)currency類型是專為財務(wù)貨幣處理設(shè)計的,此類型至少有4位有效小數(shù)位。(3)
27、字符串類型:它是存儲字符串?dāng)?shù)據(jù)的類型,可分為shortstring,ansistring,widestring和string,字符串類型的類型、名稱、最大長度和所需的內(nèi)存空間如表2.9所示。表2.9 字符串類型其中,shortstring,ansistring,widestring是基本字符類型;string是一般字符類型,即通用類型。當(dāng)編譯開關(guān)的狀態(tài)為$h-時,用保留字string聲明的是短字符串,即shortstring;當(dāng)編譯開關(guān)的狀態(tài)為$h+時,用保留字string聲明的是長字符串,即ansistring。在默認情況下,編譯開關(guān)的狀態(tài)為$h+。字符串變量聲明的語法格式如下:var 類型
28、標識符:string長度;在程序中一般使用string,很少使用shortstring,ansistring和widestring來聲明字符串變量。例如:var str1:string; str2:string10;其中,可以通過字符串的下標來訪問字符串中的字符,10是限制字符串的長度不能超過10,如果賦初值時字符串的長度超過了10,則系統(tǒng)自動識別前10位,剩余的字符將被丟失,但是ansistring和widestring類型的字符串沒有長度的限制。例2.5 超過定義字符串范圍的長度將被丟失的應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tob
29、ject);var str:string2;begin str:=asdjgh; /給str賦值 label1.caption:=str;end;執(zhí)行這段程序后結(jié)果是as。說明變量str把字符串a(chǎn)sdjgh中的后4位數(shù)據(jù)“djgh”丟失。在一段程序中如果字符串變量str賦的值是漢字,則用str來顯示其字符可能是亂碼,下面通過一個例子說明這個問題。例2.6 輸出“我喜歡delphi”的第一個字節(jié)。程序代碼如下:procedure tform1.button1click(sender: tobject); var str:string10;begin str:=我喜歡delphi;/給str賦值
30、label1.caption:=str1;end;執(zhí)行這段程序顯示的不是“我”,而是亂碼,可改為下面的程序:procedure tform1.button1click(sender: tobject); var str:string;begin str:=我喜歡delphi ;/給str賦值 label1.caption:=str1;end;執(zhí)行這段程序后顯示字符“我”。(4)日期時間類型:該類型是delphi常用的一種類型,用來存儲、控制日期和時間,和日期時間類型相似的是日期類型和時間類型。日期時間類型實際上是浮點類型的一種,在變量中存儲年、月、日、小時、分和秒這些信息。聲明一個日期時間型的
31、變量和聲明其他變量類似。例如:var mydatetime:datetime;例2.7 日期時間類型的應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tobject); var my:datetime;/定義變量begin my:=now();/獲取系統(tǒng)日期時間 label1.caption:=datetimetostr(my);/顯示系統(tǒng)日期時間end;這段程序的作用是顯示當(dāng)前系統(tǒng)的日期時間。其中,now()是獲取系統(tǒng)日期時間的函數(shù),而datetimetostr()是將日期時間類型轉(zhuǎn)換成字符類型。2結(jié)構(gòu)類型結(jié)構(gòu)類型比簡單類型的數(shù)據(jù)復(fù)雜,結(jié)構(gòu)類型
32、在程序中也是非常重要的。它包含很多類型,下面重點介紹集合類型、數(shù)組類型和記錄類型。(1)集合類型:它是把一組相關(guān)的對象作為一個整體參加運算,每一個對象稱為集合的一個元素。這點和枚舉類型、子界類型類似,但是它們之間也有區(qū)別,集合類型是一個整體,而枚舉類型和子界類型的變量只是它的一個元素;集合類型中元素沒有先后順序關(guān)系,相同的元素不能在同一個集合中出現(xiàn)。 1)定義集合類型。其類型的格式如下:type 集合標識符=set of 基本類型;其中,集合元素的個數(shù)不能超過256個字符,type,set of是保留字;基本類型可以是任意有序類型,如整數(shù)類型、字符類型、布爾類型、枚舉類型和子界類型,但不能是實
33、數(shù)類型。例如:type num=set of 1.10;/以子界類型為基類 mychar=set of char;/以字符類型為基類 orient=(east,west,south,north);/以枚舉類型為基類需要注意的是在使用集合類型時,要先定義集合類型,集合類型的變量聲明與其他類型變量的聲明類似。例如:var mynum:num;也可以同時聲明集合類型和變量。例如:var mynum:set of 1.10;注意:集合中元素上界應(yīng)大于等于下界,集合元素的個數(shù)不能超過256個字符,如mychar=set of widechar;是錯誤的,因為widechar的位數(shù)為2,包含65 535個
34、字符。 2)集合類型變量賦值。給集合類型變量賦值時用方括號表示。例如:type num=set of 1.10;var mynum:num;begin mynum:=1,2,3,4,5;end;先定義了集合類型num,然后聲明集合變量,最后給它賦值。其中mynum是num的類型變量,集合類型允許值為空集,如mynum:=;。 3)集合類型的運算。該運算包括等于“=”與不等于“”關(guān)系運算,集合類型的關(guān)系運算返回結(jié)果是布爾值:真或假,元素的排列順序和集合沒有關(guān)系。例如:1,2,3,4=2,3,4,1;/真(true)1,2,3,4=2,3,4,5;/假(false)小于等于“=”關(guān)系運算,集合a中
35、的元素在集合b中都存在,稱為集合a小于等于集合b,反之稱為集合a大于等于集合b。例如:a, b, c= a, b, c, d;/真(true)c, b, a= a, b, c, d;/假(false)注意:集合的運算關(guān)系不存在大于、小于,只存在大于等于和小于等于。(2)數(shù)組類型:該類型是一組具有相同類型的元素并按一定的順序組成的序列。數(shù)組中的每一個元素都通過數(shù)組名和下標來存取。數(shù)組可分為一維數(shù)組和多維數(shù)組,也可分為靜態(tài)數(shù)組和動態(tài)數(shù)組。 1)一維數(shù)組:它是數(shù)組中最簡單的數(shù)組,定義一個一維數(shù)組類型的格式如下:數(shù)組標識符=array下標號下限.下標號上限of元素類型;其中,“下標號下限.下標號上限”
36、指的是類型變量的分量個數(shù),其下標的類型是任何有序類型,一般的下標類型是整數(shù)類型;元素類型可以是任何類型。例2.8 定義一個一維數(shù)組。程序代碼如下:type myarray=array1.10of integer; mychar=arraya.zof char;聲明一維數(shù)組變量:vari:myarray;數(shù)組賦初值:procedure tform1.button1click(sender: tobject);type myarray=array1.10of integer;var i:myarray;begin i1:=55; i2:=5; label1.caption :=inttostr(i
37、2);end;其中,數(shù)組變量i得到55和5這兩個值,其余的數(shù)組元素值系統(tǒng)默認為0,label1的標題顯示5。一般采用循環(huán)語句給數(shù)組賦值,關(guān)于循環(huán)語句將在后面章節(jié)中講解。 2)多維數(shù)組:它是指數(shù)組中的元素本身也是一維數(shù)組。其中二維數(shù)組屬于多維數(shù)組,二維數(shù)組是一維數(shù)組的推廣,它是最常用的多維數(shù)組。定義二維數(shù)組的格式如下:type 數(shù)組標識符=array下標號下限.下標號上限,下標號下限.下標號上限of元素類型其中,數(shù)組標識符和一維數(shù)組的標識符相同,只是增加了一個“下標號下限.下標號上限”定義二維數(shù)組。例如:type myarray=array1.5,1.5of integer;var i:myar
38、ray;定義了一個二維數(shù)組myarray,聲明數(shù)組變量i。例2.9 二維數(shù)組的賦值和應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tobject);type myarray=array1.5,1.5of integer;var i:myarray;begin i1,1:=55;/給數(shù)組賦值 i2,2:=5;/給數(shù)組賦值 label1.caption :=inttostr(i1,1); /顯示數(shù)組1,1中的值end;執(zhí)行這段程序后,結(jié)果是55。除數(shù)組中1,1,2,2元素外,其他的元素值均為0,賦值方法和一維數(shù)組相同,一般采用循環(huán)語句給數(shù)組賦值。注
39、意:i1,1等價于i11。(3)記錄類型:前面介紹的枚舉類型、子界類型和數(shù)組類型都是相同數(shù)據(jù)類型的集合。然而,在實際應(yīng)用中,常把一些不同數(shù)據(jù)類型的數(shù)據(jù)集中在一起,作為一個整體。因此,引入了記錄類型,記錄類型和數(shù)據(jù)庫的記錄相似。如一個通信錄由下列字段組成:編號:(整型)姓名:(字符串型)年齡:(整型)地址:(字符串型)電話:(整型)這是數(shù)據(jù)庫中的字段,同樣記錄類型也可以定義這組數(shù)據(jù)。定義記錄類型在聲明時,需要為每個字段定義名稱和類型,定義記錄類型的一般格式如下:type 記錄類型標識符=record 字段標識符1:類型1; 字段標識符2:類型2; 字段標識符n:類型n;end;其中,record
40、,end是保留字,記錄類型以end結(jié)束;記錄類型標識符是記錄類型名;字段標識符是字段名;類型是該字段的數(shù)據(jù)類型,可以是任意類型。例如,上述通信錄可以定義成下列程序:type friend=record id:integer; name:string; age:integer; addr:string; tele:integer;end;其中,定義了friend類型的記錄,該記錄由5個字段組成,且每個字段都有其標識符和類型。聲明記錄類型變量和聲明其他變量類似,聲明記錄類型變量的格式如下:var 記錄變量:記錄類型標識符;例如:var fri:friend;聲明記錄變量后就可以訪問記錄中的任何一個
41、字段,訪問記錄中某字段的語法格式如下:記錄變量名.字段名例如:fri.id :=1;f:=張宏進;fri.age:=20;fri.addr:=陜西;fri.tele:=86525652;由程序可見,給記錄字段賦值,每個字段前都有“fri”,這樣重復(fù)的工作量增大。用with語句可以解決這個問題,with語句的語法格式如下:with記錄變量名do begin end;with后的記錄變量名允許有多個,且記錄變量名之間要用逗號隔開;do后一般是復(fù)合句,使用begin和end括起來。with語句的功能是為了節(jié)約輸入量,如果with語句后面只跟一條語句,這樣增加了用戶的輸入量。例2.10
42、with語句的應(yīng)用。程序代碼如下:with fri do begin id :=1; name:= 張宏進; age:=20; addr:= 陜西; tele:=86525652; end;3指針類型指針類型是一種特殊的類型。前面講述的類型變量都是靜態(tài)的,程序運行時占用固有的內(nèi)存空間,運行結(jié)束后才釋放內(nèi)存空間。指針類型不太復(fù)雜,但是在任何一種語言中都比較難理解,因為它的靈活性很高。指針類型是以“”開始,后跟類型名,定義指針類型的語法格式如下:type 指針類型=類型名; 其中,類型名是指針所指向的數(shù)據(jù)類型。例如:type pinteger=integer; pchar=char;其中,定義了兩
43、個指針類型,一個是pinteger,指向integer類型的數(shù)據(jù);另一個是pchar,指向char類型的數(shù)據(jù)。先定義指針,再聲明指針變量。例如:var ip:pinteger; cp:pchar;定義指針和變量聲明也可以同時進行。例如:var ip:integer; cp:char;指針類型可以是簡單類型,也可以是構(gòu)造類型。4可變類型可變類型又稱為變體類型。主要用于支持ole自動化操作,還用于經(jīng)常變動的類型,它是一種功能強大的類型,聲明可變類型的變量如下:var myvar:variant;可變類型變量myvar聲明后,默認初始化為一個特殊的值unassigned,表示myvar沒有被賦值;當(dāng)
44、變量myvar的值為特殊值null時,表明變量myvar的值未知或者是數(shù)據(jù)丟失??勺冾愋偷淖兞靠梢允钦?、實型、日期時間型、字符型和布爾型等,編譯器自動進行類型轉(zhuǎn)換??勺冾愋偷闹饕猛臼强梢詣討B(tài)地改變其數(shù)據(jù)類型。例2.11 可變類型變量的聲明和應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tobject); var v1,v2,v3,v4,v5:variant;begin v1:=123;/v1整型 v2:=asd; /v2字符串型 v3:=25.36;/v3實數(shù)型 v5:=v1+v2;/v5字符串型 v4:=v3+v1;/v4實數(shù)型 labe
45、l1.caption:=v5;/v5字符串型 label2.caption:=v4;/v4字符串型end;在按鈕單擊事件中,可變類型使用整型、字符串型、實數(shù)型,label1的標題顯示“123asd”;label2的標題顯示“148.36”。2.1.6 類型的轉(zhuǎn)換類型的轉(zhuǎn)換兩個數(shù)據(jù)在賦值或者計算時類型必須相同,不相同將出現(xiàn)錯誤。這時就需要將不同類型的數(shù)據(jù)轉(zhuǎn)換成同一種類型。數(shù)據(jù)類型的轉(zhuǎn)換分為自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。1自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換是指系統(tǒng)自動將一種類型a轉(zhuǎn)換成另一種類型b。自動轉(zhuǎn)換的條件是類型a在類型b的取值范圍內(nèi),從精度低的方向向精度高的方向轉(zhuǎn)換。例2.12 自動類型轉(zhuǎn)換的應(yīng)用。程
46、序代碼如下:procedure tform1.rclick(sender: tobject); var i:integer; f:real; c:char; s:string;begin i:=3; f:=i+2.22; /編譯時不會出錯 c:=j; s:=c;/編譯時不會出錯 label1.caption:=s; label2.caption:=floattostr(f);end;其中,f:=i+2.22;在編譯時不會出錯,如果i:=f;將出現(xiàn)錯誤。2強制類型轉(zhuǎn)換強制類型轉(zhuǎn)換是指從一種類型強制轉(zhuǎn)換成另一種類型,并不是所有的類型都可以強制轉(zhuǎn)換成另一種類型。例2.13 強制類型轉(zhuǎn)換的應(yīng)用。程序代
47、碼如下:procedure tform1.rclick(sender: tobject); var i:integer; c:char;begin c:=a; i:=integer(c);/強制轉(zhuǎn)換成整型 label1.caption:=inttostr(i);/inttostr是類型轉(zhuǎn)換函數(shù) i:=98; label2.caption:=char(i); /強制轉(zhuǎn)換成字符型end;執(zhí)行該段程序后,label1的標題是“97”;label2的標題是“b”。注意:強制類型轉(zhuǎn)換有可能造成數(shù)據(jù)的丟失。2.1.7 標號、數(shù)值和字符串標號、數(shù)值和字符串在object pascal語言中標號、數(shù)值和字符串
48、是常用的,并對它們做了相應(yīng)的規(guī)定。1標號在delphi語言中,保留了goto語句。goto語句的語法格式如下:goto標號;其中,標號是09 999之間的整數(shù),并允許使用標識符作為標號。goto語句的功能是轉(zhuǎn)到有“標號”的語句執(zhí)行。使用goto語句前必須先聲明標號,且在同一段程序中不允許跳出過程和函數(shù)。例2.14 goto語句定義的應(yīng)用。程序代碼如下:implementation var i:integer;$r *.nfmprocedure tform1.button1click(sender: tobject); label asd;begin asd: i:=1+i; label1.ca
49、ption:=inttostr(i); sleep(1000);/暫停1000毫秒 goto asd;end;該程序的功能是實現(xiàn)i的累加。在結(jié)構(gòu)化程序中一般不使用goto語句。因為使用goto語句容易使程序混亂,可讀性差。2數(shù)值在delphi語言中,一般使用的數(shù)值是十進制數(shù),但也可寫成十六進制數(shù)。(1)十進制數(shù):一般的書寫都是十進制數(shù),如10,526,21.58等;也可用科學(xué)計數(shù)法表示,如54.25e+3表示54 250。(2)十六進制數(shù):十六進制數(shù)值可以表示整數(shù),以“$”開始,例如:$54b表示十進制整數(shù)1 355。3字符串字符串是用單撇號括起來的一串字符。單撇號內(nèi)可以是特殊字符,如:!,#
50、和¥等;也可以是字符串的表示形式,如我喜歡delphi、你好。如果要表示單撇號時,需要使用兩個單撇號表示為一個單撇號,例如:“”表示“”。在delphi語言中允許在字符串中嵌入控制符,控制符是由特殊符號“#”和緊跟其后的0255之間的無符號整數(shù)構(gòu)成,表示ascii碼中的字符。例如:#97/表示字符a#97#98#99/表示abc注意:書寫“#97”時,不要用單撇號括起來,如#97,輸出的是#97,而不是字母“a”。直接書寫#97即可輸出字母“a”。2.1.8 運算符運算符運算是對數(shù)據(jù)進行加工的過程,而運算符是各種運算的符號,例如,加、減、乘、除運算符。在object pascal語言中,運算符
51、主要包括賦值運算符、算術(shù)運算符、邏輯運算符、位運算符、字符串運算符、關(guān)系運算符和布爾運算符等。1賦值運算符賦值運算符比較簡單,在前面大多數(shù)程序中都用到了賦值運算符,在此不再贅述。賦值運算符是用“:=”來表示的。例2.15 賦值運算符的應(yīng)用。程序代碼如下:var i,d:integer; i:=25; d:=i;其中,i賦值為25,i又賦值給d,所以d的值是25。2算術(shù)運算符(1)算術(shù)運算符:它可分為單目運算符和雙目運算符。單目運算符如表2.10所示;雙目運算符如表2.11所示。表2.11 雙目運算符表2.10 單目運算符說明:1)取正、取負與加減乘除的運算和數(shù)學(xué)中的運算相同,操作數(shù)可以是整型或
52、實型。 2)除的結(jié)果是實型。 例2.16 除法的應(yīng)用。程序代碼如下:procedure tform1.button1click(sender: tobject);vari:integer;f:real;begini:=5;f:=i/4;/“i/4”值是實型label1.caption:=floattostr(f);end; 3)參加整數(shù)除法和求余運算的操作數(shù)必須是整型,其結(jié)果也是整型。例2.17 div和mod的應(yīng)用。程序代碼如下:5 div 2;/整除取商,結(jié)果為2-5 div -2; /整除取商,結(jié)果為25 div -2; /整除取商,結(jié)果為2-5 div 2; /整除取商,結(jié)果為25 m
53、od 2; /整除取余,結(jié)果為15 mod -2;/整除取余,結(jié)果為1-5 mod 2;/整除取余,結(jié)果為1-5 mod -2;/整除取余,結(jié)果為1 4)在除、整數(shù)除、整數(shù)求余運算的表達式中除數(shù)不能為0。(2)算術(shù)表達式:它是由常量、變量、函數(shù)、運算符和括號組成的,運算結(jié)果是一個數(shù)值。如2+59*8+6/5,其結(jié)果自動轉(zhuǎn)換成實數(shù)型,結(jié)果為63.8。算術(shù)表達式和數(shù)學(xué)中的表達式十分相似,但也有一些區(qū)別。 1)數(shù)學(xué)中x平方的表達式為x2,而在算術(shù)表達式中為x*x。 2)在數(shù)學(xué)表達式中,小括號外面還可以有中括號或大括號,但在算術(shù)表達式中不允許,只能使用多重小括號。如數(shù)學(xué)表達式中65+23(23+36)
54、+66表示成算術(shù)表達式為65+23*(23+36)+66)。 3)算術(shù)表達式不能簡寫,如8x需要表示成8*x。(3)算術(shù)運算符的優(yōu)先級。算術(shù)表達式運算符包括加、減、乘、除、取正、取負、mod和div,它們的優(yōu)先級順序從高到低如下:取正/取負乘/除mod/div加/減在算術(shù)表達式中,同一級別運算符的結(jié)合性是自左向右;如果表達式中包括括號,先運算括號中的表達式;如果是多重括號,最里面括號中表達式的優(yōu)先級最高。3邏輯運算符邏輯運算又稱為布爾運算,其運算結(jié)果是布爾型。邏輯運算符可以連接若干表達式,如不等式0 x99表示成0 x and x99。邏輯運算符如表2.12所示。表2.12 邏輯運算符其中,除
55、not是單目運算符外,其余的均為雙目運算符。設(shè)a,b為邏輯值,其運算結(jié)果如表2.13所示。表2.13 a,b邏輯運算在邏輯運算中,如果兩個表達式均為真,兩個表達式進行and邏輯運算,其結(jié)果為真,否則為假;如果兩個表達式均為假,兩個表達式進行or邏輯運算,其結(jié)果為假,否則為真;如果兩個表達式的布爾值不同,兩個表達式進行xor邏輯運算,其結(jié)果為真,否則為假;not運算是由真變假,由假變真。4位運算符位運算是二進制運算,即把整數(shù)先換算成二進制的形式,然后再運算,結(jié)果是整型,并按二進制形式進行位的移動和比較。位運算符如表2.14所示。表2.14 位運算符其中,除not是單目運算符外,其余的位運算符都是
56、雙目運算符。下面講述各個位運算符的運算過程。(1)not位運算符,是按位非,即把操作數(shù)的每一位都取反,0變成1,1變成0。例如:i:=not 6;i的值是7(6的二進制形式是00000110,而7的二進制形式是11111001)。(2)and位運算符,是按位與。當(dāng)兩個數(shù)都為1時,結(jié)果才為1。例如:v1:=2;/00000010v2:=3;/00000011i:=v1 and v2;/00000010所以i的值是2。(3)or位運算符,是按位或,兩位中有一位是1時,其結(jié)果為1。例如:v1:=2;/00000010v2:=3;/00000011i:=v1 or v2; /00000011所以i的值
57、是3。(4)xor位運算符,兩位相異或時,其結(jié)果為1。例如:v1:=5;/00000101v2:=3;/00000011i:=v1 xor v2; /00000110所以i的值是6。(5)shl位運算符,左移,即每個二進制的數(shù)值向左移。例如:i:=7 shl 2;/00000111左移2位i的結(jié)果是28,即00011100。(6)shr位運算符,右移,即每個二進制的數(shù)值向右移。例如:i:=7 shr 2;/00000111右移2位i的結(jié)果是1即00000001。5字符串運算符在object pascal語言中,字符串運算符只有一種,即連接運算符“+”,該運算符可以使兩個或兩個以上的字符串連接起
58、來。連接運算符可以連接字符常量、字符串常量、字符變量和字符串變量等。字符串表達式的語法格式如下:字符串表達式+字符串|字符例如:str:= 我喜歡+delphi;/str的值是“我喜歡delphi”str:= 123+delphi+456;/str的值是“123delphi456”str:= a+ + bcdef ; /str的值是“a bcdef”6關(guān)系運算符關(guān)系運算符又稱為比較運算符,是用來比較兩個表達式的值,其結(jié)果是布爾型。在object pascal語言中關(guān)系運算符有7種,如表2.15所示。注意:(1)關(guān)系運算符的優(yōu)先級別相同。(2)關(guān)系運算符兩側(cè)的表達式的類型可以是任意的,但是類型必
59、須一致。在比較兩個字符串時,如果第一個字符大,其字符串也大,如果第一個字符相同再比較第二個,依此類推。常見字符值的大小如下:表2.15 關(guān)系運算符空格09azaz任何漢字7運算符的優(yōu)先級前面講述了object pascal的基本運算符,在object pascal語言中可以使用任意的運算符來連接任意表達式。例如:f:=6+3*6/89*(5 mod 3);如果不知道其優(yōu)先級,就無法計算整個算術(shù)表達式。下面講述它們的優(yōu)先級別,優(yōu)先級由高到低的順序如下:(1)()(2)函數(shù)(3)not(4)*,/,div,mod,and,shl,shr(5)+,or,xor(6)=,=,in例如:f:=6+3*6
60、/89*(5 mod 3);/f值是640 449 438 202 247(6-3)5) /結(jié)果是true(6-3)5)/語法錯誤8 in 2,8 /結(jié)果是true88+99 /結(jié)果是88992.1.9 注釋注釋程序的注釋是對一段程序或者一行程序的解釋。在編譯過程中不參與編譯,用來增強程序的可讀性。程序中常使用“/”注釋程序。注釋有兩種方式,即整行注釋和行內(nèi)注釋。1整行注釋整行注釋是以“/”開始,“/”后的所有內(nèi)容都屬于注釋的內(nèi)容。一般情況下都采用整行注釋,用來注釋此行的內(nèi)容。2行內(nèi)注釋行內(nèi)注釋常使用“”或“(*)”。只要在“”或者“(*)”中的部分都屬于注釋?!?”與“”和“(*)”的區(qū)別是“/”只
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人的呼吸與運動系統(tǒng)解析
- 新生兒高流量吸氧的護理
- 重型顱腦外傷的急救與護理
- 2025年廣東汕頭高三二模地理試題答案詳解講評課件
- 夏日衛(wèi)生防病課件
- 腰麻病人護理查房
- Unit2-單元知識圖譜課件
- 糖尿病足的觀察要點及護理措施
- 工業(yè)互聯(lián)網(wǎng)平臺網(wǎng)絡(luò)流量整形技術(shù)在金融領(lǐng)域的應(yīng)用報告2025
- 社區(qū)護理水環(huán)境與健康
- 面向非結(jié)構(gòu)化文本的事件關(guān)系抽取關(guān)鍵技術(shù)剖析與實踐
- 《國別和區(qū)域研究專題》教學(xué)大綱
- 《ESC血壓升高和高血壓管理2024指南》解讀
- 學(xué)科競賽在提升學(xué)生團隊協(xié)作能力中的作用
- 《公共管理學(xué)基礎(chǔ)》題庫及答案
- 基本藥物工作計劃
- 2025年行政執(zhí)法人員執(zhí)法資格考試必考題庫及答案(共232題)
- 2025手術(shù)室年度工作計劃
- 《兒童文學(xué)》課件-圖畫書的概念
- 2025屆高三語文專題復(fù)習(xí):文言文閱讀-實詞的五種類型
評論
0/150
提交評論