函数与过程优秀课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
函数与过程
procedure fiveline; var i:integer; begin for i:=1 to 5 do writeln end;
无参过程,输出5个空行
procedure nlines(n:integer); var i:integer; begin for i:=1 to n do writeln end;
outer2
ຫໍສະໝຸດ Baidu
end.
过程和函数的区别
• 过程和函数都为子程序,但也有区别:
• 1、标识符不同。函数的标识符为FUNCTION,过程为: PROCEDURE。 2、函数中一般不用变量形参,用函数名直接返回函数值; 而过程如有返回值,则必须用变量形参返回。 3、过程无类型,不能给过程名赋值;函数有类型,最终 要将函数值传送给函数名。 4、函数在定义时一定要进行函数的类型说明,过程则不 进行过程的类型说明。 5、调用方式不同。函数的调用出现在表达式中,过程调 用,由独立的过程调用语句来完成。 6、过程一般会被设计成求若干个运算结果,完成一系列 的数据处理,或与计算无关的各种操作;而函数往往只为 了求得一个函数值。
x=8 y=8 x=13 y=8 a=13 b=3
阅读课本例6-9 P86
四、标识符的作用域
在主程序中说明的常量、类型、变量、过程名等标识符,它们
的作用域是整个程序,故称为全程量。而在过程或函数中说明
的常量、类型、变量、参数以及嵌套在其内的过程名等标识符,
作用域是说明它的过程或函数分程序之内,在之外不能使用,
* ** *** **** ***** ******
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
这些标识符成为局部量。
如果在过程或函数中局部量与全程量(或非局部量)同名,则
阻碍了过程或函数对同名全程量(或非局部量)的访问。
全 局 量 与 局 部 量 分 析
Program example; var x,y:integer; procedure change; var x:integer; begin x:=2;y:=2; writeln(x,y) end; begin
第二个实参是实型,而对应的形参是整型
lowterm(n+d); 实参只有一个
过程调用是一个独立的语句,当执行到该语句时,则将实参中的信息传送 给相应的形参(若有的话),然后转去执行过程说明中的语句,执行完毕 后返回到调用位置
例3:定义一个打印由“*”组成的三角形的过程,然 后,在主程序中输入行数,并调用该过程输出三角形。
例: var x:real;i:integer; procedure change(y:real); begin …… end;
change(sin(x)+0.5); change(1.0); change(x); change(i);
若将过程首部改为:procedure change(var y:real); 只有change(x)正确
形参是值参:过程或函数被调用时,系统为每个值参开辟临时 存储单元,然后将对应实参的值赋给值参。由于值参与实参是 不同的存储单元,所以过程体中对值参的改变不会影响实参, 数据的传送是单向的,当流程返回到调用程序时,值参所占的 存储单元被释放。
形参是变量参数:进入过程体前,系统将实参的存储地址传送 给形参,过程体执行期间,对变量参数的操作就是对相应实参 的操作,从而达到调用函数与被调函数之间互相传送数据的目 的。
begin
内层的过程,但不允许隔层调用
…... end;{inner} begin ……
2、内层可以调用外层过程 3、同一层的过程可以相互调用,但要 遵守“向前说明”的原则
end;{outer1} procedure outer2;
outer1
inner
begin
……
nest
end;
begin{主程序} ……
Var s:real; begin s:=f(7)+f(9)+f(13); writeln(s) end.
三、参数传递
形参有4种:值参数、变量参数、过程参数、函数参数
形式参数表中前无var, 后有类型的参数
形式参数表中前有 var后有类型的参数
形参 值参 变量参数
实参 类型赋值相容的表达式
同一类型的变量
Var s1,s2,s3:real; begin
f(7,s1); f(9,s2); f(13,s3); s1:=s1+s2+s3; writeln(s1) 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;
x:=1;y:=1; writeln(x,y); change; writeln(x,y) end.
结果 11
22
12
五、嵌套
一个函数或过程可能要求调用另一个函数或过程,
我们称这种调用为函数与过程的嵌套
Program nest;
调用原则(函数同过程):
procedure outer1;
procedure inner(z:real); 1、外层的主程序或过程可以调用相邻
带参过程,输出n个空行
过程调用
过程名[(实在参数表)]
实在参数若有,是用逗号隔开的变量或表达式,他们必须 与形式参数顺序一一对应,个数相同,类型一致,而实参的名 字与形参取名无关
如:procedure lowterm(var n,d:integer);
lowterm(n,d);
lowterm(n,n/d);
参考课本P84-P86

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.
read(a); sjx(a); End.
练习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;
相关文档
最新文档