2013年下半年(下午)《軟件設(shè)計師》真題
《2013年下半年(下午)《軟件設(shè)計師》真題》由會員分享,可在線閱讀,更多相關(guān)《2013年下半年(下午)《軟件設(shè)計師》真題(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、2013年下半年(下午)《軟件設(shè)計師》真題 注意:圖片可根據(jù)實際需要調(diào)整大小 卷面總分:6分 答題時間:240分鐘 試卷題量:6題 練習(xí)次數(shù):0次 問答題 (共6題,共6分) 1.欲開發(fā)一個繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形。以繪制直線和圓形為例,對應(yīng)的繪圖程序如表5-1所示。 表5-1不同的繪圖程序 該繪圖軟件的擴展性要求,將不斷擴充新的圖形和新的繪圖程序。為了避免出現(xiàn)類爆炸的情況,現(xiàn)采用橋接(Bridge)模式來實現(xiàn)上述要求,得到如圖5-1所示的類圖。 圖5-1類圖 【C+
2、+代碼】 class?DP1{ public: static void draw_a_line(double?x1,double?y1,double?x2,double?y2){/*代碼省略*/} static void draw_a_circle(double?x,double?y,double?r){/*代碼省略*/} }; class?DP2{ public: static void drawline(double x1,double x2,double y1,double y2){/*代碼省略*/} static void drawcircle(double x,do
3、uble y,double r){/*代碼省略*/} }; class?Drawing{ public: (1); (2); }; class V1Drawing:public Drawing{ public: void drawLine(double?x1,double?y1,double?x2,double?y2){/*代碼省略*/} void drawCircle(double?x,double?y,double?r){(3);} }; class V2Drawing:public?Drawing{ public: void drawLine(double?x
4、1,double?y1,double?x2,double?y2){/*代碼省略*/} void drawCircle(double?x,double y,double?r){(4);} }; class Shape{ public: (5); Shape(Drawing*dp){_dp=dp;} void drawLine(double?x1,double?y1,double?x2,double y2){_dp->drawLine(x1,y1,x2,y2);} void drawCircle(double?x,double?y,double r){_dp->drawCircle
5、(x,y,r);} private:Drawing*_dp; }; class?Rectangle:public?Shape{ public: void draw( ?。﹞/*代碼省略*/} //其余代碼省略 }; class Circle:public Shape{ private:double_x,_y,_r; public: Circle(Drawing*dp,double x,double?y,double r):(6){_x=x;_y=y;_r=r;} void draw( ?。﹞drawCircle(_x,_y,_r);} };
6、 正確答案: 本題解析: (1)virtual void drawLine(double x1,double y1,double x2,double y2)=0 (2)virtual void drawCircle(double x,double y,double r)=0 (3)DP1::draw_a_circle(x,y,r) (4)DP2::drawcircle(x,y,r) (5)virtual void?draw()=0 (6)Shape(dp) 根據(jù)類圖,可知:Drawing類有兩個函數(shù)drawLine()
7、、drawCircle(),在從繼承于它的兩個子類V1Drawing、V2Drawing中drawLine()、drawCircle()得到返回值類型為void及函數(shù)參數(shù)。則(1)為virtual void drawLine(double x1,double y1,double x2,double y2)=0;(2)為virtual void drawCircle(double x,double y,double r)=0。 根據(jù)V1Drawing與DP1之間的關(guān)聯(lián)關(guān)系,V2Drawing與DP2之間的關(guān)聯(lián)關(guān)系,可知(3)是去調(diào)用DP1中的靜態(tài)函數(shù)draw_a_circle(double x
8、,double y,double r),則(3)為DP1::draw_a_circle(x,y,r);(4)問同理,答案為DP2::drawcircle(x,y,r)。 (5)問從類圖中可知,Shape有三個方法draw()、drawLine()、drawCircle();分析題目中給出的Shape的定義,少了一個draw()函數(shù),可知(5)為draw(),在根據(jù)繼承于Shape的Circle和Rectangle分析,函數(shù)返回值為void,參數(shù)為空,則(5)為virtual void draw()=0。 (6)空考查繼承結(jié)構(gòu)中子類構(gòu)造函數(shù)的定義。構(gòu)造子類對象時,需要調(diào)用基類的構(gòu)造函數(shù),這可
9、以通過初始化列表顯式指明需要調(diào)用的基類的構(gòu)造函數(shù)。在本題中,上文Shape類只定義了一個構(gòu)造函數(shù),所以這里填寫的應(yīng)該為“Shape(dp)”。 2.某大學(xué)欲開發(fā)一個基于Web的課程注冊系統(tǒng)。該系統(tǒng)的主要功能如下: 1、驗證輸入信息 (1)檢查學(xué)生信息:檢查學(xué)生輸入的所有注冊所需信息。如果信息不合法,返回學(xué)生信息不合法提示;如果合法,輸出合法學(xué)生信息。 (2)檢查學(xué)位考試信息:檢查學(xué)生提供的學(xué)位考試結(jié)果。如果不合法,返回學(xué)位考試結(jié)果不合法提示;如果合法,檢查該學(xué)生注冊資格。 (3)檢查學(xué)生資格:根據(jù)合法學(xué)生信息和合法學(xué)位考試結(jié)果,檢查該學(xué)生對欲選課程的
10、注冊資格。如果無資格,返回?zé)o注冊資格提示;如果有注冊資格,則輸出注冊學(xué)生信息(包含選課學(xué)生標(biāo)識)和欲注冊課程信息。 2、處理注冊申請 (1)存儲注冊信息:將注冊學(xué)生信息記錄在學(xué)生庫。 (2)存儲所注冊課程:將選課學(xué)生標(biāo)識與欲注冊課程進(jìn)行關(guān)聯(lián),然后存入課程庫。 (3)發(fā)送注冊通知:從學(xué)生庫中讀取注冊學(xué)生信息,從課程庫中讀取所注冊課程信息,給學(xué)生發(fā)送接受提示;給教務(wù)人員發(fā)送所注冊課程信息和已注冊學(xué)生信息。 現(xiàn)采用結(jié)構(gòu)化方法對課程注冊系統(tǒng)進(jìn)行分析和設(shè)計,獲得如圖1-1所示的0層數(shù)據(jù)流圖和圖1-2所示的1層數(shù)據(jù)流圖。 圖1-1 0層數(shù)據(jù)流圖 圖1-2 1層數(shù)據(jù)流圖 【問題1
11、】(2分) 使用說明中的詞語,給出圖1-1中的實體E1和E2的名稱。 【問題2】(2分) 使用說明中的詞語,給出圖1-2中的數(shù)據(jù)存儲D1和D2的名稱。 【問題3】(8分) 根據(jù)說明和圖中術(shù)語,補充圖1-2中缺失的數(shù)據(jù)流及其起點和終點。 【問題4】(3分) 根據(jù)補充完整的圖1-1和圖1-2,說明上層的哪些數(shù)據(jù)流是由下層的哪些數(shù)據(jù)流組合而成。 正確答案: 本題解析: 【問題1】 E1:學(xué)生 E2:教務(wù)人員 【問題2】 D1:學(xué)生庫 D2:課程庫 【問題3】 【問題4】 0層
12、圖中的“不合法提示”對應(yīng)著1層圖中的“學(xué)生信息不合法提示”、“學(xué)位考試結(jié)果不合法提示”、“無注冊資格提示”。 0層圖中的“注冊學(xué)生信息”對應(yīng)1層圖中的“選課學(xué)生標(biāo)識”和“注冊學(xué)生信息”。 【問題1】 分析實體E1和E2的名稱,需要從兩方面著手: (1)了解什么是實體。實體又叫外部實體,是位于系統(tǒng)外部,但與系統(tǒng)有交互的對象,包括:人員,機構(gòu)和其它系統(tǒng)等。在此題中,通讀題目說明可知能充當(dāng)實體的有:學(xué)生和教務(wù)人員。 (2)分析題目與圖的對應(yīng)關(guān)系,從0層圖可以看出“接受提示”信息將流至E1,而“所注冊課程信息”和“已注冊學(xué)生信息”將流至E2。題目說明有“給學(xué)生發(fā)送接受提示;給教務(wù)人員發(fā)送所注
13、冊課程信息和已注冊學(xué)生信息”,所以從此處斷定E1是學(xué)生,而E2是教務(wù)人員。 【問題2】 分析存儲D1與D2的名稱非常容易,由于題目說明中有“將注冊學(xué)生信息記錄在學(xué)生庫”和“將選課學(xué)生標(biāo)識與欲注冊課程進(jìn)行關(guān)聯(lián),然后存入課程庫”,而題目中1層數(shù)據(jù)流圖的2.1與2.2加工正好與這兩句對應(yīng),從此處可知D1為學(xué)生庫,而D2為課程庫。 【問題3】 尋找缺失的數(shù)據(jù)流主要從兩方面考慮:一方面是數(shù)據(jù)流圖的平衡原則,父圖中有的數(shù)據(jù)流,在子圖中也應(yīng)該有;另一方面就是從題目描述的文字說明信息的角度分析,圖與文字說明是對同一系統(tǒng)的不同描述,他們應(yīng)保持一致。 (1)由于說明中提到“檢查學(xué)生信息:檢查學(xué)生輸入的所
14、有注冊所需信息。如果信息不合法,返回學(xué)生信息不合法提示”,所以缺從“1.1檢查學(xué)生信息”到“E1(或?qū)W生)”的數(shù)據(jù)流“學(xué)生信息不合法提示”。 (2)由于說明中提到“檢查學(xué)位考試信息:檢查學(xué)生提供的學(xué)位考試結(jié)果。如果不合法,返回學(xué)位考試結(jié)果不合法提示”,所以缺從“1.2檢查學(xué)位考試結(jié)果”到“E1(或?qū)W生)”的數(shù)據(jù)流“學(xué)位考試結(jié)果不合法提示”。 (3)由于說明中提到“檢查學(xué)生資格:根據(jù)合法學(xué)生信息和合法學(xué)位考試結(jié)果,檢查該學(xué)生對欲選課程的注冊資格。如果無資格,返回?zé)o注冊資格提示”,所以缺從“1.3檢查學(xué)生注冊資格”到“E1(或?qū)W生)”的數(shù)據(jù)流“無注冊資格提示”。 (4)由于說明中提到“發(fā)送注
15、冊通知:從學(xué)生庫中讀取注冊學(xué)生信息,從課程庫中讀取所注冊課程信息,給學(xué)生發(fā)送接受提示”,所以缺從“2.3發(fā)送注冊通知”到“E1(或?qū)W生)”的數(shù)據(jù)流“接受提示”。 【問題4】 要求說明上層的哪些數(shù)據(jù)流是由下層的哪些數(shù)據(jù)流組合而成,只需要把之前已經(jīng)補充完整的數(shù)據(jù)流圖進(jìn)行對比,即可得到結(jié)果。 由于在0層圖中有“不合法提示”,而在1層圖中沒有此數(shù)據(jù)流,有表達(dá)同樣意思的3條子數(shù)據(jù)流:“學(xué)生信息不合法提示”、“學(xué)位考試結(jié)果不合法提示”、“無注冊資格提示”,所以他們存在對應(yīng)關(guān)系。 由于在1層圖中有“選課學(xué)生標(biāo)識”,而在0層圖中沒有此數(shù)據(jù)流,而根據(jù)題干描述,“輸出注冊學(xué)生信息(包含選課學(xué)生標(biāo)識)”,因
16、此,此數(shù)據(jù)流應(yīng)該是從“注冊學(xué)生信息”中分解出的,也就是說0層圖中的“注冊學(xué)生信息”,應(yīng)該由下層“注冊學(xué)生信息”和“選課學(xué)生標(biāo)識”組成。 3.某快遞公司為了方便管理公司物品運送的各項業(yè)務(wù)活動,需要構(gòu)建一個物品運送信息管理系統(tǒng)。 【需求分析結(jié)果】 (1)快遞公司有多個分公司,分公司信息包括分公司編號、名稱、經(jīng)理、辦公電話和地址。每個分公司可以有多名員工處理分公司的日常業(yè)務(wù),每位員工只能在一個分公司工作。每個分公司由一名經(jīng)理負(fù)責(zé)管理分公司的業(yè)務(wù)和員工,系統(tǒng)需要記錄每個經(jīng)理的任職時間。 (2)員工信息包括員工號、姓名、崗位、薪資、手機號和家庭地址。其中,員工號唯一
17、標(biāo)識員工信息的每一個元組。崗位包括經(jīng)理、調(diào)度員、業(yè)務(wù)員等。業(yè)務(wù)員根據(jù)客戶提交的快件申請單進(jìn)行快件受理事宜,一個業(yè)務(wù)員可以受理多個客戶的快件申請,一個快件申請只能由一個業(yè)務(wù)員受理。調(diào)度員根據(jù)已受理的申請單安排快件的承運事宜,例如:執(zhí)行承運的業(yè)務(wù)員、運達(dá)時間等。一個業(yè)務(wù)員可以執(zhí)行調(diào)度員安排的多個快件的承運業(yè)務(wù)。 (3)客戶信息包括客戶號、單位名稱、通信地址、所屬省份、聯(lián)系人、聯(lián)系電話、銀行賬號。其中,客戶號唯一標(biāo)識客戶信息的每一個元組。當(dāng)客戶要寄快件時,先要提交快件申請單,申請?zhí)栍上到y(tǒng)自動生成??旒暾埿畔ㄉ暾?zhí)?、客戶號、發(fā)件人、發(fā)件人電話、快件名稱、運費、發(fā)出地、收件人、收件人電話、收件地
18、址。其中,一個申請?zhí)枌?yīng)唯一的一個快件申請,一個客戶可以提交多個快件申請,但一個快件申請由唯一的一個客戶提交。 【概念模型設(shè)計】 根據(jù)需求階段收集的信息,設(shè)計的實體聯(lián)系圖(圖2-1)和關(guān)系模型(不完整)如下: 【關(guān)系模型設(shè)計】 分公司(分公司編號,名稱,經(jīng)理,辦公電話,地址) 員工(員工號,姓名,(a),崗位,薪資,手機號,家庭地址) 客戶(客戶號,單位名稱,通信地址,所屬省份,聯(lián)系人,聯(lián)系電話,銀行賬號) 申請單((b),發(fā)件人,發(fā)件人電話,發(fā)件人地址,快件名稱,運費,收件人,收件人電話,收件地址,受理標(biāo)志,業(yè)務(wù)員) 安排承運((c),實際完成時間,調(diào)度員) 【問題1】
19、(5分) 根據(jù)問題描述,補充五個聯(lián)系,完善圖2-1的實體聯(lián)系圖。聯(lián)系名可用聯(lián)系1、聯(lián)系2、聯(lián)系3、聯(lián)系4和聯(lián)系5代替,聯(lián)系的類型分為1:1、1:n和m:n(或1:1、1:*和*:*)。 【問題2】(6分) (1)根據(jù)實體聯(lián)系圖,將關(guān)系模式中的空(a)~(c)補充完整; (2)給出員工、申請單和安排承運關(guān)系模式的主鍵和外鍵。 【問題3】(4分) (1)客戶關(guān)系的通信地址可以進(jìn)一步分為郵編、省、市、街道,那么該屬性是否屬于簡單屬性,為什么?請用100字以內(nèi)的文字說明。 (2)假設(shè)分公司需要增設(shè)一位經(jīng)理的職位,那么分公司與經(jīng)理之間的聯(lián)系類型應(yīng)修改為(d),分公司的主鍵應(yīng)修改為(e)。
20、 正確答案: 本題解析: 【問題1】 【問題2】 (a)分公司編號 (b)申請?zhí)枺蛻籼? (c)申請?zhí)?,業(yè)務(wù)員 員工:主鍵:員工號;外鍵:分公司編號。 申請單:主鍵:申請?zhí)?;外鍵:客戶號,業(yè)務(wù)員。 安排承運:主鍵:申請?zhí)?;外鍵:業(yè)務(wù)員,調(diào)度員。 【問題3】 通信地址不是簡單屬性而是一個復(fù)合屬性,因為該屬性可拆分為多個屬性。 (d)1:n (e)(分公司編號,經(jīng)理) 【問題1】 概念模型設(shè)計中補充聯(lián)系這類題是考試時非常固定的考查模式,需要補充的聯(lián)系往往需要從問題給出的說明來進(jìn)行
21、分析。 (1)從“每個分公司可以有多名員工處理分公司的日常業(yè)務(wù),每位員工只能在一個分公司工作。”可以看出,員工與分公司之間的應(yīng)該是有一種隸屬關(guān)系的。由于一個分公司可以有多名員工,一名員工只能屬于一個公司,所以分公司與員工存在1對多的關(guān)系。 (2)從“每個分公司由一名經(jīng)理負(fù)責(zé)管理分公司的業(yè)務(wù)和員工,系統(tǒng)需要記錄每個經(jīng)理的任職時間?!笨梢钥闯龇止九c經(jīng)理之間存在1對1的關(guān)系。 (3)從“一個業(yè)務(wù)員可以受理多個客戶的快件申請,一個快件申請只能由一個業(yè)務(wù)員受理?!笨梢钥闯鰳I(yè)務(wù)員與申請單之間存在1對多的關(guān)系。 (4)從“調(diào)度員根據(jù)已受理的申請單安排快件的承運事宜,例如:執(zhí)行承運的業(yè)務(wù)員、運達(dá)時間
22、等。一個業(yè)務(wù)員可以執(zhí)行調(diào)度員安排的多個快件的承運業(yè)務(wù)?!笨梢钥闯稣{(diào)度員與申請單之間存在1對多的關(guān)系。與此同時承運的業(yè)務(wù)員與申請單之間也存在1對多的關(guān)系。 (5)從“當(dāng)客戶要寄快件時,先要提交快件申請單,申請?zhí)栍上到y(tǒng)自動生成??旒暾埿畔ㄉ暾?zhí)?、客戶號…”可以看出客戶與申請單之間存在1對多的關(guān)系。 【問題2】 問題1要求補充關(guān)系模型設(shè)計,在對關(guān)系模型設(shè)計進(jìn)行補充完善時,需要從兩方面考慮:一方面是關(guān)系中應(yīng)包含說明中相關(guān)實體必須的信息;另一方面是實體之間需要聯(lián)系,聯(lián)系是通過屬性來達(dá)到效果的,此時也會增加關(guān)系模式中的屬性。 對于員工關(guān)系而言,題目說明中的信息已經(jīng)全了,缺的只能是與其它實體保
23、持聯(lián)系的屬性,即分公司編號。申請單關(guān)系的內(nèi)容從題目說明“快件申請信息包括申請?zhí)?、客戶號、發(fā)件人…”可以看出,缺申請?zhí)柡涂蛻籼?。從題目說明“調(diào)度員根據(jù)已受理的申請單安排快件的承運事宜,例如:執(zhí)行承運的業(yè)務(wù)員、運達(dá)時間等?!笨梢钥闯霭才懦羞\關(guān)系缺申請?zhí)柡蜆I(yè)務(wù)員兩個屬性。 至于主鍵與外鍵根據(jù)其定義直接識別即可: 對于員工關(guān)系,“員工號唯一標(biāo)識員工信息的每一個元組”,因此“員工號”為主鍵,而分公司編號是分公司關(guān)系的主鍵,因此是員工關(guān)系的外鍵。 對于申請單關(guān)系,“一個申請?zhí)枌?yīng)唯一的一個快件申請”,因此“申請?zhí)枴睘橹麈I,而客戶號是客戶關(guān)系的主鍵,業(yè)務(wù)員是業(yè)務(wù)員的員工號,也就是員工關(guān)系的主鍵,因此,
24、客戶號、業(yè)務(wù)員是申請單關(guān)系的外鍵。 對于安排承運關(guān)系,“調(diào)度員根據(jù)已受理的申請單安排快件的承運事宜”,因此“申請?zhí)枴睘橹麈I,而業(yè)務(wù)員、調(diào)度員對應(yīng)的都是員工號,也就是員工關(guān)系的主鍵,因此,業(yè)務(wù)員、調(diào)度員是安排承運關(guān)系的外鍵。 【問題3】 由于客戶關(guān)系的通信地址可以進(jìn)一步分為郵編、省、市、街道,所以該屬性已具備復(fù)合屬性的特點,不是一個簡單屬性。 假設(shè)分公司需要增設(shè)一位經(jīng)理的職位,那么分公司與經(jīng)理之間的聯(lián)系類型應(yīng)修改為1對多,分公司的主鍵應(yīng)該修改為(分公司編號,經(jīng)理)。 4.欲開發(fā)一個繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形。以繪制直線和圓形為例,對
25、應(yīng)的繪圖程序如表6-1所示。 表6-1不同的繪圖程序 該繪圖軟件的擴展性要求,將不斷擴充新的圖形和新的繪圖程序。為了避免出現(xiàn)類爆炸的情況,現(xiàn)采用橋接(Bridge)模式來實現(xiàn)上述要求,得到如圖6-1所示的類圖。 圖6-1類圖 【Java代碼】 (1)Drawing{ (2); (3); } class DP1{ static public void draw_a_line(double x1,double y1,double x2,double y2){/*代碼省略*/} static public void draw_a_circle(double x,doub
26、le y,double r){/*代碼省略*/} } class DP2{ static public void drawline(double x1,double y1,double x2,double y2){/*代碼省略*/} static public void drawcircle(double x,double y,double r){/*代碼省略*/} } class V1Drawing implements Drawing{ public void drawLine(double x1,double y1,double x2,double y2){/*代碼省略*/
27、} public void drawCircle(double x,double y,double r){(4);} } class V2Drawing implements Drawing{ public void drawLine(double x1,double y1,double x2,double y2){/*代碼省略*/} public void drawCircle(double x,double y,double r){(5);} } abstract class Shape{ private Drawing_dp; (6); Shape(Drawing d
28、p){_dp=dp;} public void drawLine(double x1,double y1,double x2,double y2){_dp.drawLine(x1,y1,x2,y2);} public void drawCircle(double x,double y,double r){_dp.drawCircle(x,y,r);} } class Rectangle extends Shape{ private double_x1,_x2,_y1,_y2; public Rectangle(Drawing dp,double x1,double y1,doubl
29、e x2,double y2){/*代碼省略*/} public void draw( ?。﹞/*代碼省略*/} } class Circle extends Shape{ private double_x,_y,_r; public Circle(Drawing dp,double x,double y,double r){/*代碼省略*/} public void draw( ?。﹞drawCircle(_x,_y,_r);} } 正確答案: 本題解析: (1)public interf
30、ace或interface (2)public void drawLine(double x1,double y1,double x2,double y2)或void drawLine(double x1,double y1,double x2,double y2) (3)public void drawCircle(double x,double y,double r)或void drawCircle(double x,double y,double r) (4)DP1.draw_a_circle(x,y,r) (5)DP2.drawcircle(x,y,r) (6)abstra
31、ct public void draw() 本題考查Java面向?qū)ο蟪绦蛟O(shè)計。這類題型主要涉及兩個方面的考查內(nèi)容:Java語法與設(shè)計模式。所謂語法考查是要求考生清楚接口、抽象類、抽象方法等的定義,相關(guān)意思能用正確方式表達(dá)出來。而設(shè)計模式層次的考查主要是模式間關(guān)聯(lián)的建立。 在本題中,(1)~(3)都是典型的語法問題,由于Drawing在后面被實現(xiàn)(implements)了,所以他是一個接口,幫(1)為:public interface。繼續(xù)通過這條線索分析可知,Drawing應(yīng)有drawLine和drawCircle兩個方法的定義。故(2)(3)分別為:public void drawLin
32、e(double x1,double y1,double x2,double y2)和public void drawCircle(double x,double y,double r)。 接下來的第(4)和(5)是同樣類型的空,都需要完成函數(shù)的實現(xiàn)部分,此處的實現(xiàn),一般不要求考生真正實現(xiàn)功能,而是通過別的函數(shù)完成該職能。從對應(yīng)的類圖可以了解到V1Drawing與DP1存在依賴關(guān)系,而DP1中有draw_a_circle()的函數(shù)已完成了畫圓的操作,所以在此只需要調(diào)用這個方法即可。所以(4)和(5)分別為:DP1.draw_a_circle(x,y,r)和DP2.drawcircle(x,y
33、,r)。最后的(6),可以通過分析類圖得知,因為類圖中標(biāo)明Shape類中有:draw()、drawLine()和drawCircle()三個函數(shù),而在Shape類中缺draw(),所以需要補上該函數(shù)的定義,即abstract public void draw()。 5.某航空公司會員積分系統(tǒng)(CFrequentFlyer)的主要功能描述如下: 乘客只要辦理該航空公司的會員卡,即可成為普卡會員(CBasic)。隨著飛行里程數(shù)的積累,可以從普卡會員升級到銀卡會員(CSilver)或金卡會員(CGold)。非會員(CNonMember)不能積累里程數(shù)。 每年年
34、末,系統(tǒng)根據(jù)會員在本年度累積的里程數(shù)對下一年會員等級進(jìn)行調(diào)整。 普卡會員在一年內(nèi)累積的里程數(shù)若滿25000英里但不足50000英里,則自動升級為銀卡會員;若累積的里程數(shù)在50000英里以上,則自動升級為金卡會員。銀卡會員在一年內(nèi)累積的里程數(shù)若在50000英里以上,則自動升級為金卡會員。 若一年內(nèi)沒有達(dá)到對應(yīng)級別要求的里程數(shù),則自動降低會員等級。金卡會員一年內(nèi)累積的里程數(shù)若不足25000英里,則自動降級為普卡會員;若累積的里程數(shù)達(dá)到25000英里,但是不足50000英里,則自動降級為銀卡會員。銀卡會員一年內(nèi)累積的里程數(shù)若不足25000英里,則自動降級為普卡會員。 采用面向?qū)ο蠓椒▽T積分
35、系統(tǒng)進(jìn)行分析與設(shè)計,得到如圖3-1所示的狀態(tài)圖和圖3-2所示的類圖。 圖3-1狀態(tài)圖 圖3-2的類圖 【問題1】(6分) 根據(jù)說明中的描述,給出圖3-1中S1~S3處所對應(yīng)的狀態(tài)以及T1~T3處所對應(yīng)的遷移的名稱。 【問題2】(4分) 根據(jù)說明中的描述,給出圖3-2中C1~C4所對應(yīng)的類名(類名使用說明中給出的英文詞匯)。 【問題3】(5分) 圖3-2所示的類圖中使用了哪種設(shè)計模式?在這種設(shè)計模式下,類CFrequentFlyer必須具有的屬性是什么?C1~C4中的travel方法應(yīng)具有什么功能? 正確答案:
36、 本題解析: 【問題1】(6分) S1:普卡會員 S2:銀卡會員 S3:金卡會員 T1:25000<=里程<50000 T2:里程>=50000 T3:里程>=50000 【問題2】(4分) C1~C4:CNonMember、CBasic、CSilver、CGold 【問題3】(5分) (1)狀態(tài)模式 (2)記錄下一狀態(tài)的屬性 (3)判斷什么情況進(jìn)入下一狀態(tài) 【問題1】 系統(tǒng)中的狀態(tài)圖,是對狀態(tài)轉(zhuǎn)換的圖形化表達(dá)。從題目的說明部分可知,在狀態(tài)轉(zhuǎn)換過程中,涉及到的狀態(tài)一共有四種:非會員,普卡會員,銀卡會員,金卡會員。從狀態(tài)圖涉及的轉(zhuǎn)換可
37、知S1~S3分別為:普卡會員,銀卡會員,金卡會員。關(guān)于狀態(tài)轉(zhuǎn)換的分析如下: (1)由于普卡會員在一年內(nèi)若累積的里程數(shù)在50000英里以上,則自動升級為金卡會員,所以T3為:里程>=50000。 (2)由于銀卡會員在一年內(nèi)累積的里程數(shù)若在50000英里以上,則自動升級為金卡會員,所以T2為:里程>=50000。 (3)由于一年內(nèi)沒有達(dá)到對應(yīng)級別要求的里程數(shù),則自動降低會員等級。金卡會員一年累積的里程數(shù)達(dá)到25000英里,但是不足50000英里,則自動降級為銀卡會員,所以T1為:25000<=里程<50000。 【問題2】 問題2非常容易,說明中給出的英文詞匯一共只有5個,有著同屬于一個
38、父類的四個子類關(guān)系的,也就只有:CNonMember、CBasic、CSilver、CGold這四個了,并且這四個類位置可以互換。 【問題3】 該問題要求分析類圖所采用的設(shè)計模式,此處由于涉及到狀態(tài)的轉(zhuǎn)換問題,所以首選應(yīng)是設(shè)計模式中的狀態(tài)模式。由于狀態(tài)模式的標(biāo)準(zhǔn)UML圖為: 與題目給出的圖示完全一致,所以可以斷定本題所采用的設(shè)計模式就是狀態(tài)模式。 由于是狀態(tài)模式,所以在類CFrequentFlyer中必須有屬性能記錄下一個狀態(tài),同時travel方法也需要能準(zhǔn)確判斷什么情況應(yīng)該進(jìn)入下一狀態(tài)。 6.某工程計算中要完成多個矩陣相乘(鏈乘)的計算任務(wù)。 兩
39、個矩陣相乘要求第一個矩陣的列數(shù)等于第二個矩陣的行數(shù),計算量主要由進(jìn)行乘法運算的次數(shù)決定。采用標(biāo)準(zhǔn)的矩陣相乘算法,計算Am×n*Bn×p,需要m*n*p次乘法運算。 矩陣相乘滿足結(jié)合律,多個矩陣相乘,不同的計算順序會產(chǎn)生不同的計算量。以矩陣A110×100,A2100×5,A35×50三個矩陣相乘為例,若按(A1*A2)*A3計算,則需要進(jìn)行10*100*5+10*5*50=7500次乘法運算;若按A1*(A2*A3)計算,則需要進(jìn)行100*5*50+10*100*50=75000次乘法運算??梢姴煌挠嬎沩樞?qū)τ嬎懔坑泻艽蟮挠绊憽? 矩陣鏈乘問題可描述為:給定n個矩陣<A1,A2,….An>
40、,矩陣Ai的維數(shù)為pi-1×pi,其中i=1,2,….n。確定一種乘法順序,使得這n個矩陣相乘時進(jìn)行乘法的運算次數(shù)最少。 由于可能的計算順序數(shù)量非常龐大,對較大的n,用蠻力法確定計算順序是不實際的。經(jīng)過對問題進(jìn)行分析,發(fā)現(xiàn)矩陣鏈乘問題具有最優(yōu)子結(jié)構(gòu),即若A1*A2*…*An的一個最優(yōu)計算順序從第k個矩陣處斷開,即分為A1*A2*….Ak和Ak+1*Ak+2*…*An兩個子問題,則該最優(yōu)解應(yīng)該包含A1*A2*…*Ak的一個最優(yōu)計算順序和Ak+1*Ak+2*…An的一個最優(yōu)計算順序。據(jù)此構(gòu)造遞歸式, 其中,cost[i][j]表示Ai+1*Ai+2*...Aj+1的最優(yōu)計算的計算代價。最終
41、需要求解cost[0][n-1]。 【C代碼】 算法實現(xiàn)采用自底向上的計算過程。首先計算兩個矩陣相乘的計算量,然后依次計算3個矩陣、4個矩陣、…、n個矩陣相乘的最小計算量及最優(yōu)計算順序。下面是算法的C語言實現(xiàn)。 (1)主要變量說明 n:矩陣數(shù) seq[]:矩陣維數(shù)序列 cost[][]:二維數(shù)組,長度為n*n,其中元素cost[i][j]表示Ai+1*Ai+2*…Aj+1的最優(yōu)計算的計算代價 trace[][]:二維數(shù)組,長度為n*n,其中元素trace[i][j]表示Ai+1*Ai+2*Aj+1的最優(yōu)計算對應(yīng)的劃分位置,即k (2)函數(shù)cmm #define?N?100
42、int cost[N][N]; int trace[N][N]; int cmm(int n,int seq[]){ int tempCost; int tempTrace; int i,j,k,p; int temp; for(i=0;i<n;i++){cost[i][i]=0;} for(p=1;p<n;p++){ for(i=0;(1);i++){ (2); tempCost=-1; for(k=i;k<j;k++){ temp=(3); if(tempCost==-1||tempCost>temp){ tempCost=temp; (4); } }
43、 cost[i][j]=tempCost; trace[i][j]=tempTrace; } } return cost[0][n-1]; } 【問題1】(8分) 根據(jù)以上說明和C代碼,填充C代碼中的空(1)~(4)。 【問題2】(4分) 根據(jù)以上說明和C代碼,該問題采用了(5)算法設(shè)計策略,時間復(fù)雜度(6)。(用O符號表示) 【問題3】(3分) 考慮實例n=6,各個矩陣的維數(shù):A1為5*10,A2為10*3,A3為3*12,A4為12*5,A5為5*50,A6為50*6,即維數(shù)序列為5,10,3,12,5,50,6。則根據(jù)上述C代碼得到的一個最優(yōu)計算順序為(7)(用加括
44、號方式表示計算順序),所需要的乘法運算次數(shù)為(8)。 正確答案: 本題解析: 【問題1】 (1)i<n-p (2)j=i+p (3)cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j+1] (4)tempTrace=k 【問題2】 (5)動態(tài)規(guī)劃法 (6)O(n3) 【問題3】 (7)((A1A2)((A3A4)(A5A6))) (8)2010 在解答本題時,需要注意的第一個問題便是矩陣的乘法到底是怎么進(jìn)行的。 一個n行m列的矩陣可以乘以一
45、個m行p列的矩陣,得到的結(jié)果是一個n行p列的矩陣,其中的第i行第j列位置上的數(shù)等于前一個矩陣第i行上的m個數(shù)與后一個矩陣第j列上的m個數(shù)對應(yīng)相乘后所有m個乘積的和。如: 在本題中,題干部分提到“發(fā)現(xiàn)矩陣鏈乘問題具有最優(yōu)子結(jié)構(gòu)”,這是利用動態(tài)規(guī)劃法求解最優(yōu)解問題的典型特征。所以(5)應(yīng)填動態(tài)規(guī)劃法。 接下來分析(1)-(4)空,這幾個空中,最容易回答的是(3)和(4)。(3)空可通過題目給出的遞歸式分析得到,其中cost數(shù)組部分與公式完全一致,而p數(shù)組在程序中是seq,所以回答時修正即可,(3)填:cost[i][k]+cost[k+1][j]+seq[i]*seq[k+1]*seq[j
46、+1]。第(4)空的上一句為:tempCost=temp,即保存當(dāng)前狀態(tài)最優(yōu)解,由于在保存最優(yōu)解時,不僅涉及cost的記錄,還涉及其位置k的記錄,所以需要在此進(jìn)行tempTrace=k的操作。 (1)與(2)相對復(fù)雜,其中(1)是對i值范圍的確定,而(2)是對j的賦值操作(由于后面用到了j,但程序中沒有對j的賦值,從而斷定該空是對j的賦值)。兩者一并起到一個效果,對cost數(shù)組操作時的操作范圍與順序。由于在進(jìn)行矩陣鏈乘操作時,分析解空間所用到的是cost右上角的三角矩陣,而操作時,是對這個三角矩陣從左至右,呈斜線的訪問(如圖所示)。所以(1)和(2)分別填i<n-p和j=i+p。 該程序由于涉及3重循環(huán),所以時間復(fù)雜度為:O(n3)。通過手動運行程序的方式可知最優(yōu)解為: (A1A2)((A3A4)(A5A6))。 總計算次數(shù)為2010。
- 溫馨提示:
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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 24香港璀璨的明珠
- 第02講 第一章 綜合布線基礎(chǔ)知識
- 預(yù)防傳染病課件
- 【創(chuàng)新設(shè)計】2011屆高考生物一輪復(fù)習(xí) 第5章單元綜合提升 細(xì)胞增殖、分化、衰老和凋亡課件 蘇教版必修1
- 512防震減災(zāi)安全教育班會課件
- 2022年浙教初中數(shù)學(xué)八下《反證法》課件10
- 1山中訪友課后作業(yè)(A組-基礎(chǔ)篇)
- 產(chǎn)后出血完整版
- 質(zhì)量培訓(xùn)教材(2)
- 部編版一年級下冊語文課件第三單元語文園地三(完美版)
- 我最好老師課件
- 面向?qū)ο蟾呒墤?yīng)用及C-sharp-語法新特性課件
- 堿金屬元素課件
- 部編人教版六年級語文下冊14《文言文二則-》學(xué)-弈課件
- 部編版六年級上冊語文課件--宇宙生命之謎