中級軟件設(shè)計(jì)師下午試題-117_第1頁
中級軟件設(shè)計(jì)師下午試題-117_第2頁
中級軟件設(shè)計(jì)師下午試題-117_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、中級軟件設(shè)計(jì)師下午試題 -117( 總分: 89.05 ,做題時(shí)間: 90 分鐘 )一、試題一 (總題數(shù): 1,分?jǐn)?shù): 15.00) 說明 某房屋租賃公司欲建立一個(gè)房屋租賃服務(wù)系統(tǒng), 統(tǒng)一管理房主和租賃者的信息, 從而快速地提供租賃服務(wù)。 該系統(tǒng)具有以下功能:1登記房主信息。 對于每名房主, 系統(tǒng)需登記其姓名、 住址和聯(lián)系電話, 并將這些信息寫入房主信息文件。 2登記房屋信息。所有在系統(tǒng)中登記的房屋都有一個(gè)唯一的識別號( 對于新增加的房屋,系統(tǒng)會自動為其分配一個(gè)識別號 ) 。除此之外,還需登記該房屋的地址、房型 ( 如平房、帶陽臺的樓房、獨(dú)立式住宅等 ) 、最 多能夠容納的房客數(shù)、租金及房屋狀

2、況 ( 待租賃、已出租 ) 。這些信息都保存在房屋信息文件中。一名房主 可以在系統(tǒng)中登記多個(gè)待租賃的房屋。3登記租賃者信息。 所有想通過該系統(tǒng)租賃房屋的租賃者, 必須首先在系統(tǒng)中登記個(gè)人信息, 包括:姓名、 住址、電話號碼、出生年月和性別。這些信息都保存在租賃者信息文件中。4租賃房屋。已經(jīng)登記在系統(tǒng)中的租賃者,可以得到一份系統(tǒng)提供的待租賃房屋列表。一旦租賃者從中找 到合適的房屋,就可以提出看房請求。系統(tǒng)會安排租賃者與房主見面。對于每次看房,系統(tǒng)會生成一條看 房記錄并將其寫入看房記錄文件中。5收取手續(xù)費(fèi)。房主登記完房屋后,系統(tǒng)會生成一份費(fèi)用單,房主根據(jù)費(fèi)用單繳納相應(yīng)的費(fèi)用。:6變更房屋狀態(tài)。當(dāng)租

3、賃者與房主達(dá)成租房或退房協(xié)議后,房主向系統(tǒng)提交變更房屋狀態(tài)的請求。系統(tǒng)將 根據(jù)房主的請求,修改房屋信息文件。數(shù)據(jù)流圖 1-1 和圖 1-2 分別給出了該系統(tǒng)的頂層數(shù)據(jù)流圖和 0 層數(shù)據(jù)流圖。(分?jǐn)?shù): 15.00 )(1) .使用說明中給出的詞匯,將數(shù)據(jù)流圖1-1中 處的數(shù)據(jù)流補(bǔ)充完整。(分?jǐn)?shù):5.00 ) 正確答案: (1) 費(fèi)用單 (2) 待租賃房屋列表 (3) 看房請求 (4) 變更房屋狀態(tài)請求 ) 解析:(2) .使用說明中給出的詞匯,將數(shù)據(jù)流圖圖1-2中的(5)(8)補(bǔ)充完整。(分?jǐn)?shù):5.00 ) 正確答案: (5) 房主信息文件 (6) 租賃者信息文件 (7) 房屋信息文件 (8)

4、看房記錄文件 ) 解析:(3) . 數(shù)據(jù)流程圖圖 1-2 中缺失了三條數(shù)據(jù)流,請指出這三條數(shù)據(jù)流的起點(diǎn)、終點(diǎn)和數(shù)據(jù)流名稱。* (分?jǐn)?shù): 5.00)正確答案: (1) 起點(diǎn):房主 終點(diǎn):變更房屋狀態(tài)數(shù)據(jù)流名稱:變更房屋狀態(tài)請求(2) 起點(diǎn):租賃者 終點(diǎn):登記租賃者信息 數(shù)據(jù)流名稱:租賃者信息(3) 起點(diǎn):租賃者 終點(diǎn):安排租賃者看房 數(shù)據(jù)流名稱:看房請求 )解析: 解析 本題考查的是分層數(shù)據(jù)流圖,該題型每年必考,是需要重點(diǎn)掌握的內(nèi)容。 解題的兩大原則:數(shù)據(jù)平衡原則,系統(tǒng)功能描述與數(shù)據(jù)流圖的一致性原則。首先根據(jù)數(shù)據(jù)平衡原則有:在0 層圖中,與“房主”相關(guān)的數(shù)據(jù)流有 5條。根據(jù)數(shù)據(jù)平衡原則頂層圖應(yīng)有

5、與之對應(yīng)的數(shù)據(jù)流,但“費(fèi) 用單”數(shù)據(jù)流在頂層圖中找不到,所以 (1) 應(yīng)是“費(fèi)用單”數(shù)據(jù)流。通過比較頂層圖和 0層圖中與外部實(shí)體“租賃者”相關(guān)的數(shù)據(jù)流, 可以發(fā)現(xiàn): 出現(xiàn)在 0層圖上的數(shù)據(jù)流“待 租賃房屋列表”是頂層圖上沒有的, 且與 (2) 處的數(shù)據(jù)流方向一致。 由此可以判定, (2) 處的數(shù)據(jù)流就是“待 租賃房屋列表”。而頂層圖中的數(shù)據(jù)流“租賃者信息”卻是 0層圖上沒有的。這樣就找到了 0層圖上缺失 的第 2條數(shù)據(jù)流:租賃者信息,它的起點(diǎn)是“租賃者”,終點(diǎn)是加工“登記租賃者信息”。根據(jù)系統(tǒng)功能描述與數(shù)據(jù)流圖的一致性原則有:由于(4)處缺失的數(shù)據(jù)流是一條輸入數(shù)據(jù)流,從說明中可以看出,只有功能

6、6 “當(dāng)租賃者與房主達(dá)成租房或退房協(xié)議后,房主向系統(tǒng)提交變更房屋狀態(tài)的請求”所描述的數(shù)據(jù)流沒有在“房主”與系統(tǒng)之間體現(xiàn)岀來。因此可以確定,(4)處缺失的數(shù)據(jù)流就是“變更房屋狀態(tài)請求”。相應(yīng)的,可以確定,在0層圖中缺失的其中一條數(shù)據(jù)流也是它,其起點(diǎn)是“房主”,終點(diǎn)是“變更房屋狀態(tài)”這個(gè)加工。由于說明中有“租賃者”相關(guān)的功能“一旦租賃者從中找至倍適的房屋,就可以提出看房請求”,這一功 能未在圖中體現(xiàn)出來。這樣就能確定(3)處的數(shù)據(jù)流應(yīng)該是“看房請求”。而0層圖中也沒有出現(xiàn)這條數(shù)據(jù)流。所以,0層圖中缺失的第3條數(shù)據(jù)流就是“看房請求”,它的起點(diǎn)是“租賃者”,終點(diǎn)是加工“安排 租賃者看房”。由說明的描述

7、可以得知,本系統(tǒng)中的數(shù)據(jù)存儲有:房主信息文件、房屋信息文件、租賃者信息文件、看房記錄文件。下面就可以根據(jù)相應(yīng)的加工對號入座了。顯然,(5)處的是房主信息文件;(6)處的是租賃者信息文件;(7)處的是房屋信息文件;(8)處的是看房記錄文件。二、試題二(總題數(shù):1,分?jǐn)?shù):15.00)說明某汽車維修站擬開發(fā)一套小型汽車維修管理系統(tǒng),對車輛的維修情況進(jìn)行管理。1 對于新客戶及車輛,汽車維修管理系統(tǒng)首先登記客戶信息,包括:客戶編號、客戶名稱、客戶性質(zhì)(個(gè)人、單位)、折扣率、聯(lián)系人、聯(lián)系電話等信息;還要記錄客戶的車輛信息,包括:車牌號、車型、顏色、 車輛類別等信息。一個(gè)客戶至少有一臺車。客戶及車輛信息如表

8、2-1所示。2記錄維修車輛的故障信息。包括:維修類型(普通、加急)、作業(yè)分類(大、中、小修)、結(jié)算方式(自付、三包、索賠)等信息。維修廠的員工分為:維修員和業(yè)務(wù)員。車輛維修首先委托給業(yè)務(wù)員。業(yè)務(wù)員對車輛進(jìn) 行檢查和故障分析后,與客戶磋商,確定故障現(xiàn)象,生成維修委托書。如表2-2所示。3. 維修車間根據(jù)維修委托書和車輛的故障現(xiàn)象,在已有的維修項(xiàng)目中選擇并確定一個(gè)或多個(gè)具體維修項(xiàng)目,安排相關(guān)的維修工及工時(shí),生成維修派工單。維修派工單如表2-3所示。4. 客戶車輛在車間修理完畢后,根據(jù)維修項(xiàng)目單價(jià)和維修派工單中的工時(shí)計(jì)算車輛此次維修的總費(fèi)用,記錄在委托書中。根據(jù)需求階段收集的信息,設(shè)計(jì)的實(shí)體聯(lián)系圖(

9、見圖2-1)和關(guān)系模式(不完整)如下所示。圖2-1中業(yè)務(wù)員和維修工是員工的子實(shí)體。概念結(jié)構(gòu)設(shè)計(jì)邏輯結(jié)構(gòu)設(shè)計(jì)客戶(5)_,折扣率,聯(lián)系人,聯(lián)系電話 ) 車輛(車牌號,客戶編號,車型,顏色,車輛類別)委托書(6)_,維修類型,作業(yè)分類,結(jié)算方式,進(jìn)廠時(shí)間,預(yù)計(jì)完工時(shí)間,登記日期,故障描述,總費(fèi) 用)維修項(xiàng)目(維修項(xiàng)目編號,維修項(xiàng)目,單價(jià) )派工單(7)_,工時(shí))員工(8)_,工種,員工類型,級別)(分?jǐn)?shù):15.00 )(1).根據(jù)問題描述,填寫圖 2.1中(1) 處聯(lián)系的類型。聯(lián)系類型分為一對一、一對多和多對多三種, 分別使用1:1、1:n或1:*、m:n或*:*表示。(分?jǐn)?shù):3.75 ) 正確答

10、案:(1) n 或m或* (2) 1n 或m或*n 或m或*) 解析:.1中的聯(lián)系并指明其聯(lián)系類型。聯(lián)系名可為:聯(lián)系1,聯(lián)系2,。(分?jǐn)?shù):3.75 )正確答案:(完整的實(shí)體聯(lián)系圖如下圖所示。3.75 )系統(tǒng)需解析:(3).根據(jù)圖2-1和說明,將邏輯結(jié)構(gòu)設(shè)計(jì)階段生成的關(guān)系模式中的空(5)(8)補(bǔ)充完整。(分?jǐn)?shù):正確答案:(5)客戶編號,客戶名稱,客戶性質(zhì)(6)委托書編號,客戶編號,車牌號,業(yè)務(wù)員編號或委托書編號,車牌號,業(yè)務(wù)員編號(7)委托書編號,維修工編號,維修項(xiàng)目編號(8)員工編號,員工姓名)解析:(4).根據(jù)問題描述,寫岀客戶、委托書和派工單這三個(gè)關(guān)系的主鍵。(分?jǐn)?shù):3.75 ) 正確答案

11、:(客戶:客戶編號委托書:委托書編號派工單:委托書編號,維修項(xiàng)目編號,維修工編號)解析:解析本題考查數(shù)據(jù)庫設(shè)計(jì),設(shè)計(jì)考點(diǎn)有:數(shù)據(jù)庫的概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)。問題1由維修委托書的故障描述,維修類型、作業(yè)分類,可知,一臺車可能有多個(gè)故障,對應(yīng)多個(gè)維修 委托書,所以(1)空填寫:* ;題目中“維修車間根據(jù)維修委托書和車輛的故障現(xiàn)象,在已有的維修項(xiàng)目中 選擇并確定一個(gè)或多個(gè)具體維修項(xiàng)目,安排相關(guān)的維修工及工時(shí),生成維修派工單”,很明顯,一份委托 書包含了一個(gè)或多個(gè)維修項(xiàng)目,而每個(gè)維修項(xiàng)目可以由多個(gè)維修工來完成,每一個(gè)維修工又可以完成多個(gè) 維修項(xiàng)目,所以(2)空填寫:1,(3)、 填寫:*。問題2需

