2015年上半年(下午)《軟件設(shè)計師》真題

上傳人:住在山****ck 文檔編號:81418740 上傳時間:2022-04-27 格式:DOCX 頁數(shù):9 大?。?73.28KB
收藏 版權(quán)申訴 舉報 下載
2015年上半年(下午)《軟件設(shè)計師》真題_第1頁
第1頁 / 共9頁
2015年上半年(下午)《軟件設(shè)計師》真題_第2頁
第2頁 / 共9頁
2015年上半年(下午)《軟件設(shè)計師》真題_第3頁
第3頁 / 共9頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《2015年上半年(下午)《軟件設(shè)計師》真題》由會員分享,可在線閱讀,更多相關(guān)《2015年上半年(下午)《軟件設(shè)計師》真題(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、2015年上半年(下午)《軟件設(shè)計師》真題 注意:圖片可根據(jù)實際需要調(diào)整大小 卷面總分:6分 答題時間:240分鐘 試卷題量:6題 練習次數(shù):0次 問答題 (共6題,共6分) 1.某圖書管理系統(tǒng)中管理著兩種類型的文獻:圖書和論文?,F(xiàn)在要求統(tǒng)計所有館藏文獻的總頁碼(假設(shè)圖書館中有一本540頁的圖書和兩篇各25頁的論文,那么館藏文獻的總頁碼就是590頁)。采用Visitor(訪問者)模式實現(xiàn)該要求,得到如圖5-1所示的類圖。 圖5-1 Visitor模式類圖 【C++代碼】 class Librar

2、yVisitor; class LibraryItemInterface{ public: (1); }; class Article:public LibraryItemInterface{ private: string?m_title;//論文名 string?m_author;//論文作者 int m_start_page; int m_end_page; public: Article(string p_author,string p_title,int p_start_page,int p_end_page); int getNumberOfPages( 

3、?。? void accept(Library Visitor*visitor); }; class Book:public LibraryItemInterface{ private: string?m_title;//書名 string?m_author;//作者 int m_pages;//頁數(shù) public: Book(string p_author,string p_title,int p_pages); int getNumberOfPages( ?。? void accept(LibraryVisitor*visitor); }; class Libra

4、ryVisitor{ public: (2); (3); virtual void printSum( ?。?0; }; class LibrarySumPrintVisitor:public LibraryVisitor{//打印總頁數(shù) private: int sum; public: LibrarySumPrintVisitor( ?。? void visit(Book*p_book); void visit(Article*p_article); void printSum( ?。? }; //visitor.cpp int Article::getNu

5、mberOfPages( ?。﹞ retum m_end_page-m_start_page; } void Article::accept(LibraryVisitor*visitor){(4);} Book::Book(string p_author,string p_title,int p_pages){ m_title=p_title; m_author=p_author; m_pages=p_pages; } int Book::getNumberOfPages( ?。﹞return m_pages;} void Book::accept(LibraryVisit

6、or*visitor){(5);} //其余代碼省略 正確答案: 本題解析: (1)virtual void accept(LibraryVisitor*visitor)=0 (2)virtual void visit(Book*p_book)=0 (3)virtual void visit(Article*p_article)=0 (4)visitor->visit(this) (5)visitor->visit(this) 本題考查Visitor(訪問者)模式的基本概念和應(yīng)用。 訪問者

7、模式是行為設(shè)計模式中的一種。行為模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的復雜的控制流。訪問者模式表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使在不改變各元素的類的前提下可以定義作用于這些元素的新操作。此模式的結(jié)構(gòu)圖如下圖所示。 ?Visitor(訪問者)為該對象結(jié)構(gòu)中ConcreteElement的每一個類聲明一個Visit操作。該操作的名字和特征標識了發(fā)送Visit請求給該訪問者的哪個類。這使得訪問者可以確定正被訪問元素的具體的類。這樣訪問者就可以通過該元素的特定接口直接訪問它。 ?ConcreteVisitor(具體訪問者)實現(xiàn)每個有V

8、isitor聲明的操作,每個操作實現(xiàn)本算法的一部分,而該算法片段乃是對應(yīng)于結(jié)構(gòu)中對象的類。ConcreteVisitor為該算法提供了上下文并存儲它的局部狀態(tài)。這一狀態(tài)常常在遍歷該結(jié)構(gòu)的過程中累積結(jié)果。 ?Element(元素)定義以一個訪問者為參數(shù)的Accept操作。 ?ConcreteElement(具體元素)實現(xiàn)以一個訪問者為參數(shù)的Accept操作。 ?ObjectStructure(對象結(jié)構(gòu)〉能枚舉它的元素;可以提供一個高層的接口以允許該訪問者訪問它的元素;可以是一個組合或者一個集合,如一個列表或一個無序集合。 本題中類Library對應(yīng)著上圖中的Client,LibraryV

9、isitor對應(yīng)著Visitor,LibrarySumPrintVisitor對應(yīng)著ConcreteVisitor。LibraryItemInterface對應(yīng)著上圖中的元素部分。下面可以結(jié)合程序代碼來完成程序填空了。 (1)空中,LibraryItemInterface在本題中充當著Element的作用,其中應(yīng)定義以一個訪問者為參數(shù)的Accept操作。對照實現(xiàn)該接口的兩個子類Article和Book的代碼,可以得知該操作的原型是void accept(LibraryVisitor visitor)。由此可以得知,此處應(yīng)該定義的是accept操作,此處填寫virtual void accep

10、t(LibraryVisitor*visitor)=0。 (2)和(3)空與類LibraryVisitor有關(guān)。由前文分析已知,LibraryVisitor對應(yīng)著訪問者模式中的Visitor,其作用是為類LibrarySumPrintVisitor聲明Visit操作。類LibrarySumPrintVisitor需要訪問兩種不同的元素,每種元素應(yīng)該對應(yīng)不同的visit操作。再結(jié)合類LibrarySumPrintVisitor的定義部分,可以得知(2)和(3)處應(yīng)給出分別以Book和Article為參數(shù)的visit方法。因此(2)和(3)處分別為virtual void visit(Book*

11、p_book)=0、virtual void visit(Article*p_article)=0。 (4)和(5)處考查的是accept接口的實現(xiàn)。由訪問者模式的結(jié)構(gòu)圖可以看出,在Book和Article中accept方法的實現(xiàn)均為visitor->visit(this)。 2.某大學為進一步推進無紙化考試,欲開發(fā)一考試系統(tǒng)。系統(tǒng)管理員能夠創(chuàng)建包括專業(yè)方向、課程編號、任課教師等相關(guān)考試基礎(chǔ)信息,教師和學生進行考試相關(guān)的工作。系統(tǒng)與考試有關(guān)的主要功能如下。 (1)考試設(shè)置。教師制定試題(題目和答案),制定考試說明、考試時間和提醒時間等考試信息,錄入?yún)⒓涌荚嚨?/p>

12、學生信息,并分別進行存儲。 (2)顯示并接收解答。根據(jù)教師設(shè)定的考試信息,在考試有效時間內(nèi)向?qū)W生顯示考試說明和題目,根據(jù)設(shè)定的考試提醒時間進行提醒,并接收學生的解答。 (3)處理解答。根據(jù)答案對接收到的解答數(shù)據(jù)進行處理,然后將解答結(jié)果進行存儲。 (4)生成成績報告。根據(jù)解答結(jié)果生成學生個人成績報告,供學生查看。 (5)生成成績單。對解答結(jié)果進行核算后生成課程成績單供教師查看。 (6)發(fā)送通知。根據(jù)成績報告數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給學生;根據(jù)成績單數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給教師。 現(xiàn)采用結(jié)構(gòu)化方法對考試系統(tǒng)進行分析與設(shè)計,獲得如圖1-1所示的上下文數(shù)據(jù)流圖和圖1-2所示的

13、0層數(shù)據(jù)流圖。 【問題1】(2分) 使用說明中的詞語,繪出圖1-1中的實體E1~E2的名稱。 【問題2】(4分) 使用說明中的詞語,給出圖1-2中的數(shù)據(jù)存儲D1~D4的名稱。 【問題3】(4分) 根據(jù)說明和圖中詞語,補充圖1-2中缺失的數(shù)據(jù)流及其起點和終點。 【問題4】(5分) 圖1-2所示的數(shù)據(jù)流圖中,功能(6)發(fā)送通知包含創(chuàng)建通知并發(fā)送給學生或老師。請分解圖1-2中加工(6),將分解出的加工和數(shù)據(jù)流填入答題紙的對應(yīng)欄內(nèi)。(注:數(shù)據(jù)流的起點和終點須使用加工的名稱描述) 正確答案: 本題解析:

14、 【問題1】 E1:教師E2:學生 【問題2】 D1:試題D2:學生信息D3:考試信息D4:解答結(jié)果 【問題3】 數(shù)據(jù)流名稱:題目,起點:D1,終點:2或顯示并接收解答。 數(shù)據(jù)流名稱:答案,起點:D1,終點:3或處理解答。 【問題4】 分解為:創(chuàng)建通知;發(fā)送通知 【問題1】 根據(jù)題干,考試系統(tǒng)中涉及到的實體有“教師“和”“學生”,及題干中其他相關(guān)信息,如“根據(jù)教師設(shè)定的考試信息,在考試有效時間內(nèi)向?qū)W生顯示考試說明和題目”,根據(jù)1-1可知,E1為教師,E2為學生。 【問題2】 本題要求的是數(shù)據(jù)存儲,然后流入這四個的分別是存儲的信息,則可以確定其名稱。

15、“教師制定試題(題目和答案),制定考試說明、考試時間和提醒時間等考試信息,錄入?yún)⒓涌荚嚨膶W生信息,并分別進行存儲”即D1為試題,D3為考試信息,D2為學生信息。 “根據(jù)答案對接收到的解答數(shù)據(jù)進行處理,然后將解答結(jié)果進行存儲”即D4為解答結(jié)果。 【問題3】 首先根據(jù)父圖和子圖之間的平衡、子圖內(nèi)部的輸入輸出平衡,對照圖1-1和圖1-2的數(shù)據(jù)流是否相同,然后再根據(jù)題干說明,仔細對照說明與圖的對應(yīng)關(guān)系,來確定缺失的是什么。 本題首先根據(jù)子圖內(nèi)部的輸入輸出平衡,在“2顯示并接收解答”加工,輸出數(shù)據(jù)流有考試說明、題目和題型,而其輸入缺少題目的來源,因此這里缺少數(shù)據(jù)流:題目,起點為D1試題,終點為2

16、2顯示并接收解答。 根據(jù)題干說明和子圖,在“3處理解答”加工,輸入數(shù)據(jù)有解答數(shù)據(jù),輸出數(shù)據(jù)為解答結(jié)果,題干描述“根據(jù)答案對接收到的解答數(shù)據(jù)進行處理”,因此這里缺少數(shù)據(jù)流答案,起點是D1試題,終點是3處理解答。 【問題4】 本題考查對加工的分解。 根據(jù)題干描述“發(fā)送通知。根據(jù)成績報告數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給學生;根據(jù)成績單數(shù)據(jù),創(chuàng)建通知數(shù)據(jù)并將通知發(fā)送給教師”,可知發(fā)送通知可以分為創(chuàng)建通知和發(fā)送通知2個加工,并且,創(chuàng)建通知有2條輸入數(shù)據(jù)流,成績報告數(shù)據(jù),成績單數(shù)據(jù),它們的起點分別為生成成績單和生成成績報告;而發(fā)送通知的對象有學生和老師,在圖中已經(jīng)存在不用處理,為了將2個加工連接起

17、來,還缺少從創(chuàng)建通知到發(fā)送通知的數(shù)據(jù)流,名稱為通知數(shù)據(jù)。 3.某省針對每年舉行的足球聯(lián)賽,擬開發(fā)一套信息管理系統(tǒng),以方便管理球隊、球員、主教練、主裁判、比賽等信息。 【需求分析】 (1)系統(tǒng)需要維護球隊、球員、主教練、主裁判、比賽等信息。 球隊信息主要包括:球隊編號、名稱、成立時間、人數(shù)、主場地址、球隊主教練。 球員信息主要包括:姓名、身份證號、出生日期、身高、家庭住址。 主教練信息主要包括:姓名、身份證號、出生日期、資格證書號、級別。 主裁判信息主要包括:姓名、身份證號、出生日期、資格證書號、獲取證書時間、級別。 (2)每支球隊有一名主教練和若干

18、名球員。一名主教練只能受聘于一支球隊,一名球員只能效力于一支球隊。每支球隊都有自己的唯一主場場地,且場地不能共用。 (3)足球聯(lián)賽采用主客場循環(huán)制,一周進行一輪比賽,一輪的所有比賽同時進行。 (4)一場比賽有兩支球隊參加,一支球隊作為主隊身份、另一支作為客隊身份參與比賽。一場比賽只能有一名主裁判,每場比賽有唯一的比賽編碼,每場比賽都記錄比分和日期。 【概念結(jié)構(gòu)設(shè)計】 根據(jù)需求分析階段的信息,設(shè)計的實體聯(lián)系圖(不完整)如圖2-1所示。 【邏輯結(jié)構(gòu)設(shè)計】 根據(jù)概念結(jié)構(gòu)設(shè)計階段完成的實體聯(lián)系圖,得出如下關(guān)系模式(不完整): 球隊(球隊編號,名稱,成立時間,人數(shù),主場地址) 球員(

19、姓名,身份證號,出生日期,身高,家庭住址,(1)) 主教練(姓名,身份證號,出生日期,資格證書號,級別,(2)) 主裁判(姓名,身份證號,出生日期,資格證書號,獲取證書時間,級別) 比賽(比賽編碼,主隊編號,客隊編號,主裁判身份證號,比分,日期) 【問題1】(6分) 補充圖2-1中的聯(lián)系和聯(lián)系的類型。 圖2-1中的聯(lián)系”比賽“應(yīng)具有的屬性是哪些? 【問題2】(4分) 根據(jù)圖2-1,將邏輯結(jié)構(gòu)設(shè)計階段生成的關(guān)系模式中的空(1)~(2)補充完整。 【問題3】(5分) 現(xiàn)在系統(tǒng)要增加贊助商信息,贊助商信息主要包括贊助商名稱和贊助商編號。 贊助商可以贊助某支球隊,一支球隊只能有一

20、個贊助商,但贊助商可以贊助多支球隊。贊助商也可以單獨贊助某些球員,一名球員可以為多個贊助商代言。請根據(jù)該要求,對圖2-1進行修改,畫出修改后的實體間聯(lián)系和聯(lián)系的類型。 正確答案: 本題解析: 【問題1】 比賽聯(lián)系應(yīng)具有的屬性包括:比賽編碼,比分,日期。 【問題2】 (1)球隊編號(2)球隊編號 【問題3】 【問題1】 根據(jù)題干需求分析中的(2)(3)(4)可以確定聯(lián)系及聯(lián)系類型。 從題干中的關(guān)系模式中可以看出“比賽”的屬性是去掉球隊和主裁判的主鍵,即剩下的是:比賽編碼,比分和日期。

21、 【問題2】 根據(jù)題干描述和圖示可知,需要在關(guān)系模式中應(yīng)該把球隊的主鍵添上去,即添上球隊編號。 【問題3】 此題相當于把文字轉(zhuǎn)化為ER圖,根據(jù)關(guān)鍵字:贊助商,球隊和球員,及其聯(lián)系就可以確定了。 “一支球隊只能有一個贊助商,但贊助商可以贊助多支球隊”,因此球隊和贊助商為*:1的聯(lián)系; “一名球員可以為多個贊助商代言”,并且球員是球隊的一部分,因此球隊和贊助商為*:*的聯(lián)系。 4.某物品拍賣網(wǎng)站為參與者提供物品拍賣平臺,組織拍賣過程,提供在線或線下交易服務(wù)。網(wǎng)站主要功能描述如下: (1)拍賣參與者分為個人參與者和團體參與者兩種。不同的團體也可以組成新的

22、團體參與拍賣活動。網(wǎng)站記錄每個參與者的名稱。 (2)一次拍賣中,參與者或者是買方,或者是賣方。 (3)一次拍賣只拍出來自一個賣方的一件拍賣品;多個買方可以出價:賣方接受其中一個出價作為成交價,拍賣過程結(jié)束。 (4)在拍賣結(jié)算階段,買賣雙方可以選擇兩種成交方式:線下成交,買賣雙方在事先約定好的成交地點,當面完成物價款的支付和拍賣品的交付;在線成交,買方通過網(wǎng)上支付平臺支付物價款,拍賣品由賣方通過快遞郵寄給買方。 一次拍賣過程的基本事件流描述如下: (1)賣方在網(wǎng)站上發(fā)起一次拍賣,并設(shè)置本次拍賣的起拍價。 (2)確定拍賣標的以及拍賣標的保留價(若在拍賣時間結(jié)束時,所有出價均低于拍賣標的

23、保留價,則本次拍賣失敗)。 (3)在網(wǎng)站上發(fā)布本次拍賣品的介紹。 (4)買方參與拍賣,給出竟拍價。 (5)賣方選擇接受一個竟拍價作為成交價,結(jié)束拍賣。 (6)系統(tǒng)記錄拍賣成交價,進入拍賣結(jié)算階段。 (7)賣方和買方協(xié)商拍賣品成交方式,并完成成交。 現(xiàn)采用面向?qū)ο蠓椒▽ο到y(tǒng)進行分析與設(shè)計,得到如表3-1所示的類列表以及如圖3-1所示的類圖,類中關(guān)鍵屬性與方法如表3-2所示。 圖3-1類圖 表3-2關(guān)鍵屬性與方法列表 【問題1】(7分) 根據(jù)說明中的描述,給出圖3-1中(1)~(7)所對應(yīng)的類名(類名使用表3-1中給出的序號)。 【問題2】(5分) 根據(jù)說明中的

