第
3題: 閱讀下列說(shuō)明和圖,回答問(wèn)題l至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
一個(gè)簡(jiǎn)單的圖形編輯器提供給用戶(hù)的基本操作包括:創(chuàng)建圖形、創(chuàng)建元素、選擇元素以及刪除圖形。圖形編輯器的組成及其基本功能描述如下:
(1)圖形由文本元素和圖元元素構(gòu)成,圖元元素包括線(xiàn)條、矩形和橢圓。
(2)顯示在工作空間中,一次只能顯示一張圖形(即當(dāng)前圖形,current)。
(3)提供了兩種操作圖形的工具:選擇工具和創(chuàng)建工具。對(duì)圖形進(jìn)行操作時(shí),一次只能使用一種工具(即當(dāng)前活動(dòng)工具,active)
① 創(chuàng)建工具用于創(chuàng)建文本元素和圖元元素。
② 于顯示在工作空間中的圖形,使用選擇工具能夠選定其中所包含的元素,可以選擇一個(gè)元素,也可以同時(shí)選擇多個(gè)元素。被選擇的元素稱(chēng)為當(dāng)前選中元素( selected)。
③ 種元素都具有對(duì)應(yīng)的控制點(diǎn)。拖拽選定元素的控制點(diǎn),可以移動(dòng)元素或者調(diào)整元素的大小。
現(xiàn)采用面向?qū)ο蠓椒ㄩ_(kāi)發(fā)該圖形編輯器,使用UML進(jìn)行建模。構(gòu)建出的用例圖和類(lèi)圖分別如圖3-1和3-2所示。


