103年 公 務 人 員 普通 考 試 試 題 代號:44420 類 科: 資訊處理
科 目: 程式設計概要
考試時間: 1 小時 30 分 座號:
※注意: 禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。
(請接背面)
全一張
(正面)
試題一、二程式片段都以 C 語法撰寫,並請假設下列宣告;其中??????表示未完成部分。
#include <stdio.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
int i, j, k, m, n, p;
一、請完成下述程式片段。
請完成下方兩個函數 is_odd()及 is_even(),使其可以用相互遞迴(mutual recursion)的方式檢查所輸入的正整數為奇數或偶數。不管 n 是奇數或是偶數,
is_odd(n)及 is_even(n)都應回傳正確的布林值(TRUE 或 FALSE)。請扼 要解說程式之正確性。(15 分)
bool is_even(unsigned int n) { if (??????)
return ??????
else
return ??????
}
bool is_odd(unsigned int n) { if (??????)
return ??????
else
return ??????
}
請撰寫單一遞迴函數(single recursive function)check 以判斷所給之正整數為奇 數或偶數,若為奇數回傳 FALSE,若為偶數回傳 TRUE。請扼要解說程式之正確 性。(15 分)
二、研究下方的片段 C 語言程式並回答下列問題。
scanf (“%d”, &n);
if (n > 0)
for (m=0, i=1; i<=n; m++, i=i*2);
printf (“%d\n”, m);
請說明該程式片段最後輸出的數字的意涵,也就是 m 與 n 的關係。(10 分)
請改寫該程式片段,在不使用迴圈的情況下可以得到相同的結果。(15 分)
scanf (“%d”, &n);
if (n > 0) ??????
printf (“%d\n”, m);
103年 公 務 人 員 普 通 考 試 試 題 代號:44420 類 科: 資訊處理
科 目: 程式設計概要
全一張
(背面)
三、假設書架上有七本書,已知每一本書的高度都不一樣,請以下列方式進行排序:第 一個與第二個位置上的書先比較,較低的書放到第一個位置,較高的書放到第二個 位置;再來第二個與第三個位置的書相比較,依此類推。第一輪做完後,再從頭開 始進行第二輪的比較與交換,然後再進行第三輪、第四輪等,直至第六輪結束為止。
若這七本書高度分別為 15, 12, 17, 18, 11, 14, 19,請問每一輪需交換書本位置的次 數為何?(10 分)
若總共有 n 本書本,最多共需交換幾次書本才能排序完成?(5 分)
請宣告並說明如何以一維陣列 books[n]來表示書本的位置與高度。(5 分)
請以上述宣告的一維陣列資料結構為基礎,用 C, C++或 Java 寫出上述排序演算 法。(10 分)
四、請完成下列網頁程式以呈現如下表之資料。
品牌 庫存 銷售數 Volvo 18 20 Luxgen 57 145 Toyota 41 78 Honda 17 15
請宣告二維陣列$cars 並事先儲存上述四種汽車品牌、庫存、銷售數。(5 分)
請用迴圈印出上述表格內容。(10 分)
<!DOCTYPE html>
<html>
<body>
<?php
$cars = . . .
. . .
</body>
</html>