12、要補(bǔ)充車輛和客戶之間以及委托書和業(yè)務(wù)員之間的關(guān)系。由題目“一個(gè)客戶至少擁有一臺車” 可知,客戶和車輛之間是“擁有”關(guān)系,且是一對多的關(guān)系;在由題目中“業(yè)務(wù)員對車輛進(jìn)行檢查和故障 分析后,與客戶磋商,確定故障現(xiàn)象,生成維修委托書”可知,業(yè)務(wù)員與委托書之間是“委托”關(guān)系,且 一名業(yè)務(wù)員可以受理多份委托書,而一份委托書由一名業(yè)務(wù)員來生成。問題3本題又是補(bǔ)充邏輯結(jié)構(gòu)設(shè)計(jì)題,幾乎每年都考,這類題目只要仔細(xì)看需求分析結(jié)果或者仔細(xì)觀察 題目中已知的表,很容易就能做岀,關(guān)鍵是需要細(xì)心,不要漏掉什么屬性。根據(jù)客戶和車輛信息表可知, 客戶關(guān)系應(yīng)包括客戶編號、客戶名稱、客戶性質(zhì)、折扣率、聯(lián)系人等屬性,主鍵顯然為客戶

13、編號;而車輛 關(guān)系應(yīng)包括車牌號、客戶編號、車型、顏色、車輛類別等屬性,主鍵為車牌號。根據(jù)維修委托書表可知委 托書應(yīng)包括委托書編號、車牌號、客戶編號、業(yè)務(wù)員編號、維修類型等屬性,其主鍵為委托書編號。根據(jù) 維修派工單可知,派工單應(yīng)包括委托書編號、維修項(xiàng)目編號、維修工編號、工時(shí)等屬性,主鍵是委托書編 號、維修項(xiàng)目編號和維修員編號。根據(jù)實(shí)體聯(lián)系圖知,員工包括業(yè)務(wù)員和維修工,他們共有的屬性是員工 編號、員工姓名、工種、員工類型、級別等屬性,主鍵為員工編號。問題4參考問題3的分析。三、試題三(總題數(shù):1,分?jǐn)?shù):15.00)說明某圖書管理系統(tǒng)的主要功能如下。1.圖書管理系統(tǒng)的資源目錄中記錄著所有可供讀者借閱

14、的資源,每項(xiàng)資源都有一個(gè)唯一的索引號。登記每項(xiàng)資源的名稱、岀版時(shí)間和資源狀態(tài)(可借閱或已借岀)。2資源可以分為兩類:圖書和唱片。對于圖書,系統(tǒng)還需登記作者和頁數(shù);對于唱片,還需登記演唱者和 介質(zhì)類型(CD或者磁帶)。3讀者信息保存在圖書管理系統(tǒng)的讀者信息數(shù)據(jù)庫中,記錄的信息包括:讀者的識別碼和讀者姓名。系統(tǒng) 為每個(gè)讀者創(chuàng)建了一個(gè)借書記錄文件,用來保存讀者所借資源的相關(guān)信息?,F(xiàn)采用面向?qū)ο蠓椒ㄩ_發(fā)該圖書管理系統(tǒng)。識別類是面向?qū)ο蠓治龅牡谝徊?。比較常用的識別類的方法是 尋找問題描述中的名詞,再根據(jù)相關(guān)規(guī)則從這些名詞中刪除不可能成為類的名詞,最終得到構(gòu)成該系統(tǒng)的 類。表3-1給岀了說明中岀現(xiàn)的所有名