24、描述,確定表3-2中的屬性/方法分別屬于哪個類(類名、方法/屬性名使用表3-1、3-2中給出的序號)。 【問題3】(3分) 在圖3-1采用了何種設(shè)計模式?以100字以內(nèi)文字說明采用這種設(shè)計模式的原因。 正確答案: 本題解析: 【問題1】 注意:C8和C10可互換,互換后在問題2中也必須交換對應(yīng)位置。 【問題2】 【問題3】 組合模式,在本題中由于拍賣者分為個人參與者和團體參與者兩種,而團體也可以組成新的團體參與拍賣活動。這樣的整體部分關(guān)系,適合于使用組合模式表達。 【問題1】 圖

25、3-1共需要確定7個類,可以先從圖中幾個特殊關(guān)系處入手,即(1)~(3)和(4)~(6)。 先來分析(1)~(3),這是一個繼承+聚集的結(jié)構(gòu),而且聯(lián)系的名稱“participants”是一個比較明顯的提示,說明這個層次結(jié)構(gòu)是與【說明】中的功能描述(1)相對應(yīng)的。參考表3-1,與之相關(guān)的類是C5(Auction Participant)、C7(OneParticipant)和C9(CompositeParticipant)。C7、C9是特殊的參與者,所以(1)處應(yīng)該為C5;(2)處應(yīng)該為C9,這個聚集關(guān)系針對著【說明】中的“不同的團體也可以組成新的團體參與拍賣活動”需求;(3)處為C7。 結(jié)

