2016-04-28 30 views
0

我有一個學生正在爲AP CS測試學習(他下週拿到它)。我在中/年結束時被聘用,基本上成爲這些IT課程剩餘學年的一個長期支持。我對java或編程知識不夠,無法向他解釋爲什麼這個練習測試題的答案是B而不是A(根據答題紙)。實踐AP CS測試

我希望這可能是一個不錯的地方,以獲得一個解釋,我可以給他......

/** 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只有

+0

什麼在數組 – Baahubali

+0

@ user1490835正整數,問題指定了這一點。 – WBT

回答

4

III不是一個有效的組合,因爲比你執行牛逼不能執行小號多次。
從測試角度來看:在這個問題中,這是最重要的洞察力,因爲找出這個結果立即敲出3個選項,並把你猜到50/50。

I不是有效的組合,因爲該陣列只包含正值,所有這些都是> 0,所以有條件if(arr[k]>v)必須返回true至少一次,這意味着小號至少執行一次,如果while環身體至少執行一次。在選項I中,語句T(也在while循環體中)執行5次,所以S必須至少執行一次。

II是值的有效組合。
從測試角度來看:這是不值得花時間來證明這一點的(例如通過提供產生這種組合的樣本輸入),因爲消除過程已經將您降爲一個答案。

因此,選項B II only是正確的答案。

道具給AP測試題的作者。

+1

感謝您對每個選項的詳細解釋。這將會非常有幫助!我不知道如何幫助他做好準備,除了讓他進行練習測試並回去研究他爲什麼得到那些不正確的東西。手指越過星期一。 – MsAudra

+0

@MsAudra這是一個很好的編寫方法。在準備時儘早開始也是一件好事(在分發時間內,相同的練習時間比在測試前擠塞時更有效),並且在測試當天充足的休息。在考試中祝你的學生好運! – WBT