📜  门| GATE-CS-2006 |第 55 题

📅  最后修改于: 2021-09-25 07:04:15             🧑  作者: Mango

考虑这两个函数和关于它们的两个语句 S1 和 S2

int work1(int *a, int i, int j)
{
    int x = a[i+2];
    a[j] = x+1;
    return a[i+2] – 3;
}
  
int work2(int *a, int i, int j)
{
    int t1 = i+2;
    int t2 = a[t1];
    a[j] = t2+1;
    return t2 – 3;
}

S1: work1 到 work2 的转换形式是有效的,即对于任何程序状态和输入参数,work2 将计算出与 work1 相同的输出并对程序状态产生相同的影响
S2:与 work1 相比,所有应用于 work1 以获得 work2 的转换将始终提高 work2 的性能(即减少 CPU 时间)
(A) S1 为假,S2 为假

(B) S1 为假,S2 为真
(C) S1 为真,S2 为假
(D) S1 为真,S2 为真答案:(一)
解释: (S1):以反例为例,Array = [1, 2, 3, 4, 5] and i = 0. 设j = (i+2), 所以j = (0+2) = 2。
对于此示例,work1 和 work2 将分别返回 1 和 0。所以,声明是错误的。

(S2):我们无法根据运行时间比较给定的程序。对于任何输入,我们不能说 work2 的性能总是优于 work1。所以,声明是错误的。

选项(A)是正确的。
这个问题的测验