摘要:2018上半年軟件設(shè)計(jì)師考試已結(jié)束,小編為大家整理了2018上半年軟件設(shè)計(jì)師下午真題,以下為第二部分。
● 閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
某ETC( Electronic Toll Collection,不停車收費(fèi))系統(tǒng)在高速公路沿線的特定位置上設(shè)置一個(gè)橫跨道路上空的龍門架( Toll gantry),龍門架下包括6條車道( Traffic lanes),每條車道上安裝有雷達(dá)傳感器( Radar sensor)、無線傳輸器( Radio transceiver)和數(shù)碼相機(jī)( Digital Camera)等用于不停車收費(fèi)的設(shè)備,以完成正常行駛速度下的收費(fèi)工作。該系統(tǒng)的基本工作過程如下:
(1)每輛汽車上安裝有車載器,駕駛員( Driver)將一張具有識(shí)別碼的磁卡插入車載器中。磁卡中還包含有駕駛員賬戶的當(dāng)前信用記錄。
(2)當(dāng)汽車通過某條車道時(shí),不停車收費(fèi)設(shè)備識(shí)別車載器內(nèi)的特有編碼,判斷車型,將收集到的相關(guān)信息發(fā)送到該路段所屬的區(qū)域系統(tǒng)( Regional center)中,計(jì)算通行費(fèi)用創(chuàng)建收費(fèi)交易( Transaction),從駕駛員的專用賬戶中扣除通行費(fèi)用。如果駕駛員賬戶透支,則記錄透支賬戶交易信息。區(qū)域系統(tǒng)再將交易后的賬戶信息發(fā)送到維護(hù)駕駛員賬戶信息的中心系統(tǒng)( Central system)
(3)車載器中的磁卡可以使用郵局的付款機(jī)進(jìn)行充值。充值信息會(huì)傳送至中心系統(tǒng),以更新駕駛員賬戶的余額。
(4)當(dāng)沒有安裝車載器或者車載器發(fā)生故障的車輛通過車道時(shí),車道上的數(shù)碼相機(jī)將對(duì)車輛進(jìn)行拍照,并將車輛照片及拍攝時(shí)間發(fā)送到區(qū)域系統(tǒng),記錄失敗的交易信息;并將該交易信息發(fā)送到中心系統(tǒng)。
(5)區(qū)域系統(tǒng)會(huì)獲取不停車收費(fèi)設(shè)備所記錄的交通事件( Traffic events);交通廣播電臺(tái)( Traffic advice center)根據(jù)這些交通事件進(jìn)行路況分析并播報(bào)路況。
現(xiàn)采用面向?qū)ο蠓椒▽?duì)上述系統(tǒng)進(jìn)行分析與設(shè)計(jì),得到如表3-1所示的用例列表以及如圖3-1所示的用例圖和圖3-2所示的分析類圖。
【問題1】(4分)
根據(jù)說明中的描述,給出圖3-1中A1~A4所對(duì)應(yīng)的參與者名稱。
【問題2)(5分)
根據(jù)說明中的描述及表3-1,給出圖3-1中U1-U5所對(duì)應(yīng)的用例名稱。
【問題3】(6分)
根據(jù)說明中的描述,給出圖3-2中C1~C6所對(duì)應(yīng)的類名。
● 閱讀下列說明和C代碼,回答問題1和問題2,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
某公司購買長鋼條,將其切割后進(jìn)行出售。切割鋼條的成本可以忽略不計(jì),鋼條的長度為整英寸。已知價(jià)格表P,其中中Pi(i=1,2,...,m)表示長度為i英寸的鋼條的價(jià)格?,F(xiàn)要求解使銷售收益最大的切割方案。
求解此切割方案的算法基本思想如下:
假設(shè)長鋼條的長度為n英寸,最佳切割方案的最左邊切割段長度為i英寸,則繼續(xù)求解剩余長度為n-i 英寸鋼條的最佳切割方案??紤]所有可能的i,得到的最大收益rn對(duì)應(yīng)的切割方案即為最佳切割方案。rn的遞歸定義如下:
rn =max1≤ i ≤n(pi +rn-i)
對(duì)此遞歸式,給出自頂向下和自底向上兩種實(shí)現(xiàn)方式
【C代碼】
/*常量和變量說明
n:長鋼條的長度
P[]:價(jià)格數(shù)組
*/
#define LEN 100
int Top_Down_ Cut_Rod(int P[],int n){/*自頂向下*/
int r=0;
int i;
if(n==0){
retum 0;
}
for(i=1;(1);i++){
int tmp=p[i]+Top_Down_ Cut_Rod(p,n-i);
r=(r>=tmp)?r:tmp;
}
return r;
}
int Bottom_Up_Cut_Rod(int p[],int n){ /*自底向上*/
int r[LEN]={0};
int temp=0;
int i,j;
for(j=1;j<=n;j++){
temp=0;
for(i=1;(2);i++){
temp=(3);
}
(4)
}
return r[n];
}
【問題1】(8分)
根據(jù)說明,填充C代碼中的空(1)~(4)。
【問題2】(7分)
根據(jù)說明和C代碼,算法采用的設(shè)計(jì)策略為(5)。
求解rn時(shí),自頂向下方法的時(shí)間復(fù)雜度為(6);自底向上方法的時(shí)間復(fù)雜度為(7)(用O表示)。
● 閱讀下列說明和C++代碼,將應(yīng)填入(n)處的字句寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說明】
生成器( Builder)模式的意圖是將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。圖5-1所示為其類圖。
【C++代碼】
#include <iostream>
#include <string>
using namespace std;
class Product {
private:
string partA, partB;
public:
Product__(5)__{ }
void setPartA(const string&s){ PartA=s;}
void setPartB(const string&s){ PartB=s;}
∥其余代碼省略
};
class Builder{
public:
(1);
virtual void buildPartB__(6)__=0;
(2);
};
class ConcreteBuilder1: public Builder{
private:
Product* product;
public:
ConcreteBuilder1__(7)__{product=new Product__(8)__; }
void buildPartA__(9)__{ (3)("Component A");}
void buildPartB__(10)__{ (4)("Component B");}
Product*getResult__(11)__{ return product;}
∥其余代碼省略
};
class ConcreteBuilder2: public Builder{
/*代碼省略*/
};
class Director {
private:
Builder* builder;
public:
Director(Builder*pBuilder){builder*pBuilder;}
void construct__(12)__{
(5)
∥其余代碼省略
}
∥其余代碼省略
};
int main__(13)__{
Director* director1=new Director(new ConcreteBuilder1__(14)__);
director1->construct__(15)__;
delete director 1;
return 0;
}
軟考備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題