110 農會招考九職等以下 資訊管理 農會第6次招考新進人員九職等以下 資訊管理(程式設計) 考古題詳解
第 1 題1 分
判斷題:C 語言程式 int a=3.8; cout<<a; 的輸出為 4。
登入後即可作答並保存紀錄。
核心觀念
本題考查浮點數轉換為整數時的型別轉換規則。
題目宣稱為 C 語言,但 cout 是 C++ 的輸出串流物件;依題目 intended semantics,應以 C++ 程式解讀:
3.8的型別是浮點數,通常視為double。a宣告為int,只能儲存整數。- 將
double指派給int時,小數部分會被捨去,結果為整數部分 。 - 此轉換不是四捨五入,因此不會得到 。
解題方法
執行下列敘述:
int a = 3.8;
可視為將浮點數 轉換成整數:
轉換後,變數 a 的值為 。接著執行:
cout << a;
輸出變數 a 的整數值,因此輸出為:
3
題目敘述判斷
第 2 題1 分
判斷題:_I3a 是 C++ 語言合法變數名稱。
登入後即可作答並保存紀錄。
核心觀念
C++ 變數名稱屬於識別字(identifier),命名規則如下:
- 第一個字元必須是英文字母或底線
_。 - 後續字元可使用英文字母、數字或底線
_。 - 不得使用 C++ 保留字,例如
int、if、while。 - C++ 識別字區分大小寫。
解題方法
檢查 _I3a 的每個字元:
- 第一個字元
_:底線,符合開頭規則。 - 第二個字元
I:英文字母。 - 第三個字元
3:數字,但數字不是第一個字元,因此合法。 - 第四個字元
a:英文字母。 _I3a不是 C++ 保留字。
因此,依一般考試所採用的 C++ 變數命名規則,_I3a 是合法的變數名稱。
選項分析
第 3 題1 分
判斷題:C 語言的浮點數資料型別 double 佔記憶體 8 Bytes。
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言資料型別的記憶體大小是否由語言標準固定規定。
double 是 C 語言的雙精度浮點數型別,通常可提供比 float 更高的精確度。許多現代電腦系統採用 IEEE 754 雙精度格式,因此:
但 C 語言標準並未規定 double 必定佔用 8 Bytes。各資料型別實際所佔的記憶體大小,會依編譯器、處理器架構及系統平台而定。
解題方法
判斷此敘述是否正確,應區分:
- 常見實作方式。
- C 語言標準的強制規定。
在一般使用 GCC、Visual C++ 的現代 32 位元或 64 位元環境中,執行:
#include <stdio.h>
int main(void) {
printf("%zu\n", sizeof(double));
return 0;
}
通常會得到:
8
因此,若題目問「常見的 double 大小」,回答 8 Bytes 通常成立。
但題目敘述使用「double 佔記憶體 8 Bytes」的絕對說法,代表所有符合 C 語言規範的環境都必須如此。事實上,C 語言只規定各浮點型別需符合一定的表示能力與型別關係,沒有把 double 的儲存大小固定為 8 Bytes。
實際大小應以:
第 4 題1 分
判斷題:在 C 語言程式中,char id[]="11001";,其中的陣列 id 共有 5 個元素。
登入後即可作答並保存紀錄。
核心觀念
本題考查 C 語言中「字串常值初始化字元陣列」的規則。
在 C 語言中,字串 "11001" 包含 5 個可見字元:
'1''1''0''0''1'
此外,C 語言會在字串結尾自動加入字串結束字元 '\0',因此實際需要的陣列元素數量為:
解題方法
程式碼如下:
char id[] = "11001";
因為陣列未指定大小,C 語言會依初始化字串的完整內容自動決定陣列大小。
實際配置內容為:
| 索引 | 內容 |
|---|---|
id[0] | '1' |
id[1] | '1' |
id[2] | '0' |
id[3] | '0' |
第 5 題1 分
判斷題:R 語言為一高階且適用於統計領域的程式語言,所以其不能使用遞迴函數。
登入後即可作答並保存紀錄。
核心觀念
本題考查兩個觀念:
- R 語言的用途與語言特性。
- 遞迴函數(recursive function)的定義與使用條件。
R 語言雖然是高階程式語言,且廣泛應用於統計分析、資料處理與資料視覺化,但「適用於統計領域」並不代表不能使用遞迴函數。
遞迴函數是指函數在執行過程中直接或間接呼叫自身的函數。正常的遞迴通常包含:
- 終止條件:避免函數無限呼叫。
- 遞迴呼叫:將問題縮小後再次呼叫函數本身。
解題方法
判斷本題敘述是否正確,應將題幹拆成兩部分:
- 「R 語言為高階且適用於統計領域的程式語言」:此敘述正確。
- 「所以其不能使用遞迴函數」:此推論錯誤。
R 語言支援函數定義,也允許函數在函數本體內呼叫自身。例如,以下程式計算階乘:
factorial_recursive <- function(n) {
if (n == 0) {
return(1)
}
return(n * factorial_recursive(n - 1))
}
factorial_recursive(5)
執行過程為:
第 6 題1 分
判斷題:Java 有自動記憶體管理回收機制,若物件不再被需要時,該物件所佔用的記憶體會自動地被回收。
登入後即可作答並保存紀錄。
核心觀念
本題考查 Java 的自動記憶體管理機制,以及垃圾回收(Garbage Collection, GC)的基本原理。
Java 程式中的物件通常建立於 Heap(堆積)記憶體。當某物件已不存在任何「仍可被程式存取的參考」時,該物件即成為垃圾回收的候選對象,Java 虛擬機器(JVM)可透過 GC 回收其所占用的記憶體。
例如:
Student s = new Student;
s = null;
當 s 被指定為 null 後,原先建立的 Student 物件已沒有任何有效參考指向它,因此具備被垃圾回收的資格。
解題方法
判斷本題可分成兩個重點:
- Java 是否具有自動記憶體管理與垃圾回收機制?
- 物件不再被使用後,是否由程式設計師手動釋放記憶體?
Java 確實提供自動垃圾回收機制。程式設計師不必像在 C 或 C++ 中使用 free 或 delete 手動釋放一般物件的記憶體。
當物件已沒有任何可達參考(reachable reference)時,JVM 會將其視為可回收物件,並在適當時機執行 GC,回收該物件所占用的記憶體。因此,依照一般考試命題用語,本敘述正確。
須注意的是,「可被回收」不代表「立即被回收」。GC 的實際執行時間由 JVM 管理,程式設計師無法保證物件在失去參考後立刻釋放記憶體。
選項分析
本題為判斷題,題述如下:
第 7 題1 分
判斷題:PHP 為網頁設計語言,所以沒有支援物件導向。
登入後即可作答並保存紀錄。
核心觀念
本題考查 PHP 的語言特性,以及「網頁設計語言」與「物件導向程式設計」之間的關係。
PHP 是一種常用於伺服器端網頁開發的程式語言,支援:
- 程序導向程式設計
- 物件導向程式設計(Object-Oriented Programming, OOP)
- 類別與物件
- 封裝、繼承、多型
- 介面、抽象類別、建構子等機制
因此,PHP 雖然廣泛應用於網頁設計,並不代表它不支援物件導向。
解題方法
判斷本題敘述中的兩個部分:
- 「PHP 為網頁設計語言」:基本上正確。PHP 主要用於伺服器端網頁程式開發。
- 「所以沒有支援物件導向」:錯誤。PHP 支援物件導向程式設計,並可使用類別、物件、繼承與多型等功能。
題目前半句的描述,不能推導出後半句的結論。「主要應用於網頁」是用途分類;「是否支援物件導向」是程式語言的設計特性,兩者屬於不同層次的概念。
例如 PHP 可以定義類別與建立物件:
第 8 題1 分
判斷題:raise 為 Python 語言的關鍵字。
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 的「關鍵字(keyword)」定義。
Python 關鍵字是語言保留、具有特殊語法意義的字詞,不能任意當作變數名稱、函式名稱或類別名稱使用。raise 即為 Python 的內建關鍵字,用來主動引發例外(exception)。
解題方法
判斷題目中的字詞是否屬於 Python 保留的語法關鍵字。raise 的功能是引發指定例外,常見語法如下:
raise Exception("發生錯誤")
也可在例外處理中重新引發目前捕捉到的例外:
raise
因此,raise 具有固定的語法用途,屬於 Python 語言的關鍵字。
選項分析
題目敘述:「raise 為 Python 語言的關鍵字。」
此敘述正確。raise 是 Python 保留字,用於主動引發例外,例如:
第 9 題1 分
判斷題:在 Python 語言程式中,"ABCDE">"ABCdE" 的結果為 TRUE。
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 字串的「字典序比較」與「大小寫字元的編碼順序」。
Python 比較兩個字串時,會由左至右逐一比較對應位置的字元:
- 先比較第一個字元。
- 若相同,繼續比較下一個字元。
- 第一個出現不同的字元,決定整個字串的大小。
- Python 的字串比較區分大小寫,依 Unicode code point 順序判斷。
解題方法
比較:
"ABCDE" > "ABCdE"
逐字比較:
| 位置 | 左字串 | 右字串 | 結果 |
|---|---|---|---|
| 1 | A | A | 相同 |
| 2 | B | B | 相同 |
| 3 | C | C | 相同 |
| 4 | D | d | 不同 |
因此比較重點是大寫 D 與小寫 d。
其 Unicode code point 為:
第 10 題1 分
判斷題:在 Python 語言程式中,list(range(5)) 的結果為 [0, 1, 2, 3, 4]。
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 內建函式 range 的範圍規則,以及 list 將可迭代物件轉換為串列的功能。
range(5) 代表從 開始,產生小於 的整數序列,預設遞增值為 :
list(range(5)) 再將此序列轉換成 Python 串列,因此結果為:
[0, 1, 2, 3, 4]
解題方法
Python 的 range 常見格式如下:
range(stop)
range(start, stop)
range(start, stop, step)
本題使用 range(5),屬於單一參數形式:
- 起始值預設為
- 終止值為 ,但不包含
- 遞增值預設為
因此產生的元素為:
第 1 題2 分
單選題:在 C 語言程式中,int a[]={3,4,5,6,7};,a[3] 的值為多少?
核心觀念
本題考查 C 語言陣列的「索引值」與「以 0 開始編號」的規則。
程式碼:
int a[]={3,4,5,6,7};
宣告並初始化整數陣列 a,共有 5 個元素。C 語言陣列的第一個元素索引值為 0,依序排列如下:
| 索引值 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 陣列元素 | 3 | 4 | 5 | 6 | 7 |
因此,a[3] 表示取出索引值為 的元素。
解題方法
依照 C 語言陣列從 開始編號:
所以:
選項分析
第 2 題2 分
單選題:在 C 語言程式中,int A[2][3]={1,2,3,4,5,6}; cout<<**(A+1);,其輸出為何?
核心觀念
本題考查二維陣列的記憶體配置、陣列名稱的指標轉換,以及指標運算。
宣告:
int A[2][3] = {1, 2, 3, 4, 5, 6};
表示 A 是一個有 列、每列 個整數的二維陣列,初始化後排列如下:
其中:
A[0][0] = 1A[0][1] = 2A[0][2] = 3A[1][0] = 4A[1][1] = 5A[1][2] = 6
二維陣列名稱 A 在運算式中會轉換成「指向第一列的指標」,其型態可視為:
int (*)[3]
也就是「指向含有 3 個 int 元素之陣列的指標」。
解題方法
題目中的運算式為:
**(A + 1)
依序拆解如下。
第一步,計算 A + 1:
A
指向第 列,因此:
A + 1
指向第 列,也就是:
{4, 5, 6}
第二步,計算 *(A + 1):
*(A + 1)
取得第 列陣列,即:
A[1]
此列包含:
{4, 5, 6}
在運算式中,該列陣列會再轉換成指向其第一個元素的指標,因此:
*(A + 1)
第 3 題2 分
單選題:在 C 語言程式片段中,int* pa=new int[5]; int b=sizeof(pa); cout<<b;,其輸出為何?
核心觀念
本題實際上是 C++ 程式片段,因為使用了:
new:C++ 的動態記憶體配置語法cout:C++ 的輸出物件
程式碼如下:
int* pa = new int[5];
int b = sizeof(pa);
cout << b;
其中,pa 的型別是 int*,也就是「指向 int 的指標」。
sizeof(pa) 求的是「指標變數 pa 本身所占的記憶體大小」,不是 new int[5] 所配置的整個陣列大小。
解題方法
pa 雖然指向一個包含 5 個整數的動態陣列,但 pa 本身只是一個指標。
因此:
在命題當年常見的 32 位元編譯環境中,指標大小通常為 4 bytes,因此:
程式輸出:
4
必須注意,sizeof(pa) 不會計算:
因為陣列是以 new 動態配置,指標只保存該陣列的起始位址。
題目未明確指定編譯環境;C++ 標準並未規定所有平台的指標一定是 4 bytes。若採用常見的 64 位元環境,指標大小可能是 8 bytes。但依本題的傳統命題慣例,採 32 位元環境作答。
選項分析
第 4 題2 分
單選題:以下為 C 語言程式片段,請問輸出為何?
int a[]={52,38,13,74,83};
int b=0;
for (int i=0; i<4; i++) {
if (b<a[i]) b=a[i];
}
cout<<b;
核心觀念
本題考查:
- 陣列索引從 開始。
for迴圈的條件判斷。- 以變數
b逐步記錄目前最大值。 i<4只會處理索引 至 的元素,不會處理索引 。
陣列內容如下:
| 索引 | a[i] |
|---|---|
| 0 | 52 |
| 1 | 38 |
| 2 | 13 |
| 3 | 74 |
| 4 | 83 |
解題方法
初始設定:
迴圈如下:
for (int i=0; i<4; i++)
執行條件為 ,因此 依序為 ,只比較前四個元素。
逐次判斷:
- :
a[0]=52
因此 b=52。
- :
a[1]=38
條件不成立,b 維持 。
- :
a[2]=13
條件不成立,b 維持 。
- :
a[3]=74
因此 b=74。
第 5 題2 分
單選題:以下為 C 語言程式片段,請問輸出為何?
int i=5, a=2;
while (i>1) {
a++;
i--;
}
cout<<a;
核心觀念
本題考查 while 迴圈的執行條件,以及變數在迴圈中的累加與遞減。
while (i>1) 的意義是:只要 ,就執行一次迴圈內容;當 時,迴圈停止。
迴圈每執行一次:
a++: 增加i--: 減少
題目雖標示為 C 語言,但程式使用 cout,實際上是 C++ 的輸出語法;依題目 intended 程式語意計算即可。
解題方法
初始值為:
逐次追蹤迴圈:
| 執行次數 | 進入條件 | 執行 a++ 後 | 執行 i-- 後 |
|---|---|---|---|
| 第 1 次 | |||
| 第 2 次 | |||
| 第 3 次 | |||
| 第 4 次 |
此時 ,不符合 ,因此迴圈停止。
迴圈共執行 次,所以:
第 6 題2 分
單選題:在 Python 中,1+2*3/4>2 的輸出為何?
核心觀念
本題考查 Python 的:
- 運算子優先順序
- 四則運算結果型別
- 比較運算子的布林值判斷
Python 中,乘法 * 與除法 / 的優先順序高於加法 +;比較運算子 > 的優先順序最低,因此會先完成算術運算,再進行大小比較。
解題方法
原式為:
1 + 2 * 3 / 4 > 2
依運算優先順序計算:
再計算加法:
最後進行比較:
此條件成立,因此 Python 輸出布林值:
True
其中,Python 3 的 / 是一般除法,結果為浮點數;本題的除法結果為 ,因此整體算術結果為 。
選項分析
第 7 題2 分
單選題:在 HTML 中,下列何者為換行的語法?
核心觀念
HTML 以標籤(Tag)描述網頁內容與結構。若要在文字中強制插入換行,使用 <br> 標籤,其名稱源自 break,表示換行。
<br> 通常不需要成對使用,寫法如下:
第一行<br>
第二行
瀏覽器呈現結果為:
第一行 第二行
解題方法
判斷 HTML 換行語法時,直接記憶常用標籤:
<br>:強制換行<p>:建立段落<hr>:插入水平分隔線<div>:區塊容器,不是專門的換行標籤
本題問的是「換行的語法」,因此選擇代表 break 的 <br>。
選項分析
- (A)
<br>:正確。<br>是 HTML 的換行標籤,用來在文字內容中插入強制換行。
第 8 題2 分
單選題:在 Python 中,16<<2 的結果為何?
核心觀念
本題考查 Python 的位元左移運算子 <<。
對非負整數而言:
也就是將整數的二進位表示向左移動 位,右側補上 個 。
解題方法
先將 轉換為二進位:
運算式 16<<2 表示將 10000₂ 向左移動 位:
再將結果轉回十進位:
也可直接利用公式計算:
選項分析
第 9 題2 分
單選題:在 Python 中,len("農會") 的結果為何?
核心觀念
Python 3 中,str 字串的 len 函式會計算字串中包含的 Unicode 字元數量,不是計算中文字的位元組數,也不是計算每個字的螢幕寬度。
字串 "農會" 包含兩個字元:
"農""會"
因此:
解題方法
直接逐一計算字串中的字元數即可:
len("農會")
"農會" 是由 2 個 Unicode 字元組成,所以執行結果為:
2
要注意,len 計算的是字串長度;若要計算經過特定編碼後的位元組數,才會使用例如:
len("農會".encode("utf-8"))
第 10 題2 分
單選題:以下為 C 語言程式,請問輸出為何?
#include <iostream>
using namespace std;
int test3(int a)
{
if (a<10)
return a+test3(a+2);
else
return 7;
}
int main()
{
cout<<test3(2);
return 0;
}
核心觀念
本題考查:
- 遞迴函式(recursion)的執行方式。
if...else的條件判斷。- 遞迴函式的終止條件,也就是基底情況(base case)。
- 函式回傳值的逐層累加。
題目程式雖標示為 C 語言,但使用了 #include <iostream>、using namespace std; 及 cout,實際上是 C++ 程式;此差異不影響本題輸出判斷。
函式定義為:
int test3(int a)
{
if (a < 10)
return a + test3(a + 2);
else
return 7;
}
當 時,函式會以 再呼叫自己;當 時,直接回傳 ,遞迴停止。
解題方法
由主程式可知:
cout << test3(2);
因此要求計算 。
依序展開遞迴:
此時 不成立,因此進入 else:
第 11 題2 分
單選題:Python 3 預設的文字編碼方式為何?
核心觀念
本題考查 Python 3 的預設文字編碼(character encoding)。
Python 3 的原始碼檔案預設採用 UTF-8 編碼。UTF-8 能表示中文、英文及多種語言文字,且與 ASCII 相容,因此適合現代程式設計與多語系文字處理。
解題方法
看到題目問「Python 3 預設的文字編碼方式」,直接掌握以下定義:
Python 3 原始碼的預設編碼為 UTF-8。
因此,若程式檔案中直接撰寫中文字,通常不需額外宣告編碼,例如:
姓名 = "王小明"
print(姓名)
上述程式可直接使用中文,原因是 Python 3 預設以 UTF-8 解讀原始碼。
須注意:題目所稱的預設文字編碼,主要是指 Python 3 原始碼的預設編碼;檔案輸入輸出、作業系統環境的預設編碼,可能因系統設定而不同,但不影響本題答案。
選項分析
(A) ASCII
第 12 題2 分
單選題:以下為 Python 程式,請問 的結果為何?
n=2
while n<10:
n=(n-1)*(n+1)
核心觀念
本題考查 Python 的 while 迴圈、條件判斷,以及變數在每次迴圈中的重新指定。
程式執行規則如下:
- 先判斷
n<10是否成立。 - 條件成立時,執行迴圈內的指定敘述:
- 執行完畢後,再回到
while重新判斷條件。 - 當
n<10不成立時,迴圈停止。
其中:
因此,每次迴圈都會將 更新為 。
解題方法
依照程式實際執行順序逐次計算:
| 執行階段 | 判斷條件 | 更新後的 |
|---|---|---|
| 初始值 | ,成立 | |
| 第 2 次 | ,成立 | |
| 第 3 次 | ,成立 | |
| 第 4 次 | ,不成立 | 迴圈停止 |
迴圈停止時,變數 的值為:
第 13 題2 分
單選題:以下為 Python 程式,請問 的結果為何?
def test1(a):
a=a+1
return a+2
b=0
b=test1(3)
核心觀念
本題考查 Python 函式的呼叫、參數傳遞、區域變數運算,以及 return 回傳值。
函式:
def test1(a):
a = a + 1
return a + 2
其中:
a是函式的參數,也是函式內的區域變數。- 呼叫
test1(3)時,函式內的a先取得數值 。 return會將計算結果傳回呼叫端。
解題方法
程式執行順序如下:
- 先執行:
b = 0
此時 。
- 執行:
b = test1(3)
將 傳入函式,因此函式內:
- 執行:
a = a + 1
- 執行:
return a + 2
- 函式回傳 ,再指定給 :
第 14 題2 分
單選題:以下為 Python 程式,請問 的結果為何?
def swap(a):
b=a[1]
a[1]=a[2]
a[2]=b
a=[1,2,3]
swap(a)
核心觀念
本題考查 Python 的:
- 串列(
list)索引。 - 串列是可變物件(mutable object)。
- 函式參數傳遞的是物件參考;函式內透過參數修改串列內容,會影響原串列。
Python 串列索引從 開始:
| 索引 | 原始內容 |
|---|---|
a[0] | |
a[1] | |
a[2] |
解題方法
初始狀態為:
呼叫:
swap(a)
函式中的參數 a 指向原本的串列,因此函式內的修改會直接改變外部串列。
依序執行:
b=a[1]
此時串列仍為:
a[1]=a[2]
將索引 的值 指派給索引 :
a[2]=b
將先前暫存的 放入索引 :
因此,函式執行完畢後,外部的 a 為:
選項分析
第 15 題2 分
單選題:下列何者為 Python 的容器型別,甚是由一連串資料所組成、有順序且不可以改變內容的序列?
核心觀念
Python 常見的容器型別包括:
list:串列,有順序、可修改tuple:元組,有順序、不可修改set:集合,元素不重複,通常不強調順序、可修改dict:字典,以鍵值對儲存資料,可修改
題目描述「由一連串資料所組成、有順序且不可以改變內容的序列」,關鍵條件是:
- 資料具有順序
- 內容建立後不可修改
- 屬於序列型容器
符合這些條件的是 tuple。
解題方法
先將題目條件與各容器型別的特性比對:
| 型別 | 有順序 | 內容可修改 | 主要特色 |
|---|---|---|---|
list | 是 | 是 | 可變動的序列 |
tuple | 是 | 否 | 不可變動的序列 |
set | 否 | 是 | 不重複元素的集合 |
dict | 以鍵值對儲存 | 是 | 透過鍵取得值 |
題目同時要求「有順序」及「不可改變內容」,因此答案為 tuple。
例如:
data = (10, 20, 30)
data 的元素順序固定,且不能直接修改:
data[0] = 99
此操作會產生錯誤,因為 tuple 不允許修改元素。
選項分析
第 16 題2 分
單選題:在 Python 例外處理時,下列何者為直譯器發生內部錯誤時,所丟出的例外物件?
核心觀念
本題考查 Python 例外類別的定義與適用情境。
當 Python 直譯器在執行過程中發生內部錯誤,表示錯誤並非一般程式語法、資料型別或數值運算直接造成,而是直譯器本身偵測到不應發生的內部狀態,此時會引發 SystemError。
解題方法
判斷各選項所代表的錯誤情境:
- 數值運算超出可處理範圍:
OverflowError - 程式語法不符合規則:
SyntaxError - 直譯器內部發生異常:
SystemError - 資料型別使用不符合要求:
TypeError
題目明確指出「直譯器發生內部錯誤」,因此直接對應 SystemError。
選項分析
(A) OverflowError:錯誤
當算術運算結果超出數值型別可表示的範圍時,會引發 OverflowError。例如浮點數運算結果過大:
import math
math.exp(1000)
此錯誤處理的是數值溢位,並非直譯器內部錯誤。
(B) SyntaxError:錯誤
第 17 題2 分
單選題:下列何者為 Python 常用的機器學習套件?
核心觀念
本題考查 Python 常用套件的功能分類。
Python 機器學習領域最常用的套件之一是 scikit-learn,提供分類、迴歸、分群、降維、模型評估及資料前處理等功能,例如決策樹、支援向量機、-means 分群與線性迴歸。
題目選項中的 scikit-learning 為常見誤寫,正確套件名稱是 scikit-learn。依本題命題意旨,應選代表 scikit-learn 的選項。
解題方法
判斷各選項是否為「Python 常用的機器學習套件」時,應先辨識套件的主要用途:
- 專門提供機器學習演算法與模型工具:屬於機器學習套件。
- 主要處理數值運算:屬於基礎科學計算套件。
- 主要處理資料表格:屬於資料分析套件。
- 泛稱深度學習技術,且非標準套件名稱:不能視為正確套件。
依此分類,命題者要考的是 scikit-learn。
選項分析
(A) scikit-learning
本選項應是指 scikit-learn,它是 Python 常用的機器學習套件,支援:
- 分類:如邏輯斯迴歸、決策樹、隨機森林
- 迴歸:如線性迴歸
- 分群:如 -means
- 資料預處理
- 模型選擇與效能評估
嚴格而言,scikit-learning 並不是正確的官方套件名稱;正確名稱為 scikit-learn。本題顯然屬於套件名稱誤植,依命題意旨本選項為正確答案。
(B) numpy
第 18 題2 分
單選題:C 語言片段,float a=5/2;,其變數 的值為何?
核心觀念
本題考查 C 語言的「整數除法」與「型別轉換」。
在 C 語言中,整數常數 5 與 2 的型別都是 int。當除法運算子的兩側都是整數型別時,會先進行整數除法,結果只保留整數部分。
雖然變數 a 宣告為 float,但型別轉換發生在運算結果產生之後,不會改變前面的除法方式。
解題方法
原始程式碼為:
float a = 5 / 2;
依照運算流程:
5與2都是整數常數,因此執行整數除法:
- 將整數除法結果
2指派給float變數a:
因此,變數 a 的數值為 。
若要得到 ,必須讓除法至少有一個運算元是浮點數,例如:
float a = 5.0 / 2;
或:
float a = (float)5 / 2;
選項分析
- (A) 2.5:錯誤
第 19 題2 分
單選題:以下為 C 語言程式片段,請問輸出為何?
#include <stdio.h>
int main()
{
float a=2.667;
printf("%5.2f", a);
return 0;
}
核心觀念
本題考查 C 語言 printf 的格式控制字串,重點是 %f 的:
- 欄寬(field width)
- 小數位數(precision)
- 四捨五入
- 預設靠右對齊與空白補位
格式 %5.2f 可拆解如下:
f:以浮點數格式輸出。.2:小數點後輸出 2 位。5:輸出欄位的最小寬度為 5 個字元。
解題方法
原始數值為:
格式指定小數點後保留 2 位,因此要將 2.667 四捨五入為:
2.67 本身共有 4 個字元:
2:1 個.:1 個6:1 個7:1 個
但格式要求最小欄寬為 5 個字元,因此左側補 1 個空白。實際輸出內容為:
2.67
其中最前方有 1 個空白。題目選項通常省略空白的視覺差異,因此正確選項為 (B) 2.67。
要注意,欄寬 5 是「最小欄寬」,不是固定截斷成 5 個字元;若數值本身超過 5 個字元,仍會完整輸出。
第 20 題2 分
單選題:以下為 Python 語言程式片段,請問迴圈共被執行幾次?
for i in range(1,50,7):
print(i)
核心觀念
本題考查 Python 的 range(start, stop, step) 函式:
start:起始值,包含在序列中。stop:終止值,不包含在序列中。step:每次增加的間距。
題目的程式為:
range(1, 50, 7)
表示從 開始,每次增加 ,產生小於 的整數。
解題方法
依序列出 i 的取值:
下一個數值為:
但 range 的終止值 不包含在內,因此迴圈不會執行 i=50 的情況。
迴圈實際執行次數為:
因此,print(i) 共執行 次。
也可使用整數計算公式:
第 1 題2 分
複選題:下列何者為 C 語言關鍵字?
核心觀念
本題考查 C 語言的「關鍵字」(keyword)。關鍵字是 C 語言保留、具有特殊語法意義的字,不能作為一般變數或函式名稱。
本題需特別區分 C 語言與 C++:
enum、const:C 語言關鍵字。operator、this:C++ 關鍵字,不是 C 語言關鍵字。
解題方法
逐一判斷各選項是否屬於 C 語言保留字。屬於 C 語言關鍵字者選取;僅屬於 C++ 語法者不選。
選項分析
(A) enum:正確
enum 用來宣告列舉型別:
enum Color {
RED,
GREEN,
BLUE
};
因此 enum 是 C 語言關鍵字。
(B) operator:錯誤
operator 是 C++ 用來進行運算子多載的關鍵字,例如重新定義 + 或 == 的行為。
第 2 題2 分
複選題:以下為 C 語言程式,請問執行後的結果,下列何者正確?
#include <iostream>
using namespace std;
void test1(int a)
{
a+=3;
}
void test2(int* a)
{
*a+=3;
}
int main()
{
int a=5, b=6;
test1(a);
test2(&b);
return 0;
}
核心觀念
本題程式雖題目稱為 C 語言,實際上使用 #include <iostream>、using namespace std;,屬於 C++ 語法。考點是:
- 傳值呼叫(pass by value)
- 指標傳遞(pointer)
- 區域變數與記憶體位址的關係
函式參數若宣告為 int a,函式取得的是原變數的複本;函式內修改複本,不會影響主程式中的原變數。
函式參數若宣告為 int* a,傳入的是變數的記憶體位址。透過 *a 可存取該位址所對應的原始變數,因此能直接修改原變數。
解題方法
主程式初始設定:
int a = 5, b = 6;
因此:
一、執行 test1(a)
函式定義如下:
void test1(int a)
{
a += 3;
}
呼叫:
test1(a);
這是傳值呼叫,主程式的 a 值為 ,複製一份給 test1 內部的參數 a:
執行:
a += 3;
只會使函式內部的複本變成:
函式結束後,函式內部的區域參數消失,主程式的 a 仍為:
二、執行 test2(&b)
函式定義如下:
void test2(int* a)
{
*a += 3;
}
呼叫:
第 3 題2 分
複選題:下列何者為網頁設計前端程式語言?
核心觀念
網頁應用程式通常分為:
- 前端(Front-end):在使用者瀏覽器中執行或呈現,負責網頁結構、外觀與互動。
- 後端(Back-end):在伺服器端執行,負責資料處理、商業邏輯與資料庫存取。
前端網頁的三項核心技術為:
- HTML(HyperText Markup Language):建立網頁內容與結構。
- CSS(Cascading Style Sheets):控制網頁外觀與版面配置。
- JavaScript:處理網頁互動與動態行為。
因此,本題判斷重點是:該技術是否主要在瀏覽器端負責網頁結構、樣式或互動功能。
解題方法
逐一判斷各選項的執行位置與主要用途:
- 在瀏覽器端建立結構、控制樣式或執行互動功能,屬於前端技術。
- 主要在伺服器端執行、處理資料與產生回應,屬於後端技術。
依此標準判斷,HTML、JavaScript 與 CSS 都是網頁前端開發的核心技術;PHP則屬於伺服器端語言。
選項分析
(A)HTML:正確
HTML 是網頁的標記語言,用來描述網頁內容結構,例如:
- 標題:
<h1> - 段落:
<p> - 超連結:
<a> - 表格:
<table> - 表單:
<form>
HTML 文件會由瀏覽器解析並呈現給使用者,屬於前端網頁技術。
嚴格而言,HTML 是「標記語言」,不是傳統意義上的程式語言,但在網頁設計分類中,HTML 明確屬於前端技術,因此本選項正確。
(B)PHP:錯誤
第 4 題2 分
複選題:在網頁程式設計中,下列那一個影像檔可以為 24 位元全彩影像?
核心觀念
本題考查常見網頁影像檔案格式的色彩深度。
「24 位元全彩影像」通常是指每個像素以 24 位元表示色彩,分為紅、綠、藍三個色彩通道:
每個色彩通道有 種明暗程度,因此理論上可表示:
種色彩,稱為 24 位元全彩或真彩色(True Color)。
解題方法
逐一判斷各影像格式是否支援 RGB 三通道各 8 位元的色彩表示:
- 支援 24 位元色彩的格式,列入正確選項。
- 僅以色彩索引表表示、色彩數受限於 256 色的格式,不符合 24 位元全彩。
選項分析
(A) BMP:正確
BMP(Bitmap)可儲存多種色彩深度,包括 1 位元、4 位元、8 位元、16 位元、24 位元及 32 位元等。
其中 24 位元 BMP 使用 RGB 三個通道各 8 位元,因此可以表示 24 位元全彩影像。
(B) JPG:正確
第 5 題2 分
複選題:下列何者為動態網頁技術?
核心觀念
本題考查「靜態網頁」與「動態網頁技術」的區別。
- 靜態網頁:伺服器直接提供預先製作完成的網頁內容,使用者每次請求通常取得相同內容。
- 動態網頁:伺服器接收使用者請求後,透過程式執行、資料庫查詢或其他運算,動態產生網頁內容,再傳送給瀏覽器。
ASP、PHP、JSP 都能在伺服器端執行程式碼,依據使用者輸入、登入狀態、資料庫內容等產生不同結果,因此屬於動態網頁技術。
HTML 主要負責描述網頁的結構與內容,本身不是伺服器端程式執行技術。
解題方法
判斷選項是否為動態網頁技術,可採用以下標準:
- 是否能在伺服器端執行程式碼?
- 是否能依據請求內容動態產生 HTML?
- 是否能搭配資料庫進行資料查詢與處理?
符合上述特徵者,即屬於動態網頁技術。依此判斷,ASP、PHP、JSP 均符合;HTML 本身不符合。
選項分析
(A) HTML
HTML(HyperText Markup Language,超文字標記語言)是用來描述網頁結構的標記語言,例如標題、段落、表格、超連結及圖片等。
HTML 檔案通常由伺服器直接傳送給瀏覽器,瀏覽器再依據 HTML 標籤進行呈現。單獨使用 HTML 時,頁面內容通常是事先撰寫好的固定內容,無法自行執行伺服器端程式或查詢資料庫。
因此,HTML 本身不是動態網頁技術,本選項錯誤。
補充:網頁若搭配 JavaScript,可在瀏覽器端產生互動或改變畫面內容,但這不代表 HTML 本身屬於伺服器端動態網頁技術。
第 6 題2 分
複選題:下列何者為 HTML 中 <font> 的屬性?
核心觀念
本題考查 HTML <font> 標籤的屬性。<font> 用於設定文字的外觀,常見屬性包括:
size:設定文字大小。color:設定文字顏色。face:設定文字字型。
<font> 標籤在 HTML5 已被淘汰,現代網頁通常使用 CSS 的 font-size、color、font-family 取代;但本題依 HTML 傳統標籤的命題範圍判斷。
解題方法
直接辨識 <font> 的功能:它專門控制文字的大小、顏色與字型,因此對應的屬性為:
<font size="5" color="blue" face="Arial">
文字內容
</font>
此例中:
size="5"控制文字大小;color="blue"控制文字顏色;face="Arial"控制文字字型。
align 是文字或元素的對齊設定,不屬於 <font> 的標準屬性。
選項分析
(A) size:正確
size 是 <font> 的屬性,用於設定文字大小。例如:
第 7 題2 分
複選題:在 C++ 類別(class)中的成員變數可以宣告為下列何者?
核心觀念
本題考 C++ 類別中的「成員存取權限」與 virtual 關鍵字的用途。
C++ 類別成員可透過存取權限修飾詞限制外部存取範圍:
public:類別外部也可以存取。protected:類別本身及其衍生類別可以存取,類別外部通常不能直接存取。private:只有類別本身的成員函式及友元可以存取。
這些存取權限可以套用在成員變數及成員函式上。
virtual 則是用於宣告虛擬函式,使 C++ 能夠透過多型機制,在執行期間依實際物件型別決定要呼叫的函式版本,不能用來宣告一般成員變數。
解題方法
判斷每個選項是否能修飾「成員變數」:
- 若是存取權限修飾詞,通常可以用於成員變數。
- 若是用於函式多型或函式覆寫的關鍵字,則不能用於一般成員變數。
- C++
class的預設存取權限是private,但題目問的是「可以宣告為何者」,因此public、protected、private均屬合法宣告方式。
例如:
class Example {
public:
int a;
protected:
int b;
private:
int c;
};
上述三個成員變數皆為合法宣告。
選項分析
(A) public
正確。
public 是公開存取權限,成員變數可以宣告於 public: 區段:
class Example {
public:
int value;
};
類別外部可透過物件直接存取:
Example e;
e.value = 10;
(B) protected
正確。
第 8 題2 分
複選題:下列何者為 PHP 語言的程式註解符號?
核心觀念
本題考查 PHP 的程式註解語法。註解是提供程式閱讀者理解程式用途的文字,執行 PHP 程式時不會被當成指令執行。
PHP 常見註解符號如下:
- 單行註解:
// - 單行註解:
# - 多行註解:
/* ... */
其中,<!-- ... --> 是 HTML 的註解語法,不是 PHP 的標準註解符號。
解題方法
判斷各選項是否為 PHP 註解符號,直接依照 PHP 的註解語法分類:
- 能否標示單行註解?
- 能否標示多行註解?
- 是否屬於其他語言,例如 HTML 的註解語法?
符合 PHP 語法的單行或多行註解符號,即為正確選項。
選項分析
(A) <!-- -->:錯誤
<!-- ... --> 是 HTML 的註解語法,主要用於 HTML 文件中,例如:
<!-- 這是 HTML 註解 -->
它不是 PHP 的註解符號。若在 PHP 程式區段中使用,不能將 PHP 程式碼正確視為 PHP 註解。
(B) //:正確
第 9 題2 分
複選題:在 Python 中,我們可以使用 open(file, mode) 來開啟檔案,其中的 mode 為檔案物件存取模式,下列何者為正確的模式?
核心觀念
Python 使用 open(file, mode) 開啟檔案時,mode 用來指定檔案的存取方式。常見模式如下:
r:讀取(read),檔案必須已存在。w:寫入(write),檔案不存在時會建立;檔案已存在時會清除原內容。a:附加寫入(append),資料會寫在檔案原有內容之後。b:二進位模式(binary),通常必須與其他基本模式合併使用,例如rb、wb、ab。
本題是複選題,須判斷各選項是否能作為正確的檔案模式。
解題方法
依序檢查每個模式是否為 Python open 支援的基本檔案存取模式:
- 判斷是否代表讀取、寫入或附加寫入。
- 確認該字串能否單獨作為合法的
mode。 - 特別注意
b是檔案格式模式修飾字元,不能單獨使用。
選項分析
(A) r:正確
r 代表讀取模式,用於讀取已存在的文字檔案:
f = open("data.txt", "r")
若檔案不存在,通常會引發 FileNotFoundError。因此 r 是合法且正確的檔案存取模式。
(B) w:正確
w 代表寫入模式:
f = open("data.txt", "w")
其行為如下:
第 10 題2 分
複選題:下列何者為 Python 內建的容器型別?
核心觀念
本題考查 Python 內建資料型別的分類,特別是「容器型別」與其他內建型別的區別。
容器型別是可用來儲存、組織多個元素的資料結構,常見者包括:
list:串列tuple:元組set:集合dict:字典
其中,tuple 與 set 均屬於 Python 內建的容器型別。
解題方法
判斷各選項的資料型別分類:
- 若主要用途是儲存多個資料元素,且可作為資料集合使用,屬於容器型別。
- 若屬於數值、字串或特定的序列產生工具,則不列入本題所採用的容器型別分類。
- 逐一檢查選項即可得到答案。
選項分析
(A) range:錯誤
range 是 Python 內建的範圍型別,用來表示一段整數序列,例如:
range(1, 5)
其內容代表 ,主要用途是產生迭代範圍,常搭配 for 迴圈使用。命題分類上,range 歸為序列型別中的範圍型別,不列為本題所指的容器型別。
(B) set:正確
set 是集合型別,可儲存不重複的元素,且元素沒有固定順序,例如:
{1, 2, 3}
第 11 題2 分
複選題:下列何者為 Python 容器型別 dict 支援的運算子?
核心觀念
本題考查 Python 容器型別 dict(字典)所支援的運算子。
dict 是由「鍵(key)—值(value)」配對組成的映射型容器。不同運算子具有不同用途:
==:比較兩個字典的內容是否相同。+:字典不支援直接相加。>:字典不支援大小關係比較。*:字典不支援重複運算。
解題方法
逐一判斷各運算子是否能直接套用在字典上:
d1 = {"a": 1}
d2 = {"a": 1}
使用相等比較:
d1 == d2
結果為:
True
因為兩個字典具有相同的鍵與相同的對應值。因此,dict 支援 == 運算子。
至於字典的大小比較、相加與重複,均不符合 Python dict 的基本運算規則。
選項分析
(A) +:錯誤
字典不支援使用 + 進行合併:
{"a": 1} + {"b": 2}
會產生 TypeError。
字典若要合併,應使用適當的方法,例如命題當年的常見寫法:
d1.update(d2)
或建立新的字典後進行合併,而不是使用 +。
第 12 題2 分
複選題:以下為 Python 程式片段,請問執行後的結果,下列何者正確?
a=17/5
b=17//5
c=17%5
核心觀念
本題考查 Python 的三種算術運算子:
/:一般除法,結果為浮點數。//:整除,又稱地板除法,結果取商的整數部分。%:取餘數,取得除法後的餘數。
以下以命題所採用的 Python 3 語法規則判斷。
解題方法
先計算 除以 :
也可表示為:
因此:
a=17/5
使用 / 進行一般除法:
b=17//5
使用 // 進行整除,取地板值:
c=17%5
使用 % 取得餘數:
所以程式執行後:
第 13 題2 分
複選題:在 Python 中,下列何者的結果為 False?
核心觀念
本題考查 Python 中下列觀念:
- 邏輯運算子:
and、not - 不等於運算子:
!= - 相等比較與資料型別:
== - 位元運算子:
& - 運算子優先順序
- Python 布林值判斷:
True或False
題目要求找出「結果為 False」的選項,複選題可能有一個以上答案。
解題方法
逐一依照 Python 運算規則計算各選項,最後判斷結果是否為 False。
其中需特別注意:
not會將布林結果反轉。==會同時比較值與資料型別是否相容。&是整數的位元 AND 運算子。- 位元運算子的優先順序高於比較運算子,因此
2&3==2會解讀為:
選項分析
(A) 1<2 and 3>2
先判斷兩個比較式:
因此:
True and True
結果為:
True
所以 (A) 不符合題意。
(B) not 5!=6
先計算不等於比較:
再套用 not:
not True
結果為:
False
所以 (B) 符合題意。
(C) 23=="23"
第 14 題2 分
複選題:在 Python 中,a="enthusiasm",下列哪些結果為正確?
核心觀念
本題考查 Python 字串方法與索引位置:
count(substring):計算指定子字串出現的次數。find(substring):尋找子字串第一次出現的位置;找不到時回傳-1。rfind(substring):尋找子字串最後一次出現的位置;找不到時回傳-1。startswith(prefix):判斷字串是否以指定內容開頭,回傳布林值。- Python 的布林常數必須寫成
True或False,大小寫有區別;TRUE不是 Python 的內建布林常數。
題目設定:
a = "enthusiasm"
逐字標示索引如下:
| 字元 | e | n | t | h | u | s | i | a | s | m |
|---|---|---|---|---|---|---|---|---|---|---|
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
字串 "s" 出現在索引 與索引 。
解題方法
先找出字串中所有 "s" 的位置,再依各方法的定義判斷:
"s"共出現 次。- 第一次出現於索引 。
- 最後一次出現於索引 。
"enthusiasm"的第一個字元是"e",不是"s"。- Python 布林值使用
True,不是全大寫的TRUE。
選項分析
(A) a.count("s") == 2
"s" 出現在索引 、,共 次,因此:
a.count("s") == 2
結果為 True。
第 15 題2 分
複選題:R 語言為統計上常用的高階程式語言,下列何者為其進階資料結構?
核心觀念
本題考查 R 語言的資料結構分類。R 的資料結構可依資料維度、資料型態是否一致,以及是否能容納不同型態資料加以區分。
常見資料結構如下:
list:可容納不同型態、不同長度的元素,屬於遞迴式資料結構。matrix:二維資料結構,所有元素通常必須具有相同資料型態。array:可處理二維以上的多維資料結構,元素通常也須具有相同資料型態。data.frame:表格型資料結構,各欄可具有不同資料型態,但每欄列數必須相同。
在一般 R 語言教材與考試分類中,以上均屬於相對於單純向量而言的進階資料結構。
解題方法
判斷本題各選項是否為 R 的進階資料結構即可。重點不是判斷它們是否屬於完全不同的底層型別,而是依 R 語言常見教材分類,確認它們是否能提供比單純向量更複雜的資料組織方式。
R 的基本資料容器通常是向量;matrix、array、list 與 data.frame 則提供多維、異質資料或表格化的資料管理能力,因此皆應選取。
選項分析
(A) list:正確
list 是 R 中的重要進階資料結構,元素可以是不同型態,甚至可以包含另一個 list、向量、矩陣、函數或資料框。
例如:
x <- list(name = "Amy", score = c(80, 90), passed = TRUE)
上述 list 同時包含字串、數值向量與邏輯值,具備高度彈性,因此屬於進階資料結構。
(B) matrix:正確
matrix 是二維資料結構,由列與欄組成。矩陣中的元素通常必須為相同資料型態,例如全部為數值、字串或邏輯值。
例如:
第 16 題2 分
複選題:下列何者為直譯式程式語言?
核心觀念
本題考「直譯式程式語言(interpreted language)」與「編譯式程式語言(compiled language)」的基本分類。
- 直譯式語言:程式通常交由直譯器逐段讀取、分析並執行,不必先完整轉換成原生機器碼。
- 編譯式語言:程式先經由編譯器轉換成目的碼或可執行檔,再由電腦執行。
考試分類以各語言的典型執行方式及命題慣例判斷。實務上,同一語言可因不同實作方式而兼具編譯與直譯特性。
解題方法
逐一判斷各選項的主要執行機制:
- 判斷是否通常需要先編譯成可執行檔。
- 判斷是否主要透過直譯器或執行環境直接執行。
- 依國家考試常見分類,選出直譯式語言。
依此判斷,Pascal 通常歸類為編譯式語言;Perl、Python、PHP 通常歸類為直譯式語言,因此答案為 (B)、(C)、(D)。
選項分析
(A) Pascal:錯誤
Pascal 是典型的編譯式高階程式語言。程式原始碼通常先經由 Pascal 編譯器轉換成目的碼或可執行檔,再交由電腦執行。
因此在本題的傳統分類中,Pascal 不屬於直譯式程式語言。
(B) Perl:正確
第 17 題2 分
複選題:下列何者為標籤式語言?
核心觀念
「標籤式語言」是利用特定標籤(tag)描述文件結構、資料意義或呈現方式的語言。標籤通常以成對形式出現,例如:
<p>段落內容</p>
常見特徵包括:
- 使用
< >括住標籤名稱。 - 標籤可用來描述資料結構或文件格式。
- 通常與文件標記、資料交換或網頁內容呈現有關。
本題判斷重點是:選項是否以「標籤」描述文件內容,而非單純判斷其是否能處理文字或網頁。
解題方法
逐一辨認各選項的性質:
- 是否使用明確的標籤語法?
- 是否屬於標籤式文件描述語言?
- 若是程式語言或文件格式,則不選。
符合標籤式語言定義者,即為正確選項。
選項分析
(A) XML:正確
XML(Extensible Markup Language,可延伸標記語言)使用自訂標籤描述資料結構,例如:
<student>
<name>王小明</name>
<score>85</score>
</student>
<student>、<name> 與 <score> 都是標籤,用來表達資料的階層與意義,因此 XML 是標籤式語言。
(B) RTF:錯誤
第 18 題2 分
複選題:在 Java 語言中,下列何者能讓執行緒停止執行?
核心觀念
本題考查 Java 執行緒的生命週期,以及 Thread 與 Object 類別中會影響執行緒執行狀態的方法。
能使執行緒暫停、進入等待狀態,或直接終止執行的方法,包括:
sleep:使目前執行緒暫停一段指定時間。stop:強制終止執行緒。wait:使執行緒進入等待狀態,直到被喚醒或逾時。notify:喚醒正在等待的執行緒,本身不會使執行緒停止。
因此,本題屬於複選題,正確選項為 A、B、D。
解題方法
判斷各方法對執行緒的作用:
- 是否會使目前執行緒暫停執行?
- 是否會使執行緒進入等待狀態?
- 是否會直接終止執行緒?
- 是否只是喚醒其他執行緒?
只要方法會使執行緒暫停、等待或終止,即符合「能讓執行緒停止執行」的題意。
選項分析
(A) sleep;——正確
sleep 是 Thread 類別的靜態方法,會使目前正在執行的執行緒暫停指定時間。例如:
Thread.sleep(1000);
表示目前執行緒暫停約 毫秒,也就是 秒。
執行緒在這段期間不會繼續執行原本的程式碼,時間到後才會恢復執行。因此,sleep 能讓執行緒暫停執行,選項正確。
補充:
sleep不會釋放執行緒目前持有的鎖。- 方法執行期間可能拋出
InterruptedException。 - 它是「暫停」,不是永久終止執行緒。
(B) stop;——正確
stop 會強制終止執行緒,使執行緒停止執行,因此符合題意。
不過,stop 可能在執行緒尚未完成重要操作時直接中斷,造成:
- 共享資料處於不一致狀態;
- 鎖被非預期釋放;
- 資源未妥善關閉;
- 程式產生難以追蹤的錯誤。
第 19 題2 分
複選題:以下為 C 語言程式,請問執行後的結果,下列何者正確?
#include <iostream>
using namespace std;
int main()
{
int a=3, b=8;
if (a>2) int a=5;
else b=7;
}
核心觀念
本題考查 C++ 的:
if...else的條件判斷與執行流程。- 區域變數的「作用域」(scope)。
- 變數遮蔽(variable shadowing):內層變數可與外層變數同名,但兩者是不同變數。
雖然題目文字稱為 C 語言,但程式使用 #include <iostream> 與 using namespace std;,實際上是 C++ 程式。
解題方法
程式開始時宣告:
int a = 3, b = 8;
因此外層變數初值為:
接著判斷:
if (a > 2)
此時使用的是外層的 a,所以:
條件成立,執行 if 後面的敘述:
int a = 5;
這裡宣告的是 if 區塊內的另一個區域變數 a,其作用域只存在於該 if 子敘述中,會遮蔽外層的 a。因此它不會改變外層的 a=3。
由於 if (a > 2) 條件成立,else 部分不會執行:
else b = 7;
所以外層變數維持:
選項分析
第 20 題2 分
複選題:關於 Python 的 calendar 模組,下列何者正確?
核心觀念
本題考查 Python calendar 模組中常用函式的功能與使用方式,重點包括:
calendar.firstweekday:取得目前設定的一週起始日。calendar.isleap(year):判斷指定年份是否為閏年。calendar.calendar(year):產生指定年份的月曆文字。calendar.weekday(year, month, day):取得指定日期是星期幾。
Python 的星期編號通常採用:
解題方法
逐一核對各選項中的函式名稱、參數及功能:
- 判斷函式是否存在。
- 確認函式回傳的意義。
- 注意模組名稱與函式名稱是否拼寫正確。
- 分辨「一週的第一天」與「第一個工作天」的差異。
選項分析
(A) 錯誤
calendar.firstweekday 傳回的是「一週的第一天」,不是「一週的第一個工作天」。
import calendar
calendar.firstweekday
其預設回傳值為 0,代表星期一;此設定是月曆顯示時一週的起始日。
因此正確說法應為:
calendar.firstweekday傳回一週的第一天,預設值為0表示星期一。
選項將「第一天」誤寫為「第一個工作天」,所以錯誤。
(B) 正確
calendar.isleap(year) 可以判斷指定年份是否為閏年。
import calendar
calendar.isleap(2020) # True
calendar.isleap(2021) # False
閏年的判定規則為: