1 / 18

函数的定义

函数的定义. function 函数名 ( 形式参数表 ) :类型标识符; [ 局部变量说明部分 ] begin 语句 ; …… 语句 end ;. 不带形参的函数. Function add2:integer; Var x,y,sum:integer; Begin readln(x,y); sum:=x+y; add2:=sum; End;. 带形参的函数例子. Function add1 (x,y:integer) :integer; Var sum:integer; Begin

xenia
Download Presentation

函数的定义

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 函数的定义 • function 函数名(形式参数表):类型标识符; • [局部变量说明部分] • begin • 语句; • …… • 语句 • end;

  2. 不带形参的函数 • Function add2:integer; • Var x,y,sum:integer; • Begin • readln(x,y); • sum:=x+y; • add2:=sum; • End;

  3. 带形参的函数例子 • Function add1(x,y:integer):integer; • Var sum:integer; • Begin • sum:=x+y; • add1:=sum; • End;

  4. 函数的调用和执行 • Program e1; • Var x,y:integer; • Function add(i,j:integer):integer; • Begin • add:=i+j; • End; • Function mul(I,j:integer):integer; • Begin • mul:=i*j; • End; • Begin read(x,y); writeln(add(x,y)); writeln(mul(x,y)); end. i和j相加 两数相乘

  5. 二、过程 1、标准过程:如读语句read( );写语句write( )等 2、自定义过程一般定义形式:课本P81 procedure 过程标识符[(形式参数表)]; [变量说明部分] begin [语句部分] end; 过程首部 过程体 方括号内为可选部分 在过程首部的过程标识符之后若无可选部分, 称为无参过程;否则称为带参过程。 在过程说明中的说明部分可以对过程内使用的常量、变量、行号、类型、过程 和函数进行说明,但它们的作用范围(辖域)只能在过程内,离开过程后,其 所占的内存释放。另外,过程可以通过(形式参数表)与主程序交换信息,即 调用时可以使用不同数据替换这些参数。 过程与程序有相同的块结构形式。

  6. lowterm(n,d); lowterm(n,n/d); lowterm(n+d); procedure fiveline; var i:integer; begin for i:=1 to 5 do writeln end; procedure nlines(n:integer); var i:integer; begin for i:=1 to n do writeln end; 无参过程,输出5个空行 带参过程,输出n个空行 过程调用 过程名[(实在参数表)] 实在参数若有,是用逗号隔开的变量或表达式,他们必须 与形式参数顺序一一对应,个数相同,类型一致,而实参的名 字与形参取名无关 如:procedure lowterm(var n,d:integer); 第二个实参是实型,而对应的形参是整型 实参只有一个

  7. 过程调用是一个独立的语句,当执行到该语句时,则将实参中的信息传送过程调用是一个独立的语句,当执行到该语句时,则将实参中的信息传送 给相应的形参(若有的话),然后转去执行过程说明中的语句,执行完毕 后返回到调用位置 例3:定义一个打印由“*”组成的三角形的过程,然后,在主程序中输入行数,并调用该过程输出三角形。 * ** *** **** ***** ******

  8. Procedure sjx(x:integer); Var I,j:integer; Begin for I:=1 to x do begin for j:=1 to I do write(‘*’); writeln; end; End; Var a:integer; Begin read(a); sjx(a); End.

  9. 练习1:分别用函数和过程计算S=1/7!+1/9!+1/13! Procedure f(n:integer;var fac:real); var i:integer;k:longint; begin k:=1; for i:=2 to n do k:=k*i; fac:=1/k end; Function f(n:integer):real; var i:integer;k:longint; begin k:=1; for i:=2 to n do k:=k*i; f:=1/k end; Var s:real; begin s:=f(7)+f(9)+f(13); writeln(s) end. Var s1,s2,s3:real; begin f(7,s1); f(9,s2); f(13,s3); s1:=s1+s2+s3; writeln(s1) end.

  10. 三、参数传递 例: var x:real;i:integer; procedure change(y:real); begin …… end; 只有change(x)正确 形参有4种:值参数、变量参数、过程参数、函数参数 形式参数表中前无var,后有类型的参数 形式参数表中前有var后有类型的参数 change(sin(x)+0.5); change(1.0); change(x); change(i); 若将过程首部改为:procedure(var y:real);

  11. 形参是值参:过程或函数被调用时,系统为每个值参开辟临时形参是值参:过程或函数被调用时,系统为每个值参开辟临时 存储单元,然后将对应实参的值赋给值参。由于值参与实参是 不同的存储单元,所以过程体中对值参的改变不会影响实参, 数据的传送是单向的,当流程返回到调用程序时,值参所占的 存储单元被释放。 形参是变量参数:进入过程体前,系统将实参的存储地址传送 给形参,过程体执行期间,对变量参数的操作就是对相应实参 的操作,从而达到调用函数与被调函数之间互相传送数据的目 的。 参考课本P84-P86

  12. Program transmit; var a,b:integer; procedure p(var x:integer;y:integer); begin x:=x+5; y:=y+5; writeln(‘x=‘,x,’y=‘,y) end; begin a:=3;b:=3; p(a,b); p(a,b); writeln(‘a=‘,a,’b=‘,b) end. x=8y=8 x=13y=8 a=13 b=3 阅读课本例6-9P86

  13. Program example; var x,y:integer; procedure change; var x:integer; begin x:=2;y:=2; writeln(x,y) end; begin x:=1;y:=1; writeln(x,y); change; writeln(x,y) end. 四、标识符的作用域 在主程序中说明的常量、类型、变量、过程名等标识符,它们 的作用域是整个程序,故称为全程量。而在过程或函数中说明 的常量、类型、变量、参数以及嵌套在其内的过程名等标识符, 作用域是说明它的过程或函数分程序之内,在之外不能使用, 这些标识符成为局部量。 如果在过程或函数中局部量与全程量(或非局部量)同名,则 阻碍了过程或函数对同名全程量(或非局部量)的访问。 全局量与局部量分析 结果 11 22 12

  14. outer1 inner nest outer2 五、嵌套 一个函数或过程可能要求调用另一个函数或过程, 我们称这种调用为函数与过程的嵌套 调用原则(函数同过程): Program nest; procedure outer1; procedure inner(z:real); begin …... end;{inner} begin …… end;{outer1} procedure outer2; begin …… end; begin{主程序} …… end. 1、外层的主程序或过程可以调用相邻 内层的过程,但不允许隔层调用 2、内层可以调用外层过程 3、同一层的过程可以相互调用,但要 遵守“向前说明”的原则

  15. 过程和函数的区别 • 过程和函数都为子程序,但也有区别: • 1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。2、函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返回值,则必须用变量形参返回。3、过程无类型,不能给过程名赋值;函数有类型,最终要将函数值传送给函数名。4、函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型说明。5、调用方式不同。函数的调用出现在表达式中,过程调用,由独立的过程调用语句来完成。6、过程一般会被设计成求若干个运算结果,完成一系列的数据处理,或与计算无关的各种操作;而函数往往只为了求得一个函数值。

  16. 1、设计一个过程,计算圆的面积。在主程序中输入一个半径值,然后调用该过程,并输出圆的面积。1、设计一个过程,计算圆的面积。在主程序中输入一个半径值,然后调用该过程,并输出圆的面积。 • const pi=3.1415926; • var r,s:real; • procedure yuan(x:real;var y:real); • begin • y:=pi*x*x; • end; • begin • readln(r); • yuan(r,s); • writeln('s=',s:6:2); • end.

  17. 作业 • 编写一个函数,根据参数指定的n,计算出函数值x,计算公式如下:

More Related