26、合【說明】和表3-1,另外一組具有“一般-特殊”關(guān)系的類只有C6(Interchange)、C8(OfflinePay)和C10(OnlinePay)。顯而易見,C8和C10是C6的兩種具體方式,所以(4)處應(yīng)該為C6,(5)、(6)處分別為C8和C10。 這樣(7)處對應(yīng)的類只能是Item了。結(jié)合【說明】和表3-1可知,(7)處對應(yīng)的類表達的應(yīng)該是拍賣中的拍賣品,所以(7)處應(yīng)該是C2。 【問題2】 在確定了所有的類之后,確定每個類的屬性和方法就比較容易了。完成本問題需要結(jié)合【說明】部分中所給出的拍賣過程的基本事件流描述。表3-2中的屬性/方法與類之間的對應(yīng)關(guān)系下表所示。 【問題

27、3】 在【說明】部分有一個很明顯的提示:“拍賣參與者分為個人參與者和團體參與者兩種。不同的團體也可以組成新的團體參與拍賣活動”。這里很清晰地表達了一種“部分-整體”的層次關(guān)系,這種關(guān)系非常適合于采用Composite(組合)設(shè)計模式來表達。 Composite設(shè)計模式將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對單個對象和組合對象的使用具有一致性。 5.某圖書管理系統(tǒng)中管理著兩種類型的文獻:圖書和論文?,F(xiàn)在要求統(tǒng)計所有館藏文獻的總頁碼(假設(shè)圖書館中有一本540頁的圖書和兩篇各25頁的論文,那么館藏文獻的總頁碼就是590頁)。

