您的位置:首页 > 编程语言 > Delphi

Delphi基本之pascal语法(第五章.函数与过程程序设计)

2015-11-11 19:44 381 查看
第五章、函数与过程程序设计
一、函数(包括标准函数和自定义函数)
1、函数的定义
格式:FUNCTION 函数名(<形参表>):返回值类型;
VAR
<变量说明>
BEGIN
<函数体>
END
[注]:1、形参表每个参数都写明其类型;
2、有且只有一个返回值,并且要将返回值赋值给函数名。
[例]:求五边形的面积
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
2、函数的调用
1)、函数的调用必然出现在表达式中(等号的右边),不能以单独地在语句出现
2)、调用时,将每个实参传递给对应的形参
program ml_area(input,output);
var
l1,l2,l3,l4,l5,l6,l7,s:real;
function area(a,b,c:real):real;
var
p:real;
begin
p:=(a+b+c)/2;
area:=sqrt(p*(p-a)*(p-b)*(p-c);
end;
begin
write('input');
readln(l1,l2,l3,l4,l5,l6,l7);
s:=area(l1,l2,l6)+area(l2,l6,l7)+……;
writeln('s=',s:10:3);
end.

二、过程
格式:PROCEDURE<过程名>(<形式参数表>)
VAR
<说明部分>
BEGIN
<过程体>
END;

[例1]某过程的形参表为(var a,b:real;c,d:integer;var e:char);
主程序中有如下变量说明:x,y:real; m:integer; next:char;
则以下实参表中合法的有:(1、2、3)
1、(x,y,m+3,70,next)
2、(y,x,m,m,next)
3、(y,x,35,m DIV 10,next)
4、(m,x,30,10,next)
5、(x,y,m,10)
6、(35,0,y,m,10,next)
7、(x,y,m,m/10,next)
8、(A,B,30,10,next)

[例2]求程序输出的结果。
program ex(input,output);
var
x,y,z:integer;
procedure s(x:integer; var y:integer);
var
z:integer
begin
x:=5; y:=6; z:=7;
end;
begin
x:=1; y:=2; z:=3;
s(x,y);
writeln(x,y,z);
end.
输出结果:1 6 3

[例3]:求五个数中的最大值。
program max_in_5(input,output);
var
n1,n2,n3,n4,n5:integer;
procedure lagest_in_three(a,b,c:integer;var e:integer)
begin
e:=a;
if b>e then
e:=b;
if c>e then
e:=c;
end;
begin
write('……');
readln(n1,n2,n3,n4,n5);
lagest(n1,n2,n3,n1);
lagest(n1,n4,n5,n1);
write(n1);
end.

三、嵌套
[例]:计算、
program Cmn(input,output);
function fax(x:integer):integer:
var
i:integer;
begin
fac:=1;
for i:=1 to x do
fac:=fac*i;
end;
function c(a,b:integer):real;
begin
c:=fac(a)/fac(b)*fac(a-b)
end;
begin
writeln('c(9,3)=',c(9,3));
writeln('c(8,5=',c(8,5));
end.

四、递归
函数或过程调用它本身,称为递归。
[例1]、用递归计算n! {=m!/n!(m-n)!}
program fac_n(input,output);
var
n:integer;
function fac(n:integer):integer;
begin
if n=1 then fac:=1
else fac:=n*fac(n-1);
end;
[例2]、用递归计算

1)、function power(a,b:integer):integer;
begin
if b=1 then power:=a
else power:=a*power(a,b-1);
end;
2)、procedure power(a,b:integer;var c:integer);
begin
if b=1 then c:=a
else power(a,b-1,c);
c:=a*c;
end;

[例3]、输入一串字符串(以‘.’结束)按逆顺输出
program revers(input,output);
procedure rever;
var
c:char;
begin
read(c);
if c<>'.' then rever;
write(c);
end;
begin
rever;
end.

五、标识符的作用域
1、全局变量和局部变量
1)、全局变量:在主程序中被说明,作用域:整个程序;
2)、局部变量:在子程序中被说明,作用域:主程序及其下级的程序。
2、子程序(function、precedure)的作用域
一个子程序可以调用它的下一级了程序,或可以调用在它之前定义的同级子程序。
[例]写出程序运行的结果。
program range(input,output);
var
x,y:integer;
procedure p1;
var
x,z:integer;
begin
x:=10; y:=y+1; z:=10;
writeln(x,y,z);
end;
begin
x:=1; y:=1;
writeln(x,y);
p1;
writeln(x,y,z);
end.

结果为:
(x y z)
1 1
10 2 10
1 2 (error)

3、在子程序中被改变值的变量可以回传的两种方法:
a、变量参数 procedure(var 变量名);
b、在上一级程序定义了的,且在下一级程序未被重新定义的。
[注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: