中級(jí)軟件設(shè)計(jì)師下午試題-117_第1頁(yè)
中級(jí)軟件設(shè)計(jì)師下午試題-117_第2頁(yè)
中級(jí)軟件設(shè)計(jì)師下午試題-117_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余4頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、統(tǒng)將根據(jù)房主的請(qǐng)求,修改房屋信息文件。數(shù)據(jù)流圖1-1和圖1-2分別給出了該系統(tǒng)的頂層數(shù)據(jù)流圖和0層數(shù)據(jù)流圖。(分?jǐn)?shù):15.00)(1).使用說(shuō)明中給出的詞匯,將數(shù)據(jù)流圖1-1中(4)處的數(shù)據(jù)流補(bǔ)充完整。(分?jǐn)?shù):5.00)正確答案:(1)費(fèi)用單(2)待租賃房屋列表(3)看房請(qǐng)求(4)變更房屋狀態(tài)請(qǐng)求)解析:(2).使用說(shuō)明中給出的詞匯,將數(shù)據(jù)流圖圖1-2中的(5)(8)補(bǔ)充完整。(分?jǐn)?shù):5.00)正確答案:(5)房主信息文件(6)租賃者信息文件(7)房屋信息文件(8)看房記錄文件)解析:(3).數(shù)據(jù)流程圖圖1-2中缺失了三條數(shù)據(jù)流,請(qǐng)指出這三條數(shù)據(jù)流的起點(diǎn)、終點(diǎn)和數(shù)據(jù)流名稱(chēng)。*(分?jǐn)?shù):5.00)

4、正確答案:(1)起點(diǎn):房主終點(diǎn):變更房屋狀態(tài)數(shù)據(jù)流名稱(chēng):變更房屋狀態(tài)請(qǐng)求(2)起點(diǎn):租賃者終點(diǎn):登記租賃者信息數(shù)據(jù)流名稱(chēng):租賃者信息(3)起點(diǎn):租賃者終點(diǎn):安排租賃者看房數(shù)據(jù)流名稱(chēng):看房請(qǐng)求)解析:解析本題考查的是分層數(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)有與之對(duì)應(yīng)的數(shù)據(jù)流,但“費(fèi)用單”數(shù)據(jù)流在頂層圖中找不到,所以(1)應(yīng)是“費(fèi)用單”數(shù)據(jù)流。通過(guò)比較頂層圖和0層圖中與外部實(shí)體“租賃者”相關(guān)的數(shù)據(jù)流,可以發(fā)現(xiàn):出現(xiàn)在0層圖上的數(shù)據(jù)流

5、“待租賃房屋列表”是頂層圖上沒(méi)有的,且與(2)處的數(shù)據(jù)流方向一致。由此可以判定,(2)處的數(shù)據(jù)流就是“待租賃房屋列表”。而頂層圖中的數(shù)據(jù)流“租賃者信息”卻是0層圖上沒(méi)有的。這樣就找到了0層圖上缺失的第2條數(shù)據(jù)流:租賃者信息,它的起點(diǎn)是“租賃者”,終點(diǎn)是加工“登記租賃者信息”。根據(jù)系統(tǒng)功能描述與數(shù)據(jù)流圖的一致性原則有:由于(4)處缺失的數(shù)據(jù)流是一條輸入數(shù)據(jù)流,從說(shuō)明中可以看出,只有功能6“當(dāng)租賃者與房主達(dá)成租房或退房協(xié)議后,房主向系統(tǒng)提交變更房屋狀態(tài)的請(qǐng)求”所描述的數(shù)據(jù)流沒(méi)有在“房主”與系統(tǒng)之間體現(xiàn)出來(lái)。因此可以確定,(4)處缺失的數(shù)據(jù)流就是“變更房屋狀態(tài)請(qǐng)求”。相應(yīng)的,可以確定,在0層圖中缺失

