110 身心障礙特考四等 資訊處理 程式設計概要 考古題詳解
第 一 題25 分
如下 Python 程式,執行結果為何?
def rNum2iNum(originalNum): baseNum = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} resultNum = 0 originalNum = originalNum.upper() try: for i in range(len(originalNum)): if i > 0 and baseNum[originalNum[i]] > baseNum[originalNum[i - 1]]: resultNum += (baseNum[originalNum[i]] - 2 * baseNum[originalNum[i - 1]]) else: resultNum += baseNum[originalNum[i]] return resultNum except: return "Not A Legal Number!!"
if name == "main": #-- Call rNum2iNum s1 = "MMMCMLXXVI" s2 = "mCdLxIv" s3 = "CCCZIII" s4 = "IVXLCDM"
print("{0:10} --> {1}".format(s1, rNum2iNum(s1)))
print("{0:10} --> {1}".format(s2, rNum2iNum(s2)))
print("{0:10} --> {1}".format(s3, rNum2iNum(s3)))
print("{0:10} --> {1}".format(s4, rNum2iNum(s4)))
登入後即可作答並保存紀錄。
核心觀念
本題考 Python 字串走訪、字典查表、大小寫轉換、例外處理,以及程式實際執行邏輯。字典 baseNum 將羅馬數字字元對應到數值;upper 會把輸入字串轉成大寫,因此小寫羅馬數字也能查表。
程式不是完整驗證羅馬數字是否合法的轉換器。它只在某字元的值大於前一字元時,套用減法規則;遇到不在字典中的字元,則由 except 回傳錯誤訊息。
解題方法
逐字讀取字串,依序累加到 resultNum:
- 若目前字元值大於前一字元值,加入「目前值減去前一值的兩倍」。
- 其他情況加入目前字元值。
減去前一值的兩倍,是因為前一個字元已在前一輪加進總和,現在要將它由加法改為減法。若前一值為 、目前值為 ,原本已加了 ,本輪再加 ,合計即為 。
逐筆計算
s1 = "MMMCMLXXVI"
字串轉大寫後不變:
s2 = "mCdLxIv"
轉成大寫為 MCDLXIV:
依程式逐字計算,IV 的處理是先加 ,再遇到 時加 ;而 LX 則先加 ,再遇到 時照常加 。完整累計為:
第 二 題25 分
請使用 C、C++、C#、Java 或 Python 程式語言,迴圈及遞迴方式撰寫相關程式模組,可以求解如下的數列資料值。
登入後即可作答並保存紀錄。
核心觀念
本題考查數列的遞迴定義,以及使用迴圈與遞迴兩種方式撰寫程式模組。依題目定義:
- 若 ,則 ,這是遞迴的終止條件。
- 若 為偶數,加入 。
- 若 為奇數,扣除 。
因此數列前幾項為:
解題方法
迴圈法從 開始逐項累加至指定的 。每一步依目前項數的奇偶性,決定加入負整數或正分數。若 ,依定義直接回傳 。
遞迴法直接依題目公式呼叫 ,再加上目前這一項的值。當 時回傳 ,使遞迴停止。
以下使用 Python 撰寫兩個模組:
第 三 題25 分
請使用標記式語言 HTML,撰寫相關程式,可以顯示如下以表格形式呈現表單的網頁,假設:
- 網頁的標題為「Table + Form」。
- 表單表格及較大字型的「報名表」,皆置中於網頁。
- 表單透過 URL 來傳送資料。
- 表單要傳送至的網址為 http://iii.jjj.com/webPage.php。
- 隊名資料的長度需限定為 20,變數名為「groupName」。
- 參與人數使用大小為 3 的下拉選單,作 2、3、4 人的選取,預設在 3 人的選項上,變數名為「numberMember」。
- 單選項按鈕自行定義變數名稱,預設在「否」及「無」上。
- 表單送出及表單還原到預設值,兩個按鈕分別使用 send.jpg、default.jpg 兩個圖片來取代文字按鈕,按鈕圖形寬為 50 pixels,高為 30 pixels。
🖼️【此處有附圖,請對照原卷】
登入後即可作答並保存紀錄。
核心觀念
本題考查 HTML 表單與表格的搭配,重點包括:
<form>的action指定接收資料的網址,method="get"代表透過 URL 傳送資料。<input>、<select>、<option>分別用來建立文字欄位、下拉選單與單選按鈕。- 同一組單選按鈕使用相同的
name,以不同的value表示選項;checked指定預設選項。 <button>可放入<img>,以圖片呈現送出與還原按鈕。
解題方法
依照圖中表單內容安排表格列,欄位依序為隊名、參與人數、跨校組隊(是/否)及參賽經驗(有/無)。兩組單選按鈕分別使用不同的變數名稱,並將「否」與「無」設為預設值。
第 四 題25 分
如下 Python method,分別使用 、、、 進行呼叫,請問執行的結果為何?
def PQ1(num): resultNum = 0 original = num
num = abs(num)
while num > 0:
rr = num % 10
num = num // 10
resultNum = resultNum + (rr * rr * rr)
if abs(original) == resultNum:
print("{} Hit {} !!".format(original, original))
else:
print("{} Not Hit {} !!".format(original, resultNum))
登入後即可作答並保存紀錄。
核心觀念
本題考查 Python 的整數運算、while 迴圈、取餘數與整數除法,以及函式呼叫時引數的處理。
函式先以 abs(num) 取輸入的絕對值,再逐位取出十進位數字,計算每一位數字的三次方總和。迴圈中的:
num % 10取得目前個位數。num // 10移除目前個位數。resultNum累加每位數字的三次方。
最後比較原始輸入的絕對值與各位數字三次方總和是否相等;相等時輸出 Hit,否則輸出 Not Hit。
解題方法
逐一追蹤四次呼叫。負數先取絕對值,因此計算各位數字時不受正負號影響;但輸出仍使用 original,保留原本的正負號。
PQ1(-171)
各位數字為 ,三次方總和為:
因為 ,輸出:
-171 Not Hit 345 !!
PQ1(271)
各位數字為 ,三次方總和為: