标签:
第五章、函数与过程程序设计
一、函数(包括标准函数和自定义函数)
  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、在上一级程序定义了的,且在下一级程序未被重新定义的。
[注]如果主程序的变量在子程序被重新定义,在子程序中主程序的变量被稳藏,在主程序中子程序的变量无效。
 
 
Delphi基本之pascal语法(第五章.函数与过程程序设计)
标签:
原文地址:http://www.cnblogs.com/lijunno1/p/4957202.html