考虑这两个函数以及关于它们的两个语句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为真答案: (A)
说明: (S1):以一个计数器示例为例,即Array = [1、2、3、4、5]且i =0。令j =(i + 2),因此j =(0 + 2)= 2。
对于此示例,work1和work2将分别返回1和0。因此,陈述是错误的。
(S2):我们无法在运行时的基础上比较给定的程序。对于任何输入,我们不能说work2的性能将始终优于work1。因此,陈述是错误的。
选项(A)是正确的。
这个问题的测验