当前位置:去回答>生活百科>pascal函数与过程

pascal函数与过程

2024-10-03 18:40:05 编辑:join 浏览量:532

pascal函数与过程

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;

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

标签:pascal,函数,过程

版权声明:文章由 去回答 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.quhuida.com/life/285336.html
热门文章