6、的其中一條數(shù)據(jù)流也是它,其起點(diǎn)是“房主”,終點(diǎn)是“變更房屋狀態(tài)”這個(gè)加工。由于說(shuō)明中有“租賃者”相關(guān)的功能“一旦租賃者從中找到合適的房屋,就可以提出看房請(qǐng)求”,這一功能未在圖中體現(xiàn)出來(lái)。這樣就能確定(3)處的數(shù)據(jù)流應(yīng)該是“看房請(qǐng)求”。而0層圖中也沒(méi)有出現(xiàn)這條數(shù)據(jù)流。所以,0層圖中缺失的第3條數(shù)據(jù)流就是“看房請(qǐng)求”,它的起點(diǎn)是“租賃者”,終點(diǎn)是加工“安排租賃者看房”。由說(shuō)明的描述可以得知,本系統(tǒng)中的數(shù)據(jù)存儲(chǔ)有:房主信息文件、房屋信息文件、租賃者信息文件、看房記錄文件。下面就可以根據(jù)相應(yīng)的加工對(duì)號(hào)入座了。顯然,(5)處的是房主信息文件;(6)處的是租賃者信息文件;(7)處的是房屋信息文件;(8)處

7、的是看房記錄文件。二、試題二(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明某汽車(chē)維修站擬開(kāi)發(fā)一套小型汽車(chē)維修管理系統(tǒng),對(duì)車(chē)輛的維修情況進(jìn)行管理。1.對(duì)于新客戶(hù)及車(chē)輛,汽車(chē)維修管理系統(tǒng)首先登記客戶(hù)信息,包括:客戶(hù)編號(hào)、客戶(hù)名稱(chēng)、客戶(hù)性質(zhì)(個(gè)人、單位)、折扣率、聯(lián)系人、聯(lián)系電話(huà)等信息;還要記錄客戶(hù)的車(chē)輛信息,包括:車(chē)牌號(hào)、車(chē)型、顏色、車(chē)輛類(lèi)別等信息。一個(gè)客戶(hù)至少有一臺(tái)車(chē)。客戶(hù)及車(chē)輛信息如表2-1所示。2. 記錄維修車(chē)輛的故障信息。包括:維修類(lèi)型(普通、加急)、作業(yè)分類(lèi)(大、中、小修)、結(jié)算方式(自付、三包、索賠)等信息。維修廠(chǎng)的員工分為:維修員和業(yè)務(wù)員。車(chē)輛維修首先委托給業(yè)務(wù)員。業(yè)務(wù)員對(duì)車(chē)輛進(jìn)行檢查和故障分

8、析后,與客戶(hù)磋商,確定故障現(xiàn)象,生成維修委托書(shū)。如表2-2所示。維修車(chē)間根據(jù)維修委托書(shū)和車(chē)輛的故障現(xiàn)象,在已有的維修項(xiàng)目中選擇并確定一個(gè)或多個(gè)具體維修項(xiàng)目,安排相關(guān)的維修工及工時(shí),生成維修派工單。維修派工單如表2-3所示??蛻?hù)車(chē)輛在車(chē)間修理完畢后,根據(jù)維修項(xiàng)目單價(jià)和維修派工單中的工時(shí)計(jì)算車(chē)輛此次維修的總費(fèi)用,記錄在委托書(shū)中。根據(jù)需求階段收集的信息,設(shè)計(jì)的實(shí)體聯(lián)系圖(見(jiàn)圖2-1)和關(guān)系模式(不完整)如下所示。圖2-1中業(yè)務(wù)員和維修工是員工的子實(shí)體。邏輯結(jié)構(gòu)設(shè)計(jì)客戶(hù)(5)_,折扣率,聯(lián)系人,聯(lián)系電話(huà))車(chē)輛(車(chē)牌號(hào),客戶(hù)編號(hào),車(chē)型,顏色,車(chē)輛類(lèi)別)委托書(shū)(6),維修類(lèi)型,作業(yè)分類(lèi),結(jié)算方式,進(jìn)廠(chǎng)時(shí)間

