• 沒有找到結果。

【資訊】APCS2016年第1次學科試題 - 高中藝能科 - 藝能科檔案下載 - 國立中科實驗高級中學教學單位網站

N/A
N/A
Protected

Academic year: 2021

Share "【資訊】APCS2016年第1次學科試題 - 高中藝能科 - 藝能科檔案下載 - 國立中科實驗高級中學教學單位網站"

Copied!
11
0
0

加載中.... (立即查看全文)

全文

(1)

1

1. 右側程式正確的輸出應該如下:

*

***

*****

*******

*********

在不修改右側程式之第 4 行及第 7 行程

式碼的前提下,最少需修改幾行程式碼

以得到正確輸出?

(A) 1

(B) 2

(C) 3

(D) 4

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)呼叫執行右側

函式後,回傳值為何?

(A) 1

(B) 2

(C) 7

(D) 9

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; } 1 int k = 4; 2 int m = 1;

3 for (int i=1; i<=5; i=i+1) { 4 for (int j=1; j<=k; j=j+1) { 5 printf (" "); 6 } 7 for (int j=1; j<=m; j=j+1) { 8 printf ("*"); 9 } 10 printf ("\n"); 11 k = k – 1; 12 m = m + 1; 13 }

(2)

2

3. 給定一整數陣列 a[0]、a[1]、…、a[99]且 a[k]=3k+1,以 value=100 呼叫以下兩函式,假設

函式

f1 及 f2 之 while 迴圈主體分別執行

n1 與 n2 次 (i.e, 計算 if 敘述執行次數,不

包含 else if 敘述),請問 n1 與 n2 之值為何? 註: (low + high)/2 只取整數部分。

(A) n1=33, n2=4

(B) n1=33, n2=5

(C) n1=34, n2=4

(D) n1=34, n2=5

4. 經過運算後,右側程式的輸出為何?

(A) 1275

(B) 20

(C) 1000

(D) 810

for (i=1; i<=100; i=i+1) { b[i] = i;

}

a[0] = 0;

for (i=1; i<=100; i=i+1) { a[i] = b[i] + a[i-1]; }

printf ("%d\n", a[50]-a[30]); int f1(int a[], int value) {

int r_value = -1; int i = 0; while (i < 100) { if (a[i] == value) { r_value = i; break; } i = i + 1; } return r_value; }

int f2(int a[], int value) { int r_value = -1;

int low = 0, high = 99; int mid;

while (low <= high) { mid = (low + high)/2; if (a[mid] == value) { r_value = mid;

break; }

else if (a[mid] < value) { low = mid + 1; } else { high = mid - 1; } } return r_value; }

(3)

3

5. 函數 f 定義如下,如果呼叫 f(1000),指令

sum=sum+i 被執行的次數最接近下列何者?

(A) 1000

(B) 3000

(C) 5000

(D) 10000

6. List 是一個陣列,裡面的元素是 element,

它的定義如右。List 中的每一個 element 利用

next 這個整數變數來記錄下一個 element

在陣列中的位置,如果沒有下一個 element,

next 就會記錄-1。所有的 element 串成了一

個串列 (linked list)。例如在 list 中有三筆

資料

1 2 3 data = ‘a’ next = 2 data = ‘b’ next = -1 data = ‘c’ next = 1

它所代表的串列如下圖

RemoveNextElement 是一個程序,用來移除

串列中

current 所指向的下一個元素,但是必須

保持原始串列的順序。例如,若

current 為

3 (對應到 list[3]),

呼叫完

RemoveNextElement 後,串列應為

請問在空格中應該填入的程式碼為何?

(A) list[current].next = current ;

(B) list[current].next = list[list[current].next].next ;

(C) current = list[list[current].next].next ;

(D) list[list[current].next].next = list[current].next ;

int f (int n) { int sum=0; if (n<2) { return 0; }

for (int i=1; i<=n; i=i+1) { sum = sum + i; } sum = sum + f(2*n/3); return sum; } struct element { char data; int next; }

void RemoveNextElement (element list[], int current) {

if (list[current].next != -1) { /*移除 current 的下一個 element*/

}

}

c

a

b

c

b

(4)

4

7. 請問以 a(13,15)呼叫右側 a()函式,函式執

行完後其回傳值為何?

(A) 90

(B) 103

(C) 93

(D) 60

