# APCS 觀念題 - 迴圈 ###### tags: `APCS` ## 第 1 題 給定下方程式片段,`for` 迴圈總共會執行幾次? ```c int i, j = 0; for (i = 0; i < 128; i = i + j) { j = i + 1; } ``` (A) 8 (B) 32 \(C\) 64 (D) 128 <!-- A --> ## 第 2 題 給定下方程式,若已知輸出的結果為 `[1][2][3][5][4][6]`,程式中的 `(?)` 應為下列何者? ```c int main() { int i, j; for (i = 0; i < 5; i = i + 1) { for (j = 0; ___(?)___; j = j + 2) { printf("[%d]", i + j); } } } ``` (A) `j < i` (B) `j > i` \(C\) `j <= i` (D) `j >= i` <!-- A --> ## 第 3 題 下方程式正確的輸出應該如下: ``` * *** ***** ******* ********* ``` 在不修改下方程式之第 4 行及第 7 行程式碼的前提下,最少需修改幾行程式碼以得到正確輸出? ```c= int k = 4; int m = 1; for (int i = 1; i <= 5; i = i + 1) { for (int j = 1; j <= k; j = j + 1) { printf(" "); } for (int j = 1; j <= m; j = j + 1) { printf("*"); } printf("\n"); k = k - 1; m = m + 1; } ``` (A) 1 (B) 2 \(C\) 3 (D) 4 <!-- A --> ## 第 4 題 一個費式數列定義第一個數為 0,第二個數為 1,之後的每個數都等於前兩個數相加,如下所示: 0、1、1、2、3、5、8、13、21、34、55、89...。 下方的程式用以計算第 N 個 (N >= 2) 費式數列的數值,請問 `(a)` 與 `(b)` 兩個空格的敘述 (statement) 應該為何? ```c int a = 0; int b = 1; int i, temp, N; // ... for (i = 2; i <= N; i = i + 1) { temp = b; ___(a)___; a = temp; printf("%d\n", ___(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]` <!-- C --> ## 第 5 題 若 `n` 為正整數,下方程式三個迴圈執行完畢後 `a` 值將為何? ```c int a = 0, n; // ... for (int i = 1; i <= n; i = i + 1) for (int j = i; j <= n; j = j + 1) for (int k = 1; k <= n; k = k + 1) a = a + 1; ``` (A) $n(n + 1) / 2$ (B) $n^3 / 2$ \(C\) $n(n - 1) / 2$ (D) $n^2(n + 1) / 2$ <!-- D --> ## 第 6 題 下方程式片段中執行後若要印出下列圖案, `(a)` 的條件判斷式該如何設定? ``` ****** **** ** ``` ```c for (int i = 0; i <= 3; i = i + 1) { for (int j = 0; j < i; j = j + 1) printf(" "); for (int k = 6 - 2 * i; (a); k = k - 1) printf("*"); printf("\n"); } ``` (A) `k > 2` (B) `k > 1` \(C\) `k > 0` (D) `k > -1` <!-- C --> ## 第 7 題 請問下方程式,執行完後輸出為何? ```c int i = 2, x = 3; int N = 65536; while (i <= N) { i = i * i * i; x = x + 1; } printf("%d %d \n", i, x); ``` (A) 2417851639229258349412352 7 (B) 68921 43 \(C\) 65537 65539 (D) 134217728 6 <!-- D --> ## 第 8 題 下方程式片段無法正確列印 20 次的 "Hi!",請問下列哪一個修正方式仍無法正確列印 20 次的 "Hi!"? ```c for (int i = 0; i <= 100; i = i + 5) { printf("%s\n", "Hi!"); } ``` (A) 需要將 `i <= 100` 和 `i = i + 5` 分別修正為 `i < 20` 和 `i = i + 1` (B) 需要將 `i = 0` 修正為 `i = 5` \(C\) 需要將 `i <= 100` 修正為 `i < 100;` (D) 需要將 `i = 0` 和 `i <= 100` 分別修正為 `i = 5` 和 `i < 100` <!-- D --> ## 第 9 題 下方程式執行完畢後所輸出值為何? ```c int main() { int x = 0, n = 5; for (int i = 1; i <= n; i = i + 1) for (int j = 1; j <= n; j = j + 1) { if ((i + j) == 2) x = x + 2; if ((i + j) == 3) x = x + 3; if ((i + j) == 4) x = x + 4; } printf("%d\n", x); return 0; } ``` (A) 12 (B) 24 \(C\) 16 (D) 20 <!-- D --> ---- ## 解答 |1|2|3|4|5| |-|-|-|-|-| |A|A|A|C|D| |6|7|8|9|10| |-|-|-|-|-| |C|D|D|D|-| [<< APCS 觀念題 - 流程控制](https://hackmd.io/@kaeteyaruyo/APCS-concept-selection) | [目錄](https://hackmd.io/@kaeteyaruyo/APCS-concept-index) | [APCS 觀念題 - 陣列 >>](https://hackmd.io/@kaeteyaruyo/APCS-concept-array)