28、采用Visitor(訪問者)模式實現(xiàn)該要求,得到如圖6-1所示的類圖。 圖6-1 Visitor模式類圖 【Java代碼】 import java.util.*; interface LibraryVisitor{ (1); (2); void printSum( ?。? } class LibrarySumPrintVisitor implements LibraryVisitor{//打印總頁數(shù) private int sum=0; public void visit(Book p_book){ sum=sum+p_book.getNumberOfPages( 

29、?。? } public void visit(Article p_article){ sum=sum+p_article.getNumberOfPages(  ); } public void printSum( ?。﹞ System.out.println("SUM="+sum); } } interface LibraryItemInterface{ (3); } class?Article implements LibraryItemInterface{ private String m_title;//論文名 private String m_author

30、;//論文作者 private int?m_start_page; private int?m_end_page; public Article(String p_author,String p_title,int p_start_page,int p_end_page){ m_title=p_title; m_author=p_author; m_end_page=p_end_page; } public int getNumberOfPages( ?。﹞ return m_end_page-m_start_page; } public void accept(Libr

31、aryVisitor Visitor){ (4); } } class Book implements LibraryItemInterface{ private String m_title;//書名 private String m_author;//書作者 private int?m_pages;//頁教 public Book(String p_author,String p_title,int p_pages){ m_title=p_title; m_author=p_author; m_pages=p_pages; } public int getNumb

32、erOfPages( ?。﹞ return m_pages; } public void accept(LibraryVisitor visitor){ (5); } } 正確答案: 本題解析: (1)void visit(Book p_book) (2)void visit(Article p_article) (3)void accept(LibraryVisitor visitor) (4)visitor.visit(this) (5)visitor.visit(this)

