《Pascal語言基礎(chǔ)》PPT課件.ppt
《《Pascal語言基礎(chǔ)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《Pascal語言基礎(chǔ)》PPT課件.ppt(87頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第2章 Pascal語言基礎(chǔ),Pascal語言體現(xiàn)了結(jié)構(gòu)化程序設(shè)計的概念。它簡便易學(xué),具有清晰明了的模塊結(jié)構(gòu),豐富的數(shù)據(jù)類型和語句。Pascal語言編譯、運行效率高,便于移植,因此廣泛地應(yīng)用于應(yīng)用軟件的開發(fā)。 2.1 數(shù)據(jù)類型 2.2 常量與變量 2.3 運算符和表達式 2.4 基本程序設(shè)計 2.5 過程與函數(shù) 2.6 常用內(nèi)部函數(shù),2.1 數(shù)據(jù)類型,Object Pascal的數(shù)據(jù)類型包括一些標準的數(shù)據(jù)類型,例如:整型、實型、字符型、字符串型和布爾型等等。除此之外,系統(tǒng)還允許用戶自己定義一些較為復(fù)雜的數(shù)據(jù)類型,例如:子界類型、枚舉類型、指針類型、記錄類型以及文件類型等等。 2.1.1 標準數(shù)
2、據(jù)類型 2.1.2 子界類型 2.1.3 枚舉類型 2.1.4 集合類型 2.1.5 指針類型 2.1.6 數(shù)組類型 2.1.7 記錄類型 2.1.8 文件類型,2.1.1 標準數(shù)據(jù)類型,Object Pascal的數(shù)據(jù)類型包括一些基本的簡單數(shù)據(jù)類型,例如:整型、實型、字符型、字符串型和布爾型等等。下表列出了標準的數(shù)據(jù)類型。 數(shù)據(jù)類型表,如圖所示:,2.1.1 標準數(shù)據(jù)類型,2.1.2 子界類型,子界類型是Pascal允許用戶定義的一個結(jié)構(gòu)數(shù)據(jù)類型。如果用戶預(yù)先知道一個變量的范圍,就可以通過定義子界類型和子界類型變量來實現(xiàn)由系統(tǒng)自動檢查變量是否超出了允許的范圍。 子界類型的定義: Type 類
3、型名稱=常量1..常量2; 例如以下代碼: type TMonth=1..12; TScore=A..F;,2.1.2 子界類型,var Month:TMonth; Score:TScore; 如上定義了子界類型變量Month的范圍從112,Score的范圍從AF。,2.1.3 枚舉類型,枚舉類型的定義: Type 類型名稱=(標識符1),標識符2,,標識符n); 用戶經(jīng)常要用到這樣的數(shù)據(jù),它是通過列舉出該數(shù)據(jù)所有的可能值來定義的,如下例: type TWeekDay=(Sun, Mon, Tue, Wed, Thu, Fri, Sat); var WeekDay:TweekDay; 需要注意
4、的是,每個枚舉值只能出現(xiàn)在一個枚舉類型的定義當中,而且在每個枚舉類型的定義當中只能出現(xiàn)一次。,2.1.4 集合類型,集合類型是Pascal允許用戶定義的一個結(jié)構(gòu)數(shù)據(jù)類型,它使用戶可以運用通常集合運算,例如:交集、并集和差集。集合類型是一些同類型元素的集合,這些基類型元素可以是整型、實型、布爾型、字符型、枚舉型或子界類型。它通常的作用是用來檢驗?zāi)硞€元素是否被包含在一個集合當中。 下例用來說明集合類型數(shù)據(jù)的定義方法和運用: type TWeekDay=Set of 1..7; var WeekDay:TWeekDay;,2.1.4 集合類型,begin WeekDay:=1,3,5,6; end;
5、 注意Pascal編輯程序限制了集合數(shù)目,所以整型數(shù)據(jù)不能作為集合類型的基類型。而只能是整型子界?;愋捅仨毷怯行蝾愋停詫嵭?、數(shù)組類型不能作為集合類型的基類型。,2.1.5 指針類型,Pascal允許建立動態(tài)數(shù)據(jù)結(jié)構(gòu),它采用指針類型數(shù)據(jù),指針類型變量的引入大大增強了程序的靈活性。一個指針類型變量用于保存一個內(nèi)存地址,由于該內(nèi)存地址指向的是一個動態(tài)分配的變量,所以,在定義指針類型數(shù)據(jù)時,必須說明它所指向變量的類型。 例如: Type Pbirthday=TBirthday; TBirthday=Record Name:String30; Year:Integer;,2.1.5 指針類型
6、,Month:1..12; Date:1..31; end; var Pbirthday1:Pbirthday; Pint:Integer; begin Pbirthday1.Name:=Smith; Pint:=18; end;,2.1.6 數(shù)組類型,數(shù)組類型數(shù)據(jù)是一種用戶定義的結(jié)構(gòu)數(shù)據(jù)類型,它是一些具有相同數(shù)據(jù)類型的元素的集合。根據(jù)數(shù)組的維數(shù)可以將數(shù)組分為一維數(shù)組、二維數(shù)組以及多維數(shù)組,每一維度的下標指明了元素的數(shù)目。其下標類型包括了除長整型以外的所有有序類型以及長整型的子界類型。 例如: type TOneArray=Array3..39 of Integer; TdoubleArra
7、y=Array125,1..50 of Real; Var OneArray:TOneArray; doubleArray:TdoubleArray;,2.1.7 記錄類型,記錄類型包括了一組元素,但和數(shù)組型數(shù)據(jù)不同的是,記錄類型數(shù)據(jù)可以包括相同的數(shù)據(jù)類型,也可以包括不同的數(shù)據(jù)類型;這些數(shù)據(jù)可以是數(shù)值型的,也可以是非數(shù)值型的。例如:用戶可以使用一個記錄類型數(shù)據(jù)記錄一個學(xué)生的名字、出生日期、籍貫以及學(xué)習(xí)成績等。 例如,一個學(xué)生的記錄類型如下: type TStudent=Record Name:String30; Age:Integer; StudNum:Integer; Score:r
8、eal; end;,2.1.7 記錄類型,var Student1:TStudent; begin Student1.Name:=Smith; Student1.Age:=20; Student1.StudNum:=950007; Student1.Score:=87.5; end;,2.1.8 文件類型,文件類型是用來對文件進行操作的,它包括同一類元素的線性有序組合。Delphi支持的文件類型有文本文件、記錄文件和無類型文件。定義文件類型實際上是定義了一個文件類型的指針。 例如: type TStudent=Record Name:String30; Age:Integer; Stud
9、Num:Integer; Score:real; end;,2.1.8 文件類型,Fstudent=File of Tstudent; Fstr=File of String; var Student1:FStudent; Str:Fstr; begin Student1.Name:=Smith; Student1.Age:=20; Student1.StudNum:=950007; Student1.Score:=87.5; Str=I love Delphi 7.0. end;,2.2 常量與變量,常量和變量是學(xué)習(xí)各種編程語言進行程序設(shè)計的基礎(chǔ)概念,分別代表了在程序運行過程中兩種不同狀態(tài)
10、的量。常量是指在程序運行過程中其值始終不變的量;與之相反,變量則是程序運行過程中其值可以改變的量。 2.2.1 常量 2.2.2 變量,2.2.1 常量,在Pascal中用const關(guān)鍵字來聲明常量,就像在C語言中const關(guān)鍵字一樣,C語言跟Object Pascal語言聲明常量的主要差別是,在Object Pascal語言中不需要在對常量賦值時聲明常量的類型,跟Visual Basic一樣,編譯器能根據(jù)常量的值自動判斷常量的類型并分配內(nèi)存;對于整型常量,編譯器在運行時跟蹤它的值,并不對它分配內(nèi)存。 例如: const ADecimalNumber=3.14; i=10; ErrorStri
11、ng=danger,Danger,Danger!;,2.2.1 常量,編譯器根據(jù)如下規(guī)則來對常量分配內(nèi)存:整型數(shù)被認為是最小的Integer類型(10被認為是ShortInt,32000被認為是SmallInt等);字符串值被認為是char類型或string類型(通過$H定義);浮點值被認為是extended數(shù)據(jù)類型,除非小數(shù)點位數(shù)小于4位(這種情況被當作comp類型);Integer和Char的集合類型被存儲為它們自己。,2.2.2 變量,Object Pascal要求在一個過程、函數(shù)或程序前在變量聲明段中聲明它們。Object Pascal類似Visual Basic,但不像C和C++,是
12、大小寫不敏感的。采用大小寫只是為了可讀性好。 當在Object Pascal中聲明一個變量時,變量名在類型的前面,中間用冒號隔開,變量初始化通常要跟變量聲明分開。 Delphi能在var塊中對全局變量賦初值,這里有一些例子演示: var i:Integer=10;,2.2.2 變量,S:String=Hello World; D:Double=3.141579; 能賦初值的變量僅是全局變量,不是那些在過程或函數(shù)中局部變量,而且Delphi編譯器自動對全局變量賦初值。當程序開始時,所有的整型數(shù)賦為0,浮點數(shù)賦為0.0,指針為null,字符串為空等等,因此,在源代碼中不必對全局變量賦零初值。,2.
13、3 運算符和表達式,運算符是在代碼中對各種數(shù)據(jù)類型進行運算的符號。例如,有能進行加、減、乘、除的運算符,有能訪問一個數(shù)組的某個單元地址的運算符。表達式由運算對象和運算符兩部分組成。 2.3.1 運算符 2.3.2 表達式,2.3.1 運算符,Object Pa s c a l語言中的運算符(Operators)有: 、not、、*、/、div、mod、and、shl、shr、as、+、、or、xor、=、、、=、in和is等。 按照操作數(shù)數(shù)目的多少來分,運算符分為下面兩類:單目運算符(Unary Operator)和雙目運算符(Binary Operator)。上面的、not和為單目運算符,
14、其余的為雙目運算符。其中+和-也可以作為單目運算符來使用。 單目運算符一般放在操作對象的前面,只有可以放在操作對象的后面。雙目運算符都放在兩個操作數(shù)之間。,2.3.1 運算符,有些運算符是根據(jù)給定的操作數(shù)的數(shù)據(jù)類型做相應(yīng)處理的。例如,運算符not對于整型的操作數(shù)說,做的是按位取反;對于邏輯類型的操作數(shù)來說,它完成的則是邏輯取反。 除了運算符、is和in外,其余操作符都可以對Variant類型的數(shù)據(jù)進行操作。 1. 算術(shù)運算符 2. 邏輯運算符 3. 位運算符 4. 字符串運算符 5. 指針運算符 6. 類運算符 7. 運算符 8. 集合運算符 9. 關(guān)系運算符,2.3.1 運算符,1. 算術(shù)運
15、算符 算術(shù)運算符對浮點數(shù)和整數(shù)進行加、減、乘、除和取模運算。 。,2.3.1 運算符,2. 邏輯運算符 Pascal語言用and和or作為邏輯與和邏輯或運算符,Pascal的邏輯非的運算符是not,它是用來對一個布爾表達式取反。 邏輯運算符對邏輯類型的操作數(shù)進行運算,數(shù)據(jù)結(jié)果也為邏輯類型,2.3.1 運算符,3. 位運算符 位運算符對整型的數(shù)據(jù)進行按位操作,所得結(jié)果也為整型數(shù)據(jù),如表所示。,2.3.1 運算符,4. 字符串運算符 加號(+)還可以作為字符串運算符,它可以將兩個字符串聯(lián)接在一起。如果兩個字符串都是短字符串,那么在結(jié)果字符串長度超過255個字符的情況下,只有前面255個字符有
16、效。,2.3.1 運算符,5. 指針運算符 表中的運算符可以對指針類型的數(shù)據(jù)進行操作。,2.3.1 運算符,6. 類運算符 類運算符as和is對類或類的實例進行操作。此外,關(guān)系運算符=和也可以對類進行操作。 7. 運算符 運算符返回一個變量、過程或函數(shù)的地址。,2.3.1 運算符,8. 集合運算符 集合運算符主要對兩個集合進行操作,判斷兩個集合之間的關(guān)系,如表所示。,2.3.1 運算符,9. 關(guān)系運算符 關(guān)系運算符可以對兩個普通數(shù)據(jù)類型、類、對象、接口類型或字符串類型的數(shù)據(jù)進行比較,結(jié)果數(shù)據(jù)類型為布爾類型,如表2-7所示。,2.3.2 表達式,一個表達式由運算對象和運算符兩部分組成。
17、運算符可以分為算術(shù)運算符、邏輯運算符、串運算符、字符指針運算符、集合運算符、關(guān)系運算符以及運算符。 運算符的優(yōu)先順序如表所示。,,運算符優(yōu)先順序類別1域、指針引用 not2取非* / div mod shl shr and as3乘除法與類型轉(zhuǎn)換 - or xor4加減法= = in is5比較操作 Pascal用and和or作為邏輯與和邏輯或運算符,而C語言使用,2.4 基本程序設(shè)計,基本程序設(shè)計主要包括:程序語句、基本控件、順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 2.4.1 程序語句 2.4.2 基本控件 2.4.3 順序結(jié)構(gòu) 2.4.4 選擇結(jié)構(gòu) 2.4.5 循環(huán)結(jié)構(gòu),2.4.1 程序語句,1
18、. 賦值語句 實現(xiàn)功能:為變量賦值。 語法形式::=; 實際舉例:x:=y*z; b:=(x=1) or (y=4) and (z0); t:=sqrt(m)+4*sin(x); 2. GOTO語句 實現(xiàn)功能:改變程序流程至標號語句處。 語法形式:goto標號; 實際舉例:goto 100;,2.4.1 程序語句,3. IF語句 實現(xiàn)功能:作條件判斷控制流程。 (1) 單分支語句 語法形式: if 布爾型表達式 then 語句; 實際舉例: if x<=100 then y:=x; y:=100; begin 語句組 end;,2.4.1 程序語句,(2) 雙分支語句 語法形式: if 布爾型
19、表達式 then begin 語句組 end else,2.4.1 程序語句,(3) 多層嵌套語句 語法形式: if then begin end else if then begin end;, else begin end;,2.4.1 程序語句,4. CASE語句 多層嵌套的條件語句可讀性差,實際編程中常采用case語句。 實現(xiàn)功能:實現(xiàn)多條件選擇。 語法形式: Case of 數(shù)值1: begin end; 數(shù)值2:,2.4.1 程序語句,begin end; 5. REPEAT語句 實現(xiàn)功能:循環(huán)。 語法形式: repeat ; until ;,2.4.1 程序語句,6. WHILE
20、語句 實現(xiàn)功能:循環(huán)。 語法形式: while do begin end; end; 7. FOR語句 實現(xiàn)功能:循環(huán)。,2.4.1 程序語句,語法形式: for = to do begin end; 8. WITH語句 實現(xiàn)功能:引用一個域或方法。 語法形式: with do begin ,2.4.2 基本控件,組件是可視化編程的基礎(chǔ),開發(fā)人員用它們來設(shè)計用戶界面以及提供給應(yīng)用程序的一些非可視化性能。對于應(yīng)用程序開發(fā)者來說,組件就是他們從組件面板上取得的并放到窗口上的某種事物。在這里,用戶可以通過修改組件屬性、建立事件處理過程來決定組件的外觀或作用。從組件編寫者的角度看,組件就是Object
21、 Pascal語言中的對象。這些對象可以封裝系統(tǒng)提供的行為元素(如標準的Windows 95/98控件)。其他對象能夠完全引入新的可視化或非可視化組件,這種情況下,一個組件的代碼構(gòu)成了該組件的全部行為。 Delphi中有四種基本的組件類型供用戶使用或創(chuàng)建:標準控件、自定義控件、圖形控件和非可視組件。,2.4.2 基本控件,在這里應(yīng)注意組件(component)和控件(control)兩個術(shù)語的交換使用,二者并不完全相同??丶强梢暤挠脩艚缑嬖?。在Delphi中,控件總是組件,因為它們都是從TComponent類派生而來的。組件是一種對象,它可以出現(xiàn)在組件面板上,也可以被放到窗口設(shè)計器上。組件
22、是TComponent類型,它不一定是控件,也就是說,它不一定是可視的用戶界面元素。,【例2-1】,設(shè)計步驟: 建立應(yīng)用程序的用戶界面:選擇“新建”工程,進入窗體設(shè)計器,增加四個標簽Label1Label4,四個編輯框Edit1Edit4和一個按鈕Button1,如圖2-1所示。 設(shè)置對象屬性:如表所示。,輸入長方體的長和寬,然后計算并輸出長方體的周長和面積。 分析:設(shè)長方體的長和寬分別為a和b,長方體的周長和面積分別為c和s,結(jié)合題義可求出計算公式:c=2(a+b),s=ab。,【例2-1】, 編寫事件代碼。 Procedure Tform1.Button1Click(Sender:TObj
23、ect); var a,b,c,s:Real; begin a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=2*(a+b); s:=a*b; edit3.text:=floattostr(c); edit4.text:=floattostr(s); end;,2.4.3 順序結(jié)構(gòu),順序結(jié)構(gòu)是程序中最簡單、最常見的基本結(jié)構(gòu)。在該結(jié)構(gòu)中,各操作模塊(對應(yīng)于程序中的“程序段”)按照出現(xiàn)的先后順序依次執(zhí)行,它是任何程序的主體基本結(jié)構(gòu),即使在選擇結(jié)構(gòu)或者更為復(fù)雜的循環(huán)結(jié)構(gòu)中,也常以順序結(jié)構(gòu)作為其子結(jié)構(gòu)。 在順序結(jié)構(gòu)中,通常使用基本控件完成
24、輸入及輸出操作,使用賦值語句等簡單的操作語句組成順序結(jié)構(gòu)即可實現(xiàn)順序結(jié)構(gòu)程序的編寫。,2.4.4 選擇結(jié)構(gòu),選擇結(jié)構(gòu)是計算機科學(xué)用來描述自然界和社會生活中分支現(xiàn)象的重要手段。其特點是:根據(jù)所給定的條件成立(真)或否(假),而決定從實際可能的不同分支中執(zhí)行某一分支的相應(yīng)操作。 在Delphi中,實現(xiàn)選擇結(jié)構(gòu)的語句是If語句和Case語句,這兩種語句又稱為條件語句,條件語句的功能就是根據(jù)表達式的值有選擇地執(zhí)行一組語句。,2.4.4 選擇結(jié)構(gòu),1. If語句 在執(zhí)行一段代碼以前,If語句能讓用戶判斷某個條件是否滿足。 注意如果在一條if語句中有多個條件,用戶需要用括號把這幾個條件分別用括號括起來。
25、在Pascal中的begin和end,就像是C和C++中的“”和“”,例如,下面的代碼是當一個條件滿足時要執(zhí)行多條語句: if x=6 then begin DoSomething; DoSomethingElse; DoAnotherThing; end;,2.4.4 選擇結(jié)構(gòu),用if...else能組合多個條件: if x=100 then SomeFunction else if x=200 then SomeOtherFunction else begin SomethingElse; Entirely end;,2.4.4 選擇結(jié)構(gòu),2. case語句 在Pascal中的case語句
26、就像是C和C + +中的switch語句。case語句用來在多個可能的情況中選擇一個條件,而不再需要用一大堆if...else if...else if結(jié)構(gòu),下面的代碼是Pascal的case語句:,2.4.4 選擇結(jié)構(gòu),case SomeIntegerVariable of 101: DoSomething; 202: begin DoSomething; DoSomethingElse; end; 303: DoAnotherthing; else DoTheDefault; end; 注意case語句的選擇因子必須是有序類型,而不能用非有序的類型如字符串作為選擇
27、因子。,2.4.5 循環(huán)結(jié)構(gòu),循環(huán)是一種能重復(fù)執(zhí)行某一動作的語言結(jié)構(gòu),Pascal中的循環(huán)結(jié)構(gòu)和其他語言中的循環(huán)結(jié)構(gòu)相類似,下面列出了在Pascal中要用到的各種循環(huán)結(jié)構(gòu)。 1. for循環(huán) for循環(huán)適合用在事先知道循環(huán)次數(shù)的情況下,下面的代碼在一個循環(huán)中把控制變量加到另一個變量中,共重復(fù)10次: var i,x:Integer; begin x:=0; for i:=1 to 10 do inc(x,i); end;,2.4.5 循環(huán)結(jié)構(gòu),2. while循環(huán) while循環(huán)結(jié)構(gòu)用在先判斷某些條件是否為真,然后重復(fù)執(zhí)行某一段代碼的情況下。while的條件是在循環(huán)體執(zhí)行前進行判斷的。用wh
28、ile循環(huán)的典型例子是當文件沒有到達文件結(jié)尾時,對文件進行某一重復(fù)操作。下面的例子演示了每次從文件中讀一行并寫到屏幕上: Program FileIt; $APPTYPE CONSOLE var f:=TextFile; S:=String;,2.4.5 循環(huán)結(jié)構(gòu),begin AssignFile(f,foo.txt); Reset(f); while not EOF(f) do begin readln(f,S); writeln(S); end; CloseFile(f); end. Pascal中的while循環(huán)基本上跟C中的while循環(huán)和Visual Basic中Do While循環(huán)
29、一樣。,2.4.5 循環(huán)結(jié)構(gòu),3. repeat...until repeaat...until循環(huán)與while循環(huán)相似,但考慮問題的角度不同,它在某個條件為真前一直執(zhí)行給定的代碼。因為條件測試在循環(huán)的結(jié)尾,所以循環(huán)體至少要執(zhí)行一遍。Pascal的repeat...until語句大致上同于C語言中的do...while語句。,2.4.5 循環(huán)結(jié)構(gòu),例如,下面的代碼不斷地把一個計數(shù)器加1,直到它大于100為止: var x:Integer; begin x:=1; repeat inc(x); until x100; end;,2.4.5 循環(huán)結(jié)構(gòu),4. Break()過程 在while、fo
30、r或repeat循環(huán)中調(diào)用Break(),使得程序的執(zhí)行流程立即跳到循環(huán)的結(jié)尾,在循環(huán)中當某種條件滿足時需要立即跳出循環(huán),這時調(diào)用Break()。Pascal中的Break()類似于C語言中的break和Visual Basic中的Exit語句。下面的代碼演示了在5次循環(huán)后跳出循環(huán)。 var i:Integer; begin for i:=1to 100000 do begin MessageBeep(0); if i=5 then break; end; end;,2.4.5 循環(huán)結(jié)構(gòu),5. Continue()過程 如果想跳過循環(huán)中部分代碼重新開始下一次循環(huán),就調(diào)用Continue()
31、過程。注意下面的例子在執(zhí)行第一次循環(huán)時continue()后的代碼不執(zhí)行: var i:Integer; begin for i:=1 to 3 do begin writeln(i,.Before Continue); if i=1 then continue; writeln(i,.After continue); end; end;,2.5 過程與函數(shù),過程與函數(shù)是實現(xiàn)一定功能的語句塊,可以在程序的其他地方被調(diào)用,也可以進行遞歸調(diào)用。 過程與函數(shù)的區(qū)別在于:過程沒有返回值,而函數(shù)有返回值。 2.5.1 過程 2.5.2 函數(shù) 2.5.3 參數(shù) 2.5.4 子程序的嵌套與遞歸 2.5
32、.5 變量的作用域 2.5.6 Delphi的程序結(jié)構(gòu),2.5.1 過程,過程的定義包括過程原型、過程體的定義。 過程定義的形式如下: procedure procedureName(parameterList);directives; local Declarations; begin statements end;,2.5.1 過程,其中procedureName是過程名,為一個有效的標識符。 parameterList為參數(shù)列表,需要指明參數(shù)的個數(shù)及其數(shù)據(jù)類型。 directives是一些關(guān)于函數(shù)的指令字,可以一次設(shè)置多個,使用分號隔開。localDeclarations中定義了該函數(shù)中
33、需要使用的一些臨時變量,通常也叫做本地變量。 在begin與end之間是在函數(shù)調(diào)用時實現(xiàn)特定功能的一系列語句。 上面的parameterList、directives、localDeclarations和statements等為可選部分。,2.5.1 過程,procedure NumString(N: Integer; var S: string); var V: Integer; begin V := Abs(N); S := ; repeat S := Chr(V mod 10 + Ord(0)) + S; V := V div 10; until V = 0; if N < 0 th
34、en S := - + S; end;,2.5.2 函數(shù),函數(shù)的定義與過程非常類似,只是使用的保留字不同,而且多了一個返回值類型。 具體形式如下: function functionName(parameterList):returnType;directives; localDeclarations; begin statements end;,2.5.2 函數(shù),可以將函數(shù)要返回的數(shù)值賦值給Result。 如果函數(shù)體中存在著一些由于判斷而產(chǎn)生的分支語句時,要在每一個分支中設(shè)置返回值。通常要根據(jù)函數(shù)的返回值來確定下一步的操作。,2.5.2 函數(shù),function Power(X: Real;
35、Y: Integer): Real; var I: Integer; begin Result := 1.0; I := Y; while I 0 do begin if Odd(I) then Result := Result * X; I := I div 2; X := Sqr(X); end; end;,2.5.3 參數(shù),一般將函數(shù)定義時參數(shù)列表中的參數(shù)稱為形參,將函數(shù)調(diào)用時參數(shù)列表中的參數(shù)稱為實參。在函數(shù)原型中,多個參數(shù)之間用分號隔開,同一類型的參數(shù)可以放在一起,以逗號隔開。在函數(shù)調(diào)用的時候,在函數(shù)原型中,多個參數(shù)之間用逗號隔開。 一般來說,形參列表和實參列表完全匹配是指參數(shù)
36、的個數(shù)一樣,而且順序排列的數(shù)據(jù)類型也完全一致。對于普通的函數(shù),如果編譯器發(fā)現(xiàn)實參的數(shù)據(jù)類型與形參的數(shù)據(jù)類型不匹配,會將實參的數(shù)據(jù)類型進行一次或多次的“提升”,比如:將Integer類型轉(zhuǎn)換為Double類型。,2.5.3 參數(shù),可以為過程和函數(shù)的參數(shù)指定默認數(shù)值。具體方法是在參數(shù)定義后面緊接著一個等號“=”,然后是一個常量。指定默認數(shù)值的參數(shù)要放在參數(shù)列表的后部,將沒有指定默認數(shù)值的參數(shù)放在參數(shù)列表的前面部分。在函數(shù)調(diào)用的時候,可以為設(shè)置了默認值的參數(shù)指定一個新值,在函數(shù)體中,各語句使用的是指定的新值;如果沒有指定新值,則使用默認值。同樣,如果存在多個設(shè)置了默認值的參數(shù),只有前面的參數(shù)指定了新
37、值,后面的參數(shù)才可以指定新值。,【例2-2】,program Project1; $APPTYPE CONSOLE uses Sysutils; // 為了使用函數(shù)Format //以一定精度顯示一個浮點數(shù) function ShowNum(Num:Double;Precision:Integer=4):Boolean; var MesStr:string; // 浮點數(shù)顯示輸出的內(nèi)容 begin if Precision<=-1 then // 小數(shù)點后的位數(shù)要大于或等于零 begin Result:=False; Exit; // 退出顯示函數(shù) end else begin,定義一個函數(shù)S
38、howNum,可以將一個浮點數(shù)按指定的精度輸出在屏幕上。,【例2-2】,// 設(shè)置顯示的格式 MesStr:=Format(%*.*f,10,Precision,Num); Result:=True; end; Writeln(MesStr); // 顯示數(shù)據(jù) end; begin ShowNum(123.456789); // Precision默認為4 ShowNum(123,5); // 參數(shù)對數(shù)據(jù)類型進行升級 // 下面一句代碼不正確,故屏蔽掉 // ShowNum(123.456789,9.13);// 參數(shù)對數(shù)據(jù)類型不能降級 ShowNum(22 div 7,5);// 調(diào)用函數(shù)
39、// 可以根據(jù)函數(shù)的返回值確定下一步的操作 if ShowNum(123.456789,-3)=False then Writeln(數(shù)據(jù)格式設(shè)置錯誤,輸出失敗。); Writeln(按下回車鍵退出。); Readln; end.,【例2-2】,運行結(jié)果如下: 123.4568 123.00000 3.14286 數(shù)據(jù)格式設(shè)置錯誤,輸出失敗。 按Enter鍵退出。 說明: 為了使用函數(shù)Format,需要在uses語句中將Sysutils單元包含進去。,【例2-2】, 由于小數(shù)點后的位數(shù)不可以設(shè)置為負數(shù),所以當出現(xiàn)負數(shù)的時候,ShowNum函數(shù)返回False,并調(diào)用Exit函數(shù)立刻退出ShowN
40、um函數(shù)。 在語句ShowNum(123,5);中,首先將整型常數(shù)123轉(zhuǎn)換為浮點型常數(shù),然后進行參數(shù)傳遞。 在語句ShowNum(22 div 7,5);中,22 div 7的結(jié)果為3,然后再轉(zhuǎn)換為浮點型常數(shù)進行參數(shù)傳遞。,2.5.4 子程序的嵌套與遞歸,在一個子程序(過程或函數(shù))中包含另外一個子程序(過程或函數(shù))的調(diào)用,稱為子程序的嵌套。 子程序的遞歸調(diào)用是指一個過程直接或間接調(diào)用自己本身,子程序直接調(diào)用自身稱為直接遞歸,子程序間接調(diào)用自己稱為間接遞歸。在遞歸調(diào)用中,一個過程執(zhí)行的某一步要用到它自身的上一步(或上幾步)的結(jié)果。,2.5.4 子程序的嵌套與遞歸,遞歸調(diào)用在處理階乘運算、級數(shù)運
41、算、冪指數(shù)運算等方面特別有效。 遞歸函數(shù)論是現(xiàn)代數(shù)學(xué)的一個重要分支,數(shù)學(xué)上常常采用遞歸的辦法來定義一些概念。例如,自然數(shù)n的階乘可以遞歸定義為: 遞歸在算法描述中有著重要的地位,很多看似非常復(fù)雜的問題,但使用遞歸后可以很輕松地解決。在間接遞歸調(diào)用中,子程序必須超前引用,即在子程序的首部后面加上保留字forward。,n!=,【例2-4】,編寫程序打印菲波拉西(Fibonacci)數(shù)列。 菲波拉西數(shù)列排列如下: 1 1 2 3 5 8 13 21 34 55 分析:形成此數(shù)列的規(guī)律是,它的頭兩個數(shù)為1,從第三個數(shù)開始其值是它前面的兩個數(shù)之和。即: 。,fibo=,【例2-4】,這里只寫出了菲波
42、拉西函數(shù)的代碼,事件代碼用戶可自己設(shè)計。 Function fact(n:Real):Real; begin if n=1 Or n=2 Then fibo:=1; else fibo:=fibo(n-1)+fibo(n-2); end; 利用遞歸算法能簡單有效地解決一些特殊問題,但是由于遞歸調(diào)用過程比較繁瑣,所以執(zhí)行效率很低,在選擇遞歸時要慎重,2.5.5 變量的作用域,作用域是指一個過程、函數(shù)和變量能被編譯器識別的范圍,例如,一個全局常量的作用域是整個程序,而一些過程中的局部變量的作用域是那些過程。,【例2-5】作用域的演示的示例 Program Foo; $APPTYPE CONSO
43、LE const SomeConstant=100; var SomeGlobal:Integer; R:Real;,2.5.5 變量的作用域,procedure SomeProc(var R:Real); var LocalReal:Real; begin LocalReal:=10.0; R:=R-LocalReal; end; begin SomeGlobal:= SomeConstant; R:=4.593; SomeProc(R); end;,2.5.5 變量的作用域,SomeConstant、SomeGlobal和R是全局變量,它們在程序的任何地方都能被編譯器所識別。過程SomeP
44、roc()有兩個變量R和LocalReal,它們的作用域是這個過程。如果試圖在SomeProc()過程外訪問LocalReal,編譯器將顯示有未知識別符的錯誤。如果在SomeProc()中訪問R,用的是局部變量的R,如果在這個過程外用R,則用的是全局變量的R。,2.5.6 Delphi的程序結(jié)構(gòu),一個Delphi應(yīng)用程序?qū)?yīng)一個工程,從程序結(jié)構(gòu)的角度來看,它由一個主程序與若干個單元組成,而程序段則是構(gòu)成主程序和單元的基本結(jié)構(gòu)要素。 1. 主程序 Delphi工程文件中的代碼即為Delphi應(yīng)用程序的主程序。主程序的結(jié)構(gòu)為: program工程文件名; uses語句 $R*.RES 執(zhí)行部分,2
45、.5.6 Delphi的程序結(jié)構(gòu),Delphi中主程序一般很短,這是因為程序的幾乎所有功能在uses語句所引用的單元中。使用Delphi編程時,主程序由程序由系統(tǒng)自動生成,無需程序員編寫主程序的代碼,程序員所編寫的只是程序所引用的單元文件中的代碼。,2.5.6 Delphi的程序結(jié)構(gòu),2. 單元與作用域 Delphi編程強調(diào)單元或模塊的使用。在引入類之前,單元是模塊化編程的基礎(chǔ),而類也是建立在單元概念基礎(chǔ)上的。在Dilphi的應(yīng)用程序中,單元文件可以用來定義一個窗體,也可以用來定義程序中所使用的子程序、全程變量和常量等。 當創(chuàng)建工程時,或是向工程中添加一個新窗體時,Delphi都將自動添加一個
46、新的單元文件,該單元為新窗體定義類與對象。使用菜單命令:“File”中的“New”命令,在“New”選項卡中選擇“Unit”圖標,就能在當前工程中添加一個與窗體無關(guān)的獨立單元。,2.5.6 Delphi的程序結(jié)構(gòu),(1) 單元的結(jié)構(gòu) 單元文件的結(jié)構(gòu)如下所示: unit 單元名 // 單元首部 interface // 接口部分 implementation // 實現(xiàn)部分 end // 單元結(jié)束,2.5.6 Delphi的程序結(jié)構(gòu),(2) 作用域 在單元的接口部分聲明的標識符(類型、常量、變量、函數(shù)和過程等)在整個單元內(nèi)(自聲明處起至單元結(jié)束)有效。其他單元(客戶單元
47、)引用該單元時,則在客戶單元內(nèi)有效。 在實現(xiàn)部分隱含聲明的標識符,不能在單元外使用,即它們在客戶單元中不可見。這些標識符在本單元的實現(xiàn)部分自聲明處起至實現(xiàn)部分結(jié)束的任何程序段中有效。 在實現(xiàn)部分的任何子程序段中聲明的標識,則遵循程序段中標識符的作用域規(guī)則。,2.5.6 Delphi的程序結(jié)構(gòu),3. 程序段與作用域 一個程序段是由聲明部分和語句部分構(gòu)成的結(jié)構(gòu),其一般結(jié)構(gòu)為: 聲明部分 begin 語句 End 其中聲明部分用來聲明類型、常量、變量、函數(shù)和過程等,語句則是程序段的執(zhí)行部分,可以是簡單語句、復(fù)合語句或簡單語句與復(fù)合語句的任意組合。在聲明部分聲明的標識符(類型、常量、變量、函數(shù)和過程)
48、其作用范圍僅限于該程序段內(nèi)。 函數(shù)體和過程體就是典型的程序段。,2.6 常用內(nèi)部函數(shù),為了盡可能地減少開發(fā)應(yīng)用程序的難度和工作量,Delphi提供了一個內(nèi)容十分豐富的程序庫Run-Time Library(RTL),其中包括了大量的基本函數(shù)、過程、常量和變量定義。RTL包含的函數(shù)、過程、常量等都是在System單元中定義的,而System單元會自動地被其他程序單元引用,所以用戶編寫的應(yīng)用程序可以隨時調(diào)用RTL中可用的函數(shù),而不用在程序的uses語句中引用該單元。 2.6.1 數(shù)學(xué)運算函數(shù) 2.6.2 字符處理函數(shù) 2.6.3 時間和日期函數(shù) 2.6.4 數(shù)據(jù)類型轉(zhuǎn)換函數(shù) 2.6.5 格式輸出函數(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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案