?【問(wèn)題1】 (4分)
根據(jù)說(shuō)明中的描述,給出圖3-1中U1和U2所對(duì)應(yīng)的用例,以及(1)和(2)處所對(duì)應(yīng)的關(guān)系。
?【問(wèn)題2】(8分)
根據(jù)說(shuō)明中的描述,給出圖3.2中缺少的C1~C8所對(duì)應(yīng)的類(lèi)名以及(3)~(6)處所對(duì)應(yīng)的多重度。
?【問(wèn)題3】(3分)
圖3-2中的類(lèi)圖設(shè)計(jì)采用了橋接(Bridge)設(shè)計(jì)模式,請(qǐng)說(shuō)明該模式的內(nèi)涵。
答案解析與討論:
m.xiexiliangjiufa.com/st/3810513191.html第
4題: 閱讀下列說(shuō)明和C代碼,回答問(wèn)題1至問(wèn)題3,將解答寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某應(yīng)用中需要對(duì)100000個(gè)整數(shù)元素進(jìn)行排序,每個(gè)元素的取值在0~5之間。排序算法的基本思想是:對(duì)每一個(gè)元素x,確定小于等于x的元素個(gè)數(shù)(記為m),將x放在輸出元素序列的第m個(gè)位置。對(duì)于元素值重復(fù)的情況,依次放入第m-l、m-2、…個(gè)位置。例如,如果元素值小于等于4的元素個(gè)數(shù)有10個(gè),其中元素值等于4的元素個(gè)數(shù)有3個(gè),則4應(yīng)該在輸出元素序列的第10個(gè)位置、第9個(gè)位置和第8個(gè)位置上。算法具體的步驟為:
步驟1:統(tǒng)計(jì)每個(gè)元素值的個(gè)數(shù)。
步驟2:統(tǒng)計(jì)小于等于每個(gè)元素值的個(gè)數(shù)。
步驟3:將輸入元素序列中的每個(gè)元素放入有序的輸出元素序列。
【C代碼】
下面是該排序算法的C語(yǔ)言實(shí)現(xiàn)。
(1)常量和變量說(shuō)明
R: 常量,定義元素取值范圍中的取值個(gè)數(shù),如上述應(yīng)用中R值應(yīng)取6
i:循環(huán)變量
n:待排序元素個(gè)數(shù)
a:輸入數(shù)組,長(zhǎng)度為n
b:輸出數(shù)組,長(zhǎng)度為n
c:輔助數(shù)組,長(zhǎng)度為R,其中每個(gè)元素表示小于等于下標(biāo)所對(duì)應(yīng)的元素值的個(gè)數(shù)。
(2)函數(shù)sort
1 void sort(int n,int a[],int b[]){
2 int c[R],i;
3 for (i=0;i< (1) :i++){
4 c[i]=0;
5 }
6 for(i=0;i
7 c[a[i]] = (2) ;
8 }
9 for(i=1;i
10 c[i]= (3)
11 }
12 for(i=0;i
13 b[c[a[i]]-1]= (4) ;
14 c[a[i]]=c[a[i]]-1;
15 }
16 }
?【問(wèn)題1】(8分)
根據(jù)說(shuō)明和C代碼,填充C代碼中的空缺(1)~(4)。
?【問(wèn)題2】(4分)
根據(jù)C代碼,函數(shù)的時(shí)間復(fù)雜度和空間復(fù)雜度分別為 (5) 和 (6) (用O符號(hào)表示)。
?【問(wèn)題3】(3分)
根據(jù)以上C代碼,分析該排序算法是否穩(wěn)定。若穩(wěn)定,請(qǐng)簡(jiǎn)要說(shuō)明(不超過(guò)100字);若不穩(wěn)定,請(qǐng)修改其中代碼使其穩(wěn)定(給出要修改的行號(hào)和修改后的代碼)。
答案解析與討論:
m.xiexiliangjiufa.com/st/3810626414.html第
5題: 閱讀下列說(shuō)明和C++代碼,將應(yīng)填入空(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某飯店在不同的時(shí)段提供多種不同的餐飲,其菜單的結(jié)構(gòu)圖如下圖所示。
現(xiàn)在采用組合(Composition)模式來(lái)構(gòu)造該飯店的菜單,使得飯店可以方便地在其中增加新的餐飲形式,得到如下圖所示的類(lèi)圖。其中MenuComponent為抽象類(lèi),定義了添加(add)新菜單和打印飯店所有菜單信息(print)的方法接口。類(lèi)Menu表示飯店提供的每種餐飲形式的菜單,如煎餅屋菜單、咖啡屋菜單等。每種菜單中都可以添加子菜單,例如圖中的甜點(diǎn)菜單。類(lèi)MenuItem表示菜單中的菜式。

()
【C++代碼】
#include
#include
#include
using namespace std;
class MenuComponent{
protected: string name;
public:
MenuComponent(string name){ this->name= name;)
string getName(){ return name;)
(1) ; //添加新菜單
virtual void print()=0;//打印菜單信息
};
class Menultem: public MenuComponent{
private:double price;
public:
Menultem(string name, double price):MenuComponent(name){ this->price= price;
double getPrice(){ return price;)
void add(MenuComponent* menuComponent){ retum;}//添加新菜單
void print(){ cout<<" " <
};
class Menu:public MenuComponent{
private: list< (2) > menuComponents;
public:
Menu(string name): MenuComponent(name){}
void add(MenuComponent* menuComponent) //添加新菜單
{ (3) ; }
void print(){
cout<<"\n"<
std::list
::iterator iter,
for(iter= menuComponents.begin0; iter!=menuComponents.end0; iter++)
(4) ->print();
}
};
void main0{
MenuComponent* alIMenus= new Menu("ALL MENUS");
MenuComponent* dinerMenu= new Menu("DINER MENU");
……//創(chuàng)建更多的Menu對(duì)象,此處代碼省略
alIMenus->add(dinerMenu); //將dinerMenu添加到餐廳菜單中
……//為餐廳增加更多的菜單,此處代碼省略
(5) ->printO; //打印飯店所有菜單的信息
答案解析與討論:m.xiexiliangjiufa.com/st/381078045.html