练习AP CS测试

时间:2016-04-28 02:24:44

标签: java

我有一名学生正在接受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的值的可能组合

Image of possible combinations for the value of lim

(A)我只是

(B)仅限II

(C)III

(D)仅限I和III

(E)仅限II和III

1 个答案:

答案 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测试问题的作者。