---
# System prepended metadata

title: '[APCS] 基礎觀念習題'
tags: [APCS]

---

# [APCS] 基礎觀念習題
###### tags: `APCS`

* 以下關於直譯式程式語言及編譯式程式語言的敘述，何者錯誤？
    (A) 直譯式程式語言不需要經過編譯就能執行
    (B) 編譯式程式語言需要經過編譯器編譯
    \(C\) C++ 是一種直譯式程式語言
    (D) Python 是一種直譯式程式語言
    
    :::spoiler 解答
    (D)，C++ 屬於一種編譯式語言。
    
    程式語言的分類可以有以下幾種：
    1. 依階層劃分
        同時也是程式的發展演進，從低階語言到高階語言，越低階越接近機器運作的方式、越高階越接近人類認知運作的方式。
        * 低階語言：機器語言(Machine Language)、組合語言(Assembly Language)
        * 高階語言：C/C++, Java, Python
        * 最終我們希望完全使用自然語言操作電腦，也就是我們平常說話使用的語言。
    2. 根據執行方式劃分
        * 直譯式程式語言(Intepreted Language)
            系統可以將原始程式的指令逐一的翻譯並執行，**不需要經過編譯**，如Python、HTML等。特點是修改程式及除錯，較為簡單容易。
        * 編譯式程式語言(Compiled Language)
            撰寫的原始程式，**需要經過編譯器編譯**之後，輸出為電腦中直接執行的目的程式，如C、C++、PASCAL等。特點是再次使用只要執行目的程式，無須重新在編譯其原始程式。
    3. 根據設計方式劃分
        * 結構化程式語言(Structured Programming Languages)
            結構化的程式是以一些簡單、有層次的程式流程架構所組成，針對「循序、條件、重複」三大訴求。例如： C, BASIC
        * 物件導向程式語言(Object-oriented Programming Language)
            具有封裝（隱藏）、繼承、多型三大概念的程式程式設計典範，同時也是一種程式開發的抽象方針。它可能包含資料、屬性與方法。物件則指的是類別的實例。它將物件作為程式的基本單元，將程式和資料封裝其中，以提高軟體的再利用性、靈活性和擴充性，物件裡的程式可以存取及經常修改物件相關連的資料。例如: Python, Javascript, C++
    4. 根據軟體與使用者和資料互動面向劃分
        * 前端程式語言
            可設計軟體使用者介面，讓使用者操作、取得資料輸出。例如：Javascript
        * 後端程式語言
            用來讀取、運算資料，傳輸到前端。例如：Python,PHP,ASP
        * 資料標記語言
            用來描述資料，以便提高存取效率。例如: CSS(描述網頁樣式), HTML(描述網頁資料格式與內容), XML, JSON
    :::
* 程式執行過程中，若變數發生溢位情形，原因為何？
    (A) 以有限數目的位元儲存變數值
    (B) 電壓不穩定
    \(C\) 作業系統與程式不相容
    (D) 變數過多導致編譯器無法完全處理
    :::spoiler 解答
    (A)。載入資料量超過記憶體可承載資料量限制，我們稱為溢位(overflow)。
    :::
    
