我有一名学生正在接受AP CS考试(他下周参加考试)。我被聘为中期/结束年,这些IT课程在本学年剩余时间基本上都是长期的。我不太了解java或编程,向他解释为什么这个练习测试问题的答案是B而不是A(根据答案表)。
我希望这可能是一个体面的地方,可以得到我可以带给他的解释......
/** Precondition: arr contains only positive values.
*/
public static void doSome(int[]arr, int lim)
{
int v = 0;
int k = 0;
while (k < arr.length && arr[k] < lim)
{
if (arr[k] > v)
{
v = arr[k]; /* Statement S */
}
k++; /* Statement T */
}
}
假设 doSome 被调用并执行且没有错误。对于lim的值,执行Statement S的次数以及Statement T执行的次数,以下哪一种是可能的组合?
lim的值的可能组合
(A)我只是
(B)仅限II
(C)III
(D)仅限I和III
(E)仅限II和III
答案 0 :(得分:4)
III
不是有效组合,因为您执行 S 的次数超过执行 T 的次数。
从测试的角度来看:在这个问题中,这是最重要的见解,因为搞清楚这一点会立即敲出3个选项,并在猜测时将你降到50/50。
I
不是有效组合,因为数组仅包含正值,所有这些都是&gt; 0,因此条件if(arr[k]>v)
必须至少返回true
一次,这意味着如果while
循环体至少执行一次, S 至少执行一次。在选项I
中,语句 T (也在while
循环的主体中)执行5次,因此 S 必须至少执行一次。
II
是值的有效组合
从测试的角度来看:不值得花时间来证明这一点(例如通过提供产生这种组合的样本输入),因为消除过程已经让你回答了一个答案。
因此,选项B II only
是正确答案。
支持AP测试问题的作者。