《Delphi程序设计及实验指导》电子教案-第2章.ppt
Delphi 7 程序设计与实验指导张景安 赵慧勤 张叶娥 傅文博编 著第二章 面向对象的Pascal Delphi Delphi 的 的 编 编 程 程 语 语 言 言 即 即Object Object Pascal Pascal 是 是 在 在Pascal Pascal 的 的 基 基 础 础 上 上 发 发展 展 起 起 来 来 的 的,它 它 继 继 承 承 了 了Pascal Pascal 语 语 言 言 语 语 法 法 结 结 构 构 严 严 谨 谨 和 和 编 编 译 译 代 代码 码 高 高 效 效 优 优 化 化 等 等 优 优 点 点。本 本 章 章 将 将 介 介 绍 绍Object Object Pascal Pascal 的 的 数 数 据 据 类 类型、常量、变量、运算符、语句、函数和过程等。型、常量、变量、运算符、语句、函数和过程等。2.1 数据类型2.1.1 2.1.1 简单数据类型简单数据类型 简单类型包括有序类型和实型两种。简单类型包括有序类型和实型两种。1 1 有序类型 有序类型 有序类型包括整型、字符型、布尔型、枚举型和子界型。有序类型包括整型、字符型、布尔型、枚举型和子界型。有序类型是一种线性的数据结构,每个值都有唯一的前 有序类型是一种线性的数据结构,每个值都有唯一的前驱(除第一个)和唯一的后继(除最后一个)。驱(除第一个)和唯一的后继(除最后一个)。(1)(1)整型 整型 整型的表示范围及存储格式见表 整型的表示范围及存储格式见表2-1 2-1。类型 类型 取值范围 取值范围 存储格式 存储格式Integer Integer-21474836482147483647-21474836482147483647 有符号 有符号32 32 位整数 位整数Cardinal Cardinal 04294967295 04294967295 无符号 无符号32 32 位整数 位整数Shortint Shortint-128127-128127 有符号 有符号8 8 位整数 位整数Smallint Smallint-3276832767-3276832767 有符号 有符号16 16 位整数 位整数Longint Longint-21474836482147483647-21474836482147483647 有符号 有符号32 32 位整数 位整数Int64 Int64-2-263 632 263 63-l-l 有符号 有符号64 64 位整数 位整数Byte Byte 0255 0255 无符号 无符号8 8 位整数 位整数Word Word 065535 065535 无符号 无符号16 16 位整数 位整数Longword Longword 04294967295 04294967295 无符号 无符号32 32 位整数 位整数表2-1 整型的取值范围和存储格式2.1 数据类型2.1 数据类型(2)(2)字符型 字符型 字符型的类型标识符是 字符型的类型标识符是Char Char。字符型的数据只能是单。字符型的数据只能是单个字符,不能是一串字符。例如 个字符,不能是一串字符。例如ABC ABC,x=?x=?等都不是 等都不是字符型的数据,而是字符串。字符型的数据,而是字符串。(3)(3)布尔型 布尔型 通常用到的布尔类型是 通常用到的布尔类型是Boolean Boolean,一个,一个Boolean Boolean 类型的变 类型的变量占一个字节,它只有两种取值:量占一个字节,它只有两种取值:true true 和 和false false。定义变。定义变量 量i i,ch ch,t t 分别为整型、字符型、布尔型。分别为整型、字符型、布尔型。var var i:Interge;i:Interge;ch:Char;ch:Char;t:Boolean;t:Boolean;2.1 数据类型(4)(4)枚举类型 枚举类型 枚举类型是用一些标识符来表示一系列有序数,即由 枚举类型是用一些标识符来表示一系列有序数,即由一些标识符组成的一个线性表。定义枚举类型的语法 一些标识符组成的一个线性表。定义枚举类型的语法是:是:type type typeName=(val1,.,valn)typeName=(val1,.,valn)(5)(5)子界类型 子界类型 子界类型指的是某个有序类型(称为基类)的一个子 子界类型指的是某个有序类型(称为基类)的一个子集。定义子界类型的语法是:集。定义子界类型的语法是:type type typeName=Low.High;typeName=Low.High;2.1 数据类型 2 2 实型 实型 表 表2-2 2-2 给出了实型的表示范围和存储格式。给出了实型的表示范围和存储格式。类型 类型 范围 范围 有效位 有效位 所占位数 所占位数Real Real 2.9*10 2.9*10-24-241.7*10 1.7*10308 30811 11-2-2 8 8Real48 Real48 2.9*10 2.9*10-39-391.7*10 1.7*1038 3811 11-2-2 6 6Single Single 1.510 1.510-45-453.4*10 3.4*1038 387 7 8 8 4 4Double Double 5.0*10 5.0*10-324-3241.7*10 1.7*10308 30815 15 16 16 8 8Extended Extended 3.6*10 3.6*10-4951-49511.1*10 1.1*104932 493219 19 20 20 10 10Comp Comp-2-263 63+l2+l263 63-l-l 19 19 20 20 8 8Currency Currency-922337203685477.5808922337203685477.5807-922337203685477.5808922337203685477.580719 19 20 20 8 8表2-2 实型的表示范围和存储格式2.1 数据类型2.1.2 2.1.2 字符串类型字符串类型 字符串类型是用一对单引号括起来的一系列字符。字符串 字符串类型是用一对单引号括起来的一系列字符。字符串类型的表示范围和存储格式见表 类型的表示范围和存储格式见表 2-3 2-3。类型 类型 最多字符 最多字符 字节数 字节数 字符集 字符集ShortString ShortString 255 255 2 2 256B 256B ANSI ANSI 向后兼容 向后兼容AnsiString AnsiString 2 231 314 4 2GB 2GB SBCS SBCS,MBCS MBCSLongString LongString 2 231 314 4 2GB 2GB Unicode UnicodeWideString WideString 2 230 304 4 2GB 2GB 等价于 等价于AnsiChar AnsiChar表2-3 字符串类型的表示范围和存储格式2.1 数据类型2.1.3 2.1.3 结构类型结构类型 结构数据类型是一种复合数据类型,由多个数据组成。结构 结构数据类型是一种复合数据类型,由多个数据组成。结构类型包括集合类型、数组类型、记录类型、文件类型等。类型包括集合类型、数组类型、记录类型、文件类型等。1 1 集合类型 集合类型 集合类型是一组相同类型元素的组合。定义集合类型:集合类型是一组相同类型元素的组合。定义集合类型:type type Name=set of BaseType Name=set of BaseType 2 2 数组 数组 数组是一些具有相同类型元素的有序组合。数组是一些具有相同类型元素的有序组合。(1)(1)静态数组 静态数组 静态数组的声明格式为:静态数组的声明格式为:type type Name=arrayindexType1,.,indexTypen of BaseType;Name=arrayindexType1,.,indexTypen of BaseType;2.1 数据类型(2)(2)动态数组 动态数组 动态数组没有固定的大小或长度。当赋值或使用某些函 动态数组没有固定的大小或长度。当赋值或使用某些函数(如 数(如SetLength SetLength)时,动态数组在内存中重新分配。)时,动态数组在内存中重新分配。动态数组的声明格式为:动态数组的声明格式为:type type Name=array of BaseType;Name=array of BaseType;定义动态数组不需声明元素的个数。例如:定义动态数组不需声明元素的个数。例如:type type Dynamicarray=array of Real;Dynamicarray=array of Real;var var a1,a2:Dynamicarry;a1,a2:Dynamicarry;a1:=a2;/a1 a1:=a2;/a1 和 和a2 a2 指向相同的内存单元。指向相同的内存单元。2.1 数据类型 3 3 记录类型 记录类型 记录类型(有的语言中被称为结构)是一个不同种类 记录类型(有的语言中被称为结构)是一个不同种类元素的集合,每个元素称为字段(元素的集合,每个元素称为字段(field field)。在声明时,)。在声明时,指定记录的名字和每个字段。声明格式为:指定记录的名字和每个字段。声明格式为:type type RecordTypeName=record RecordTypeName=record FieldList 1:type1;FieldList 1:type1;FieldList 2:type2;FieldList 2:type2;FieldList n:type n;FieldList n:type n;end;end;2.1 数据类型 4 4 文件类型 文件类型 文件类型是由相同类型的元素组成的有序集合。文件 文件类型是由相同类型的元素组成的有序集合。文件类型的声明格式为:类型的声明格式为:type type fileTypeName=file of type fileTypeName=file of type 例:声明一个文件类型 例:声明一个文件类型RecordList RecordList,以上面已定义的,以上面已定义的TdateRec TdateRec 为数据类型。为数据类型。type type RecordList=file of TdateRec;RecordList=file of TdateRec;var var Myrecordlist:RecordList;Myrecordlist:RecordList;2.1 数据类型2.1.4 2.1.4 可变类型可变类型 有时要对一些数据类型变化的数据进行操作,并且在 有时要对一些数据类型变化的数据进行操作,并且在编译期间不能确定数据的类型,这时就可以使用可变 编译期间不能确定数据的类型,这时就可以使用可变类型的数据。类型的数据。可变类型可以使用除记录、集合、静态数组、文件等 可变类型可以使用除记录、集合、静态数组、文件等结构类型、指针类型及长整型外的所有类型。可变类 结构类型、指针类型及长整型外的所有类型。可变类型有一个特殊的值 型有一个特殊的值Null Null,表示不明的或丢失的数据。,表示不明的或丢失的数据。可变类型变量的声明格式为:可变类型变量的声明格式为:var var v1:Variant;v1:Variant;2.2 常量与变量2.2.1 2.2.1 标识符标识符 标识符是描述 标识符是描述Object Pascal Object Pascal 程序各个部分的名称,这些 程序各个部分的名称,这些部分包括标记、对象、过程、类型、单元、变量及程 部分包括标记、对象、过程、类型、单元、变量及程序。标识符的大小写无关(即它不区分大小写),并 序。标识符的大小写无关(即它不区分大小写),并且遵循以下规则:且遵循以下规则:可为任意长度,但只有前 可为任意长度,但只有前255 255 个字符有效。个字符有效。标识符的第 标识符的第1 1 个字符必须是字母或下划线。个字符必须是字母或下划线。跟在第 跟在第1 1 个字符后面的字符必须是字母、数字或下划线。个字符后面的字符必须是字母、数字或下划线。标识符中不允许出现空格。标识符中不允许出现空格。2.2.2 2.2.2 常量 常量 常量是一个在程序的运行过程中具有不变值的标识符,常量是一个在程序的运行过程中具有不变值的标识符,常量的声明格式如下:常量的声明格式如下:Const Const 常量名 常量名=表达式 表达式;变量不能在一个常量声明中使用,变量不能在一个常量声明中使用,但算术和逻辑运算符可以,下面的函数可以在常量声明 但算术和逻辑运算符可以,下面的函数可以在常量声明中使用。中使用。Abs Low Round Chr Odd SizeOf Hi Ord Abs Low Round Chr Odd SizeOf Hi Ord Succ High Pred Swap Length Ptr Trunc Lo Succ High Pred Swap Length Ptr Trunc Lo2.2 常量与变量2.2 常量与变量2.2.3 2.2.3 变量变量 变量是程序代码中代表一个内存地址的标识符,而此 变量是程序代码中代表一个内存地址的标识符,而此地址中的内容在程序执行过程中可以改变。在变量使 地址中的内容在程序执行过程中可以改变。在变量使用之前必须先声明,变量声明格式如下:用之前必须先声明,变量声明格式如下:var var 变量名表 变量名表:类型名 类型名;例:例:var var s:string;s:string;i:integer;i:integer;flag:Boolean;flag:Boolean;2.3 表达式与运算符2.3.1 2.3.1 表达式表达式 表达式就是变量、常量、字符串、运算符及函数按照一定 表达式就是变量、常量、字符串、运算符及函数按照一定规则的组合。例:规则的组合。例:Peoples Republic Of+China Peoples Republic Of+China Gross/12 Gross/12 Max(x,y)-Min(x,y)Max(x,y)-Min(x,y)2.3.2 2.3.2 运算符运算符 1 1 赋值运算符(赋值运算符(:=:=)赋值运算符 赋值运算符“:=”:=”是先计算赋值运算符右边表达式的值,是先计算赋值运算符右边表达式的值,再将结果赋给左边的变量。再将结果赋给左边的变量。2.3 表达式与运算符 2 2 算术运算符 算术运算符 表 表2-4 2-4 算术运算符 算术运算符运算符 运算符 作用 作用 操作数 操作数 类 类 型 型 结 结 果 果 类 类 型 型+表示正 表示正 值 值 Integer Integer 或 或Real Real Integer Integer 或 或Real Real算 算 术 术 加 加 Integer Integer 或 或Real Real Integer Integer 或 或Real Real 表示 表示 负值 负值 Integer Integer 或 或Real Real Integer Integer 或 或Real Real算 算 术 术 减 减 Integer Integer 或 或Real Real Integer Integer 或 或Real Real*算 算 术 术 的乘运算 的乘运算 Integer Integer 或 或Real Real Integer Integer 或 或Real Real/浮点数的除运算 浮点数的除运算 Integer Integer 或 或Real Real Real RealDiv Div 整型数的除运算 整型数的除运算 Integer Integer Integer IntegerMod Mod 模运算 模运算 Integer Integer Integer Integer2.3 表达式与运算符 3 3 关系运算符 关系运算符 关系运算符是对两个类型相容且可以比较大小的数据进 关系运算符是对两个类型相容且可以比较大小的数据进行比较,结果为布尔类型,见表 行比较,结果为布尔类型,见表2-5 2-5。表 表2-5 2-5 关系运算符 关系运算符运算符 运算符 作用 作用 结 结 果 果 类 类 型 型=等于 等于 Bealoon Bealoon 不等于 不等于 Bealoon Bealoon 大于 大于 Bealoon Bealoon=大于或等于 大于或等于 Bealoon BealoonIn In 属于 属于 Bealoon Bealoon2.3 表达式与运算符 4 4 逻辑运算符 逻辑运算符 逻辑运算符对逻辑类型的操作数进行运算,结果为布尔 逻辑运算符对逻辑类型的操作数进行运算,结果为布尔型,见表 型,见表2-6 2-6。表 表2-6 2-6 逻辑运算符 逻辑运算符运算符 运算符 作用 作用 操作数 操作数 类 类 型 型 结 结 果 果 类 类 型 型not not 逻辑 逻辑 非 非 Bealoon Bealoon Bealoon Bealoonand and 逻辑 逻辑 与 与 Bealoon Bealoon Bealoon Bealoonor or 逻辑 逻辑 或 或 Bealoon Bealoon Bealoon Bealoonxor xor 逻辑 逻辑 异或 异或 Bealoon Bealoon Bealoon Bealoon2.3 表达式与运算符 5 5 集合运算符 集合运算符 表 表2-7 2-7 集合运算符 集合运算符运算符 运算符 作用 作用 操作数 操作数 类 类 型 型 结 结 果 果 类 类 型 型+集合的并集 集合的并集 集合 集合 类 类 型 型 集合 集合 类 类 型 型-集合的差集 集合的差集 集合 集合 类 类 型 型 集合 集合 类 类 型 型*集合的交集 集合的交集 集合 集合 类 类 型 型 集合 集合 类 类 型 型=A=B A=A=B A=B,B B 是否是 是否是A A 的子集 的子集 集合 集合 类 类 型 型 Bealoon Bealoon=两个集合是否相等 两个集合是否相等 集合 集合 类 类 型 型 Bealoon Bealoon 两个集合是否不相等 两个集合是否不相等 集合 集合 类 类 型 型 Bealoon Bealoonin in s in A s in A,s s 是否属于集合 是否属于集合A A 有序 有序 类 类 型,集合 型,集合 类 类 型 型 Bealoon Bealoon2.3 表达式与运算符 6 6 运算符的优先级 运算符的优先级运算符 运算符 优 优 先 先 级 级not not 1 1(最高)(最高)*,/,div div,mod mod,and and 2 2+,or or,xor xor 3 3关系运算符 关系运算符 4 4(最低)(最低)表2-8 Object Pascal 各运算符的优先级2.4 语句2.4.1 2.4.1 注释注释 注释是添加在程序中用来说明代码功能的语句,它是非执行 注释是添加在程序中用来说明代码功能的语句,它是非执行语句,对程序的执行部分不会产生任何影响,有助于提高程 语句,对程序的执行部分不会产生任何影响,有助于提高程序的可读性。在 序的可读性。在Object Pascal Object Pascal 中,有三种注释标记:中,有三种注释标记:花括号 花括号“”注释:位于 注释:位于“”中的内容为注释。中的内容为注释。双斜杠 双斜杠“/”/”注释:注释:“/”/”之后到本行结束的内容为注释。之后到本行结束的内容为注释。圆括号及星号对 圆括号及星号对“(*)”注释:(注释:(*)中的内容)中的内容为注释。为注释。例如以下语句都是注释:例如以下语句都是注释:The first kind Of comment.The first kind Of comment./The second/The second kind Of comment.kind Of comment.(*The third kind Of comment.*)(*The third kind Of comment.*)2.4 语句2.4.2 2.4.2 简单语句和复合语句简单语句和复合语句 简单语句是 简单语句是Object Pascal Object Pascal 中最简单也最常用的语句,简单 中最简单也最常用的语句,简单语句用分号分隔。赋值语句、函数、过程调用语句等是 语句用分号分隔。赋值语句、函数、过程调用语句等是简单语句,例如下面的语句都是简单语句:简单语句,例如下面的语句都是简单语句:r:=m+n r:=m+n;/两个值相加并赋值 两个值相加并赋值 ShowMessage(Im a student.);ShowMessage(Im a student.);复合语句是多个简单语句的组合,复合语句以 复合语句是多个简单语句的组合,复合语句以begin begin 表示 表示开始,以 开始,以end end 表示结束。例如:表示结束。例如:begin begin i:=1;i:=1;j:=i+1;j:=i+1;s:=abc;s:=abc;end;end;2.4 语句2.4.3 2.4.3 条件语句条件语句 条件语句是 条件语句是Object Pascal Object Pascal 语言提供的选择结构语句,主要 语言提供的选择结构语句,主要有如下两种:有如下两种:1 1 if if 语句 语句 if if 语句的表示形式:语句的表示形式:if if then then else else 2.4 语句【例 例2-1 2-1】求两个数中的最大值。求两个数中的最大值。if ab then if ab then max:=a/max:=a/在变量 在变量a a 之后不能加 之后不能加“;”;”Else Else max:=b;max:=b;【例 例2-2 2-2】符号函数。符号函数。-1(x0)-1(x0)1(x0)用 用if if 语句的嵌套实现,如下:语句的嵌套实现,如下:if x0 then if x0 then if x0 then y:=1 y:=1else else y:=0;y:=0;2.4 语句 2 2 case case 语句 语句 case case 语句的表示形式:语句的表示形式:case case of of:1:1:n:n else else n+1end;end;2.4 语句【例 例2-3 2-3】编写一个程序,输入一个年份,判断是否是闰 编写一个程序,输入一个年份,判断是否是闰年。闰年的条件是满足下面条件之一:年。闰年的条件是满足下面条件之一:(1)(1)能被 能被4 4 整除,但不能被 整除,但不能被100 100 整除的年份;整除的年份;(2)(2)能被 能被100 100 整除,也能被 整除,也能被400 400 整除的年份。整除的年份。对这两个条件都不符合的年份不是闰年。对这两个条件都不符合的年份不是闰年。程序功能:输入一个年份,显示其是否为闰年的信息。程序功能:输入一个年份,显示其是否为闰年的信息。界面设计:四个组件:两个文本框 界面设计:四个组件:两个文本框Label1 Label1 和 和Lable2 Lable2,分别,分别显示提示和结果信息;一个 显示提示和结果信息;一个Edit Edit 组件 组件Edit1 Edit1,用来输入要进,用来输入要进行判断的年份;一个 行判断的年份;一个Button Button 组件 组件Button1 Button1,用来查询结果。,用来查询结果。如图 如图2-1 2-1 所示。所示。2.4 语句图2-1 窗体界面程序代码:procedure TForm1.Button1Click(Sender:TObject);var year:Integer;flag:Boolean;2.4 语句 begin begin year:=StrtoInt(Edit1.text);/year:=StrtoInt(Edit1.text);/将字 将字符串转变为整型 符串转变为整型 if year mod 4=0 then if year mod 4=0 then begin begin if year mod 100=0 then if year mod 100=0 then begin begin if year mod 400=0 then if year mod 400=0 then flag:=true flag:=true else else flag:=false;flag:=false;end end else else flag:=true;flag:=true;end end else else flag:=false;flag:=false;if flag then if flag then Label2.Caption:=Label2.Caption:=该年 该年份是闰年 份是闰年 else else Label2.Caption:=Label2.Caption:=该年 该年份不是闰年 份不是闰年;end;end;2.4 语句 2.4.4 循环控制语句 循环语句可以使用户重复执行一条或多条语句,直到满足某个条件时为止。1for 语句 for 语句的一般形式为:for 循环变量:=to/downto do;【例2-4】求1100所有整数的累加和。var s,i:Integer;s:=0;for i:=l to 100 do s:=s+i;2.4 语句 2 2 while while 语句 语句 while while 语句的一般形式为:语句的一般形式为:while while do do while while 后面的 后面的 为 为逻辑表达式,先计算表达 逻辑表达式,先计算表达式的结果,如果表达式为 式的结果,如果表达式为true true,while while 语句将重复执 语句将重复执行循环体。如果表达式结 行循环体。如果表达式结果为 果为false false,则跳出循环,则跳出循环,执行 执行while while 之后的语句。之后的语句。【例 例2-5 2-5】求 求1 1 100 100 所有整 所有整数的累加和。数的累加和。var vars,i:Integer;s,i:Integer;i:=1;i:=1;s:=0;s:=0;while i=100 do while i=100 dobegin begins:=s+i;s:=s+i;i:=i+1;i:=i+1;end;end;2.4 语句 3 3 repeat repeat 语句 语句 repeat repeat 语句的一般形式为:语句的一般形式为:repeat repeat until until 当使用 当使用repeat repeat 语句时,先执 语句时,先执行循环体,再判断表达式,行循环体,再判断表达式,只要 只要until until 后面的表达式为 后面的表达式为true true,则将再执行循环体。,则将再执行循环体。因此,因此,repeat repeat 语句下面的循 语句下面的循环体至少执行一次。环体至少执行一次。【例 例2-6 2-6】求 求1 1 100 100 所 所有整数的累加和。有整数的累加和。var vars,i:Integer;s,i:Integer;i:=1;i:=1;s:=0;s:=0;repeat repeats:=s+i;s:=s+i;i:=i+1;i:=i+1;until i100 until i100;2.4 语句 4 4 break break 语句 语句 功能是强行退出循环,功能是强行退出循环,break break 语句只能用在循环体内。语句只能用在循环体内。【例 例2-7 2-7】利用 利用break break 语句退出一个 语句退出一个while while 循环。循环。var var s:String;s:String;begin begin while true do/while true do/条件恒为真 条件恒为真 begin begin ReadLn(s);/ReadLn(s);/读入一字符串 读入一字符串 if s=then break;/if s=then break;/不输入任何字符,则退出循环 不输入任何字符,则退出循环 WriteLn(s);/WriteLn(s);/输出字符串 输出字符串 end;end;end;end;2.4 语句 5 5 continue continue 语句 语句 continue continue 语句也用在循环体中,其作用是强行结束本次循环,转入 语句也用在循环体中,其作用是强行结束本次循环,转入循环开始处,开始执行下一次循环操作。循环开始处,开始执行下一次循环操作。【例 例2-8 2-8】使用 使用continue continue 语句,求 语句,求1 1 100 100 所有奇数之和。所有奇数之和。var var i,s:Integer;i,s:Integer;s=0;s=0;begin begin for i:=1 to 100 do for i:=1 to 100 do begin begin if i mod 2=0 then continue;/if i mod 2=0 then continue;/如果为空,跳过剩余语句,转到下 如果为空,跳过剩余语句,转到下一个循环 一个循环 s:=s+i;s:=s+i;end;end;end;end;2.5 函数和过程 函数和过程是实现一定功能的语句块,是程序中的特定 函数和过程是实现一定功能的语句块,是程序中的特定功能单元。可以在程序的其他地方被调用,也可以进行 功能单元。可以在程序的其他地方被调用,也可以进行递归调用。函数和过程的区别在于函数有返回值,而过 递归调用。函数和过程的区别在于函数有返回值,而过程没有返回值 程没有返回值。2.5.1 2.5.1 函数和过程的声明函数和过程的声明 函数和过程在使用前必须进行声明。函数和过程在使用前必须进行声明。1 1 函数的声明 函数的声明 函数的声明是在程序的 函数的声明是在程序的type type 区,具体形式如下:区,具体形式如下:function function():):;2.5 函数和过程 函数的定义是在程序的 函数的定义是在程序的implementation implementation 部分,具体形式如下:部分,具体形式如下:function function():):;var var begin begin:=:=/也可以用 也可以用Result Result 系统保留字代替 系统保留字代替 end;end;在 在begin begin 与 与end end 之间是在函数调用时实现特定功能的一系列语句。之间是在函数调用时实现特定功能的一系列语句。函数值的返回有两种方式:函数值的返回有两种方式:将返回值直接赋给函数名。将返回值直接赋给函数名。将返回值赋给 将返回值赋给Result Result。2.5 函数和过程【例 例2-9 2-9】求两个数中的最大数。求两个数中的最大数。function Max(a,b:integer):integer;/function Max(a,b:integer):integer;/两个形参为整型值 两个形参为整型值a a、b b,函数返回值为整型,函数返回值为整型 var var m:Integer;m:Integer;begin begin if ab then if ab then m:=a m:=a else else m:=b;m:=b;Max:=m;/Max:=m;/或 或result:=m;result:=m;end;end;2.5 函数和过程 2 2 过程的声明 过程的声明 过程的声明与函数类似,所不同的是使用的保留字不 过程的声明与函数类似,所不同的是使用的保留字不同,而且少了一个返回值类型;同,而且少了一个返回值类型;过程的声明是在程序 过程的声明是在程序的 的type type 区,具体形式如下:区,具体形式如下:procedure procedure():):;过程的定义是在程序的 过程的定义是在程序的implementation implementation 部分,具体形式 部分,具体形式如下:如下:procedure procedure();begin begin end;end;2.5 函数和过程【例 例2-10 2-10】显示一行 显示一行num num 个星号 个星号*。procedure ShowStar(num:Integer);procedure ShowStar(num:Integer);var var i:Integer;i:Integer;s:String;s:String;begin begin s:=;s:=;for i:=1 to num do for i:=1 to num do s:=s+*;s:=s+*;ShowMessage(s);ShowMessage(s);end;end;2.5 函数和过程2.5.2 2.5.2 重载函数和过程重载函数和过程 所谓重载,是指在同一个作用范围内给不同的函数或 所谓重载,是指在同一个作用范围内给不同的函数或过程取同一个名称。重载可以方便编程,重载函数必 过程取同一个名称。重载可以方便编程,重载函数必须用指令字 须用指令字overload overload 来进行说明。来进行说明。下面的两个函数就是重载函数:下面的两个函数就是重载函数:function Max(a:Integer;b:Integer):Integer;overload;/function Max(a:Integer;b:Integer):Integer;overload;/求 求两个整数的最大值 两个整数的最大值 function Max(a:Real;b:Real):Real;overload;/function Max(a:Real;b:Real):Real;overload;/求两个 求两个实数的最大值 实数的最大值 下面两条语句就调用了不同的函数:下面两条语句就调用了不同的函数:Max(3.7,4.6);/Max(3.7,4.6);/调用的是第二个重载函数 调用的是第二个重载函数 Max(3,4);/Max(3,4);/调用的是第一个重载函数 调用的是第一个重载函数2.5 函数和过程2.5.3 2.5.3 参数参数 1 1 形参与实参 形参与实参 函数或过程的声明和定义时参数列表中的参数称为形式 函数或过程的声明和定义时参数列表中的参数称为形式参数,简称形参;而函数或过程调用时参数列表中的参 参数,简称形参;而函数或过程调用时参数列表中的参数称为实在参数,简称实参。数称为实在参数,简称实参。2 2 数值参数、变量参数和常量参数 数值参数、变量参数和常量参数(1)(1)数值参数 数值参数 在调用函数或过程时,数值参数在运行过程中只改变其 在调用函数或过程时,数值参数在运行过程中只改变其形参的值,不改变其实参的值,即形参不会影响原来实 形参的值,不改变其实参的值,即形参不会影响原来实参的值。参的值。(2)(2)变量参数 变量参数 如果用户想改变传递的参数值,就需要使用变量参数,如果用户想改变传递的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字 即在被调用程序的参数表中的形参前加上保留字var var。2.5 函数和过程(3)(3)常量参数 常量参数 如果当过程或函数执行时要求不改变形参的值,