* 函數`f`定義如下，若呼叫`f(1000)`，其中指令`sum = sum + i`的執行次數最接近何者？
    (A) 1000
    (B) 3000
    \(C\) 5000
    (D) 10000
    ![](https://hackmd.io/_uploads/B1ITw-nl3.png =60%x)
    :::spoiler 解答
    (B)
    :::
* 以`a(13, 15)`呼叫函式`a`，回傳值為多少？
    ![](https://hackmd.io/_uploads/HyMcdb3e3.png =60%x)
    :::spoiler 解答
    103
    :::
    
* 以下是一個計算費氏數列第 $N$ 項（$N \geq 2$）的函式。若要正確輸出費氏數列，`(a)`和`(b)`分別要填入什麼？
    ![](https://hackmd.io/_uploads/r15X9Zhx2.png =60%x)
    (A) 
    ```
    (a): f[i] = f[i - 1] + f[i - 2]
    (b): f[N]
    ```
    (B)
    ```
    (a): a = a + b
    (b): a
    ```
    \(C\)
    ```
    (a): b = a + b
    (b): b
    ```
    (D) 
    ```
    (a): f[i] = f[i - 1] + f[i - 2]
    (b): f[i]
    ```
    :::spoiler 解答
    \(C\)。不要看到費氏數列就以為是遞迴！這個程式用了類似動態規劃的方式，只要花費 $O(N)$ 的時間就能計算出費氏數列的第 $N$ 項。
    :::
    
* 請問以下程式輸出為何？
    ![](https://hackmd.io/_uploads/HyWfnZ3x2.png =60%x)
    (A) 1
    (B) 4 
    \(C\) 3
    (D) 33
    :::spoiler 解答
    (B)
    :::
    
* 求`g(13)`之回傳值。
    ![](https://hackmd.io/_uploads/H1M62-hx2.png =60%x)
    (A) 16
    (B) 18
    \(C\) 19
    (D) 22
    :::spoiler 解答
    (C)
    :::
* 若要將`a[0]`的元素移到`a[n - 1]`，則程式片段中
`______`要填入什麼？
    ![](https://hackmd.io/_uploads/Hylta-nln.png =60%x)
    (A) `n + 1`
    (B) `n - 1`
    \(C\) `n - 2`
    (D) `n`
    :::spoiler 解答
    (C)，注意其他元素都要往前移一格。
    :::
    
* 呼叫`f1(1)`的過程中，以下何者錯誤？
    ![](https://hackmd.io/_uploads/r1fvRb2e3.png =45%x)
    (A) 印出的數字中最大的是 4
    (B) `f1`一共被呼叫 2 次
    \(C\) `f2`一共被呼叫 3 次
    (D) 數字 2 被印出 2 次
    :::spoiler 解答
    (C)
    :::
* (a), (b), \(c\) 要分別填入什麼，才能使`f(4)`印出2468？
    ![](https://hackmd.io/_uploads/SyNBJzngh.png =60%x)
    (A) 1, 2, 1
    (B) 0, 1, 2
    \(C\) 0, 2, 1
    (D) 1, 1, 1
    :::spoiler 解答
    (A)
    :::
* 以下程式以輾轉相除法求`i`和`j`的最大公因數。`while`迴圈裡面應該填入什麼？
    ![](https://hackmd.io/_uploads/B1IkxM2g3.png =60%x)
    (A) 
    ```cpp
    k = i % j;
    i = j;
    j = k;
    ```
    (B) 
    ```cpp
    i = j;
    j = k;
    k = i % j;
    ```
    \(C\) 
    ```cpp
    i = j;
    j = i % k;
    k = i;
    ```
    (D)
    ```cpp
    k = i;
    i = j;
    j = i % k;
    ```
    :::spoiler 解答
    (A)。分析輾轉相除法，`i`代入每回合被除數、`j`代入每回合除數、`k`是每回合的餘數、以及把最後結果代給`j`。
    :::
* `G()`是一個遞迴程式，其回傳值為下表，則`______`應填入什麼？
    ![](https://hackmd.io/_uploads/SyTBbfhg3.png =45%x)
    ![](https://hackmd.io/_uploads/rkGUZfheh.png =45%x)
    (A) `((2 * a + 2)) * G(a, x - 1)`
    (B) `(a + 5) * G(a - 1, x - 1)`
    \(C\) `((3 * a - 1)) * G(a, x - 1)`
    (D) `(a + 6) * G(a, x - 1)`
    :::spoiler 解答
    (A)
    :::
* `F(7)`之輸出為99，則`<condition>`應填入什麼？
    ![](https://hackmd.io/_uploads/r1iU7i6g2.png =45%x)
    (A) `a < 3`
    (B) `a < 2`
    \(C\) `a < 1`
    (D) `a < 0`
    
    :::spoiler 解答
    (D)
    :::
* $n$ 為正整數，則以下程式執行完畢後 $a$ 為？
    ![](https://hackmd.io/_uploads/B1WMEjpx2.png =45%x)
    (A) $n(n+1)/2$
    (B) $n^3 / 2$
    \(C\) $n(n-1) / 2$
    (D) $n^2(n + 1) / 2$
    :::spoiler 解答
    (D)
        前兩個迴圈總執行次數：$n+(n-1)+(n-2)+...+1 = n(n+1)/2$
    第三個迴圈執行 $n$ 次
    所以整個程式總執行次數為 $n^2(n + 1) / 2$
    :::
    
* 以下是根據分數判斷等第的程式，正確的等第計算公式為：
    ![](https://hackmd.io/_uploads/SJZQSsaen.png =35%x)
    則這個程式，0到100分鐘有幾個等第會計算錯誤？
    ![](https://hackmd.io/_uploads/Sks8HsTgh.png =45%x)
    :::spoiler 解答
    11個
    :::

    
