
禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。
試題一、二程式片段都以 C語法撰寫,並請假設下列宣告;其中??????表示未完成部分。
#include
#include
#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 (“%dn”, m);
請說明該程式片段最後輸出的數字的意涵,也就是 m與n的關係。(10 分)
請改寫該程式片段,在不使用迴圈的情況下可以得到相同的結果。(15 分)
scanf (“%d”, &n);
if (n > 0)
??????
printf (“%dn”, m);

三、假設書架上有七本書,已知每一本書的高度都不一樣,請以下列方式進行排序:第
一個與第二個位置上的書先比較,較低的書放到第一個位置,較高的書放到第二個
位置;再來第二個與第三個位置的書相比較,依此類推。第一輪做完後,再從頭開
始進行第二輪的比較與交換,然後再進行第三輪、第四輪等,直至第六輪結束為止。
若這七本書高度分別為 15, 12, 17, 18, 11, 14, 19,請問每一輪需交換書本位置的次
數為何?(10 分)
若總共有 n本書本,最多共需交換幾次書本才能排序完成?(5分)
請宣告並說明如何以一維陣列 books[n]來表示書本的位置與高度。(5分)
請以上述宣告的一維陣列資料結構為基礎,用 C, C++或Java 寫出上述排序演算
法。(10 分)
四、請完成下列網頁程式以呈現如下表之資料。
請宣告二維陣列$cars 並事先儲存上述四種汽車品牌、庫存、銷售數。(5分)
請用迴圈印出上述表格內容。(10 分)