---
# System prepended metadata

title: APCS 觀念題 - 迴圈
tags: [APCS]

---

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