# [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

:::spoiler 解答
(B)
:::
* 以`a(13, 15)`呼叫函式`a`,回傳值為多少?

:::spoiler 解答
103
:::
* 以下是一個計算費氏數列第 $N$ 項($N \geq 2$)的函式。若要正確輸出費氏數列,`(a)`和`(b)`分別要填入什麼?

(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$ 項。
:::
* 請問以下程式輸出為何?

(A) 1
(B) 4
\(C\) 3
(D) 33
:::spoiler 解答
(B)
:::
* 求`g(13)`之回傳值。

(A) 16
(B) 18
\(C\) 19
(D) 22
:::spoiler 解答
(C)
:::
* 若要將`a[0]`的元素移到`a[n - 1]`,則程式片段中
`______`要填入什麼?

(A) `n + 1`
(B) `n - 1`
\(C\) `n - 2`
(D) `n`
:::spoiler 解答
(C),注意其他元素都要往前移一格。
:::
* 呼叫`f1(1)`的過程中,以下何者錯誤?

(A) 印出的數字中最大的是 4
(B) `f1`一共被呼叫 2 次
\(C\) `f2`一共被呼叫 3 次
(D) 數字 2 被印出 2 次
:::spoiler 解答
(C)
:::
* (a), (b), \(c\) 要分別填入什麼,才能使`f(4)`印出2468?

(A) 1, 2, 1
(B) 0, 1, 2
\(C\) 0, 2, 1
(D) 1, 1, 1
:::spoiler 解答
(A)
:::
* 以下程式以輾轉相除法求`i`和`j`的最大公因數。`while`迴圈裡面應該填入什麼?

(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()`是一個遞迴程式,其回傳值為下表,則`______`應填入什麼?


(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>`應填入什麼?

(A) `a < 3`
(B) `a < 2`
\(C\) `a < 1`
(D) `a < 0`
:::spoiler 解答
(D)
:::
* $n$ 為正整數,則以下程式執行完畢後 $a$ 為?

(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$
:::
* 以下是根據分數判斷等第的程式,正確的等第計算公式為:

則這個程式,0到100分鐘有幾個等第會計算錯誤?

:::spoiler 解答
11個
:::