8. 一個費式數列定義第一個數為 0 第二個數為 1 之後

的每個數都等於前兩個數相加,如下所示:

0、1、1、2、3、5、8、13、21、34、55、89…。

右列的程式用以計算第 N 個(N≥2)費式數列的數值,

請問 (a) 與 (b) 兩個空格的敘述(statement)應該為

何?

(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]

int a(int n, int m) { if (n < 10) { if (m < 10) { return n + m ; } else { return a(n, m-2) + m ; } } else { return a(n-1, m) + n ; } } 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) ); }

(5)

5

9. 請問右側程式輸出為何?

(A) 1

(B) 4

(C) 3

(D) 33

10. 給定右側 g() 函式,g(13) 回傳值為何?

(A) 16

(B) 18

(C) 19

(D) 22

11. 定義 a[n] 為一陣列(array),陣列元素的

指標為 0 至 n-1。若要將陣列中 a[0]的元

素移到 a[n-1],右側程式片段空白處該填

入何運算式?

(A) n+1

(B) n

(C) n-1

(D) n-2

int g(int a) { if (a > 1) { return g(a - 2) + 3; } return a; } int i, hold, n; …

for (i=0; i<= ; i=i+1) { hold = a[i]; a[i] = a[i+1]; a[i+1] = hold; } int A[5], B[5], i, c; …

for (i=1; i<=4; i=i+1) { A[i] = 2 + i*4;

B[i] = i*5; }

c = 0;

for (i=1; i<=4; i=i+1) { if (B[i] > A[i]) { c = c + (B[i] % A[i]); } else { c = 1; } } printf ("%d\n", c);

(6)

6

12. 給定右側函式 f1() 及 f2()。f1(1)運算過程

中,以下敘述何者為錯?

(A) 印出的數字最大的是 4

(B) f1 一共被呼叫二次

(C) f2 一共被呼叫三次

(D) 數字 2 被印出兩次

13. 右側程式片段擬以輾轉除法求 i 與 j 的最大公

因數。請問 while 迴圈內容何者正確?

(A) k = i % j;

i = j;

j = k;

(B) i = j;

j = k;

k = i % j;

(C) i = j;

j = i % k;

k = i;

(D) k = i;

i = j;

j = i % k;

i = 76; j = 48; while ((i % j) != 0) { ________________ ________________ ________________ } printf ("%d\n", j); void f1 (int m) { if (m > 3) { printf ("%d\n", m); return; } else { printf ("%d\n", m); f2(m+2); printf ("%d\n", m); } } void f2 (int n) { if (n > 3) { printf ("%d\n", n); return; } else { printf ("%d\n", n); f1(n-1); printf ("%d\n", n); } }

(7)

7

14. 右側程式輸出為何?

(A) bar: 6

bar: 1

bar: 8

(B) bar: 6

foo: 1

bar: 3

(C) bar: 1

foo: 1

bar: 8

(D) bar: 6

foo: 1

foo: 3

15. 若以 f(22)呼叫右側 f()函式,總共會印出多少數

字?

(A) 16

(B) 22

(C) 11

(D) 15

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); } }

void foo (int i) { if (i <= 5) {

printf ("foo: %d\n", i); }

else {

bar(i - 10); }

}

void bar (int i) { if (i <= 10) {

printf ("bar: %d\n", i); } else { foo(i - 5); } } void main() { foo(15106); bar(3091); foo(6693); }

(8)

8

16. 右側程式執行過後所輸出數值為何?

(A) 11

(B) 13

(C) 15

(D) 16

void main () { int count = 10; if (count > 0) { count = 11; } if (count > 10) { count = 12; if (count % 3 == 4) { count = 1; } else { count = 0; } } else if (count > 11) { count = 13; } else { count = 14; } if (count) { count = 15; } else { count = 16; } printf ("%d\n", count); }

(9)

9

17. 右側程式片段主要功能為:輸入

六個整數,檢測並印出最後一個

數字是否為六個數字中最小的

值。然而,這個程式是錯誤的。

請問以下哪一組測試資料可以測

試出程式有誤?

(A) 11 12 13 14 15 3

(B) 11 12 13 14 25 20

(C) 23 15 18 20 11 12

(D) 18 17 19 24 15 16

18. 程式編譯器可以發現下列哪種錯誤?

(A) 語法錯誤

(B) 語意錯誤

(C) 邏輯錯誤

