Professional Documents
Culture Documents
1、 請設計一虛擬樂透號碼對獎程式。程式中請設計一選單介面,讓使用者可選擇下列功能選項
(1) 輸入對獎號碼 (註 1))、(2) 產生開獎號碼 (註 2))、(3) 顯示中獎結果 (註 3))、或 (4) 離開程
式。
【註】:
1) 輸入對獎號碼: 此功能允許使用者每次至多輸入 10 組對獎資料(亦可能輸入不滿
10 組);每組對獎資料應包括購買者姓名(最多 10 個字元)及其購買之 6 組數字(即對
獎號碼)。使用者輸入購買者之對獎號碼時,可允許不依大小順序輸入,但程式必需
檢查同 一購 買者 之對獎號碼是否重覆,或是否超出 1 ~ 49 之間的號碼;若輸入錯
誤則要求重新輸入該號碼。但不同購買者間允許購入相同號碼。
2) 產生開獎號碼: 樂透開獎號碼為 1 ~ 49 之亂數 產生;每次開獎號碼 為 6 組數字及
一個特別號;所有號碼不得重覆出現。開獎號碼產生完成後,請由小至大將 6 組號
碼排列後,再連同特別號一併儲存,暫不印出。
3) 顯示中獎結果:若購買者所購入的 6 組對獎號碼與樂透 6 組開獎號碼全部相同時,
則為頭獎;若購買者所購入的 6 組對獎號碼與樂透 6 組開獎號碼中任五組數字相同,
且另一個數字與特別號相同時,則為二獎;若購買者所購入的 6 組對獎號碼只與開
獎號碼中任五組數字相同時(但另一個數字與特別號不同時),則為三獎;其餘皆為
歡喜獎。(本程式假設只需判斷此四種獎項即可)。
中獎結果顯示時請先將樂透 6 組開獎號碼與特別號印出,之後再列印此次購買者之
對獎資料(含姓名及其 6 組對獎號碼、及中獎獎別(頭獎、二獎、三獎、或歡喜獎)),供作
檢核。中獎結果顯示後,請清除所有對獎資料與開獎號碼,供另一期開獎之用。
4) 操作中若輸入的功能代號錯誤,請提示錯誤訊息後,要求重新輸入。
5) 程式設計過程中請注意其執行邏輯順序之合理性;例如:未選擇輸 入 對 獎 號 碼 前
不得執行產 生 開 獎 號 碼 選項,未選擇產 生 開 獎 號 碼 前,不得執行顯 示 中 獎 結 果
之選項…等等。
6) 本題至少須寫出一個主程式及 3 個函數副程式 (即輸入對獎號碼之函數、產生開獎
號碼之函數、及顯示中獎結果之函數)。
7) 輸入、輸出格式,或未規定事項請自行發揮設計,但請注意合理性與美觀性。
2、 請設計一個撲克牌比大小之遊戲程式。程式執行時提供一選單(Menu),讓使用者可選擇下列
功能選項:(1) 玩家登錄 (註一)、(2) 派牌 (註二)、(3) 公佈結果 (註三)、(4) 另闢新局 (註四)、
及(5) 遊戲結束。
【註】:
(一) 玩家登錄:讓使用者輸入玩家姓名(最多 10 個字元),名額請設定為 5 位。輸入時
畫面必須顯示目前是第幾位玩家的資料登錄。
(二) 派牌:派牌時由電腦自 52 張牌(扣除鬼牌)中,隨機分發每人 3 張;所有玩家手
P. 1
上之牌均不得重覆出現。個人所握之牌並依花色與點數由小至大排列儲存。花色
由小至大 分別為梅花、磚塊、紅心、與黑桃。點數 A、2、3、4、5、…、9、10、J、Q、K 依序
代表 1~13 點。(請先考慮花色,再考慮點數之排列)。
(三) 公佈結果:公佈結果時,請依照玩家手上牌的點數總和,由高到低排列顯示。印
出時需連同玩家姓名、3 張手上牌的資料(包括花色圖案與點數)、及其點數總和
一併印出。花色圖案為 (5)、 (4)、 (3) 、 (6),括號內為該圖案之 ASCII 碼。
顯示完之後請暫停並出現提示訊息,要求使用者按任意鍵繼續回到選單畫面,選
擇其他功能。
(四) 另闢新局 :另闢新局選項可以讓使用者清除該清除之資料內容後,重新執行程式
選單之選擇。
(五) 遊戲中若輸入的功能代號錯誤,請提示錯誤訊息後,要求重新輸入。
(六) 程式設計過程中請注意其執行邏輯順序之合理性;例如:未先選擇玩家登錄不得
執行派牌選項,未派牌前不得執行公布結果之選項…等等。
(七) 本題每一功能選項之執行程式,均須設計成個別函式。
(八) 輸入、輸出格式,或未規定事項請自行發揮設計,但請注意合理性與美觀性。
3、 請設計一遞迴程式 ,計算下列數學公式
n
xk x1 x 2 x 3 xn
f ( x, n ) = ∑ = + + + ... +
k =1 k! 1! 2! 3! n!
註:1) 數列相加、次方、以及階層計算均請用遞迴函式完成。
4、 請設計一程式,讀取一文字檔案 (input4.txt),將其內所有的單字(word),按照字母順序(不
管大小寫)排列,並計算該單字在該檔案中出現的總次數,及其出現的所有列數編號後,印
出其結果。
【註】:文字檔案中的所有字皆為 20 個字元以內的英文單字,除空白間隔外,沒有其他標點
符號。
例如:若輸入檔案的內容為:
this is an apple
This is a pen
例如: 主檔內容為:
1 100 80
2 90 50
4 30 60
5 40 30
異動檔內容:
P. 3
2 - -1 -1
3 + 90 50
4 + 10 20
5 * 30 -1
6 - 20 90
更新後主檔案內容:
1 100 80
3 90 50
4 30 60
5 30 30
輸出: 錯誤:新增時主檔已經有相同 ID 4
錯誤:刪除時主檔不存在 ID 6
【註】:輸入檔案的資料筆數不一定,請勿使用陣列儲存處理。
【註】:
1) 每次發(補)牌後的牌型,均需要列印出牌的花色( 、 、 、 的 ASCII 碼分別為 3、4、
5、6)及點數。
2) 玩家在未失敗或結束補牌前,莊家之牌型不得讓對方知道(但須先顯示其中一張牌
供玩家判斷補牌與否)。
3) 本題需用結構(struct)來儲存撲克牌的點數及花色。
【註】:
1) 座標點及三角形定義請利用巢狀結構(Nested struct)來表示。
2) 三角形三個頂點座標,其輸入的順序允許可不按照 固定方向 (如順時針或逆時針)
輸入,請利用程式自行判斷其位置關係。
進 0 1 0 1 1
位:
ptr1 5 3 5 9
+) ptr2 8 3 6
ptr3 3 7 1 0 1
請設計一 C 語言程式合乎下列要求條件:
1). 輸入兩個未知位數大小 的整數值 (注意: 輸入的整數可能超過 int 所能表示的最
大值),分別將其傳入 createlist()函數中,建構出兩個如上結構之鏈結串列 (ptr1 &
ptr2)後,傳回主程式應用。(個位數請建於第一個節點上)
P. 5
2). 撰寫一函數 addition( ),由主程式接收兩個原始鏈結串列 (ptr1 & ptr2),並執行加
法計算後傳回結果之鏈結串列 (ptr3)。(本題不可以利用輸入之整數值直接計算,
如:sum=num1+ num2,需採用上述鏈結串列方式處理計算) (注意:執行加
法時應考慮有可能第一個鏈結串列長度較長,亦有可能第二個鏈結串列長度較長
的情形)
3). 撰寫一函數 listing( ),可列印出其原始輸入之數值及加法後之結果大小。(本題不可
以將輸入之原始整數值或結果直接印出,須透過鏈結串列來列印)。(提示:可
利用建構反轉串列(inverted linked list)後再列印)
註:反轉串列即指所有的串列指標均反向指引,串列名稱指標則指向原始串列的最後一個
節點。
輸入檔案格式:
1) 第一列有一個數字 N ,代表地圖的大小。
2) 接下來有 N * N 個以空格或斷行分隔的數字,其值為 0 或 1。(注意:每一列不一定
儲存 N 個數字,但檔案中總共會有 N * N 個數字來標示地圖。)
3) 數值 0 表示可走之位置,數值 1 表示不可走之位置。
4) 地圖由 N * N 個位置組成,入口座標為 (0, 0),出口座標為 (N -1, N -1)。
5) 如果無法走到出口請印出”無法離開”訊息。
6) 地圖檔請於授課資訊網頁下載。
P. 6