15、詞。通過對表3-1中的名詞進(jìn)行分析,最終得到了圖3-1所示的UML表類圖(類的說明見表3-21(分?jǐn)?shù):15.00 )(1).表3-2所給出的類并不完整,根據(jù)說明和表3-1 ,將圖3-1中的(a)(c)處補(bǔ)充完整。(分?jǐn)?shù):5.00 ) 正確答案:(a)資源目錄;(b)圖書;(c)唱片)解析:(2) .根據(jù)說明中的描述,給出圖3-1中的類Catalogitem 以及(b)、(c)處所對應(yīng)的類的關(guān)鍵屬性(使用表3-1中給出的詞匯),其中,Catalogitem有4個(gè)關(guān)鍵屬性;(b)、(c)處對應(yīng)的類各有2個(gè)關(guān)鍵屬性。(分 數(shù): 5.00 ) 正確答案:(Catalogitem 的屬性:索引號、名稱、

16、出版時(shí)間、資源狀態(tài)圖書的屬性:作者、頁數(shù)唱片的屬性:演唱者、介質(zhì)類型 )解析:(3) .識別關(guān)聯(lián)的多重度是面向?qū)ο蠼_^程中的一個(gè)重要步驟。根據(jù)說明中給岀的描述,完成圖3-1中的(1) (6)。*(分?jǐn)?shù):5.00 )正確答案:(1) 1,(2) 0.*,(3) 1,(4) 0.*,(5) 1,(6) 1 或者 0.1)解析:解析本題主要考查UML中的類圖設(shè)計(jì),題目3個(gè)問題都是對類圖的元素進(jìn)行補(bǔ)充。類圖的設(shè)計(jì)是 根據(jù)系統(tǒng)的功能需求而來的,所以解題的關(guān)鍵在于對“系統(tǒng)功能說明”的理解。下面我們將通過對“系統(tǒng) 功能說明”的分析,來解答試題:從系統(tǒng)功能說明中的“圖書管理系統(tǒng)的資源目錄中記錄著所有可供讀者

17、閱讀的資源”和“資源可分為兩類: 圖書和唱片”,可以得知1個(gè)資源目錄中對應(yīng)著多個(gè)可供讀者借閱的資源,這些資源分為圖書類與唱片類,所以(a)為資源目錄,(b)和(c)分別為圖書和唱片,同時(shí)(1)應(yīng)填:1, 應(yīng)填:0.*。(所有的可供讀者借 閱資源數(shù)有可能為0,即還未錄入任何資源的狀態(tài))。從“每項(xiàng)資源都有一個(gè)唯一的索引號。系統(tǒng)需登記每項(xiàng)資源的名稱、岀版時(shí)間和資源狀態(tài)”。可以得知,資源目錄中的每項(xiàng)資源,即類圖中的Catalogitern ,有索引號、名稱、出版時(shí)間和資源狀態(tài)這4個(gè)關(guān)鍵屬性。從“對于圖書,系統(tǒng)還需登記作者和頁數(shù);對于唱片,還需登記演唱者和介質(zhì)類型(CD或者磁帶)”,可以得知圖書有作者和

18、頁數(shù) 2個(gè)關(guān)鍵屬性,唱片有演唱者和介質(zhì)類型2個(gè)關(guān)鍵屬性。Borrower代表讀者,而Borroweritems為借書記錄文件,同時(shí)系統(tǒng)功能說明中有“系統(tǒng)為每個(gè)讀者創(chuàng)建了 一個(gè)借書記錄文件,用來保存讀者所借資源的相關(guān)信息”,所以它們之間的關(guān)系應(yīng)為1對1,即第(5)空和第(6)空均填1。四、試題四(總題數(shù):1,分?jǐn)?shù):15.00)說明一般的樹結(jié)構(gòu)常采用孩子-兄弟表示法表示,即用二叉鏈表作樹的存儲結(jié)構(gòu),鏈表中節(jié)點(diǎn)的兩個(gè)鏈域分別指向該節(jié)點(diǎn)的第一個(gè)孩予節(jié)點(diǎn)和下一個(gè)兄弟節(jié)點(diǎn)。例如,圖4-1(a)所示的樹的孩子-兄弟表示如圖4-1fb)所示。函數(shù)LevelTraverse()的功能是對給定樹進(jìn)行層序遍歷。例如

19、,對圖4-1所示的樹進(jìn)行層序遍歷時(shí),節(jié)點(diǎn)的訪問次序?yàn)椋篋 B A E F P C 。對樹進(jìn)行層序遍歷時(shí)使用了隊(duì)列結(jié)構(gòu),實(shí)現(xiàn)隊(duì)列基本操作的函數(shù)原型如下表所示。Bool、Status類型定義如下:typedef enum FALSE = 0, TRUE = 1 Bool;typedef enum OVERFLOW = -2, UNDERFLOW = -1, ERROR = 0, OK = 1 Status;樹的二叉鏈表節(jié)點(diǎn)定義如下:typedef struct Nodechar data ;struct Node *fimrstchiid, *nextbrother;Node, *TreeNode

