📜  编程语言原理|设置 1

📅  最后修改于: 2021-09-27 14:41:48             🧑  作者: Mango

以下问题已在 GATE CS 考试中提出。

1.以下配对最合适

X: Indirect addressing                  1: Loops
Y: Immediate addressing                 2: Pointers
Z: Auto decrement addressing            3. Constants

是 (GATE CS 2000)

(a) X—3 Y—2 Z—1
(b) X—1 Y—3 Z—2
(c) X—2 Y—3 Z—1
(d) X—3 Y—1 Z—2

答案 (c)

参考:
http://en.wikipedia.org/wiki/Addressing_mode
http://www.cs.nmsu.edu/~pfeiffer/classes/273/notes/immdirext.html

2. 编程语言上下文中的别名是指(GATE CS 2000)
(a) 多个变量具有相同的内存位置
(b) 具有相同值的多个变量
(c) 具有相同标识符的多个变量
(d) 同一变量的多次使用

答案(一)
别名描述了一种情况,在这种情况下,可以通过程序中的不同符号名称访问内存中的数据位置。

参考
http://en.wikipedia.org/wiki/Aliasing_%28computing%29


3. 假设通过引用参数传递调用,程序 P1 中的打印语句打印什么? (GATE CS 2001)

Program Pl() 
{ 
  x=10; 
  y=3; 
  func1(y, x, x); 
  print x; 
  print y; 
}
func1 (x, y, z) 
{ 
   y = y + 4; 
   z = x + y + z; 
} 

a) 10, 3
b) 31, 3
c) 27, 7
d) 以上都不是

答案(二)
注意参数传递的顺序。在 func1() 中,x 实际上会引用 main() 的 y; y 和 z 将引用 main() 的 x。声明 y = y + 4;将导致 14 并且语句 z = x + y + z 将使 z = 3 + 14 + 14 = 31(因为 y 和 z 指向 main 的相同变量 x)。由于 z 指的是 main() 的 x,因此 main 将打印 31。


4. 考虑以下程序

Program P2 
    var n: int: 
     procedure W(var x: int) 
     begin 
         x=x+1; 
         print x;   
     end 
  
     procedure D 
     begin  
         var n: int; 
         n=3; 
         W(n);  
     end 
begin //beginP2 
  n=10; 
  D; 
end 

如果语言有动态作用域并且参数是通过引用传递的,程序会打印什么? (GATE CS 2001)
一)10
b) 11
c) 3
d) 以上都不是

答案(d)
程序将打印 4。

5. 在值结果和引用参数传递约定下函数返回的结果 (GATE CS 2002)

a) 没有区别
b) 存在循环时不同
c) 在所有情况下都不同
d) 存在异常时可能会有所不同

答案(d)
在按引用调用评估中,函数接收对参数的隐式引用,而不是其值的副本。这通常意味着函数可以修改参数——它的调用者可以看到的东西。请注意,C 不支持按引用调用,但可以使用指针实现按引用调用。

Call-by-value-result 使用了 call-by-value 和 call-by-reference 的组合。 Call-by-value-result 通过创建传入参数的本地版本来工作。但是,这些本地版本中的值在过程结束后被复制回原始参数。

如有例外,结果可能会有所不同。让我们用任意语言看下面的例子

int addTwo(a, b)
  {
     a = a + b;
     b = a + b;
     return b;
  }

如果使用 call-by-value-result,则调用 addTwo(x, x) 将返回 3x(有关解释,请参见下文)。

a = a + b; will result in a = x + x
     b = a + b; will result in  b = 2x + x 

如果使用 call-by-reference,则 addTwo(x, x) 将返回 4x(有关解释,请参见下文)。

a = a + b; will result in a = x + x
     b = a + b; will result in  b = 2x + 2x 

参考:
http://c2.com/cgi/wiki?CallByValueResult
http://en.wikipedia.org/wiki/Evaluation_strategy

请参阅 GATE Corner 了解所有往年论文/解决方案/解释、教学大纲、重要日期、笔记等。