1. PROGRAM test (input, output);
VAR a,b,c : integer;
PROCEDURE p(VAR x : integer; y : integer);
  VAR m,n : integer;
    BEGIN
      m := x * y;
      x := x + 5;
      y := y + 5;
      n := x * y;
      writeln (m:4, n:4)
    END;
BEGIN
   a := 3; b := 3;
   p (a,b);
   p (a,b);
END.
2. PROGRAM test (output);
VAR a,b : integer;
PROCEDURE p1 (a : integer);
  VAR b : integer;
  BEGIN
    b := a + 5;
    writeln (a:3, b:3);
    a := b + 5
  END;
BEGIN
  a := 1; b := 2;
  p1 (b);
  writeln(a:3, b:3)
END.
3. PROGRAM exam (input, output);
VAX x,y : integer;
PROCEDURE a;
  VAX x : integer;
  BEGIN 
    writeln (x:1, ‘,’, y:1)
  END;
  BEGIN
x := 1; y := 2;
a
  END.4. PROGRAM ex ( input, output);
VAR
    a, b : integer;
PROCEDURE p (VAR y : integer; x : integer);
  BEGIN y := y DIV x;
        writeln (a, b, x, y)
  END;
BEGIN
  a :=3; b := 6;
  writeln (a, b);
   p (a, b);
   writeln (a, b)
END.5. PROGRAM ex (input, output);
VAR
    a, b : integer;
PROCEDURE change (VAR x : integer; y : integer);
    VAR temp : integer;
    BEGIN
       temp := x;
       x := y;
       y := temp;
       writeln (x ,y)
    END;
    BEGIN
       a := 3; b := 6;
       writeln (a ,b);
       change (a, b);
       writeln (a, b);
    END.6. PROGRAM exam (output);
VAR a, b, c : integer;
PROCEDURE proc (VAR a : integer; b : integer);
  BEGIN
    a := 1; b := 2, c :=3
  END;
BEGIN
  a := 5; b := 6; c := 7;
  proc (a, b);
  writeln (a : 2, b : 2, c : 2)
END.

解决方案 »

  1.   

    1.PROCEDURE p(VAR x : integer; y : integer);
      因为声明用了var关键字,所以,要考虑a,b 在函数内的增量就可以了
    2.要考虑外部函数和内部函数中有同名的变量的处理
      同名函数应用在各自的函数内部,不会互相影响的就可以了
    3.同2一样
    4.以下都差不多,只要小心点就不会错的,很简单
      

  2.   

    PROCEDURE p(VAR x : integer; y : integer);
    PROCEDURE p(    x : integer; y : integer);          ?谁给详细解释一下?
      

  3.   

    PROCEDURE p(Const x : integer; y : integer);
       在过程中不可以使用 x := ....
    PROCEDURE p(Var x : integer; y : integer);
       在过程中可以使用 x := .... p执行以后x的值是新值
    PROCEDURE p(    x : integer; y : integer);
       在过程中可以使用 x := .... 但p执行以后x值还是调用p之前的
      

  4.   

    procedure p(var x: integer) ;
    begin
     {...}
    end;     procdure callp();
    var
      y :integer ;
    begin
      y := 3 ;
      p(y);
    end;//上面的,过程p不会再为x分配内存,如果p内部修改了x,那么callp 中的 y 会被直接修改。因为x和y指向的是同一个内存地址。是双向的。procedure p(x: integer) ;
    begin
     {...}
    end;  //过程p会为x重新分配内存,对x的修改不会影响传入的值。也就是说是单向的。
      

  5.   

    分别拿到Delphi中Debug一下不就都明白了
    好像是考试题啊