- 慧慧
-
function是函数,有返回值,它的结果只是一个值,保存在这个函数中,返回到主程序。
procedure是过程,说白了它就是一段程序,用来执行一些操作,如果它不带参数,也可放在主程序或其它函数和过程中。这是我自己理解的,书上的详细介绍:
8.1 过程
1.过程的定义
procedure 过程名(形式参数:参数说明);{也可以不带参数}
var
begin
...
end;
2.过程的调用
过程名(实在参数表);
例1:求n个自然数的最大公约数;
program gcd1;
const maxn=100;
var n,i,gcd:integer;
a:array[1..maxn] of integer;
procedure enter;
begin
write("n=(<100)");readln(n);
for i:=1 to n do
repeat
write("a[",i,"]=");readln(a[i]);
until a[i]>0;
end;
procedure find_gcd(x,y:integer);{定义过程}
var r:integer;
begin
r:=x mod y;
while r<>0 do
begin x:=y;y:=r;r:=x mod y; end
gcd:=y;
end;
procedure print;
begin
writeln("GCD=" ,gcd);
end;
begin
enter;
gcd:=a[1];
for i:=2 to n do
find_gcd(gcd,a[i]);
print;
end.
8.2 函数
1.函数的定义
function 函数名(形参表):函数类型; { ————函数首部}
var {————局部变量说明部分}
begin {————函数体}
... {————函数语句}
...
函数名:=表达式
end;
2.函数的调用:
函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它可以出现在任何表达式可以出现的地方。
例如赋值语句的右边:
X:=函数名(实在参数表); {————X的类型与函数类型必须一致}
又,如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式:
if 函数名(实在参数表) then ……
例3:编一程序,求从10名同学中选出3名代表,有几种不同的选法。
(公式:C(m,n)=m!/n!*(m-n)!从m中选n)
program zohe1;
var m,n:integer;
c:longint;
function factor(x:integer):longint;{定义}
var i:integer;
p:longint;
begin
p:=1;
for i:=1 to x do p:=p*i;
factor:=p;{这个语句必须}
end;
begin
write("m,n=");readln(m,n);
c:=factor(m) div (factor(n)*factor(m-n));{调用}
writeln("c(",m,",",n,")=",c);
end.
8.3全局变量和局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序。当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
例4:全局变量和局部变量。
program local_global;
var i,k:integer;
procedure sub1;
var i,j:integer;
begin
i:=17;
writeln("i in sub=",i);
writeln("k in sub=",k);
end;
begin
i:=2;k:=9;
writeln("i in main=",i);
writeln("k in sub=",k);
sub1;
writeln("i in main=",i);
writeln("j in main=",j);
readln;
end.
上述程序运行时将出现Unknown Identfier;因为变量j在主程序中没定义。
当删除本语句时。运行结果如下:
i in main=2
k in main=9
i in sub=17
k in sub=9
i in main=2
8. 4 值参和变量参数
值形参——传值:调用时可用表达式代替形参,不该变实在参数的值。
变量形参——传地址:调用时必须用变量代替行参变量,改变实在参数的值。
例4:请看下列程序的运行结果。
program li3_10;
var a,b,c:integer;
procedure sub(x,y:integer;var z:integer);
begin
x:=x+1;y:=y+1;z:=x+y;
writeln("sub:x=",x:2,"y=",y:2,"z=",z:2);
end;
begin
a:=1;b:=4;c:=9;
writeln("main:a=",a:2,"b=",b:2,"c=",c);
sub(a,b,c);
writeln("main:a=",a:2,"b=",b:2,"c=",c);
sub(c+5,b*b,a);
writeln("main:a=",a:2,"b=",b:2,"c=",c);
readln;
end.
main:a=1 b=4 c=9
sub:x=2 y=5 z=7
main:a=1 b=4 c=7
sub:x=13 y=17 z=30
main:a=30 b=4 c=7
- coco
-
function定义的是函数,procedure定义的是过程,很简单吧
- 我不懂运营
-
你是爷!