# APCS 觀念題 - 函式與變數作用域 ###### tags: `APCS` ## 第 1 題 給定下方程式,當程式執行完後,輸出結果為何? ```c void f(int x, int y) { int tem = x; x = y; y = tem; } int main() { int x = 2, y = 3; f(x, y); printf("%d", (x - y) * (x + y) / 2); return 0; } ``` (A) 2 (B) 3 \(C\) -2 (D) -3 <!-- C --> ## 第 2 題 給定一陣列 `a[10] = { 1, 3, 9, 2, 5, 8, 4, 9, 6, 7 }`,i.e., `a[0] = 1`, `a[1] = 3`, ..., `a[8] = 6`, `a[9] = 7`,以 `f(a, 10)` 呼叫執行下方函式後,回傳值為何? ```c int f(int a[], int n) { int index = 0; for (int i = 1; i <= n - 1; i = i + 1) { if (a[i] >= a[index]) { index = i; } } return index; } ``` (A) 1 (B) 2 \(C\) 7 (D) 9 <!-- C --> ## 第 3 題 下方 `f()` 函式執行後所回傳的值為何? ```c int f() { int p = 2; while (p < 2000) { p = 2 * p; } return p; } ``` (A) 1023 (B) 1024 \(C\) 2047 (D) 2048 <!-- D --> ## 第 4 題 下方 `f()` 函式 `(a)`, `(b)`, `(c)` 處需分別填入哪些數字,方能使得 `f(4)` 輸出 `2468` 的結果? ```c int f(int n) { int p = 0; int i = n; while (i >= ___(a)___) { p = 10 - ___(b)___ * i; printf("%d", p); i = i - ___(c)___; } } ``` (A) 1, 2, 1 (B) 0, 1, 2 \(C\) 0, 2, 1 (D) 1, 1, 1 <!-- A --> ## 第 5 題 下方 `F()` 函式執行後,輸出為何? ```c void F() { char t, item[] = {'2', '8', '3', '1', '9'}; int a, b, c, count = 5; for (a = 0; a < count - 1; a = a + 1) { c = a; t = item[a]; for (b = a + 1; b < count; b = b + 1) { if (item[b] < t) { c = b; t = item[b]; } if ((a == 2) && (b == 3)) { printf("%c %d\n", t, c); } } } } ``` (A) 1 2 (B) 1 3 \(C\) 3 2 (D) 3 3 <!-- B --> ## 第 6 題 給定下方程式,其中 `s` 有被宣告為全域變數,請問程式執行後輸出為何? ```c= int s = 1; // 全域變數 void add(int a) { int s = 6; for (; a >= 0; a = a - 1) { printf("%d,", s); s++; printf("%d,", s); } } int main() { printf("%d,", s); add(s); printf("%d,", s); s = 9; printf("%d", s); return 0; } ``` (A) 1,6,7,7,8,8,9 (B) 1,6,7,7,8,1,9 \(C\) 1,6,7,8,9,9,9 (D) 1,6,7,7,8,9,9 <!-- B --> ## 第 7 題 給定下方函式 `F()`,已知 `F(7)` 回傳值為 17,且 `F(8)` 回傳值為 25,請問 `if` 的條件判斷式應為何? ```c int F(int a) { if (___(?)___) return a * 2 + 3; else return a * 3 + 1; } ``` (A) `a % 2 != 1` (B) `a * 2 > 16` \(C\) `a + 3 < 12` (D) `a * a < 50` <!-- D --> ## 第 8 題 小藍寫了一段複雜的程式碼想考考你是否了解函式的執行流程。請回答程式最後輸出的數值為何? ```c int g1 = 30, g2 = 20; int f1(int v) { int g1 = 10; return g1 + v; } int f2(int v) { int c = g2; v = v + c + g1; g1 = 10; c = 40; return v; } int main() { g2 = 0; g2 = f1(g2); printf("%d", f2(f2(g2))); return 0; } ``` (A) 70 (B) 80 \(C\) 100 (D) 190 <!-- A --> ## 第 9 題 給定下方函式 `F()`,執行 `F()` 時哪一行程式碼可能永遠不會被執行到? ```c void F(int a) { while (a < 10) a = a + 5; if (a < 12) a = a + 2; if (a <= 11) a = 5; } ``` (A) `a = a + 5;` (B) `a = a + 2;` \(C\) `a = 5;` (D) 每一行都執行得到 <!-- C --> ## 第 10 題 給定下方函式 `F()`,`F()` 執行完所回傳的 `x` 值為何? ```c int F(int n) { int x = 0; 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 * 2) x = x + 1; return x; } ``` (A) $n(n + 1)\sqrt(\lfloor log_2 n \rfloor)$ (B) $n^2(n + 1)/2$ \(C\) $n(n + 1) \lfloor log_2 n + 1 \rfloor / 2$ (D) $n(n + 1) / 2$ <!-- C --> ## 第 11 題 下方 `F()` 函式執行時,若輸入依序為整數 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,請問 `X[]` 陣列的元素值依順序為何? ```c void F() { int X[10] = {0}; for (int i = 0; i < 10; i = i + 1) { scanf("%d", &X[(i + 2) % 10]); } } ``` (A) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (B) 2, 0, 2, 0, 2, 0, 2, 0, 2, 0 \(C\) 9, 0, 1, 2, 3, 4, 5, 6, 7, 8 (D) 8, 9, 0, 1, 2, 3, 4, 5, 6, 7 <!-- D --> ## 第 12 題 若以 `f(22)` 呼叫下方 `f() `函式,總共會印出多少數字? ```c void f(int n) { printf("%d\n", n); while (n != 1) { if ((n % 2) == 1) { n = 3 * n + 1; } else { n = n / 2; } printf("%d\n", n); } } ``` (A) 16 (B) 22 \(C\) 11 (D) 15 <!-- A --> ---- ## 解答 |1|2|3|4|5| |-|-|-|-|-| |C|C|D|A|B| |6|7|8|9|10| |-|-|-|-|-| |B|D|A|C|C| |11|12|13|14|15| |-|-|-|-|-| |D|A|-|-|-| [<< APCS 觀念題 - 陣列](https://hackmd.io/@kaeteyaruyo/APCS-concept-array) | [目錄](https://hackmd.io/@kaeteyaruyo/APCS-concept-index) | [APCS 觀念題 - 遞迴 >>](https://hackmd.io/@kaeteyaruyo/APCS-concept-recursion)