33、本題考查Visitor(訪問者)模式的基本概念和應(yīng)用。 訪問者模式是行為設(shè)計模式中的一種。行為模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運行時難以跟蹤的復雜的控制流。訪問者模式表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使在不改變各元素的類的前提下可以定義作用于這些元素的新操作。此模式的結(jié)構(gòu)圖如下圖所示。 ?Visitor(訪問者)為該對象結(jié)構(gòu)中ConcreteElement的每一個類聲明一個Visit操作。該操作的名字和特征標識了發(fā)送Visit請求給該訪問者的哪個類。這使得訪問者可以確定正被訪問元素的具體的類。這樣訪問者就可以通過該元素的特定接口直接訪問它

34、。 ?ConcreteVisitor(具體訪問者)實現(xiàn)每個有Visitor聲明的操作,每個操作實現(xiàn)本算法的一部分,而該算法片段乃是對應(yīng)于結(jié)構(gòu)中對象的類。ConcreteVisitor為該算法提供了上下文并存儲它的局部狀態(tài)。這一狀態(tài)常常在遍歷該結(jié)構(gòu)的過程中累積結(jié)果。 ?Element(元素)定義以一個訪問者為參數(shù)的Accept操作。 ?ConcreteElement(具體元素)實現(xiàn)以一個訪問者為參數(shù)的Accept操作。 ?ObjectStructure(對象結(jié)構(gòu))能枚舉它的元素;可以提供一個高層的接口以允許該訪問者訪問它的元素;可以是一個組合或者一個集合,如一個列表或一個無序集合。 本

