版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中級(jí)軟件設(shè)計(jì)師下午試題-65(總分:102.99,做題時(shí)間:90分鐘)一、試題一(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明一個(gè)新的音像商店準(zhǔn)備向比較廣泛的人群岀租錄像帶和光碟。該商店的管理決定在計(jì)算機(jī)系統(tǒng)的支持下來(lái) 運(yùn)作。音像商店在貨架上存放著題材廣泛的當(dāng)前流行的電影庫(kù)。由于同一個(gè)電影片名可能有于不同的導(dǎo)演而有不 同的版本,因此電影用電影代碼區(qū)分,而不用電影片名;同一個(gè)版本有多份拷貝,因此音像制品用一個(gè)唯 一的編號(hào)標(biāo)識(shí)。某個(gè)特定的電影可以存放在錄像帶或光碟上,錄像帶和光碟的租金不同。錄像帶要么是Beta格式要么是VHS格式;光碟為DVD格式,容量比較大,一張光碟可以存儲(chǔ)同一電影片名的不同版本。每個(gè)
2、電影都有特定的租用期(用天表示),并帶有在租用期內(nèi)的租金。音像商店必須能夠立即回答關(guān)于某個(gè)電影 的庫(kù)存和有多少供租用的帶子或光碟。音像商店的店員負(fù)責(zé)定購(gòu)音像、聯(lián)系客戶、音像上架,并對(duì)客戶的詢問(wèn)給岀答復(fù)。該系統(tǒng)采用面向?qū)ο蠓椒ㄩ_(kāi)發(fā),系統(tǒng)中的類以及類之間的關(guān)系用UML類圖表示,圖1-1是該系統(tǒng)的用例圖,圖1-2是該系統(tǒng)的類圖的一部分。圖 1-1圖 1-2(分?jǐn)?shù):15.00 )(1) .根據(jù)題意,給岀“電影”類的主要屬性。(分?jǐn)?shù):5.00 ) 正確答案:(電影代碼、電影片名、導(dǎo)演)解析:“由于同一個(gè)電影片名可能有于不同的導(dǎo)演而有不同的版本,因此電影用電影代碼區(qū)分,而不用電 影片名;同一個(gè)版本有多份拷
3、貝,因此音像制品用一個(gè)唯一的編號(hào)標(biāo)識(shí)?!保纱丝傻秒娪暗闹饕獙傩裕?電影代碼、電影片名、導(dǎo)演。注意:“編號(hào)”不是“電影”的屬性,而是“音像制品”的屬性。(2) .根據(jù)題意,指出圖1-1中缺失的用例。(分?jǐn)?shù):5.00 ) 正確答案:(A) “定購(gòu)音像” (B) “聯(lián)系客戶”)解析:圖1-1是該系統(tǒng)的用例圖。根據(jù)題述,“音像商店的店員負(fù)責(zé)定購(gòu)音像、聯(lián)系客戶、音像上架,并 對(duì)客戶的詢問(wèn)給岀答復(fù)”,易知缺失的用例為:“定購(gòu)音像”和“聯(lián)系客戶”。(3) .根據(jù)題意,補(bǔ)充圖1-2的類圖中缺失的類之間的關(guān)系,用UML表示法表示。要求標(biāo)出重復(fù)度。在UML中,重復(fù)度(Multiplicity)定義了某個(gè)類的一個(gè)
4、實(shí)例可以與另一個(gè)類的多少個(gè)實(shí)例相關(guān)聯(lián)。通常把它寫(xiě)成一個(gè)表示取值范圍的表達(dá)式或者一個(gè)具體的值。(分?jǐn)?shù):5.00 ) 正確答案:(*)解析:UML中的關(guān)系有依賴、關(guān)聯(lián)、泛化和實(shí)現(xiàn)。依賴(dependency)是兩個(gè)事物之間的語(yǔ)義關(guān)系,其中一個(gè)事物發(fā)生變化會(huì)影響另一個(gè)事物的語(yǔ)義。關(guān)聯(lián)是一種結(jié)構(gòu)關(guān)系,聚集(aggregation)是一種特殊類型的關(guān)聯(lián),描述整體和部分之間的結(jié)構(gòu)關(guān)系。泛化(generalization)是一種特殊/ 一般關(guān)系。實(shí)現(xiàn)(realization)是類元之間的語(yǔ)義關(guān)系,其中一個(gè)類元制定了由另一個(gè)類元保證執(zhí)行的契約?!耙粝裰破贰笔请娪暗妮d體,自然與“電影”有關(guān)聯(lián), 關(guān)聯(lián)度是多少呢?
5、先來(lái)看“音像制品”與“錄像帶”及“光碟”間的關(guān)系,“錄像帶”及“光碟”都是“音像制品”的不同存儲(chǔ)格式,因此“錄像帶”及“光 碟”都是“音像制品”的特殊化。再回到“音像制品”與“電影”的關(guān)聯(lián)度,“錄像帶”只存儲(chǔ)一個(gè)電影 版本,而“光碟”可以存儲(chǔ)多個(gè)版本,因此一個(gè)“音像制品”有一個(gè)或多個(gè)“電影”,一個(gè)“電影”可以 存儲(chǔ)于多個(gè)“音像制品”中(當(dāng)然也可能沒(méi)有)。一個(gè)“音像制品”對(duì)應(yīng)多個(gè)“租用記錄”,一個(gè)租用記錄只對(duì)應(yīng)一個(gè)“音像制品”。二、試題二(總題數(shù):1,分?jǐn)?shù):13.00)說(shuō)明為了有效記錄交通事故情況,欲設(shè)計(jì)一個(gè)交通事故記錄系統(tǒng)。一輛汽車(chē)有一個(gè)唯一的“車(chē)牌號(hào)”,車(chē)主購(gòu)買(mǎi)汽車(chē)時(shí)需要提供相關(guān)信息,包括身
6、份證、姓名、年齡、性別、地址等。一個(gè)車(chē)主可以擁有多輛汽車(chē),而一輛汽車(chē)只有一個(gè)車(chē)主。駕駛員不一定是車(chē)主,因此記錄交通事 故時(shí)要記錄駕駛員身份證號(hào),同時(shí)記錄事故發(fā)生時(shí)刻。圖2-1描繪了人、汽車(chē)、交通事故三個(gè)實(shí)體類型及實(shí)體間聯(lián)系的一個(gè)E-R圖。圖 2-1對(duì)應(yīng)的關(guān)系模式為:人(身份證號(hào),姓名,性別,年齡,地址)汽車(chē)(車(chē)牌號(hào),型號(hào))事故(車(chē)牌號(hào),身份證號(hào),時(shí)刻,損失,描述 )擁有(身份證號(hào),車(chē)牌號(hào))(分?jǐn)?shù):12.99 )(1) .指岀每種關(guān)系模式的主鍵。(分?jǐn)?shù):4.33 ) 正確答案:(人:身份證汽車(chē):車(chē)牌號(hào) 事故:(車(chē)牌號(hào),身份證)擁有:車(chē)牌號(hào))解析:身份證號(hào)是唯一的,可作為人的主鍵。依題述,“一輛汽
7、車(chē)有一個(gè)唯一的車(chē)牌號(hào)”,因此汽車(chē) 關(guān)系的主鍵為:車(chē)牌號(hào)。一起事故自然與某量車(chē)(車(chē)牌號(hào)標(biāo)識(shí))相關(guān),而“駕駛員不一定是車(chē)主”,因此還須記錄駕駛員(身份證標(biāo)識(shí)),故其主鍵為:(車(chē)牌號(hào),身份證號(hào))?!耙粋€(gè)車(chē)主可以擁有多輛汽車(chē),一輛汽 車(chē)只有一個(gè)車(chē)主”,因此擁有關(guān)系的主鍵為:車(chē)牌號(hào)。(2) .創(chuàng)建人表時(shí),“身份證號(hào)”使用INTEGER數(shù)據(jù)類型,并且要求此列值不能為空、值惟一,姓名列不能為空。請(qǐng)?jiān)谙铝杏糜趧?chuàng)建表人的SQL語(yǔ)句空缺處填入正確的內(nèi)容。CREATE TABLEX (身份證號(hào) INTEGER,姓名 CHAR(20) (1),性另U CHAR(1),年齡 INTEGER,地址 CHAR(20),(2
8、)(分?jǐn)?shù):4.33 ) 正確答案:(1)NOT NULL (2)PRIMARY KEY(身份證號(hào))解析:要求姓名列非空,故空 (1)填NOT NULL列級(jí)約束。身份證號(hào)是該表的主鍵,創(chuàng)建表時(shí)需要聲明,故空(2)應(yīng)填PRIMARY KEY!份證號(hào)),是表級(jí)約束。聲明主鍵也可以用列級(jí)約束實(shí)現(xiàn),即在列后緊跟NOT NULL和UNQUIE(3) .請(qǐng)?jiān)谙铝蠸QL查詢語(yǔ)句空缺處填入正確的內(nèi)容(1) 查詢身份證號(hào)為“ 123456'的人作為駕駛員時(shí)所有的事故記錄。SELECT * FROM事故 WHERE (1)查詢身份證號(hào)為“ 123456'的車(chē)主所擁有的汽車(chē)的事故記錄。SELECT *
9、 FROM事故 WHERE車(chē)牌號(hào)(2)(SELECT車(chē)牌號(hào) FROM (3) WHERE身份證號(hào)="123456")(3)查詢車(chē)牌號(hào)為“ 123456'汽車(chē)在車(chē)主是駕駛員時(shí)的事故記錄。SELECT * FRO M 事故 WHERE (4)(SELECT * FROM (5) WHERE 車(chē)牌號(hào)="123456"AND _(6)J (分?jǐn)?shù):4.33 )正確答案:( 身份證號(hào)="123456" (2)IN (3) 擁有(4)EXISTS(5) 擁有(6)擁有.身份證號(hào)=事故.身份證號(hào)) 解析:這里都是一些比較簡(jiǎn)單的小查詢???1)
10、處填身份證號(hào)="123456",表示“身份證號(hào)為123456'語(yǔ)意。空填I(lǐng)N。連接子查詢的連接詞有:IN、NOT IN、EXISTS NOT EXISTS根據(jù)語(yǔ)意,此處應(yīng)為IN。FROM之后應(yīng)跟表名或視圖名,根據(jù)語(yǔ)意,應(yīng)該是從擁有表中選岀滿足條件的車(chē)牌號(hào),故空(3)應(yīng)填“擁有”。查詢要求車(chē)牌號(hào)是123456、車(chē)主是駕駛員的事故記錄,空(4)同空,據(jù)語(yǔ)意應(yīng)填EXISTSo空(5)同空 (3),據(jù)語(yǔ)意可得應(yīng)填“擁有”,車(chē)主信息是在擁有表中,事故時(shí)駕駛員信息是在事故表中,要求車(chē)主是駕駛員,則空(6)應(yīng)為:擁有.身份證號(hào)=事故.身份證號(hào),“擁有.身份證號(hào)"即為車(chē)主
11、信息,“事故 .身份 證號(hào)"即為事故時(shí)駕駛員信息。三、試題三(總題數(shù):1,分?jǐn)?shù):15.00)1.說(shuō)明在數(shù)據(jù)鏈路層擴(kuò)展局域網(wǎng)時(shí)使用網(wǎng)橋。網(wǎng)橋工作在數(shù)據(jù)鏈路層,它根據(jù)MAC幀的目的地址對(duì)收到的幀進(jìn)行轉(zhuǎn)發(fā)。網(wǎng)橋具有過(guò)濾幀的功能:當(dāng)網(wǎng)橋收到一個(gè)幀時(shí),并不是向所有的端口轉(zhuǎn)發(fā)此幀,而是先檢查此幀的 目的MAC地址,然后確認(rèn)將該幀轉(zhuǎn)發(fā)到哪個(gè)端口。最簡(jiǎn)單的網(wǎng)橋有兩個(gè)端口 (即接口)。網(wǎng)橋的每個(gè)端口與一個(gè)網(wǎng)段相連。每當(dāng)收到一個(gè)幀時(shí),通過(guò)查找轉(zhuǎn)發(fā) 表將收到的幀轉(zhuǎn)發(fā)。當(dāng)一個(gè)網(wǎng)橋剛剛連接到局域網(wǎng)上時(shí),其轉(zhuǎn)發(fā)表是空的,此時(shí)若收到一個(gè)幀,按照以下算法處理和建立自己 的轉(zhuǎn)發(fā)表:(1)從端口 x收到的無(wú)差錯(cuò)的幀(如
12、有差錯(cuò)即丟棄),在轉(zhuǎn)發(fā)表中查找目的站MAC地址;如有,則查找出到此 MAC地址應(yīng)走的端口 d,然后進(jìn)行,否則轉(zhuǎn)到(5);(3)如到這個(gè)MAC地址去的端口 d=x,則丟棄此幀(因?yàn)檫@表示不需要經(jīng)網(wǎng)橋進(jìn)行轉(zhuǎn)發(fā)),否則從端口 d轉(zhuǎn)發(fā)此幀;轉(zhuǎn)到(6);(5) 向網(wǎng)橋除x以外的所有端口轉(zhuǎn)發(fā)此幀(這樣做可以保證找到目的站);(6) 如源站不在轉(zhuǎn)發(fā)表中,則將源站MAC地址加入轉(zhuǎn)發(fā)表,登記該幀進(jìn)入網(wǎng)橋的端口號(hào),設(shè)置計(jì)時(shí)器,然后轉(zhuǎn)到(8),如源站在轉(zhuǎn)發(fā)表中,則執(zhí)行(7);(7) 更新計(jì)時(shí)器;(8) 等待新的數(shù)據(jù)幀,轉(zhuǎn)到(1)。這時(shí),網(wǎng)橋就在轉(zhuǎn)發(fā)表中登記以下三個(gè)信息:站地址一一登記收到幀的源MAC地址、端口一一登
13、記收到的幀進(jìn)入該網(wǎng)橋的端口號(hào)、時(shí)間登記收到的幀進(jìn)入該網(wǎng)橋的時(shí)間?,F(xiàn)有五個(gè)工作站分別連接在三個(gè)局域網(wǎng)上,并且用兩個(gè)網(wǎng)橋連接起來(lái),如圖3-1。每一個(gè)網(wǎng)橋的兩個(gè)端口號(hào)都標(biāo)明在圖上。在一開(kāi)始,兩個(gè)網(wǎng)橋中的轉(zhuǎn)發(fā)表都是空的。以后有以下各站向其他的站發(fā)送了數(shù)據(jù)幀,即H1發(fā)送給H5, H3發(fā)送給H2, H4發(fā)送給H3, H2發(fā)送給H1。圖 3-1試將有關(guān)數(shù)據(jù)填寫(xiě)在表中。其中,網(wǎng)橋的處理有:轉(zhuǎn)發(fā)、丟棄或登記。假定幀均無(wú)差錯(cuò)。發(fā)送的幀網(wǎng)橋1的轉(zhuǎn)發(fā) 表網(wǎng)橋2的轉(zhuǎn)發(fā) 表網(wǎng)橋1的 處理網(wǎng)橋2的 處理站地址端口站地址端口H1->H5H3->H2H4->H3H2->H1(分?jǐn)?shù):15.00 ) 正確答
14、案:(發(fā)送的幀網(wǎng)橋1的轉(zhuǎn)發(fā)表網(wǎng)橋2的轉(zhuǎn)發(fā)表網(wǎng)橋1的處 理網(wǎng)橋2的處 理站地址端口站地址端口H1->H5H11H11登記,轉(zhuǎn)發(fā)登記,轉(zhuǎn)發(fā)H3->H2H32H31登記,轉(zhuǎn)發(fā)登記,轉(zhuǎn)發(fā)H4->H3H4r 2r H412登記,丟棄登記,轉(zhuǎn)發(fā)H2->H1H21登記,丟棄收不到)解析:本題考察的是網(wǎng)橋的工作原理。網(wǎng)橋工作在數(shù)據(jù)鏈路層,它根據(jù)MAC幀的目的地址對(duì)收到的幀進(jìn)行轉(zhuǎn)發(fā)。網(wǎng)橋具有過(guò)濾幀的功能:當(dāng)網(wǎng)橋收到一個(gè)幀時(shí),并不是向所有的端口轉(zhuǎn)發(fā)此幀,而是先檢查此幀的目的MAC地址,然后確認(rèn)將該幀轉(zhuǎn)發(fā)到哪個(gè)端口。認(rèn)真閱讀建立轉(zhuǎn)發(fā)表的算法不難解答該題。需要特別注意的是:步驟(6)是檢查源站
15、,而不是目的站,若源站不在轉(zhuǎn)發(fā)表,將其加入,以后作為目的站地址待查。四、試題四(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明在進(jìn)行文法分析的時(shí)候,通常需要檢測(cè)一個(gè)單詞是否在我們的單詞列表里。為了提高查找和定位的速度, 通常都要畫(huà)岀與單詞列表所對(duì)應(yīng)的單詞查找樹(shù)。程序構(gòu)造一棵二叉排序樹(shù),每個(gè)節(jié)點(diǎn)存儲(chǔ)一個(gè)單詞,按字典序列,較小的在左子樹(shù),較大的在右子樹(shù)。函數(shù)中使用的預(yù)定義符號(hào)如下:typedef struct TreeNode/*二叉排序樹(shù)節(jié)點(diǎn) */char *word;struct TreeNode *left, *right;BNODE;函數(shù)int getWord(FILE *fpt, char *wor
16、d)/*從文件fpt中讀取單詞到 word中,到達(dá)文件結(jié)束時(shí)返回 0*/char c;c = fgetc(fpt);if(c = EOF)return 0;/*跳過(guò)單詞間的非字母字符*/while(!(tolower(c) >= 'a' && tolower(c) <= 'z')c = fgetc(fpt);if(c = EOF)return 0;/*不區(qū)分大小寫(xiě)*/while(tolower(c) >= 'a' && tolower(c) <= 'z')*word+ = c
17、;c = fqetc(fpt);*word = 70:return 1;void BTree(BNODE *t, char *word)BNODE *ptr, *p;int compres;p = NITLL;;while(ptr)compres = strcmp(word, (2);if(!compres)return;else(3);ptr = compres > 0 ? ptr->right : ptr->left;ptr = (BNODE*)malloc(sizeof ptr);ptr->left = ptr->right = NULL;ptr->w
18、ord = (char*)malloc(strlen(word) + 1); strcpy(ptr->word, word);if(p = NULL);else if(compres > 0)p->right = ptr;elsep->left = ptr;int main()FILE *fpt;char word40;BNODE *root = NULL;if(fpt = fope n("text.i n", "r") = NULL) printf("不能打開(kāi)文件 text.in! /n"); return
19、1;while(getWord(fpt, word) = 1)BTree (5);fclose(fpt);return 0;(分?jǐn)?shù):15.00 ) 正確答案:(ptr=*t)解析: 正確答案:(ptr->word)解析:正確答案:(p=ptr)解析:正確答案:解析:(*t=ptr)正確答案:(&root,word)解析:ptr指針在使用前需要初始化,空(1)應(yīng)填ptr=*t。構(gòu)造的是二叉排序樹(shù),空(2)自然是比較單詞 word與ptr指針?biāo)傅墓?jié)點(diǎn)單詞,故應(yīng)填ptr->word ??战酉聛?lái)的修改指針ptr使ptr指向了其子節(jié)點(diǎn),為了正確插入節(jié)點(diǎn),需要記錄父節(jié)點(diǎn)指針。因此pt
20、r需要保存下來(lái),故空(3)應(yīng)填p=ptr。p=NULL對(duì)應(yīng)的是空樹(shù)的情況,因此空(4)應(yīng)填*t=ptr。參照BTree函數(shù)的定義,空(5)應(yīng)填&root,word。注意是&root而不是root。五、試題五(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明任何一種程序都是為了解決問(wèn)題而撰寫(xiě)的,解決問(wèn)題時(shí)需要實(shí)現(xiàn)一些特定的運(yùn)算法則。在策略(Strategy)模式下,可以更換實(shí)現(xiàn)算法的部分而不留痕跡,切換整個(gè)算法,簡(jiǎn)化改為采用其他方法來(lái)解決同樣問(wèn)題。以下是一個(gè)“剪刀石頭布”游戲。猜拳時(shí)的“策略”有2種方法:第一種是“猜贏后繼續(xù)岀同樣的招式”(Winningstrategy),第二種是“從上一次出
21、的招式中,以概率分配方式求出下一個(gè)招式的幾率”(ProbStrategy)。程序中定義了Hand類表示猜拳時(shí)的“手勢(shì)",類內(nèi)部以0(石頭)、1(剪刀)、2(布)來(lái)表示。Hand類的實(shí)例只會(huì)產(chǎn)生 3個(gè)。以下是C+語(yǔ)言實(shí)現(xiàn),能夠正確編譯通過(guò)。C+代碼class Handprivate:int handvalue;static Hand *hand0;static Hand *hand1;static Hand *hand2;(1);Hand(int handvalue)this->handvalue = handvalue;public:(2) Hand* getHand(int
22、handvalue)/*省略具體實(shí)現(xiàn)*/>Hand *Hand:handO = new Hand(0);Hand *Hand:hand1 = new Hand(1);Hand *Hand:hand2 = new Hand(2);class Strategypublic:(3) Hand* nextHand() = 0;class Winningstrategy : public Strategyprivate:bool won;Hand *prevHand;public:winningStrategy()won = false;Hand* nextHand()if(!won)prevHa
23、nd = Hand:getHand(rand()%3);return prevHand;class probstrategy : public Strategypublic:Hand* nextHand()int handvalue = 0;/*省略具體實(shí)現(xiàn)*/return Hand:getHand(handvalue);>class Playerprivate:string name;Strategy* strategy;public:Player(string name, (4) strategy)this->name = name;this->strategy = st
24、rategy;Hand *nextHand()(向戰(zhàn)略請(qǐng)示手勢(shì)return (5);(分?jǐn)?shù):15.00 )正確答案:解析:(1)private)正確答案:解析:(static)正確答案:解析:(virtual)正確答案:解析:(Strategy*)正確答案:(strategy->nextHand()解析:Hand類要保證只產(chǎn)生3個(gè)實(shí)例,就要求不能隨便生成Hand類,因此其構(gòu)造方法需要是private型的,故空應(yīng)填private 。先看空,由后面的“ =0"易判知nexthand()函數(shù)是純虛函數(shù),故空(3)應(yīng)填virtual 。再來(lái)看空(2),由對(duì) getHand()方法的調(diào)用
25、方式 Hand:getHand(rand()%3) 及 Hand:getHand(handvalue) ,可知該方法是類Hand的靜態(tài)方法,故空(2)應(yīng)填static。由語(yǔ)句 this->strategy = strategy ;可知:this->strategy 與 strategy 是同數(shù)據(jù)類型,this 表示自身 指針,而this->strategy 是Strategy*類型,故空應(yīng)填Strategy*,注意是指針。方法nextHand()是“向戰(zhàn)略請(qǐng)示手勢(shì)",取得手勢(shì)是通過(guò)其所采用的“策略”實(shí)現(xiàn)的,故空(5)應(yīng)填strategy->nextHand()
26、。注意指針寫(xiě)法。六、試題六(總題數(shù):1,分?jǐn)?shù):15.00)說(shuō)明任何一種程序都是為了解決問(wèn)題而撰寫(xiě)的,解決問(wèn)題時(shí)需要實(shí)現(xiàn)一些特定的運(yùn)算法則。在策略(Strategy)模式下,可以更換實(shí)現(xiàn)算法的部分而不留痕跡,切換整個(gè)算法,簡(jiǎn)化改為采用其他方法來(lái)解決同樣問(wèn)題。以下是一個(gè)“剪刀石頭布”游戲。猜拳時(shí)的“策略”有2種方法:第一種是“猜贏后繼續(xù)岀同樣的招式"(WinningSt rategy),第二種是“從上一次出的招式種,以概率分配方式求出下一個(gè)招式的幾率"(ProbStrategy)。程序中定義了Hand類表示猜拳時(shí)的“手勢(shì)",類內(nèi)部以 0(石頭)、1(剪刀)、2(布)來(lái)
27、表示。Hand類的實(shí)例只會(huì)產(chǎn)生3個(gè)。以下是Java語(yǔ)言實(shí)現(xiàn),省略了不相關(guān)屬性及方法,方法實(shí)現(xiàn)體亦有所省略,能夠正確編譯通過(guò)。Java代碼/Hand.java 文件public class Handpublic static final int HANDVALUE_GUU = 0; /石頭public static final int HANDVALUE_CHO = 1; /剪刀public static final int HANDVALUE_PAA = 2; /布public static final Hand hand =new Hand(HANDVALUE_GUU),new Hand(H
28、ANDVALUE_CHO),new Hand(HANDVALUE_PAA), private int handvalue;(1) Hand(int handvalue) this.handvalue = handvalue;從值取得對(duì)象實(shí)例public (2) Hand getHand(int handvalue)( return handhandvalue;/Strategy.java 文件public interface Strategy public (3) Hand nextHand();/ProbStrategy.java 文件public class ProbStrategy im
29、plements Strategypublic Hand nextHand()int handvalue = 0;/*省略具體實(shí)現(xiàn)*/return Hand.getHand(handvalue);/WinningStrategy.java 文件public class Winningstrategy implements Strategy/*省略了不相關(guān)屬性*/public Hand nextHand()if(!won)prevHand = Hand.getHand(random.nextlnt(3);return prevHand;/Player.java 文件public class Pl
30、ayerprivate String name;private Strategy strategy;public Player(String name, (4) strategy) = name;this.strategy = strategy;public Hand nextHand()/向戰(zhàn)略請(qǐng)示手勢(shì)return (5);(分?jǐn)?shù):15.00)正確答案:解析:(private)正確答案:解析:(static)正確答案:解析:(abstract)正確答案:解析:(Strategy)正確答案:(strategy.nextHand()解析:Hand類要保證只產(chǎn)生3個(gè)實(shí)例,就要求不
31、能隨便生成Hand類,因此其構(gòu)造方法需要是private型的,故空(1)填private。先看空(3) ,nexthand()是接Strategy 方法,應(yīng)為抽象方法,故空 (3)應(yīng)填abstract。再來(lái)看空(2),由對(duì)getHand()方法的調(diào)用方式 Hand.getHand(handvalue) 及Hand.getHand(random.nextInt(3),可知該方法是類 Hand的靜態(tài)方法,故空(2)應(yīng)填static 。由語(yǔ)句this.strategy = strategy;可知:this.strategy 與strategy 是同數(shù)據(jù)類型,this 表示自身引用,而 this.st
32、rategy 是 Strategy 類型,故空(4)應(yīng)填 Strategy 。方法nextHand()是“向戰(zhàn)略請(qǐng)示手勢(shì)”,取得手勢(shì)是通過(guò)其所采用的“策略”實(shí)現(xiàn)的,故空(5)應(yīng)填strategy.nextHand() 。七、試題七(總題數(shù):1分?jǐn)?shù):15.00)說(shuō)明任何一種程序都是為了解決問(wèn)題而撰寫(xiě)的,解決問(wèn)題時(shí)需要實(shí)現(xiàn)一些特定的運(yùn)算法則。在策略(Strategy)模式下,可以更換實(shí)現(xiàn)算法的部分而不留痕跡,切換整個(gè)算法,簡(jiǎn)化改為采用其他方法來(lái)解決同樣問(wèn)題。以下是一個(gè)“剪刀石頭布”游戲。猜拳時(shí)的“策略”有2種方法:第一種是“猜贏后繼續(xù)岀同樣的招式”(Winningstrategy),第二種是“從上
33、一次出的招式種,以概率分配方式求出下一個(gè)招式的幾率”(ProbStrategy)。程序中定義了Hand類表示猜拳時(shí)的“手勢(shì)",類內(nèi)部以 0(石頭)、1(剪刀)、2(布)來(lái)表示。Hand類的實(shí)例只會(huì)產(chǎn)生3個(gè)。以下是C語(yǔ)言實(shí)現(xiàn),省略了不相關(guān)屬性及方法,方法實(shí)現(xiàn)體亦有所省略,能夠正確編譯通過(guò)。C代碼typedef (1) (*funl)();enum HandValueHANDVALUE_GUU=O, HANDVALUE_CHO=1, HANDVALUE_PAA=2;/手勢(shì)可取值,依次為“石頭”、“剪刀”、“布”/其大小順序是循環(huán)相克的,即:石頭贏剪刀,剪刀贏布,布贏石頭bool won;
34、struct Hand *WSprevHand;struct Hand/ 手勢(shì)enum HandValue handvalue;hand3=HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA;int fight(struct Hand *h1, struct Hand *h2)/比較h1和h2o h1代表的手勢(shì)較大時(shí)返回 1,h1較小時(shí)返回-1,相等時(shí)返回0/ if(h1->handvalue = h2->handvalue)return 0;else if(h1->handvalue+1)% (2) = h2>handvalue)return 1;else return -1;struct Hand* getHand(int handvalue)/依據(jù)手勢(shì)代表的值取得手勢(shì),若handvalue不合法,返回NULLswitch(handvalue)case 0:return & hand0;break;case 1:return & hand1;bteak;case 2;return & hand2;break;return (3);struct Strategy/ 策略 funl nextHand;/下一個(gè)手勢(shì)struct Hand
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)家樂(lè)餐飲服務(wù)與食材供應(yīng)合同4篇
- 2025年度電力設(shè)施維護(hù)司機(jī)派遣服務(wù)合同4篇
- 2025年度企業(yè)員工短期培訓(xùn)費(fèi)支付標(biāo)準(zhǔn)合同
- 二零二五年度新能源車(chē)輛采購(gòu)配送及運(yùn)營(yíng)服務(wù)合同3篇
- 二零二五年度企業(yè)法律顧問(wèn)提前終止服務(wù)合同協(xié)議書(shū)
- 二零二五年度城市綠化項(xiàng)目臨時(shí)綠化員聘用合同4篇
- 2025年度個(gè)人與企業(yè)貸款融資合作協(xié)議合同范本4篇
- 2025版門(mén)面轉(zhuǎn)讓合同范本:商業(yè)地產(chǎn)經(jīng)營(yíng)權(quán)轉(zhuǎn)讓詳細(xì)協(xié)議
- 課題申報(bào)參考:南水北調(diào)中線水源區(qū)家庭農(nóng)場(chǎng)耕地生態(tài)保護(hù)行為形成邏輯與實(shí)現(xiàn)機(jī)制研究
- 2025年度美容院美容護(hù)理產(chǎn)品代工合同4篇
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2024年城市軌道交通設(shè)備維保及安全檢查合同3篇
- 電力溝施工組織設(shè)計(jì)-電纜溝
- 【教案】+同一直線上二力的合成(教學(xué)設(shè)計(jì))(人教版2024)八年級(jí)物理下冊(cè)
- 湖北省武漢市青山區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末質(zhì)量檢測(cè)數(shù)學(xué)試卷(含解析)
- 單位往個(gè)人轉(zhuǎn)賬的合同(2篇)
- 電梯操作證及電梯維修人員資格(特種作業(yè))考試題及答案
- 科研倫理審查與違規(guī)處理考核試卷
- GB/T 44101-2024中國(guó)式摔跤課程學(xué)生運(yùn)動(dòng)能力測(cè)評(píng)規(guī)范
- 鍋爐本體安裝單位工程驗(yàn)收表格
- 高危妊娠的評(píng)估和護(hù)理
評(píng)論
0/150
提交評(píng)論