(D) 以上皆是

19. 大部分程式語言都是以列為主的方式儲存陣列。在一個 8x4 的陣列(array) A 裡,若每個

元素需要兩單位的記憶體大小,且若 A[0][0]的記憶體位址為 108 (十進制表示),則

A[1][2]的記憶體位址為何?

(A) 120

(B) 124

(C) 128

(D) 以上皆非

#define TRUE 1 #define FALSE 0

int d[6], val, allBig; …

for (int i=1; i<=5; i=i+1) { scanf ("%d", &d[i]);

}

scanf ("%d", &val); allBig = TRUE;

for (int i=1; i<=5; i=i+1) { if (d[i] > val) { allBig = TRUE; } else { allBig = FALSE; } } if (allBig == TRUE) {

printf ("%d is the smallest.\n", val); }

else {

printf ("%d is not the smallest.\n", val); }

(10)

10

20. 右側為一個計算 n 階層的函式,請問該如何

修改才會得到正確的結果?

(A) 第 2 行,改為 int fac = n;

(B) 第 3 行,改為 if (n > 0) {

(C) 第 4 行,改為 fac = n * fun(n+1);

(D) 第 4 行,改為 fac = fac * fun(n-1);

21. 右側程式碼,執行時的輸出為何?

(A) 0 2 4 6 8 10

(B) 0 1 2 3 4 5 6 7 8 9 10

(C) 0 1 3 5 7 9

(D) 0 1 3 5 7 9 11

22. 右側 f()函式執行後所回傳的值為何?

(A) 1023

(B) 1024

(C) 2047

(D) 2048

1. int fun (int n) { 2. int fac = 1; 3. if (n >= 0) { 4. fac = n * fun(n - 1); 5. } 6. return fac; 7. } int f() { int p = 2; while (p < 2000) { p = 2 * p; } return p; } void main() {

for (int i=0; i<=10; i=i+1) { printf ("%d ", i);

i = i + 1; }

printf ("\n"); }

(11)

11

23. 右側 f()函式 (a), (b), (c) 處需分別填入哪些數

字,方能使得 f(4) 輸出 2468 的結果?

(A) 1, 2, 1

(B) 0, 1, 2

(C) 0, 2, 1

(D) 1, 1, 1

24. 右側 g(4)函式呼叫執行後,回傳值為何?

(A) 6

(B) 11

(C) 13

(D) 14

25. 右側 Mystery()函式 else 部分運算式

應為何,才能使得 Mystery(9) 的回傳

值為 34。

(A) x + Mystery(x-1)

(B) x * Mystery(x-1)

(C) Mystery(x-2) + Mystery(x+2)

(D) Mystery(x-2) + Mystery(x-1)

int f(int n) { int p = 0; int i = n; while (i >= (a) ) { p = 10 – (b) * i; printf ("%d", p); i = i - (c) ; } } int f (int n) { if (n > 3) { return 1; } else if (n == 2) { return (3 + f(n+1)); } else { return (1 + f(n+1)); } } int g(int n) { int j = 0;

for (int i=1; i<=n-1; i=i+1) { j = j + f(i);

}

return j; }

int Mystery (int x) { if (x <= 1) { return x; } else { return ____________ ; } }

參考文獻

相關文件

第二十四條 學、術科測 試辦理單位應遴聘具有 下列資格之一者,擔任 學科測試及術科測試採 筆試非測驗題方式之監 場人員:. 一、

高中部國文科 1 實缺 以臺中市政府教育局規定為準 備取 若干 高中部英文科 1 實缺 以臺中市政府教育局規定為準 備取 若干 高中部數學科 1 實缺 以臺中市政府教育局規定為準

台鐵女司機..

中學中國語文科 小學中國語文科 中學英國語文科 小學英國語文科 中學數學科 小學數學科.

中文科 英文科 數學科 常識科 音樂科 體育科 電腦科 視藝科.. 中文科-遊蹤活動 @

1.本招生以參與「工業工程與設備管理產學攜手專班」之國立霧峰農工 104 學年度日間部機 械科、國立秀水高工 104

• 與資訊科技科、常識科、視藝科進行跨 科合作,提升學生資訊素養能力。圖書

 培養具有檔案學基礎知識與文化知識,掌握現代資訊技術的基 本技能,能在檔案館、國家機關和企事業單位的檔案機構、資