9、,預(yù)計(jì)完工時(shí)間,登記日期,故障描述,總費(fèi)用)維修項(xiàng)目(維修項(xiàng)目編號(hào),維修項(xiàng)目,單價(jià))派工單(7)_,工時(shí))員工(8)_,工種,員工類(lèi)型,級(jí)別)(分?jǐn)?shù):15.00)(1).根據(jù)問(wèn)題描述,填寫(xiě)圖2.1中(1)(4)處聯(lián)系的類(lèi)型。聯(lián)系類(lèi)型分為一對(duì)一、一對(duì)多和多對(duì)多三種,分別使用1:1、1:n或1:*、m:n或*:*表示。(分?jǐn)?shù):3.75)正確答案:(1)n或m或*1(3)n或m或*n或m或*)解析:.1中的聯(lián)系并指明其聯(lián)系類(lèi)型。聯(lián)系名可為:聯(lián)系1,聯(lián)系2,。(分?jǐn)?shù):3.75)正確答案:(完整的實(shí)體聯(lián)系圖如下圖所示。解析:(3).根據(jù)圖2-1和說(shuō)明,將邏輯結(jié)構(gòu)設(shè)計(jì)階段生成的關(guān)系模式中的空(5)(8)補(bǔ)

10、充完整。(分?jǐn)?shù):3.75)正確答案:(5)客戶(hù)編號(hào),客戶(hù)名稱(chēng),客戶(hù)性質(zhì)(6)委托書(shū)編號(hào),客戶(hù)編號(hào),車(chē)牌號(hào),業(yè)務(wù)員編號(hào)或委托書(shū)編號(hào),車(chē)牌號(hào),業(yè)務(wù)員編號(hào)(7)委托書(shū)編號(hào),維修工編號(hào),維修項(xiàng)目編號(hào)(8)員工編號(hào),員工姓名)解析:(4).根據(jù)問(wèn)題描述,寫(xiě)出客戶(hù)、委托書(shū)和派工單這三個(gè)關(guān)系的主鍵。(分?jǐn)?shù):3.75)正確答案:(客戶(hù):客戶(hù)編號(hào)委托書(shū):委托書(shū)編號(hào)派工單:委托書(shū)編號(hào),維修項(xiàng)目編號(hào),維修工編號(hào))解析:解析本題考查數(shù)據(jù)庫(kù)設(shè)計(jì),設(shè)計(jì)考點(diǎn)有:數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)。問(wèn)題1由維修委托書(shū)的故障描述,維修類(lèi)型、作業(yè)分類(lèi),可知,一臺(tái)車(chē)可能有多個(gè)故障,對(duì)應(yīng)多個(gè)維修委托書(shū),所以(1)空填寫(xiě):*;題目中“

11、維修車(chē)間根據(jù)維修委托書(shū)和車(chē)輛的故障現(xiàn)象,在已有的維修項(xiàng)目中選擇并確定一個(gè)或多個(gè)具體維修項(xiàng)目,安排相關(guān)的維修工及工時(shí),生成維修派工單”,很明顯,一份委托書(shū)包含了一個(gè)或多個(gè)維修項(xiàng)目,而每個(gè)維修項(xiàng)目可以由多個(gè)維修工來(lái)完成,每一個(gè)維修工又可以完成多個(gè)維修項(xiàng)目,所以(2)空填寫(xiě):1,(3)、(4)填寫(xiě):*。問(wèn)題2需要補(bǔ)充車(chē)輛和客戶(hù)之間以及委托書(shū)和業(yè)務(wù)員之間的關(guān)系。由題目“一個(gè)客戶(hù)至少擁有一臺(tái)車(chē)”可知,客戶(hù)和車(chē)輛之間是“擁有”關(guān)系,且是一對(duì)多的關(guān)系;在由題目中“業(yè)務(wù)員對(duì)車(chē)輛進(jìn)行檢查和故障分析后,與客戶(hù)磋商,確定故障現(xiàn)象,生成維修委托書(shū)”可知,業(yè)務(wù)員與委托書(shū)之間是“委托”關(guān)系,且一名業(yè)務(wù)員可以受理多份委托書(shū)