35、題中類Library對應(yīng)著上圖中的Client,LibraryVisitor對應(yīng)著Visitor,LibrarySumPrintVisitor對應(yīng)著ConcreteVisitor。LibraryItemInterface對應(yīng)著上圖中的元素部分。下面可以結(jié)合程序代碼來完成程序填空了。 (1)和(2)空與類LibraryVisitor有關(guān)。由前文分析已知,LibraryVisitor對應(yīng)著訪問者模式中的Visitor,其作用是為類LibrarySumPrintVisitor聲明Visit操作。類LibrarySumPrintVisitor需要訪問兩種不同的元素,每種元素應(yīng)該對應(yīng)不同的visit操

36、作。再結(jié)合類LibrarySumPrintVisitor的定義部分,可以得知(2)和(3)處應(yīng)給出分別以Book和Article為參數(shù)的visit方法。因此(1)和(2)處分別為"void visit(Book p_book)"、"void visit(Article p_article)"。 LibraryItemInterface在本題中充當著Element的作用,其中應(yīng)定義以一個訪問者為參數(shù)的Accept操作。對照實現(xiàn)該接口的兩個子類Article和Book的代碼,可以得知該操作的原型是void accept(LibraryVisitor visitor)。由此可以得知,(3)處應(yīng)填寫

