第5章过程与函数 本章要点: 区过程与函数的定义 区过程与函数的参数 区常用的过程与函数 区过程与函数的嵌套与递归
本章要点: 过程与函数的定义 过程与函数的参数 常用的过程与函数 过程与函数的嵌套与递归 第5章 过程与函数
51基本概念 过程与函数是程序设计语言中的重要概念,也是实现结构化程序设计思 想的重要手段。结构化程序设计思想的要点之一就是对一个复杂问题采用 “分而治之”的策略——模块化。把一个较大的程序划分成若干个模块, 每个模块只完成一个或若干个功能。每个功能可以用一个程序段来实现, 这个程序段称为子程序。根据子程序是否有返回值可分为过程与函数两种。 5.1.1函数的定义与使用 函数是由变量声明部分与可执行语句组成的独立实体,用以完成一定 的功能。它的主要特点是在函数执行后可以方便地返回所需值,在某些情 况下使用比较简单。 函数也是一段相对独立的程序段,可读取参数、执行一系列语句并改 变其参数的值。 定义函数的格式为: Inprise Dephi
5.1 基本概念 过程与函数是程序设计语言中的重要概念,也是实现结构化程序设计思 想的重要手段。结构化程序设计思想的要点之一就是对一个复杂问题采用 “分而治之”的策略——模块化。把一个较大的程序划分成若干个模块, 每个模块只完成一个或若干个功能。每个功能可以用一个程序段来实现, 这个程序段称为子程序。根据子程序是否有返回值可分为过程与函数两种。 函数是由变量声明部分与可执行语句组成的独立实体,用以完成一定 的功能。它的主要特点是在函数执行后可以方便地返回所需值,在某些情 况下使用比较简单。 5.1.1 函数的定义与使用 函数也是一段相对独立的程序段,可读取参数、执行一系列语句并改 变其参数的值。 定义函数的格式为:
511函数的定义与使用(1) Function[()]:; 局部声明>] begin [] end: 以保留字 Function开头的第一行,称为函数首部,其余部分称为函 数体 1.函数首部 函数名使用与变量名相同的命名规则,一个函数只能有一个函数名。 形参表由若干个形式参数组成,它指明了可以传递给函数参数的个数和 类型。所有的形式参数必须说明类型,相同类型的形参之间用逗号隔开, 不同类型的形参之间用分号隔开。函数必须规定函数返回值的类型,函 数返回值通过函数名或 Result(隐含变量)带回。 Inprise Dephi
5.1.1 函数的定义与使用(1) Function [ ( ) ] :; [ ] begin [ ] ; end; 以保留字Function开头的第一行,称为函数首部,其余部分称为函 数体。 1. 函数首部 函数名使用与变量名相同的命名规则,一个函数只能有一个函数名。 形参表由若干个形式参数组成,它指明了可以传递给函数参数的个数和 类型。所有的形式参数必须说明类型,相同类型的形参之间用逗号隔开, 不同类型的形参之间用分号隔开。函数必须规定函数返回值的类型,函 数返回值通过函数名或Result(隐含变量)带回
511函数的定义与使用(2) 2.函数体 函数体是一个程序段。由局部声明部分和可执行部分组成。可执行部分由 begin开始,以end结束,end后面必须跟一个分号。在局部声明部分定 义函数所需的常量、变量、类型等,该部分声明的常量、变量、类型只能 在函数内部使用。在可执行部分根据函数的功能编程,而且在执行语句中 至少要给函数名预定义的 Result赋值一次,以便在函数执行结束后函数值 带回到主程序中去 3.函数的调用 函数的调用比较简单,调用格式为: 函数名(); 更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼容 例如声明一个Max函数: function Max(a: real; b: string ) boolean 则在调用Max函数时必须有两个参数,而且参数类型必须相兼容,返回值 赋值也要注意类型兼容。 Inprise Deph
5.1.1 函数的定义与使用(2) 2. 函数体 函数体是一个程序段。由局部声明部分和可执行部分组成。可执行部分由 begin 开始,以end结束,end 后面必须跟一个分号。在局部声明部分定 义函数所需的常量、变量、类型等,该部分声明的常量、变量、类型只能 在函数内部使用。在可执行部分根据函数的功能编程,而且在执行语句中 至少要给函数名预定义的Result赋值一次,以便在函数执行结束后函数值 带回到主程序中去。 3. 函数的调用 函数的调用比较简单,调用格式为: 函数名 (); 更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼容。 例如声明一个Max函数: function Max(a:real;b:string):boolean; 则在调用Max函数时必须有两个参数,而且参数类型必须相兼容,返回值 赋值也要注意类型兼容
511函数的定义与使用(3) 2.函数体 函数体是一个程序段。由局部声明部分和可执行部分组成。可执行部分由 begin开始,以end结束,end后面必须跟一个分号。在局部声明部分定 义函数所需的常量、变量、类型等,该部分声明的常量、变量、类型只能 在函数内部使用。在可执行部分根据函数的功能编程,而且在执行语句中 至少要给函数名预定义的 Result赋值一次,以便在函数执行结束后函数值 带回到主程序中去。 3.函数的调用 函数的调用比较简单,调用格式为: 函数名() 更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼容。 例如声明一个Max函数: function Max (a: real; b string): boolean 则在调用Max函数时必须有两个参数,而且参数类型必须相兼容,返回值 赋值也要注意类型兼容。 Inprise Dephi
5.1.1 函数的定义与使用(3) 2. 函数体 函数体是一个程序段。由局部声明部分和可执行部分组成。可执行部分由 begin 开始,以end结束,end 后面必须跟一个分号。在局部声明部分定 义函数所需的常量、变量、类型等,该部分声明的常量、变量、类型只能 在函数内部使用。在可执行部分根据函数的功能编程,而且在执行语句中 至少要给函数名预定义的Result赋值一次,以便在函数执行结束后函数值 带回到主程序中去。 3. 函数的调用 函数的调用比较简单,调用格式为: 函数名 (); 更常用的方法是直接将函数返回值直接赋值给变量,当然要注意类型兼容。 例如声明一个Max函数: function Max(a:real;b:string):boolean; 则在调用Max函数时必须有两个参数,而且参数类型必须相兼容,返回值 赋值也要注意类型兼容
511函数的定义与使用(4) 【例5-1】定义一个求两个实数中较大数的函数,并利用该函数求三个实数中 的最大值 分析:定义一个新的函数,函数名为MaxO,该函数的功能是对两个实数 求出最大值,输入的参数是两个实数ⅹ、y,注意输入量不能为其他类型的常量 或变量,输出z是两个实数中较大的一个值,在程序中可以利用语句实现两 数的比较。 求三个数中的最大值可以先求两个数中的最大值,再与第三个数做比较, 大者为三个数中的最大值 启动 Delphi7.0,新建一个工程,在其中添加标签 Label, Label2,将两标 签的 Caption属性值分别改为“输入三个实数”和“三个数中的最大值是”, 并适当更改字体属性。添加四个编辑框,默认名分别为Eidt1、Eidt2、Edit3、 Ed4,将它们的Text属性值均改为“0”,再添加一个按钮 Button1并将其 Caption属性值改为“比较”界面,将组件按适当位置摆放,如图5-1所示。 Inprise Dephi
5.1.1 函数的定义与使用(4) 【例5-1】定义一个求两个实数中较大数的函数,并利用该函数求三个实数中 的最大值。 分析:定义一个新的函数,函数名为Max(),该函数的功能是对两个实数 求出最大值,输入的参数是两个实数x、y,注意输入量不能为其他类型的常量 或变量,输出z是两个实数中较大的一个值,在程序中可以利用IF语句实现两 数的比较。 求三个数中的最大值可以先求两个数中的最大值,再与第三个数做比较, 大者为三个数中的最大值。 启动Delphi 7.0,新建一个工程,在其中添加标签Label,Label2,将两标 签的Caption属性值分别改为“输入三个实数”和“三个数中的最大值是”, 并适当更改字体属性。添加四个编辑框,默认名分别为Eidt1、Eidt2、Edit3、 Edit4,将它们的Text属性值均改为“0”,再添加一个按钮Button1并将其 Caption属性值改为“比较”界面,将组件按适当位置摆放,如图5-1所示
511函数的定义与使用(5) ③双击“比较”按钮,在自动生成的 TOn1. Button1Cick()过程中添加变 量定乂语句和事件处理语句 procedure TForm1. Button 1Click(Sender: TObject) var a, b c real begin 比较三个数的大小 输入三个实数 a:=strtofloat(edit1 text) b =strtofloat(edita. text) C:=strtofloat(edit3 text) 三个数中的最大值是 edit4. text: =floattostr(max(max(a, b), c)) end 图5-1比较三个数的大小 ③双击“比较”按钮,在自动生成的 TForm1. Button 1click()过程中添加 变量定义语句和事件处理语句 procedure TForm1.Button 1Click ( Sender: TObject) var a b c real Inprise Dephi
5.1.1 函数的定义与使用(5) 双击“比较”按钮,在自动生成的TForm1.Button1Click()过程中添加变 量定义语句和事件处理语句。 procedure TForm1.Button1Click(Sender: TObject); var a,b,c:real; begin a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=strtofloat(edit3.text); edit4.text:=floattostr(max(max(a,b),c)); end; 图5-1 比较三个数的大小 双击“比较”按钮,在自动生成的TForm1.Button1Click()过程中添加 变量定义语句和事件处理语句。 procedure TForm1.Button1Click(Sender: TObject); var a,b,c:real;
511函数的定义与使用(6) begin a:=strtofloat(edit 1. text) b: =strtofloat(edita.text C:=strtofloat(edit3 text) edit4.text: =floattostr(max(max(a, b), c) end: 在这个求三个数最大值过程中用到了两个标准函数 strtofloato和 floattostr0 个用户自定义函数maxO。其中 strtofloat()函数的作用是把字符串转化为实 数,而 floattostr(函数的作用与之相反,它的作用是把实数转化为字符串。 由于 Object Pascal是一种强类型语言,所以在编程中应当注意类型的转化。 为了使MaⅫO函数能够被正常调用,必须将MaxO的定义语句添加到按钮事件 声明语句之前。该函数定义如下 function max(x,y: real) real ∥该句也可以写为 function maxi( .real; y;rea)real; begin Inprise Dephi
begin a:=strtofloat(edit1.text); b:=strtofloat(edit2.text); c:=strtofloat(edit3.text); edit4.text:=floattostr(max(max(a,b),c)); end; 5.1.1 函数的定义与使用(6) 在这个求三个数最大值过程中用到了两个标准函数strtofloat()和floattostr()、 一个用户自定义函数max()。其中strtofloat()函数的作用是把字符串转化为实 数,而floattostr()函数的作用与之相反,它的作用是把实数转化为字符串。 由于Object Pascal是一种强类型语言,所以在编程中应当注意类型的转化。 为了使Max()函数能够被正常调用,必须将Max()的定义语句添加到按钮事件 声明语句之前。该函数定义如下: function max(x,y:real):real; //该句也可以写为function max(x:real;y:real):real; begin
511函数的定义与使用(7) if x>y then result: =X else result: =y end ③保存工程并运行,在三个编辑框中分别输入三个实数,单击 “比较”按钮则在第四个编辑框中显示出三个数中的最大值。 注意不得输入非法字符,否则程序会出现运行错误。 Inprise Dephi
5.1.1 函数的定义与使用(7) if x>y then result:=x else result:=y; end; 保存工程并运行,在三个编辑框中分别输入三个实数,单击 “比较”按钮则在第四个编辑框中显示出三个数中的最大值。 注意不得输入非法字符,否则程序会出现运行错误
512过程的定义与使用(1) object Pascall的过程分标准过程和自定义过程两种。标准过程 是指系统内部定义的过程,无需编写代码可直接调用。而自定义过 程则是由程序员编写代码用以完成指定的操作,包括事件过程和通 用过程。 过程在使用之前必须定义,定义一个过程也称为过程声明。定义 个过程的一般形式为 Procedure[()] ] begin [<语句列 end 1.过程首部 过程名的命名规则与变量名相同,一个过程只能有一个惟一的过程名。 形参表由若干个形式参数组成,它指明了从调用过程传递给过程的实际 参数个数和类型,所有的形式参数必须说明类型,相同类型的形参之间 用逗号隔开,不同类型的形参之间用分号隔开。 prise Dephi
5.1.2 过程的定义与使用(1) Object Pascal的过程分标准过程和自定义过程两种。标准过程 是指系统内部定义的过程,无需编写代码可直接调用。而自定义过 程则是由程序员编写代码用以完成指定的操作,包括事件过程和通 用过程。 过程在使用之前必须定义,定义一个过程也称为过程声明。定义一 个过程的一般形式为: Procedure [ ( ) ] [ ] begin [ ] end; 1. 过程首部 过程名的命名规则与变量名相同,一个过程只能有一个惟一的过程名。 形参表由若干个形式参数组成,它指明了从调用过程传递给过程的实际 参数个数和类型,所有的形式参数必须说明类型,相同类型的形参之间 用逗号隔开,不同类型的形参之间用分号隔开