12、,而一份委托書(shū)由一名業(yè)務(wù)員來(lái)生成。問(wèn)題3本題又是補(bǔ)充邏輯結(jié)構(gòu)設(shè)計(jì)題,幾乎每年都考,這類(lèi)題目只要仔細(xì)看需求分析結(jié)果或者仔細(xì)觀(guān)察題目中已知的表,很容易就能做出,關(guān)鍵是需要細(xì)心,不要漏掉什么屬性。根據(jù)客戶(hù)和車(chē)輛信息表可知,客戶(hù)關(guān)系應(yīng)包括客戶(hù)編號(hào)、客戶(hù)名稱(chēng)、客戶(hù)性質(zhì)、折扣率、聯(lián)系人等屬性,主鍵顯然為客戶(hù)編號(hào);而車(chē)輛關(guān)系應(yīng)包括車(chē)牌號(hào)、客戶(hù)編號(hào)、車(chē)型、顏色、車(chē)輛類(lèi)別等屬性,主鍵為車(chē)牌號(hào)。根據(jù)維修委托書(shū)表可知委托書(shū)應(yīng)包括委托書(shū)編號(hào)、車(chē)牌號(hào)、客戶(hù)編號(hào)、業(yè)務(wù)員編號(hào)、維修類(lèi)型等屬性,其主鍵為委托書(shū)編號(hào)。根據(jù)維修派工單可知,派工單應(yīng)包括委托書(shū)編號(hào)、維修項(xiàng)目編號(hào)、維修工編號(hào)、工時(shí)等屬性,主鍵是委托書(shū)編號(hào)、維修項(xiàng)目編號(hào)

13、和維修員編號(hào)。根據(jù)實(shí)體聯(lián)系圖知,員工包括業(yè)務(wù)員和維修工,他們共有的屬性是員工編號(hào)、員工姓名、工種、員工類(lèi)型、級(jí)別等屬性,主鍵為員工編號(hào)。問(wèn)題4參考問(wèn)題3的分析。三、試題三(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明某圖書(shū)管理系統(tǒng)的主要功能如下。圖書(shū)管理系統(tǒng)的資源目錄中記錄著所有可供讀者借閱的資源,每項(xiàng)資源都有一個(gè)唯一的索引號(hào)。系統(tǒng)需登記每項(xiàng)資源的名稱(chēng)、出版時(shí)間和資源狀態(tài)(可借閱或已借出)。1. 資源可以分為兩類(lèi):圖書(shū)和唱片。對(duì)于圖書(shū),系統(tǒng)還需登記作者和頁(yè)數(shù);對(duì)于唱片,還需登記演唱者和介質(zhì)類(lèi)型(CD或者磁帶)。2. 讀者信息保存在圖書(shū)管理系統(tǒng)的讀者信息數(shù)據(jù)庫(kù)中,記錄的信息包括:讀者的識(shí)別碼和讀者姓名。系

14、統(tǒng)為每個(gè)讀者創(chuàng)建了一個(gè)借書(shū)記錄文件,用來(lái)保存讀者所借資源的相關(guān)信息?,F(xiàn)采用面向?qū)ο蠓椒ㄩ_(kāi)發(fā)該圖書(shū)管理系統(tǒng)。識(shí)別類(lèi)是面向?qū)ο蠓治龅牡谝徊?。比較常用的識(shí)別類(lèi)的方法是尋找問(wèn)題描述中的名詞,再根據(jù)相關(guān)規(guī)則從這些名詞中刪除不可能成為類(lèi)的名詞,最終得到構(gòu)成該系統(tǒng)的類(lèi)。表3-1給出了說(shuō)明中出現(xiàn)的所有名詞。通過(guò)對(duì)表3-1中的名詞進(jìn)行分析,最終得到了圖3-1所示的UML類(lèi)圖(類(lèi)的說(shuō)明見(jiàn)表3-21(分?jǐn)?shù):15.00).表3-2所給出的類(lèi)并不完整,根據(jù)說(shuō)明和表3-1,將圖3-1中的(a)(c)處補(bǔ)充完整。(分?jǐn)?shù):5.00)正確答案:(a)資源目錄;(b)圖書(shū);(c)唱片)解析:.根據(jù)說(shuō)明中的描述,給出圖3-1中的類(lèi)

