You are on page 1of 6

九十九學年度第二學期計算機概論暨實習作業

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

輸出 為: WORD TIMES LINE


a 1 2
an 1 1
apple 1 1
is 2 1, 2
pen 1 2
this 2 1, 2

5、 請設計一檔案異動程式;讀取異動檔 (update5.txt) 內的資料來修正主檔 (master5.txt) 內容,


P. 2
並將最後的更新結果回存到主檔上。之後,再利用更新後的主檔案內容,計算 各科成績 平
均及標準差 ,並將結果輸出到檔案 (dxxxxxxx_5.txt)中。主檔案、異動檔及輸出檔案格式請依
照下列要求準備或設計:
主檔案格式:
1) 每一列為一筆資料。每一資料項以空格分隔。
2) 第一資料項為學號(ID) (字元,長度為 8 個字元,Key,按照順序排列、不得重複)。
3) 第二資料項為計概成績 (0~100 分之間的整數)。
4) 第三資料項為計概實習成績 (0~100 分之間的整數)。
輸出檔案格式:
1) 輸出的檔案請用個人學號命名。
2) 每一列為一筆學生資料紀錄,每一紀錄內的資料項以空格分隔。
3) 第一、二、三資料項與輸入格式相同。
4) 第四資料項為二科總分 (整數,0~200 間的整數)。
5) 第五資料項為二科平均 (浮點數,四捨五入至小數點後第二位)。
6) 當所有學生的資料輸出後,再輸出一列包含各科平均成績及全班總平均。(其中第
一資料項印出“Avg.”,第二、三、四資料項分別為計概全班平均成績、計概實習全班
平均成績及全班成績總平均。(浮點數,請四捨五入至小數點後第二位)
7) 最後一列請印出各科標準差。(第一資料項印出 “Dev.”,第二、三資料項分別為計概
及計概實習全班成績之標準差。(浮點數,請四捨五入至小數點後第二位)
異動檔格式:
1) 每一列為一筆資料,每一資料項以空格分隔。
2) 第一資料項為學號 (字元,長度為 8 個字元,Key,按照順序排列、不得重複)。
3) 第二資料項為資料異動型態 (字元,+ 代表新增,- 代表刪除 , * 代表更新)
4) 第三資料項為計概成績 (0-100 間的整數,-1 代表不更新)。
5) 第四資料項為計概實習成績 (0-100 間的整數,-1 代表不更新)。
6) 新增時,若主檔中已經存在相同的 ID 時則不做處理,但須印出錯誤的異動資料,
否則將異動資料加入主檔中。
7) 刪除時,如果主檔案中沒有該 ID 時,則主檔不做處理,但須印出錯誤的異動資料,
否則將主檔資料刪除。
8) 更新時,如果主檔中沒有該 ID 時,主檔不做處理,但須印出錯誤的異動資料。如
果主檔中存在相同的 ID 時,則將舊資料取代成新資料後輸出。(視第三、四資料項的
註記而定)
9) 異動檔的資料筆數不一定與主檔的資料筆數相同,但其內容均已依學號(ID)排序。

例如: 主檔內容為:
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

【註】:輸入檔案的資料筆數不一定,請勿使用陣列儲存處理。

6、 二十一點(Black jack)遊戲程式設計:由電腦先將一副撲克牌(52 張)用亂數洗牌後,各發 2 張


牌給使用者(玩家)及電腦本身(莊家),其中 J、Q 及 K 都代表 10 點,A 可視為 1 點或 11 點。玩
家先依手上牌的點數和決定是否再跟莊家要求補牌。玩家手上牌的點數總和不得超過 21 點
否則視為失敗。當玩家於有效總和內(<=21 點)結束補牌後,莊家方可決定補牌與否。莊家手
上牌的點數和不得少於 17 點,否則需無條件補牌 ,但仍不得超過 21 點,否則視為輸家。
當雙方在有效總和內均停止補牌時,則依牌面點數總和大小決定輸贏。

【註】:
1) 每次發(補)牌後的牌型,均需要列印出牌的花色( 、 、 、 的 ASCII 碼分別為 3、4、
5、6)及點數。
2) 玩家在未失敗或結束補牌前,莊家之牌型不得讓對方知道(但須先顯示其中一張牌
供玩家判斷補牌與否)。
3) 本題需用結構(struct)來儲存撲克牌的點數及花色。

7、 請設計一程式,讓使用者於一平面上輸入 3 組三角形之頂點座標後,依其面積大小 排序後,


將此三組三角形之資訊 (含頂點座標及面積) 列印出來。

【註】:
1) 座標點及三角形定義請利用巢狀結構(Nested struct)來表示。
2) 三角形三個頂點座標,其輸入的順序允許可不按照 固定方向 (如順時針或逆時針)
輸入,請利用程式自行判斷其位置關係。

8、 請設計一程式,以亂數產生 20 位學生的英文姓名(8 個英文字元以內)、微積分成績與計概成


P. 4
績(均為 0~100 之整數分數)。並計算出每位學生該二科的平均成績,存於同一個結 構 陣 列
(Structure array)中。之後,依其平均成績高低排列,並將其原始結構陣列,以及排序後結構
陣列結果列印出來。
註:1) 英文姓名、微積分成績、計概成績均請利用亂數隨機產生。
2) 必需將原始陣列傳遞到副程式中排序。
3) 資料交換必需使用另一副程式處理,並且利用 Call by address 的方式完成。
4) 學生英文姓名、微積分成績、計概成績、平均成績請以結構設計儲存。

9、 請設計一程式,由使用者輸入 2 個一元多次方程式,並分別建構成兩個 Linked List。之後,


設計一功能界面,供使用者選擇執行兩多項式之相加或相乘計算,並印出運算結果。
   註:1) 多項式輸入為連續輸入下列格式:
係數 次方
當輸入係數為 0 時表示多項式結束。
若輸入多個相同次方的係數時,則將這些係數相加成為該次方的係數。
例如 輸入 -3 1 3 3 1 1 1 0 0
表示多項式 3X3 -2X + 1 即 3X3 +(-3+1)X + 1
2) 多項式允許可不按次方大小順序 輸入,但在多項式的 Linked List 中必須按照次
方大小順序排列,也必須按次方大小順序印出。請自行撰寫程式處理。
3) 相加或相乘後的結果係數為零時,不可將此次方印出 (即必須從多項式 Linked List
中移除)。列印時使用下列格式印出,如上例:3X^3 -2X^1 + 1 則表示 3X3 -2X + 1。

10、 在 32 位元的個人電腦中,長整數之最大值是 2147483647(10 位數)。但在諸如國家財政預


算的應用環境中,由於數值龐大(常以兆為單位;13 位數),則無法以標準資料型態表示之。
有一種方式可以表現此種資料,那就是利用鏈結串列(Linked List);並假設每一節點(node)
代表一位數,如此則可利用該結構執行一些需要的運算,並列印出其結果。例如下面圖例即
簡單顯示出兩個數值 9535 與 638,分別以鏈結串列表示後,並執行加法或減法運算之結
果。

進 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)後再列印)

註:反轉串列即指所有的串列指標均反向指引,串列名稱指標則指向原始串列的最後一個
節點。

【加分題 】請設計一走迷宮程式,讀取地圖檔 (input11.txt) 後由程式自行走出迷宮,並印出離開迷


宮時走過的路徑 (含方向或座標)。

輸入檔案格式:
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

You might also like