20、;函數(shù)Status LevelTraverse(TreeNode root)/*層序遍歷樹,樹采用孩子-兄弟表示法,root是樹根節(jié)點(diǎn)的指針*/Queue tempQ;TreeNode ptr, brotherptr;if (!root)return ERROR;InitQueue( & tempQ);;brotherptr = root -> nextbrother;while (brotherptr) EnQueue(&tempQ, brotherptr);;/*end-while*/while( (3);printf( "%c'、t",

21、ptr- > data);if( (5) )continue;(6);brotherptr = ptr- > firstchild- > nextbrother;while(brotherptr) EnQueue(&tempQ, brotherptr);(7);/*end-while*/*end-while*/return OK;(分?jǐn)?shù):14.98 )填空項(xiàng)1:解析:填空項(xiàng)1:解析:填空項(xiàng)1:解析:填空項(xiàng)1:解析:填空項(xiàng)1:解析:填空項(xiàng)1:解析:填空項(xiàng)1:)/*LevelTraverse*/(正確答案:EnQueue(&tempQ,root)(正確答案:bro

22、therptr=brotherptr- > nextbrother )(正確答案:!lsEmpty(tempQ)(正確答案:DeQueue(&tempQ,&ptr)(正確答案:!ptr- > firstchild )(正確答案:EnQueue(&tempQ,ptr- >firstchild) )(正確答案:brotherptr=brotherptr- > nextbrother ) 解析:解析解答此題的關(guān)鍵在于理解用隊(duì)列層序遍歷樹的過程。算法的流程是這樣的:首先將樹根節(jié)點(diǎn) 入隊(duì),然后將其所有兄弟節(jié)點(diǎn)入隊(duì) (當(dāng)然,由于是根節(jié)點(diǎn),故無兄弟節(jié)點(diǎn) );完

23、成這一操作以后,便開始出 隊(duì)、打??;在打印完了之后,需要進(jìn)行一個(gè)判斷,判斷當(dāng)前節(jié)點(diǎn)有無孩子節(jié)點(diǎn),若有孩子節(jié)點(diǎn),則將孩子 節(jié)點(diǎn)入隊(duì),同時(shí)將孩子節(jié)點(diǎn)的所有兄弟節(jié)點(diǎn)入隊(duì);完了以后繼續(xù)進(jìn)行出隊(duì)操作,出隊(duì)后再次判斷當(dāng)前節(jié)點(diǎn) 是否有孩子節(jié)點(diǎn),并重復(fù)上述過程,直至所有節(jié)點(diǎn)輸岀。接下來以本題為例來說明此過程。首先將樹根節(jié)點(diǎn)D入隊(duì),并同時(shí)檢查是否有兄弟節(jié)點(diǎn),對于兄弟節(jié)點(diǎn)則一并入隊(duì)。這里的 D沒有兄弟節(jié)點(diǎn),所以隊(duì)列此時(shí)應(yīng)是:Do接下來執(zhí)行出隊(duì)操作。D出隊(duì),出隊(duì)以后檢查 D是否有子節(jié)點(diǎn),經(jīng)檢查,D有子節(jié)點(diǎn)B,所以將B入隊(duì),同時(shí)將B的兄弟節(jié)點(diǎn)A和E按順序入隊(duì)。得到隊(duì)列: B A、Eo接下來再執(zhí)行出隊(duì)操作。B出隊(duì),同時(shí)

24、檢查B是否有子節(jié)點(diǎn),B無子節(jié)點(diǎn),所以繼續(xù)執(zhí)行出隊(duì)操作。 A出隊(duì),同時(shí)檢查A是否有子節(jié)點(diǎn),DA有子節(jié)點(diǎn)F,所以將F入隊(duì),同時(shí)將F的兄弟節(jié)點(diǎn)P入隊(duì)。得到隊(duì)列:E、F、Po接下來再次執(zhí)行岀隊(duì)操作。 接下來再次執(zhí)行岀隊(duì)操作。 個(gè)過程結(jié)束。E出隊(duì),E有子節(jié)點(diǎn)C,所以C出隊(duì)。得:F、P、CoF出隊(duì),F(xiàn)無子節(jié)點(diǎn),繼續(xù)出隊(duì)操作,P出隊(duì),P仍無子節(jié)點(diǎn),最后 C出隊(duì),整通過對算法的詳細(xì)分析,我們可以輕松得到答案。(1)應(yīng)是對根節(jié)點(diǎn)root執(zhí)行入隊(duì)操作,即。EnQueue(&tempQ,root)。(2)在一個(gè)循環(huán)當(dāng)中,循環(huán)變量是brotherptr ,此變量無語句對其進(jìn)行更新,所以(2)必定是更新brot

25、herptr 。結(jié)合前面的算法分析可知 (2)應(yīng)填:brotherpu=brotherptr- > nextbrother 。 、加上后面的語句“ printf("%c t",ptr- > data); ”是控制數(shù)據(jù)的輸出,這些數(shù)據(jù)應(yīng)是從隊(duì)列中 得到,所以此處必有出隊(duì)操作,同時(shí)在出隊(duì)之前應(yīng)判斷隊(duì)列是否為空,所以(3)、 填:!IsEmpty(tempQ)和DeQueue(&tempQ,&ptr)。(5)實(shí)際上是問"在什么情況下,要持續(xù)進(jìn)行出隊(duì)操作?”,前面的算法分析中已指出:若出隊(duì)節(jié)點(diǎn)無子節(jié)點(diǎn),則繼續(xù)進(jìn)行出隊(duì)操作,所以(5)填:!ptr

26、- >firstchild 。(6)和(7)所在的語句段的功能是將剛出隊(duì)節(jié)點(diǎn)的子節(jié)點(diǎn)及其兄弟節(jié)點(diǎn)入隊(duì),所以(6)填:EnQueue(&tempQ,ptr- >firstchild) 。 (7)和(2)相同,填:brotherptr- > brotherptr- > nextbrother 。五、試題五(總題數(shù):1,分?jǐn)?shù):15.00)說明某游戲公司現(xiàn)欲開發(fā)一款面向兒童的模擬游戲,該游戲主要模擬現(xiàn)實(shí)世界中各種鴨子的發(fā)聲特征、飛行特 征和外觀特征。游戲需要模擬的鴨子種類及其特征如表下表所示。為支持將來能夠模擬更多種類鴨子的特征,采用策略設(shè)計(jì)模式(strategy)設(shè)計(jì)

27、的類圖如圖5-1所示。其中,Duck 為抽象類,描述了抽象的鴨子,而類RubberDuck、MallardDuck、CottonDuck 和 RedHeadDuck分別描述具體的鴨子種類,方法fly() 、quack()和display()分別表示不同種類的鴨子都具有飛行特征、發(fā)聲特征和外觀特征;類 FlyBehavior與QuackBehavior為抽象類,分別用于表示抽象的飛行行為與發(fā)聲 行為;類FlyNoWay與FlyWithWings分別描述不能飛行的行為和用翅膀飛行的行為;類Quack、Squeak與QuackNoWa分別描述發(fā)出“嘎嘎”聲的行為、發(fā)出橡皮與空氣摩擦聲的行為與不發(fā)聲的

28、行為。請?zhí)钛a(bǔ)以下 代碼中的空缺。C+代碼# include < iostream >using namespace (1);class FlyBehaviorpublic : fly()=0;class QuackBehavior public: (3) quack()=0;Class FlyWithWings :public F1yBehaviorclass FlyNoWay :public FlyBehavior public: void fly()cout<< "不能飛行!" >>endl;>class Quack :publ

