地特三等申論題
111年
[資訊處理] 程式設計
第 一 題
📖 題組:
二、有關 Python 程式設計,回答下列問題:
二、有關 Python 程式設計,回答下列問題:
📝 此題為申論題,共 2 小題
小題 (一)
以下程式執行時,輸入正數為 15 和 21 時,其輸出結果分別為何?(14 分)
def func_2_1(x):
y = 2
while y <= x:
flag = True
for i in range(2, y):
if y % i == 0:
flag = False
break
if flag == True:
print(y, end=' ')
y += 1
if __name__ == "__main__":
x = int(input('請輸入一正整數:'))
print('輸出結果:')
func_2_1(x)
print('\n')
思路引導 VIP
首先,分析自訂函數 func_2_1(x) 的雙層迴圈邏輯。外層 while 迴圈遍歷從 2 到 x 的數字,內層 for 迴圈測試該數字是否有 1 與自身以外的因數,藉此判斷並印出小於等於 x 的所有質數。
小題 (二)
以下是將 x = [-5, 16, 30, -11, 26, -22] 整數串列,利用氣泡排序法,由小到大逐次排列,並顯示每一次排列的 python 主程式,
if __name__ == "__main__":
x = [-5, 16, 30, -11, 26, -22]
print("排 序 前 :", end="")
for i in range(6):
print(' x[%d] =%3d' %(i, x[i]), end = "")
func_2_2(x)
print()
此程式執行結果如下:
排 序 前 : x[0] = -5 x[1] = 16 x[2] = 30 x[3] =-11 x[4] = 26 x[5] =-22
第 1 次排列: x[0] = -5 x[1] = 16 x[2] =-11 x[3] = 26 x[4] =-22 x[5] = 30
第 2 次排列: x[0] = -5 x[1] = -11 x[2] = 16 x[3] =-22 x[4] = 26 x[5] = 30
第 3 次排列: x[0] = -11 x[1] = -5 x[2] =-22 x[3] = 16 x[4] = 26 x[5] = 30
第 4 次排列: x[0] = -11 x[1] =-22 x[2] = -5 x[3] = 16 x[4] = 26 x[5] = 30
第 5 次排列: x[0] =-22 x[1] =-11 x[2] = -5 x[3] = 16 x[4] = 26 x[5] = 30
寫出氣泡排序法的 func_2_2(x)函數,來完成上述程式。(11 分)
思路引導 VIP
看到此題應先釐清「氣泡排序法」的雙層迴圈邏輯:外層控制回合數(n-1次),內層進行相鄰元素的比較與交換。接著觀察主程式輸出,需注意主程式迴圈結尾未換行(使用 end=""),因此在自訂函數中印出每回合結果時,首行需加上 \n 換行,並套用與主程式相同指定的格式 %3d 輸出串列內容。