Delphi教学第02章面向对象的Pascal(第二部分).ppt

上传人:wuy****n92 文档编号:80441065 上传时间:2023-03-23 格式:PPT 页数:52 大小:299.50KB
返回 下载 相关 举报
Delphi教学第02章面向对象的Pascal(第二部分).ppt_第1页
第1页 / 共52页
Delphi教学第02章面向对象的Pascal(第二部分).ppt_第2页
第2页 / 共52页
点击查看更多>>
资源描述

《Delphi教学第02章面向对象的Pascal(第二部分).ppt》由会员分享,可在线阅读,更多相关《Delphi教学第02章面向对象的Pascal(第二部分).ppt(52页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Delphi 7 程序设计程序设计福州大学至诚学院福州大学至诚学院第二章第二章 面向对象的面向对象的Pascal Delphi的的编编程程语语言言即即Object Pascal是是在在Pascal的的基基础础上上发发展展起起来来的的,它它继继承承了了Pascal语语言言语语法法结结构构严严谨谨和编译代码高效优化等优点。和编译代码高效优化等优点。2.1 基本概念基本概念2.2 简单数据类型简单数据类型2.3 常量、变量常量、变量2.4 运算符和表达式运算符和表达式2.5 语句语句2.6 构造构造(结构)数据类型结构)数据类型2.7 函数和过程函数和过程字符串类型字符串类型实型实型整型整型字符型字

2、符型布尔型布尔型枚举类型枚举类型子界类型子界类型序数类型序数类型标准类型标准类型自定义类型自定义类型简单类型简单类型构造类型构造类型集合类型集合类型数组类型数组类型记录类型记录类型文件类型文件类型可变类型可变类型数据类型数据类型2.6 集合类型集合类型2.6.1-1 集合类型的定义集合类型的定义 集集合合是是指指具具有有相相同同性性质质且且可可以以相相互互区区分分的的对对象象的的全全体体。例例如如,所所有有的的英英文文字字母母可可以以组组成成一一个个集集合合,全全体体自自然然数数组组成成一一个个集集合合,某某个个学学校校的的全全体体学学生生组组成成一一个个集集合合,等等等等。为为了了表表示示集

3、集合合,Object Pascal 引入了集合类型。引入了集合类型。使用集合类型和集合变量之前必须首先进行类型定义和变量声明。使用集合类型和集合变量之前必须首先进行类型定义和变量声明。1.集合与集合类型集合与集合类型 集合的特点是所包括的各个对象具有某种相同的性质,构成集合的集合的特点是所包括的各个对象具有某种相同的性质,构成集合的各个对象称为集合的元素,各个对象称为集合的元素,集合的元素是某种简单数据类型的值,这种集合的元素是某种简单数据类型的值,这种数据类型称为集合的数据类型称为集合的“基类型基类型”,基类型只能是顺序类型,基类型只能是顺序类型。对于集合有。对于集合有以下几个特点:以下几个

4、特点:(1)集合中的元素是互异的,即相同的元素视为同一个元素,集合)集合中的元素是互异的,即相同的元素视为同一个元素,集合1,1,2,2与集合与集合1,2是相同的;是相同的;(2)集合中的元素是无序的,)集合中的元素是无序的,1,2与与2,1是同一个集合;是同一个集合;2.6.1-1 集合类型的定义集合类型的定义2.集合定义集合定义集合的声明格式如下:集合的声明格式如下:Type =Set of;是用户定义的集合类型名称。是用户定义的集合类型名称。表示集合中各元素的类型,表示集合中各元素的类型,可以是字符型、布尔型、可以是字符型、布尔型、枚举型和子界型等顺序类型,但不能是整型、实型和其枚举型和

5、子界型等顺序类型,但不能是整型、实型和其他的构造类型。他的构造类型。(3)集合中的元素按顺序出现时可以写为子界的形式,如)集合中的元素按顺序出现时可以写为子界的形式,如6,7,8,9,11,13可写为可写为69,11,13;(4)元素与集合的关系是元素与集合的关系是“属于属于”或或“不属于不属于”关系。(关系。(in)(5)集合类型属于构造类型,是由其他的数据类型按照一定的规则构集合类型属于构造类型,是由其他的数据类型按照一定的规则构造而成的。造而成的。Object Pascal规定集合的基类型可能的值不能超过规定集合的基类型可能的值不能超过256个,个,且序号必须在且序号必须在0到到255之

6、间,这同时也表明,之间,这同时也表明,集合中元素的个数最多是集合中元素的个数最多是256个。个。例如,以下定义会显示编译错误:例如,以下定义会显示编译错误:type intset=set of 1.300;/集合元素超过集合元素超过256个个2.6.1-1 集合类型的定义集合类型的定义 若基类型为枚举或子界类型,则必须先定义该类型,若基类型为枚举或子界类型,则必须先定义该类型,再定义集合类型。例如:再定义集合类型。例如:type Colors=(Red,Blue,Yellow,White,Black);color=set of Colors;numbers=set of 1.10;2.6.1-

7、1 集合类型的定义集合类型的定义3.集合变量集合变量定义了一个集合则可以声明集合变量,集合变量声明的格式如下:定义了一个集合则可以声明集合变量,集合变量声明的格式如下:var :;集合变量的取值称为集合值,它是基类型元素的一个集合,取值范围是包括集合变量的取值称为集合值,它是基类型元素的一个集合,取值范围是包括空集合在内的全体子集。集合值的一般表示格式为方括号括起来的元素序列,空集合在内的全体子集。集合值的一般表示格式为方括号括起来的元素序列,元素之间用逗号隔开。元素之间用逗号隔开。,如下定义了一个集合变量:如下定义了一个集合变量:Type Colors=(Red,Yellow,Blue);B

8、asicColor=set of Colors;var Color1:BasicColor;则集合变量则集合变量Color1的取值可以是下列所示的任何集合:的取值可以是下列所示的任何集合:,Red,Yellow,Blue,Red,Yellow,Red,Blue,Yellow,Blue,Red,Yellow,Blue若集合类型的基类型有若集合类型的基类型有n个元素,根据组合可知该类型变量的取值有个元素,根据组合可知该类型变量的取值有2n 个,个,其中包括一个空集合其中包括一个空集合。2.6.1-2 集合类型的运算集合类型的运算1.集合的并、交、差运算集合的并、交、差运算相同类型的集合可以进行并、

9、交、差运算,其值仍是一个该类型的集相同类型的集合可以进行并、交、差运算,其值仍是一个该类型的集合。合。并运算:并运算:集合集合A、B类型相同,则类型相同,则A和和B的并运算记作的并运算记作A+B或或B+A,计,计算结果是由算结果是由A和和B中所有不重复元素组成的集合。中所有不重复元素组成的集合。交运算:交运算:集合集合A、B类型相同,则类型相同,则A和和B的交运算记作的交运算记作AB或或BA,计算结果是由计算结果是由A和和B中所有公共元素组成的集合。中所有公共元素组成的集合。差运算:差运算:集合集合A、B类型相同,则类型相同,则A和和B的差运算记作的差运算记作A-B,计算结果,计算结果是由所有

10、属于集合是由所有属于集合A而不属于集合而不属于集合B的元素组成的集合。利用差运算可的元素组成的集合。利用差运算可以删除集合中的一些元素。以删除集合中的一些元素。例如,例如,A=1,2,3,B=2,3,4,则:,则:A+B=1,2,3,4;A*B=2,3;A-B=1;B-A=4;集集合合类类型型数数据据的的运运算算包包括括两两大大类类,一一类类是是集集合合的的并并、交交、差差运运算算,其其运运算算结结果果仍仍为为集集合合类类型型值值;一一类类是是集集合合的的关关系系运运算算,其其运运算算结结果果是是布布尔类型值。尔类型值。2.6.1-2 集合类型的运算集合类型的运算 2.集合的关系运算集合的关系

11、运算 集合的关系运算包括类型相同集合之间所进行的相等集合的关系运算包括类型相同集合之间所进行的相等“=”、不等、不等“”、包含、包含“=”、被包含、被包含“=”等运算,以及数据是否属于集合的等运算,以及数据是否属于集合的IN运算。这些运算的结果均为布尔类型值。运算。这些运算的结果均为布尔类型值。集合相等运算:集合相等运算:如果相同类型集合如果相同类型集合A和和B的元素完全相同,则运算的元素完全相同,则运算A=B或或B=A的值为的值为True,否则为,否则为Flase。2,3=3,2的值为的值为True。集合的不等运算:集合的不等运算:如果相同类型集合如果相同类型集合A和和B的元素不完全相同,则

12、运的元素不完全相同,则运算算AB或或BA的值为的值为True,否则为,否则为Flase。2,31,3,2的值为的值为True。集合的包含运算:集合的包含运算:如果集合如果集合B中的元素都是集合中的元素都是集合A中的元素,则运算中的元素,则运算A=B(称为(称为A包含包含B)的值为)的值为True,否则为,否则为Flase。1,3,2=2,3 的值为的值为True。集合的被包含运算:集合的被包含运算:如果集合如果集合B中的元素都是集合中的元素都是集合A中的元素,则运中的元素,则运算算B=A(称为(称为B被包含在被包含在A中)的值为中)的值为True,否则为,否则为Flase。RED,BLUE=R

13、ED,GREEN,BLUE的值为的值为True。属于运算:属于运算:如果数据如果数据X与集合与集合A的基类型相同,且被包含在的基类型相同,且被包含在A中,则运算中,则运算X INA(称为(称为X属于属于A)的值为)的值为True,否则为,否则为Flase。RED IN RED,BLUE 的值为的值为True。2.6.1-2 集合类型的运算集合类型的运算3.集合运算符的优先级集合运算符的优先级集合运算符的优先级决定运算时的顺序,运算符的优先顺序如表所示。集合运算符的优先级决定运算时的顺序,运算符的优先顺序如表所示。优优先先顺顺序序运算符运算符1(最高)(最高)*(交运算)(交运算)2+(并运算)

14、、(并运算)、-(差运算)(差运算)3(最低)(最低)=(相等)、(相等)、(不等)、(不等)、=(包含)(包含)=2,3,4,5,7(D)12 in 1.10参考答案:参考答案:1、A 2、A 3、D 4、B 数组的概念数组的概念 数组是一些具有相同类型的元素按一定顺序组成的数组是一些具有相同类型的元素按一定顺序组成的序列。序列。其中每个元素由其对应的位置来指定,这个位置其中每个元素由其对应的位置来指定,这个位置就是数组的索引号(又称就是数组的索引号(又称下标下标),数组元素与索引号是),数组元素与索引号是一一对应的,用户可以通过这个索引号来存取数组的每一一对应的,用户可以通过这个索引号来存

15、取数组的每个元素。数组中的各元素是顺序地安排在内存中一段连个元素。数组中的各元素是顺序地安排在内存中一段连续的存储空间中。按照数组在定义时是否确定了元素个续的存储空间中。按照数组在定义时是否确定了元素个数可以将数组分为数可以将数组分为静态数组和动态数组静态数组和动态数组。2.6.2 数组数组 2.6.2-1 静态数组静态数组 数组是相同类型的元素按一定顺序组成的序列。数组中的每一个元素数组是相同类型的元素按一定顺序组成的序列。数组中的每一个元素都可以通过数组名和惟一一个索引号来存取。在都可以通过数组名和惟一一个索引号来存取。在Object Pascal中可以定中可以定义数组元素个数一定的数组,

16、即静态数组。根据静态数组的维数可以把义数组元素个数一定的数组,即静态数组。根据静态数组的维数可以把数组分为一维静态数组、二维静态数组和多维静态数组。数组分为一维静态数组、二维静态数组和多维静态数组。静态数组在程序初始化时必须分配内存单元,明确其固定的大小和静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。元素的数据类型。2.6.2-1(1)定义定义1.一维静态数组一维静态数组一维静态数组类型声明格式为:一维静态数组类型声明格式为:Type =arrayof;如定义一个数组类型:如定义一个数组类型:Type MyArray=array1.100of Real;表示定义了一

17、个有表示定义了一个有100个元素的数组类型,元素下标从个元素的数组类型,元素下标从1到到100,每个数组元素都是,每个数组元素都是Real类型,数组类型标识符为类型,数组类型标识符为MyArray。2.6.2-1(1)2.6.2-1(1)静态数组定义静态数组定义 数组类型标识符可以是任何合法的标识符。数组类型标识符可以是任何合法的标识符。Object Pascal 允许允许下标的类型为整数类型、字符类型、布尔类型、下标的类型为整数类型、字符类型、布尔类型、子界类型、枚举类型子界类型、枚举类型等。而等。而元素类型可以为任意的数据类型元素类型可以为任意的数据类型,但在同一数组中,所有元素的数据类型

18、必须相同。但在同一数组中,所有元素的数据类型必须相同。对于用户对于用户定义的数据类型作为下标类型,在使用之前必须声明。例如定义的数据类型作为下标类型,在使用之前必须声明。例如可以进行如下定义:可以进行如下定义:Type Color=(red,green,blue);Number=0.100;MyArray=ArrayColor of Integer;ColorArray=ArrayNumber of Color;以上就定义了一个以以上就定义了一个以MyArray为标识的数为标识的数组类型,其元素下标分别为组类型,其元素下标分别为 red、green和和blue,每个数组元素都是,每个数组元素都

19、是Integer类型。类型。2.6.2-1(1)2.6.2-1(1)静态数组定义静态数组定义 经过数组类型声明之后才可以定义数组变量。就像定义整型经过数组类型声明之后才可以定义数组变量。就像定义整型或实型变量一样,通过变量说明语句定义变量,例如:或实型变量一样,通过变量说明语句定义变量,例如:var A1,A2:MyArray;/A1red;A1green;A1blue 上面定义了两个数组变量上面定义了两个数组变量A1和和A2,它们的数据类,它们的数据类型是型是MyArray;也可以把数组类型的定义和数组变量;也可以把数组类型的定义和数组变量的定义组合起来,以便简化代码,例如:的定义组合起来,

20、以便简化代码,例如:var A1,A2:Array1.100 of real;数组元素的访问数组元素的访问:要访问数组中的元素,可以用数组名加方括号,方括号内是要访问数组中的元素,可以用数组名加方括号,方括号内是元素的下标值,如元素的下标值,如A13、A220等。方括号内的下标值必须等。方括号内的下标值必须符合数组类型的定义,其类型必须与下标类型一致,其值在符合数组类型的定义,其类型必须与下标类型一致,其值在下标取值范围。另外,下标可以是表达式。下标取值范围。另外,下标可以是表达式。Eg:x=4;y=16;A2x+y2.6.2-1(1)2.6.2-1(1)静态数组定义静态数组定义3.二维及多维

21、静态数组二维及多维静态数组 二维数组是指一个一维数组中的元素类型本身又是一个一维数组,声明二维数组是指一个一维数组中的元素类型本身又是一个一维数组,声明二维数组的一般形式为:二维数组的一般形式为:Type =Array,of;例如:例如:Type RealArray=Array1.20,1.100of Real;以把二维数组看做是一个矩阵,其中下标以把二维数组看做是一个矩阵,其中下标1是行,下标是行,下标2是列,这样要是列,这样要访问二维数组的元素可以写成访问二维数组的元素可以写成array12,3,即访问第,即访问第2行第行第3列的元素。列的元素。对对于多维数组可以使用循环语句给数组赋值,例

22、如:于多维数组可以使用循环语句给数组赋值,例如:var Col,Row:Integer;for Col:=1 to 20 do for Row:=1 to 100 do RealArrayCol,Row:=0;2.6.2-1(1)2.6.2-1(1)静态数组定义静态数组定义 多维静态数组的一般格式为:多维静态数组的一般格式为:Type=Array,,of 一般情况,用户的数组不超过三维数组,用到三维以一般情况,用户的数组不超过三维数组,用到三维以上的很少,但上的很少,但Object Pascal允许定义任意维数的数组。允许定义任意维数的数组。静态数组通过下标类型、维数明确了数组的大小。动态静态

23、数组通过下标类型、维数明确了数组的大小。动态数组使用时没有说明数组的大小,只是在程序设计中为数组使用时没有说明数组的大小,只是在程序设计中为程序动态地开辟存储空间。程序动态地开辟存储空间。2.6.2-1(1)2.6.2-1(1)静态数组使用静态数组使用随机产生随机产生5个小于个小于10的整数的整数,放入一维数组放入一维数组A中中,求出该组数求出该组数据的累加和及平均值据的累加和及平均值,并输出并输出.运行结果如图示运行结果如图示:var Form1:TForm1;a:array1.5 of integer;/定义全局变量定义全局变量procedure TForm1.Button1Click(S

24、ender:TObject);var i:integer;begin label1.Caption:=;randomize;for i:=1 to 5 do begin ai:=trunc(random(10);label1.Caption:=label1.Caption+inttostr(ai)+;end;end;procedure TForm1.Button2Click(Sender:TObject);var i,sum:integer;avg:real;begin sum:=0;for i:=1 to 5 do sum:=sum+ai;avg:=sum/5;label2.Caption:

25、=累加和为:累加和为:+inttostr(sum)+,平均平均值为值为:+floattostr(avg);end;动态数组动态数组 静静态态数数组组在在程程序序初初始始化化时时必必须须明明确确其其固固定定的的大大小小和和类类型型。然然而而在在有有些些时候,希望在数组使用的时候再分配内存,这种数组称为动态数组。时候,希望在数组使用的时候再分配内存,这种数组称为动态数组。动态数组是指在定义数组时不说明数组元素个数而是在程序运行时确定。动态数组是指在定义数组时不说明数组元素个数而是在程序运行时确定。1.一维动态数组一维动态数组一维动态数组类型声明格式为:一维动态数组类型声明格式为:Type =arr

26、ay of;也可在声明变量时直接声明一维动态数组:也可在声明变量时直接声明一维动态数组:var :array of;如下代码:如下代码:var Myarray:array of integer;就声明了一个变量名为就声明了一个变量名为Myarray的元素类型为一维整型的动态数组。的元素类型为一维整型的动态数组。2.6.2-2 定义定义2.6.2-2 动态数组定义动态数组定义 一一维维动动态态数数组组的的声声明明中中没没有有给给出出数数组组的的下下标标类类型型,因因此此就就可可以以声声明明一一个个不不指指定定元元素素个个数数的的数数组组。在在程程序序设设计计中中,通通过过调调用标准过程用标准过程

27、Setlength来明确动态数组的大小。来明确动态数组的大小。varA:array of real;/定义一个名为定义一个名为A的动态数组的动态数组beginA2:=1.52;/错误,没有明确数组大小前是不能错误,没有明确数组大小前是不能对数组赋值的对数组赋值的setlength(A,30);/设置动态数组长度为设置动态数组长度为30,下标从,下标从0到到29A2:=1.52;/正确正确end;动态数组定义动态数组定义2.多维动态数组多维动态数组 动态数组也可以是多维的,要声明多维数组,可以采用递归的方式来动态数组也可以是多维的,要声明多维数组,可以采用递归的方式来定义。可以在一维数组的定义。

28、可以在一维数组的array of后面再附加上后面再附加上array of:Type =array of array of array of;var :;当然,也可以在声明变量时直接声明多维动态数组,如下定义:当然,也可以在声明变量时直接声明多维动态数组,如下定义:var :array of array of array of;如下代码定义了一个变量名为如下代码定义了一个变量名为A的元素数据类型为实型的二维动态数组:的元素数据类型为实型的二维动态数组:var A:array of array of real;相应地,如果要设定一个相应地,如果要设定一个45的二维动态数组可将的二维动态数组可将se

29、tlength函数写成:函数写成:setlength(A,4,5);2.6.3 2.6.3 记录类型记录类型 在解决现实问题中,常需要把一些数据类型不同的数据集中在一起,在解决现实问题中,常需要把一些数据类型不同的数据集中在一起,并作为一个整体处理。例如学生登记表一般包含学号、姓名、性并作为一个整体处理。例如学生登记表一般包含学号、姓名、性别、年龄、家庭地址多条信息,每一个学生的情况可以看成一个别、年龄、家庭地址多条信息,每一个学生的情况可以看成一个整体,就像数据库中的一个记录一样。整体,就像数据库中的一个记录一样。记录类型记录类型(record)是由不同类型的元素组成的一种结构,这些元是由不

30、同类型的元素组成的一种结构,这些元素称为域。素称为域。语法(记录类型的定义):语法(记录类型的定义):type 记录类型标识符记录类型标识符=Record域名域名1:类型类型;域名域名2:类型类型;.域名域名n:类型类型end;例例:type Student=Record/定义记录类型定义记录类型Student Num:1.60;Name:string;Birthday:TdateTime end;var Student1,Student2:Student;2.6.3 2.6.3 记录类型记录类型语法(记录域访问格式):语法(记录域访问格式):记录变量名记录变量名.域名域名例例:Student

31、1.Num=1;和和Student1.name=Tony;语法(语法(with语句):语句):with 记录变量名表记录变量名表 do 语句语句with后后如如果果包包含含多多个个变变量量名名,各各变变量量名名之之间间须须用用逗逗号号隔隔开开,do后后可可以以是是单单条条语语句句,也也可可以以是是复复合合语语句句(用用begin和和end括括起起来来),在在这这些些语语句句中中,对对域域的的访访问问不不需需要要再再加加记记录录的的变变量名。量名。例:例:with student1 dobeginnum:=1;name=TonyEnd;2.6.5 2.6.5 可变类型可变类型变体类型是变体类型是

32、Delphi 中提供了一种功能强大的数据类型。中提供了一种功能强大的数据类型。变体类型的作用在于能在运行期间动态的改变数据类型。变体类型的作用在于能在运行期间动态的改变数据类型。Variant变量在声明时,总是被初始化为一个特殊值变量在声明时,总是被初始化为一个特殊值Unassigned,表明,表明Variant未被赋值。未被赋值。当当Variant为的值为为的值为Null时,表明变量未知或数据已丢失。时,表明变量未知或数据已丢失。例:例:Var V,V1:Variant;Begin V:=Delphi is Great!;/此时变量是一个字符串。此时变量是一个字符串。V:=4;/此时变量是一

33、个整型数据。此时变量是一个整型数据。V:=1.5;/此时变量是一个浮点数。此时变量是一个浮点数。V:=true;/此时变量是一个布尔型量。此时变量是一个布尔型量。End;2.7 函数和过程函数和过程函数和过程是实现一定功能的语句块,是程序中的特定功能函数和过程是实现一定功能的语句块,是程序中的特定功能单元。可以在程序的其他地方被调用,也可以进行递归调用。单元。可以在程序的其他地方被调用,也可以进行递归调用。函数和过程的区别在于函数有返回值,而过程没有返回值。函数和过程的区别在于函数有返回值,而过程没有返回值。2.7.1 函数和过程的声明函数和过程的声明函数和过程在使用前必须进行声明。函数和过程

34、在使用前必须进行声明。1函数的声明函数的声明具体形式如下:具体形式如下:function():;2.7 函数和过程函数和过程函数的定义是在程序的函数的定义是在程序的implementation部分,具体形式如下:部分,具体形式如下:function():;varbegin :=/也可以用也可以用Result系统保留字代替系统保留字代替end;在在begin与与end之间是在函数调用时实现特定功能的一系列语句。函数值的之间是在函数调用时实现特定功能的一系列语句。函数值的返回有两种方式:返回有两种方式:将返回值直接赋给函数名。将返回值直接赋给函数名。将返回值赋给将返回值赋给Result。2.7 函

35、数和过程函数和过程【例例】求两个数中的最大数。求两个数中的最大数。function Max1(a,b:integer):integer;/两个形参两个形参为整型值为整型值a、b,函数返回值为整型,函数返回值为整型varm:Integer;begin if ab then m:=a else m:=b;Max1:=m;/或或result:=m;end;2.7 函数和过程函数和过程2过程的声明过程的声明过程的声明与函数类似,所不同的是使用的保留字不同,而且过程的声明与函数类似,所不同的是使用的保留字不同,而且少了一个返回值类型;少了一个返回值类型;具体形式如下:具体形式如下:procedure()

36、;过程的定义是在程序的过程的定义是在程序的implementation部分,具体形式如下:部分,具体形式如下:procedure();begin end;2.7 函数和过程函数和过程【例】显示一行【例】显示一行num个星号个星号*。procedure ShowStar(num:Integer);var i:Integer;s:String;begin s:=;for i:=1 to num do s:=s+*;ShowMessage(s);end;2.7 函数和过程函数和过程2.7.2 重载函数和过程重载函数和过程所谓重载,是指在同一程序内给不同的函数或过程取同一个名称。所谓重载,是指在同一程

37、序内给不同的函数或过程取同一个名称。重载函数必须用指令字重载函数必须用指令字overload来进行说明。来进行说明。下面的两个函数就是重载函数:下面的两个函数就是重载函数:function Max1(a:Integer;b:Integer):Integer;overload;/求两个整数的最大值求两个整数的最大值 function Max1(a:Real;b:Real):Real;overload;/求两个求两个实数的最大值实数的最大值下面两条语句就调用了不同的函数:下面两条语句就调用了不同的函数:Max1(3.7,4.6);/调用的是第二个重载函数调用的是第二个重载函数Max1(3,4);/

38、调用的是第一个重载函数调用的是第一个重载函数2.7 函数和过程函数和过程2.7.3 参数参数1形参与实参形参与实参函数或过程的声明和定义时参数列表中的参数称为形式参函数或过程的声明和定义时参数列表中的参数称为形式参数,简称形参;而函数或过程调用时参数列表中的参数数,简称形参;而函数或过程调用时参数列表中的参数称为实在参数,简称实参。称为实在参数,简称实参。2数值参数、变量参数和常量参数数值参数、变量参数和常量参数(1)数值参数数值参数在调用函数或过程时,数值参数在运行过程中只改变其形在调用函数或过程时,数值参数在运行过程中只改变其形参的值,不改变其实参的值,即形参不会影响原来实参参的值,不改变

39、其实参的值,即形参不会影响原来实参的值。的值。Eg:Var x:integer;procedure proc1(x:integer);X:=10 beginProc1(x);x:=x+5;end;则执行则执行proc1(x)后后,主程序中的主程序中的x=10,过程体中的过程体中的x=15(2)变量参数变量参数如果用户想改变传递的参数值,就需要使用变量参数,即如果用户想改变传递的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字在被调用程序的参数表中的形参前加上保留字var。Var x:integer;procedure proc2(var x:integer);X:=10

40、beginProc2(x);x:=x+5;end;则执行则执行proc2(x)后后,主程序中的主程序中的x=15,过程体中的过程体中的x=152.7 函数和过程函数和过程2.7 函数和过程函数和过程(3)常量参数常量参数 如果当过程或函数执行时要求不改变形参的值,最保险如果当过程或函数执行时要求不改变形参的值,最保险的办法是使用常量参数。的办法是使用常量参数。在参数表的参数名称前加上保在参数表的参数名称前加上保留字留字const可以使一个形参成为常量参数。使用常量参数可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护用户的参数,使用户在不想改变代替数值参数可以保护用户的参数,使用户在

41、不想改变参数值时不会意外地将新的值赋给这个参数。参数值时不会意外地将新的值赋给这个参数。Var x:integer;procedure proc3(const x:integer);X:=10 beginProc3(x);x:=x+5;/编译出错编译出错 end;2.7 函数和过程函数和过程2.7.4 作用域作用域 在在Object Pascal中,根据变量的作用域,可将变量分中,根据变量的作用域,可将变量分为:为:全局变量和局部变量全局变量和局部变量。所谓变量的作用域,是指变。所谓变量的作用域,是指变量的有效范围。全局变量在整个程序中都有效,其作用量的有效范围。全局变量在整个程序中都有效,其

42、作用域为整个程序;局部变量只在声明它的函数和过程中有域为整个程序;局部变量只在声明它的函数和过程中有效,其作用域只限于该函数或过程本身。效,其作用域只限于该函数或过程本身。2.7 函数和过程函数和过程例:例:typevarForm1:TForm1;/全局变量全局变量Form1implementation$R*.dfmprocedure TForm1.FormCreate(Sender:TObject);var m,n:Integer;/局部变量局部变量m,nForm1:Tform1;(*局部变量局部变量Form1,与上面的全局变量同名,在过程,与上面的全局变量同名,在过程TForm1.Form

43、Create中局部变量起作用。中局部变量起作用。*)2.7 函数和过程函数和过程2.7.5 函数和过程的调用函数和过程的调用1函数和过程的调用函数和过程的调用(1)函数的调用函数的调用函数调用的一般形式为:函数调用的一般形式为:()函数的调用往往是将返回值赋给某个变量或参与运算。函数的调用往往是将返回值赋给某个变量或参与运算。例如调用上例,将其返回值赋给变量例如调用上例,将其返回值赋给变量x的语句为:的语句为:x:=Max1(3,6);(2)过程的调用过程的调用过程的调用的一般形式为:过程的调用的一般形式为:();其中的实参可以是常量、变量或表达式,但实参的个数其中的实参可以是常量、变量或表达

44、式,但实参的个数和类型与形参完全匹配,即个数相同、类型一致。例和类型与形参完全匹配,即个数相同、类型一致。例如:调用上例的过程如:调用上例的过程ShowStar的语句为:的语句为:ShowStar(20);2.7 函数和过程函数和过程2函数和过程的递归调用函数和过程的递归调用 递归调用递归调用是指是指子程序子程序(函数或过程)(函数或过程)调用子程序自身调用子程序自身。用递归解决问题出自这样一种思维方法:把一个问题分解用递归解决问题出自这样一种思维方法:把一个问题分解成若干个子问题,这些子问题的求解方法与原问题的求解成若干个子问题,这些子问题的求解方法与原问题的求解方法一样,继续这种分解,直到

45、问题的规模足够小时,能方法一样,继续这种分解,直到问题的规模足够小时,能直接得出答案,然后再逐层回溯,组合这些子问题,以得直接得出答案,然后再逐层回溯,组合这些子问题,以得到原问题的解。用递归方法写出的程序较简短,容易理解,到原问题的解。用递归方法写出的程序较简短,容易理解,但递归的程序执行效率比较低。但递归的程序执行效率比较低。【例例】求求s=1+2+3+n。这个求和问题可以这样理解:这个求和问题可以这样理解:1 当当n=1n=1时时f(n)=f(n)=f(n-1)+n f(n-1)+n 当当n1n1时时 Function f(n:integer):integerBegin if n=1 t

46、hen result:=1;else result:=f(n-1)+n/调用函数自身调用函数自身End;练习练习1 设有一个自定义函数声明如下:设有一个自定义函数声明如下:function fun(x,y,z:integer):integer;begin fun:=z y div x;end;则表达式则表达式fun(fun(2,4,6),6,8)的值是多少?的值是多少?2 设有一个自定义过程声明如下:设有一个自定义过程声明如下:procedure p(x:integer;var y:integer);begin x:=x y;y:=y+x;end;执行下述程序段:执行下述程序段:a:=10;b

47、:=4;p(a,b);p(a mod b,a);则则a,b的值分别是什么?的值分别是什么?参考答案:参考答案:1、7 2、a=0,b=102.8 习题及上机练习习题及上机练习1Object Pascal语言中有哪些常用的数据类型?变量在使语言中有哪些常用的数据类型?变量在使用前必须先定义,如何定义各种数据类型的变量?用前必须先定义,如何定义各种数据类型的变量?2.简述简述Object Pascal中标识符的命名应遵循哪些规则。中标识符的命名应遵循哪些规则。3.Object Pascal中提供了哪些类型运算符,在表达式中其优中提供了哪些类型运算符,在表达式中其优先级从高到低如何排列。先级从高到低

48、如何排列。4注释语句有哪几种形式?注释语句有哪几种形式?5条件语句有哪几种形式?它们在什么情况下适用。条件语句有哪几种形式?它们在什么情况下适用。6循环语句有哪几种形式?循环语句有哪几种形式?break语句与语句与continue语句有何语句有何异同。异同。7如何声明、定义和调用函数和过程。如何声明、定义和调用函数和过程。8什么是重载?如何进行重载函数和过程。什么是重载?如何进行重载函数和过程。9什么是变量的作用域?根据变量的作用域,可将变量分为什么是变量的作用域?根据变量的作用域,可将变量分为哪几类。哪几类。上机练习题上机练习题1、求整数各位数字、求整数各位数字 【练习题目练习题目】利用本章

49、学习的算术运算符和算术表达式,编写一个程利用本章学习的算术运算符和算术表达式,编写一个程序,实现下面的功能:输入一个任意序,实现下面的功能:输入一个任意4位整数,计算千位、位整数,计算千位、百位、十位和个位上的数字。程序设计界面和程序运行界百位、十位和个位上的数字。程序设计界面和程序运行界面如图所示。程序运行时,输入任意整数(面如图所示。程序运行时,输入任意整数(4位整数),位整数),单击按钮单击按钮【个位数字个位数字】,将显示个位数字,单击按钮,将显示个位数字,单击按钮【十十位数字位数字】,将显示十位数字,其它依此类推。,将显示十位数字,其它依此类推。上机练习题上机练习题2 2、计算数学中常

50、量的值计算数学中常量的值【练习题目练习题目】编一个程序按下列公式求编一个程序按下列公式求e e的值(要求精度达到的值(要求精度达到1e-51e-5)。)。程程序序运运行行时时,单单击击【计计算算】按按钮钮,将将计计算算并并显显示示符符合合给给定定精度的值,程序的设计界面及运行界面如图所示。精度的值,程序的设计界面及运行界面如图所示。上机练习题上机练习题3、数字灯谜、数字灯谜【练习题目练习题目】有算式有算式:A B C D-)C D CA B CA、B、C、D为非负一位为非负一位数字,要求找出满足以上数字,要求找出满足以上算式的算式的A、B、C、D。答案答案:1098:1098 1 0 9 8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com