free pascal 过程函数变量作用域样例详解

 我来答
假冒哈利
2011-09-23 · TA获得超过197个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:155万
展开全部
变量分为全局变量和局部变量:顾名思义,全局变量在整个程序的全局都能发挥作用;而局部变量只能在一个过程或者函数中(也就是组成程序的一部分)中调用。

var//在程序头声明变量,所以以下是全局变量
a,b:integer;

precedure example(x:integer);
var//在程序的一个过程中声明的变量,只能在这一个过程中使用,所以叫做局部变量。
a:integer;
begin
a:=x;
write(a);
writeln(b);
end;

begin//主程序了,在里面放几个输出语句,让你看看局部变量和全局变量的区别。
a:=1;b:=2;
writeln('全局变量a,b为:',a,' ',b);
writeln('看看全局变量和局部变量在过程中的表现');
example(10);
end.

输出:
全局变量a,b为:1 2
看看全局变量和局部变量在过程中的表现
10 2
//在过程example中,x为参数,x的值付给了局部变量a。而过程example中使用的writeln(a)调用的正是在过程中定义的局部变量a 。也就是说,只要在过程中定义了一个变量,即使这个变量和某一个在主程序中定义的全局变量的名称重复了,Pascal中的过程会优先考虑并引用在过程中定义的局部变量;另一方面,你可以看到,在过程example中有语句writeln(b);在主程序中也有writeln(b),说明在程序的每一个地方都能调用全局变量b。
圆桌4819
2011-09-22 · TA获得超过345个赞
知道小有建树答主
回答量:694
采纳率:0%
帮助的人:406万
展开全部
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:=函数名(实在参数表);
又,如果函数类型是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

program df;
var a,b,t:real;
begin
readln(a,b);
a:=int(a);
b:=int(b);
t:=a;
a:=b;
b:=t;
writeln(a,b);
end.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式