第九章
1.过程活动记录包含哪些信息?各信息的作用?何时填写它们?
2.下面是一个调用递归函数的Pascal程序
program PP(input,output) VAR k:integer;
FUNCTION F(n:integer):integer begin
if n<=0 then F:=1 else F:=n*F(n-1); end; begin
k:=F(10); … end.
当第二次(递归地)进入F后,DISPLAY的内容是什么?当时整个运行栈的内容是什么? 3.对于下面的程序:
procedure P(X,Y,Z); begin
Y:=Y+1; Z:=Z+X; end P; begin A:=2; B:=3;
P(A+B,A,A); print A end
当参数传递的办法分别为(1)传值;(2)传地址;(3)值-结果;(4)传名时,程序执行时输出的A分别是什么?
4.应用Pascal语言的作用域规则,说明下面程序中的名字a和b的每一次出现所应用的声明。
program a(input,output);
procedure b(u,v,x,y:integer); var a:record a,b:integer end; b:reocrd b,a:integer end; begin
with a do begin a:=u;b:=v end; with b do begin a:=x;b:=y end; writeln(a.a,a.b,b.a,b.b) end; begin
b(1,2,3,4) end.
5.为下面的C程序构造一个可能的运行时环境。
int a[10];
char *a=”hello”; int f(int i,int b[]) { int j=1; A: { int i=j;
char c=b[I]; … } }
25
void g(char *s) { char c[10]; B: { int a[5]; ... } }
main() { int x=1; x=f(x,a); g(s);
return 0; }
(1)在进入函数f中的块A之后。 (2)在进入函数g中的块B之后。
6.Display表和静态链的作用是什么?试举一个程序例子,并考察其Display表和静态链的内容。
7.过程参数的传递方式有几种?简述\传地址\和\传值\的实现原理。
26
第十章 1. 2. 3. 4.
什么叫指令的执行代价? 寄存器分配的原则是什么?
在剥夺寄存器的时候,应考虑哪些因素?什么时候一个变量可以主动释放它所占 试写出程序段
IF x > 0 THEN y:=y+1 ELSE IF x < 0 THEN y:=y-1
的目标代码,其中的变量均为非形参实型变量。 5.
试写出程序段
WHILE x < y DO BEGIN y :=y + 1;
IF y > 0 THEN y :=y-x ELSE WHILE y < 0 DO y := y + x END
的目标代码,其中变量均为非形参实型变量。 6. 7. 8.
试为FOR循环语句设计目标代码。 试为REPEAT循环语句设计目标代码。 试为CASE语句设计目标代码。
用的寄存器?
27
28