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