摘要:2018上半年軟件設計師考試已結束,小編為大家整理了2018上半年軟件設計師下午真題,以下為第二部分。
● 閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內(nèi)。
【說明】
某ETC( Electronic Toll Collection,不停車收費)系統(tǒng)在高速公路沿線的特定位置上設置一個橫跨道路上空的龍門架( Toll gantry),龍門架下包括6條車道( Traffic lanes),每條車道上安裝有雷達傳感器( Radar sensor)、無線傳輸器( Radio transceiver)和數(shù)碼相機( Digital Camera)等用于不停車收費的設備,以完成正常行駛速度下的收費工作。該系統(tǒng)的基本工作過程如下:
(1)每輛汽車上安裝有車載器,駕駛員( Driver)將一張具有識別碼的磁卡插入車載器中。磁卡中還包含有駕駛員賬戶的當前信用記錄。
(2)當汽車通過某條車道時,不停車收費設備識別車載器內(nèi)的特有編碼,判斷車型,將收集到的相關信息發(fā)送到該路段所屬的區(qū)域系統(tǒng)( Regional center)中,計算通行費用創(chuàng)建收費交易( Transaction),從駕駛員的專用賬戶中扣除通行費用。如果駕駛員賬戶透支,則記錄透支賬戶交易信息。區(qū)域系統(tǒng)再將交易后的賬戶信息發(fā)送到維護駕駛員賬戶信息的中心系統(tǒng)( Central system)
(3)車載器中的磁卡可以使用郵局的付款機進行充值。充值信息會傳送至中心系統(tǒng),以更新駕駛員賬戶的余額。
(4)當沒有安裝車載器或者車載器發(fā)生故障的車輛通過車道時,車道上的數(shù)碼相機將對車輛進行拍照,并將車輛照片及拍攝時間發(fā)送到區(qū)域系統(tǒng),記錄失敗的交易信息;并將該交易信息發(fā)送到中心系統(tǒng)。
(5)區(qū)域系統(tǒng)會獲取不停車收費設備所記錄的交通事件( Traffic events);交通廣播電臺( Traffic advice center)根據(jù)這些交通事件進行路況分析并播報路況。
現(xiàn)采用面向?qū)ο蠓椒▽ι鲜鱿到y(tǒng)進行分析與設計,得到如表3-1所示的用例列表以及如圖3-1所示的用例圖和圖3-2所示的分析類圖。
【問題1】(4分)
根據(jù)說明中的描述,給出圖3-1中A1~A4所對應的參與者名稱。
【問題2)(5分)
根據(jù)說明中的描述及表3-1,給出圖3-1中U1-U5所對應的用例名稱。
【問題3】(6分)
根據(jù)說明中的描述,給出圖3-2中C1~C6所對應的類名。
● 閱讀下列說明和C代碼,回答問題1和問題2,將解答填入答題紙的對應欄內(nèi)。
【說明】
某公司購買長鋼條,將其切割后進行出售。切割鋼條的成本可以忽略不計,鋼條的長度為整英寸。已知價格表P,其中中Pi(i=1,2,...,m)表示長度為i英寸的鋼條的價格。現(xiàn)要求解使銷售收益最大的切割方案。
求解此切割方案的算法基本思想如下:
假設長鋼條的長度為n英寸,最佳切割方案的最左邊切割段長度為i英寸,則繼續(xù)求解剩余長度為n-i 英寸鋼條的最佳切割方案??紤]所有可能的i,得到的最大收益rn對應的切割方案即為最佳切割方案。rn的遞歸定義如下:
rn =max1≤ i ≤n(pi +rn-i)
對此遞歸式,給出自頂向下和自底向上兩種實現(xiàn)方式
【C代碼】
/*常量和變量說明
n:長鋼條的長度
P[]:價格數(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代碼,算法采用的設計策略為(5)。
求解rn時,自頂向下方法的時間復雜度為(6);自底向上方法的時間復雜度為(7)(用O表示)。
● 閱讀下列說明和C++代碼,將應填入(n)處的字句寫在答題紙的對應欄內(nèi)。
【說明】
生成器( Builder)模式的意圖是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(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;
}
軟考備考資料免費領取
去領取