15、Catalogitem以及(b)、(c)處所對(duì)應(yīng)的類(lèi)的關(guān)鍵屬性(使用表3-1中給出的詞匯),其中,Catalogitem有4個(gè)關(guān)鍵屬性;(b)、(c)處對(duì)應(yīng)的類(lèi)各有2個(gè)關(guān)鍵屬性。(分?jǐn)?shù):5.00)正確答案:(Catalogitem的屬性:索引號(hào)、名稱(chēng)、出版時(shí)間、資源狀態(tài)圖書(shū)的屬性:作者、頁(yè)數(shù)唱片的屬性:演唱者、介質(zhì)類(lèi)型)解析:(1) .識(shí)別關(guān)聯(lián)的多重度是面向?qū)ο蠼_^(guò)程中的一個(gè)重要步驟。根據(jù)說(shuō)明中給出的描述,完成圖3-1中的(6)。*(分?jǐn)?shù):5.00)正確答案:(1)1,(2)0.*,(3)1,(4)0.*,(5)1,(6)1或者0.1)解析:解析本題主要考查UML中的類(lèi)圖設(shè)計(jì),題目3個(gè)問(wèn)題都

16、是對(duì)類(lèi)圖的元素進(jìn)行補(bǔ)充。類(lèi)圖的設(shè)計(jì)是根據(jù)系統(tǒng)的功能需求而來(lái)的,所以解題的關(guān)鍵在于對(duì)“系統(tǒng)功能說(shuō)明”的理解。下面我們將通過(guò)對(duì)“系統(tǒng)功能說(shuō)明”的分析,來(lái)解答試題:從系統(tǒng)功能說(shuō)明中的“圖書(shū)管理系統(tǒng)的資源目錄中記錄著所有可供讀者閱讀的資源”和“資源可分為兩類(lèi):圖書(shū)和唱片”,可以得知1個(gè)資源目錄中對(duì)應(yīng)著多個(gè)可供讀者借閱的資源,這些資源分為圖書(shū)類(lèi)與唱片類(lèi),所以(a)為資源目錄,(b)和(c)分別為圖書(shū)和唱片,同時(shí)(1)應(yīng)填:1,(2)應(yīng)填:0.*o(所有的可供讀者借閱資源數(shù)有可能為0,即還未錄入任何資源的狀態(tài))。從“每項(xiàng)資源都有一個(gè)唯一的索引號(hào)。系統(tǒng)需登記每項(xiàng)資源的名稱(chēng)、出版時(shí)間和資源狀態(tài)”。可以得知,資

17、源目錄中的每項(xiàng)資源,即類(lèi)圖中的Catalogitern,有索引號(hào)、名稱(chēng)、出版時(shí)間和資源狀態(tài)這4個(gè)關(guān)鍵屬性。從“對(duì)于圖書(shū),系統(tǒng)還需登記作者和頁(yè)數(shù);對(duì)于唱片,還需登記演唱者和介質(zhì)類(lèi)型(CD或者磁帶)”,可以得知圖書(shū)有作者和頁(yè)數(shù)2個(gè)關(guān)鍵屬性,唱片有演唱者和介質(zhì)類(lèi)型2個(gè)關(guān)鍵屬性。Borrower代表讀者,而B(niǎo)orroweritems為借書(shū)記錄文件,同時(shí)系統(tǒng)功能說(shuō)明中有"系統(tǒng)為每個(gè)讀者創(chuàng)建了一個(gè)借書(shū)記錄文件,用來(lái)保存讀者所借資源的相關(guān)信息”,所以它們之間的關(guān)系應(yīng)為1對(duì)1,即第(5)空和第(6)空均填1。四、試題四(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明一般的樹(shù)結(jié)構(gòu)常采用孩子-兄弟表示法表示,即用二