29、ic QuackBehaviorpublic: void quack()cout << "發(fā)出 '嘎嘎'聲!" << endl;class Squeak :public QuackBehavior public: void quack()cout << "發(fā)出空氣與橡皮摩擦聲!" << endl;class QuackNOWay :public QuackBehaVior public: void quack()cout << "不能發(fā)聲!" <<

30、 endl;>C1ass Duckprotected:FlyBehavior * (4);QuackBehaVior * (5);public:VOid fly() (6)_VOid quack();virtual void display()=0;>class RubberDuck: public Duckpublic:RubberDuck() flyBehavior=new (8);quackBehavior=new (9);RubberDuck()if (!flyBehavior) delete flyBehaVior;i f(!quackBehavior)delete qu

31、ackBehaviorVoid display() /*此處省略顯示橡皮鴨的代碼*/其他代碼省略(分?jǐn)?shù):15.03 )填空項(xiàng)1:(正確答案:std )解析:填空項(xiàng)1:(正確答案:Virtual void )解析:填空項(xiàng)1:(正確答案:Virtual void )解析:填空項(xiàng)1:(正確答案:flyBehavior )解析:填空項(xiàng)1:(正確答案:quackBehavior )解析:填空項(xiàng)1:(正確答案:flyBehavior- > fly()解析:填空項(xiàng) 1: (正確答案: quackBehaviot- > quack()解析:填空項(xiàng)1: (正確答案:FlyNoWay()解析:填空項(xiàng)1

32、: (正確答案:Squeak()解析:解析本題考查面向?qū)ο蟮某绦蛟O(shè)計(jì)的抽象類和多態(tài)。程序解釋如下:(1)using namespacestd ; /* 所謂namespace,是指標(biāo)識符的各種可見范圍。C+標(biāo)準(zhǔn)程序庫中的所有標(biāo)識符都被定義于一個(gè)名為std的namespace中。*/由題中信息:類FlyBehavior與QuackBehavior為抽象類,分別用于表示抽象的飛行行為與發(fā)聲行為, 而這兩種行為對應(yīng)的不止是一種方式,為了表示多種行為方式(即多態(tài)),需要定義虛函數(shù),用以給子類進(jìn)行重載。再由予類中的函數(shù)voidfly() 及void quack()可知,父類中的對應(yīng)函數(shù)返回值也應(yīng)為voi

33、d。所以和的填空如下:class FlyBehaviorpublic: (2) virtual void fly( )=0;;class Qutack: Behaviorpublic: (3) virtual void quack( )=0;(3)Duck 類的定義, 由子類 RubberDuck 類中出現(xiàn)的“ flvBehavior=newlyNoWay();quackBehavior=new Squeak(); ”可知這兩個(gè)指針類型對象為nyBehavior。和quackBehavior。所以和(5)填空如下:Class Duck protected:FlyBehavior * (4) f

34、iybehavior;QuackBehavior * (5) quackBehavior;由“ FlyBehavior * flyBehavior;QuackBehavior * quackBehavior;” 及函數(shù)名可知,該函數(shù)體應(yīng)調(diào)用FlyBehavior 類中的ny函數(shù)和QuackBehavior類中的quack函數(shù)。所以(6)和(7)填空如下: public:void fly() (6) fiybehavior-> fiy(); void quack() (7) quackBehavior-> quack(); ;virtual void display()=0;由題中所

35、給信息可知 RubberDuck是“發(fā)出空氣與橡皮摩擦聲”并且“不能飛行”的鴨子種類,因此構(gòu)造函數(shù)中創(chuàng)建的對象 flyBehavior 和quackBehavior對應(yīng)的類型分別為 FlyNoWay, Squeak,所以第(8)和(9)空的填空如下:Class RubberDuck: public Duck public:RubberDuck()flyBehavior=n ew (8) FiyNoWay();quackBehavior=new (9) Squeak();六、試題六(總題數(shù):1,分?jǐn)?shù):14.00)說明某游戲公司現(xiàn)欲開發(fā)一款面向兒童的模擬游戲,該游戲主要模擬現(xiàn)實(shí)世界中各種鴨子的發(fā)聲

36、特征、飛行特 征和外觀特征。游戲需要模擬的鴨子種類及其特征如下表所示。為支持將來能夠模擬更多種類鴨子的特征,采用策略設(shè)計(jì)模式(Strategy)設(shè)計(jì)的類圖如圖6-1所示。其中,Duck 為抽象類,描述了抽象的鴨子,而類RubberDuck、MallardDuck、CottonDuck 和 RedHeadDuck分別描述具體的鴨子種類,方法fly() 、quack()和display()分別表示不同種類的鴨子都具有飛行特征、發(fā)聲特征和外觀特征;接口FlyBehavior與QuackBehavior分別用于表示抽象的飛行行為與發(fā)聲行為;類FlyNoWay與FlyWithWings分別描述不能飛行的行為和用翅膀飛行的行為;類Quack、Squeak與QuackNoWay分別描述發(fā)岀“嘎嘎”聲的行為、發(fā)岀橡皮與空氣摩擦聲的行為與不發(fā)聲的行為。請?zhí)钛a(bǔ)以下代碼中的空 缺。Java代碼 FlyBehaVior public void fly(););(2) QuackBehavior public void quack();Class FlyWithWings implements FlyBehavior使用翅膀飛行 r);不能飛行!");發(fā)岀'嘎嘎聲!");發(fā)岀空氣與橡皮摩擦聲!");Class QuackNoWay impleme

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論