37、“void accept(Library Visitor visitor)”。 (4)和(5)處考查的是accept接口的實現(xiàn)。由訪問者模式的結(jié)構(gòu)圖可以看出,在Book和Article中accept方法的實現(xiàn)均為Visitor.visit(this)。 6.n-皇后問題是在n行n列的棋盤上放置n個皇后,使得皇后彼此之間不受攻擊,其規(guī)則是任意兩個皇后不在同一行、同一列和相同的對角線上。 擬采用以下思路解決n-皇后問題:第i個皇后放在第i行。從第一個皇后開始,對每個皇后,從其對應(yīng)行(第i個皇后對應(yīng)第i行)的第一列開始嘗試放置,若可以放置,確定該位置,考慮下一個皇

38、后;若與之前的皇后沖突,則考慮下一列;若超出最后一列,則重新確定上一個皇后的位置。重復該過程,直到找到所有的放置方案。 【C代碼】 下面是算法的C語言實現(xiàn)。 (1)常量和變量說明 pos:一維數(shù)組,pos[i]表示第i個皇后放置在第i行的具體位置 count:統(tǒng)計放置方案數(shù) i,j,k:變量 N:皇后數(shù) (2)C程序 #include<stdio.h> #include<math.h> #define N4 /*判斷第k個皇后目前放置位置是否與前面的皇后沖突*/ int isplace(int pos[],int k){ int i; for(i=1;i<k;i+