18、叉鏈表作樹(shù)的存儲(chǔ)結(jié)構(gòu),鏈表中節(jié)點(diǎn)的兩個(gè)鏈域分別指向該節(jié)點(diǎn)的第一個(gè)孩予節(jié)點(diǎn)和下一個(gè)兄弟節(jié)點(diǎn)。例如,圖4-1(a)所示的樹(shù)的孩子-兄弟表示如圖4-1fb)所函數(shù)LevelTraverse()的功能是對(duì)給定樹(shù)進(jìn)行層序遍歷。例如,對(duì)圖4-1所示的樹(shù)進(jìn)行層序遍歷時(shí),節(jié)點(diǎn)的訪(fǎng)問(wèn)次序?yàn)椋篋BAEFPC。對(duì)樹(shù)進(jìn)行層序遍歷時(shí)使用了隊(duì)列結(jié)構(gòu),實(shí)現(xiàn)隊(duì)列基本操作的函數(shù)原型如下表所示。Bool、Status類(lèi)型定義如下:typedefenumFALSE=0,TRUE=1Bool;typedefenumOVERFLOW=-2,UNDERFLOW=-1,ERROR=0,OK=1Status;樹(shù)的二叉鏈表節(jié)點(diǎn)定義如下:typ

19、edefstructNodechardata;structNode*fimrstchiid,*nextbrother;Node,*TreeNode;函數(shù)StatusLevelTraverse(TreeNoderoot)/*層序遍歷樹(shù),樹(shù)采用孩子-兄弟表示法,root是樹(shù)根節(jié)點(diǎn)的指針*/QueuetempQ;TreeNodeptr,brotherptr;if(!root)returnERROR;InitQueue(&tempQ);;brotherptr=root->nextbrother;while(brotherptr)EnQueue(&tempQ,brotherptr)

20、;/*end-while*/while(3);printf("%ct",ptr->data);if(5)continue;(6);brotherptr=ptr->firstchild->nextbrother;while(brotherptr)EnQueue(&tempQ,brotherptr);;/*end-while*/*end-while*/returnOK;)/*LevelTraverse*/(分?jǐn)?shù):14.98)填空項(xiàng)1:(正確答案:EnQueue(&tempQ,root)填空項(xiàng)1:(正確答案:brotherptr=brotherp

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

22、節(jié)點(diǎn));完成這一操作以后,便開(kāi)始出隊(duì)、打?。辉诖蛴⊥炅酥?,需要進(jìn)行一個(gè)判斷,判斷當(dāng)前節(jié)點(diǎn)有無(wú)孩子節(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ù)上述過(guò)程,直至所有節(jié)點(diǎn)輸出。接下來(lái)以本題為例來(lái)說(shuō)明此過(guò)程。首先將樹(shù)根節(jié)點(diǎn)D入隊(duì),并同時(shí)檢查是否有兄弟節(jié)點(diǎn),對(duì)于兄弟節(jié)點(diǎn)則一并入隊(duì)。這里的D沒(méi)有兄弟節(jié)點(diǎn),所以隊(duì)列此時(shí)應(yīng)是:D。接下來(lái)執(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ì)列:BA、E。接下來(lái)再執(zhí)行出隊(duì)操作。B出隊(duì),同時(shí)檢查

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

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

25、gt;firstchild。(6)和所在的語(yǔ)句段的功能是將剛出隊(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)說(shuō)明某游戲公司現(xiàn)欲開(kāi)發(fā)一款面向兒童的模擬游戲,該游戲主要模擬現(xiàn)實(shí)世界中各種鴨子的發(fā)聲特征、飛行特征和外觀(guān)特征。游戲需要模擬的鴨子種類(lèi)及其特征如表下表所示。為支持將來(lái)能夠模擬更多種類(lèi)鴨子的特征,采用策略設(shè)計(jì)模式(strategy)設(shè)計(jì)的類(lèi)圖如圖5-1所示。其中,Du

26、ck為抽象類(lèi),描述了抽象的鴨子,而類(lèi)RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分別描述具體的鴨子種類(lèi),方法fly()、quack()和display()分別表示不同種類(lèi)的鴨子都具有飛行特征、發(fā)聲特征和外觀(guān)特征;類(lèi)FlyBehavior與QuackBehavior為抽象類(lèi),分別用于表示抽象的飛行行為與發(fā)聲行為;類(lèi)FlyNoWay與FlyWithWings分別描述不能飛行的行為和用翅膀飛行的行為;類(lèi)Quack、Squeak與QuackNoWay別描述發(fā)出“嘎嘎”聲的行為、發(fā)出橡皮與空氣摩擦聲的行為與不發(fā)聲的行為。請(qǐng)?zhí)钛a(bǔ)以下代碼中的空缺。C+代碼#in

27、clude<iostream>usingnamespace(1);classFlyBehaviorpublic:(2)fly()=01classQuackBehaviorpublic:(3)quack()=0;ClassFlyWithWings:publicF1yBehaviorpublic:voidfly()cout<<"使用翅膀飛行!"<<endl;1classFlyNoWay:publicFlyBehaviorpublic:voidfly()cout<<"不能飛行!">>endl;clas

28、sQuack:publicQuackBehaviorpublic:voidquack()cout<<"發(fā)出'嘎嘎'聲!"<<endl;classSqueak:publicQuackBehaviorpublic:voidquack()cout<<"發(fā)出空氣與橡皮摩擦聲!"vvendl;classQuackNOWay:publicQuackBehaViorpublic:voidquack()cout<<"不能發(fā)聲!"<<endl;C1assDuckprotecte

29、d:FlyBehavior*(4);QuackBehaVior*(5);public:VOidfly()(6)VOidquack();virtualvoiddisplay()=0;classRubberDuck:publicDuckpublic:RubberDuck()flyBehavior=new(8);quackBehavior=new(9);RubberDuck()if(!flyBehavior)deleteflyBehaVior;if(!quackBehavior)deletequackBehavior;Voiddisplay()/*此處省略顯示橡皮鴨的代碼*/其他代碼省略(分?jǐn)?shù):15