39、+){ if((1)||fabs(i-k)══fabs(pos[i]-pos[k])){ return 0; } } return 1; } int main(  ){ int i,j,count=1; int pos[N+1]; //初始化位置 for(i=1;i<=N;i++){ pos[i]=0; } (2); while(j>=1){ pos[j]=pos[j]+1; /*嘗試擺放第i個皇后*/ while(pos[j]<=N&&(3)_){ pos[j]=pos[j]+1; } /*得到一個擺放方案*/ if(pos[j]<=N&&j══N

40、){ printf("方案%d:",count++); for(i=1;i<=N;i++){ printf("%d",pos[i]); } printf("\n"); } /*考慮下一個皇后*/ if(pos[j]<=N&&(4)){ j=j+1; }else{//返回考慮上一個皇后 pos[j]=0; (5); } } return 1; } 【問題1】(10分) 根據(jù)以上說明和C代碼,填充C代碼中的空(1)~(5)。 【問題2】(2分) 根據(jù)以上說明和C代碼,算法采用了(6)設(shè)計策略。 【問題3】(3分) 上述C代碼的輸出為: (7)。

41、 正確答案: 本題解析: 【問題1】 (1)pos[i]==pos[k] (2)j=1 (3)isplace(pos,j)==0 (4)j<N (5)j=j-1 【問題2】 (6)回溯法 【問題3】 (7) 方案1:2 4 1 3 方案2:3 1 4 2 本題考查算法設(shè)計和C程序設(shè)計語言的相關(guān)知識。 此類題目要求考生認真閱讀題目,理解算法思想,并思考將算法思想轉(zhuǎn)化為具體的程序設(shè)計語言的代碼。 【問題1】 根據(jù)題干描述??眨?)所在的代碼行判斷皇后合法放置的約束條件,即不在同一行,這

42、通過把第i個皇后放在第i行實現(xiàn),條件"fabs(i-k)=fabs(pos[i]-pos[k])"判斷的是當前擺放的皇后是否與之前擺放的皇后在同一對角線上。因此,空(1)判斷的是當前擺放的皇后是否和之前擺放的皇后在同一列上,即應(yīng)填入"pos[i]==pos[k]"。 根據(jù)算法思想和主函數(shù)上下文,空(2)處應(yīng)該考慮第1個皇后,即初始化j為1,空(2)填寫"j=1"。空(3)所在的行是判斷放置第j個皇后的位置是否合適,"pos[j]<=N"表示在該行的合法列上,但還需要進一步判斷是否與前面的皇后有沖突,根據(jù)滿足條件后的語句,嘗試放入下一列,因此空(3)處填入"!isplace(pos,j)。根據(jù)

43、前面的注釋,空(4)所在的行是考慮下一個皇后,其條件是,當前皇后找到了合適的位置,而且還存在下一個皇后,因此空(4)處應(yīng)填入"j<N"。根據(jù)下面的注釋,若當前皇后沒有找到合適的位置,則應(yīng)回溯,即再次考慮上一個皇后的位置,因此空(5)處填入"j=j-1"。 【問題2】 從上述題干的敘述和C代碼很容易看出,從第一個皇后開始,對每個皇后總是從第一個位置開始嘗試,找到可以放置的合法位置;若某個皇后在對應(yīng)的行上沒有合法位置,則回溯到上一個皇后,嘗試將上一個皇后放置另外的位置。這是典型的深度優(yōu)先的系統(tǒng)搜索方式,即回溯法的思想。 【問題3】 四皇后問題的答案為: 方案1:2 4 1 3 方案2:3 1 4 2 如表4-1所示: 表4-1 方案1方案2

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!