30、.03)填空項(xiàng)1:(正確答案:std)解析:填空項(xiàng)1:(正確答案:Virtualvoid)解析:填空項(xiàng)1:(正確答案:Virtualvoid)解析:填空項(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:(正確答案:Squeak()解析:解析本題考查面向?qū)ο蟮某绦蛟O(shè)計(jì)的抽象類(lèi)和多態(tài)。程序解釋如下:usingnamespace(1)std;/

31、*所謂namespace,是指標(biāo)識(shí)符的各種可見(jiàn)范圍。C+成準(zhǔn)程序庫(kù)中的所有標(biāo)識(shí)符都被定義于一個(gè)名為std的namespace中。*/由題中信息:類(lèi)FlyBehavior與QuackBehavior為抽象類(lèi),分別用于表示抽象的飛行行為與發(fā)聲行為,而這兩種行為對(duì)應(yīng)的不止是一種方式,為了表示多種行為方式(即多態(tài)),需要定義虛函數(shù),用以給子類(lèi)進(jìn)行重載。再由予類(lèi)中的函數(shù)voidfly()及voidquack()可知,父類(lèi)中的對(duì)應(yīng)函數(shù)返回值也應(yīng)為void。所以和(3)的填空如下:classFlyBehaviorpublic:(2)virtualvoidfly()=O;classQutack:Behavio

32、rpublic:(3)virtualvoidquack()=0;Duck類(lèi)的定義,由子類(lèi)RubberDuck類(lèi)中出現(xiàn)的“flvBehavior=newlyNoWay();quackBehavior=newSqueak();”可知這兩個(gè)指針類(lèi)型對(duì)象為nyBehavior。和quackBehavior。所以(4)和(5)填空如下:ClassDuckprotected:FlyBehavior*(4)fiybehavior;QuackBehavior*(5)quackBehavior;由“FlyBehavior*flyBehavior;QuackBehavior*quackBehavior;”及函數(shù)名

33、可知,該函數(shù)體應(yīng)調(diào)用FlyBehavior類(lèi)中的ny函數(shù)和QuackBehavior類(lèi)中的quack函數(shù)。所以(6)和填空如下:public:voidfly()(6)fiybehavior->fiy();voidquack()(7)quackBehavior->quack();virtualvoiddisplay()=0;由題中所給信息可知RubberDuck是“發(fā)出空氣與橡皮摩擦聲”并且“不能飛行”的鴨子種類(lèi),因此構(gòu)造函數(shù)中創(chuàng)建的對(duì)象flyBehavior和quackBehavior對(duì)應(yīng)的類(lèi)型分別為FlyNoWay,Squeak,所以第(8)和(9)空的填空如下:ClassRub

34、berDuck:publicDuckpublic:RubberDuck()flyBehavior=new(8)FiyNoWay();quackBehaVior=new(9)Squeak();六、試題六(總題數(shù):1,分?jǐn)?shù):14.00)說(shuō)明某游戲公司現(xiàn)欲開(kāi)發(fā)一款面向兒童的模擬游戲,該游戲主要模擬現(xiàn)實(shí)世界中各種鴨子的發(fā)聲特征、飛行特征和外觀(guān)特征。游戲需要模擬的鴨子種類(lèi)及其特征如下表所示。為支持將來(lái)能夠模擬更多種類(lèi)鴨子的特征,采用策略設(shè)計(jì)模式(Strategy)設(shè)計(jì)的類(lèi)圖如圖6-1所示。其中,Duck為抽象類(lèi),描述了抽象的鴨子,而類(lèi)RubberDuck、MallardDuck、CottonDuck和R

35、edHeadDuck分別描述具體的鴨子種類(lèi),方法fly()、quack()和display()分別表示不同種類(lèi)的鴨子都具有飛行特征、發(fā)聲特征和外觀(guān)特征;接口FlyBehavior與QuackBehavior分別用于表示抽象的飛行行為與發(fā)聲行為;類(lèi)FlyNoWay與FlyWithWings分別描述不能飛行的行為和用翅膀飛行的行為;類(lèi)Quack、Squeak與QuackNoWay分別描述發(fā)出“嘎嘎”聲的行為、發(fā)出橡皮與空氣摩擦聲的行為與不發(fā)聲的行為。請(qǐng)?zhí)钛a(bǔ)以下代碼中的空缺。(1) Java代碼FlyBehaViorpublicvoidfly(););QuackBehaviorpublicvoidq

36、uack();ClassFlyWithWingsimplementsFlyBehaviorpublicvoidfly()System.out.println("ClassFlyNoWayimplementsFlyBehaViorpublicvoidfly()System.out.printin("ClassQuackimplementsQuackBehaviorpubiicvoidquack()System>out>println("classSqueakimplementsQuackBehaviorpublicvoidquack()System.out.println("使用翅膀飛行!”);不能飛行!”);發(fā)出''嘎嘎&#

溫馨提示

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

評(píng)論

0/150

提交評(píng)論