第
3題: 閱讀下列說明和圖,回答問題1至問題3,將解答填入答題紙的對應欄內。
【說明】
某出版社擬開發(fā)一個在線銷售各種學術出版物的網上商店(ACShop),其主要的功能需求描述如下:
(1)ACShop在線銷售的學術出版物包括論文、學術報告或講座資料等。
(2)ACShop的客戶分為兩種:未注冊客戶和注冊客戶。
(3)未注冊客戶可以瀏覽或檢索出版物,將出版物添加到購物車中。未注冊客戶進行注冊操作之后,成為ACShop注冊客戶。
(4)注冊客戶登錄之后,可將待購買的出版物添加到購物車中,并進行結賬操作。結賬操作的具體流程描述如下:
①從預先填寫的地址列表中選擇一個作為本次交易的收貨地址。如果沒有地址信息,則可以添加新地址。
②選擇付款方式。ACShop支持信用卡付款和銀行轉賬兩種方式。注冊客戶可以從預先填寫的信用卡或銀行賬號中選擇一個付款。若沒有付款方式信息,則可以添加新付款方式。
③確認提交購物車中待購買的出版物后,ACShop會自動生成與之相對應的訂單。
(5)管理員負責維護在線銷售的出版物目錄,包括添加新出版物或者更新在售出版物信息等操作。
現采用面向對象方法分析并設計該網上商店ACShop,得到如圖3-1所示的用例圖和圖3-2所示的類圖。
【問題1】(4分)
根據說明中的描述,給出圖3-1中(1)~(4)所對應的用例名。
【問題2】(4分)
根據說明中的描述,分別說明用例“添加新地址”和“添加新付款方式”會在何種情況下由圖3-1中的用例(3)和(4)擴展而來?
【問題3】(7分)
根據說明中的描述,給出圖3-2中(1)~(7)所對應的類名。
答案解析與討論:
m.xiexiliangjiufa.com/st/3815917485.html第
4題: 閱讀下列說明和C代碼,回答問題1至問題3,將解答寫在答題紙的對應欄內。
【說明】
計算兩個字符串x和y的最長公共子串(Longest Common Substring)。
假設字符串x和字符串y的長度分別為m和n,用數組c的元素c[i][j]記錄x中前i個字符和y中前j個字符的最長公共子串的長度。
c[i][j]滿足最優(yōu)子結構,其遞歸定義為:
計算所有c[i][j](0 ≤i ≤ m,0 ≤j ≤ n)的值,值最大的c[i][j]即為字符串x和y的最長公共子串的長度。根據該長度即i和j,確定一個最長公共子串。
【C代碼】
(1)常量和變量說明
x,y:長度分別為m和n的字符串
c[i][j]:記錄x中前i個字符和y中前j個字符的最長公共子串的長度
max:x和y的最長公共子串的長度
maxi, maXj:分別表示x和y的某個最長公共子串的最后一個字符在x和y中的位置(序號)
(2)C程序
#include
#include
int c[50][50];
int maxi;
int maxj;
int lcs(char *x, int m, char *y, int n) {
int i, j;
int max= 0;
maxi= 0;
maxj = 0;
for ( i=0; i<=m ; i++) c[i][0] = 0;
for (i =1; i<= n; i++) c[0][i]=0;
for (i =1; i<= m; i++) {
for (j=1; j<= n; j++) {
if ( (1) ) {
c[i][j] = c[i -1][j -1] + 1;
if(max (2) ;
maxi = i;
maxj =j;
}
}
else (3) ;
}
}
return max;
}
void printLCS(int max, char *x) {
int i= 0;
if (max == 0) return;
for ( (4) ; i < maxi; i++)
printf("%c",x[i]);
}
void main(){
char* x= "ABCADAB";
char*y= "BDCABA";
int max= 0;
int m = strlen(x);
int n = strlen(y);
max=lcs(x,m,y,n);
printLCS(max , x);
}
【問題1】(8分)
根據以上說明和C代碼,填充C代碼中的空(1)~(4)。
【問題2】(4分)
根據題干說明和以上C代碼,算法采用了 (5) 設計策略。
分析時間復雜度為 (6) (用O符號表示)。
【問題3】(3分)
根據題干說明和以上C代碼,輸入字符串x= "ABCADAB’,'y="BDCABA",則輸出為 (7) 。
答案解析與討論:
m.xiexiliangjiufa.com/st/381603746.html第
5題: 閱讀下列說明和C++代碼,將應填入 (n) 處的字句寫在答題紙的對應欄內。
【說明】
某大型購物中心欲開發(fā)一套收銀軟件,要求其能夠支持購物中心在不同時期推出的各種促銷活動,如打折、返利(例如,滿300返100)等等。現采用策略(Strategy)模式實現該要求,得到如圖5-1所示的類圖。
圖5-1 策略模式類圖
【C++代碼】
#include
using namespace std;
enum TYPE{NORMAL, CASH_DISCOUNT, CASH_RETURN};
class CashSuper{
public:
(1);
};
class CashNormal : public CashSuper { //正常收費子類
public:
double acceptCash(double money) { retum money; }
};
class CashDiscount : public CashSuper {
private:
double moneyDiscount; // 折扣率
public:
CashDiscount(double discount) { moneyDiscount= discount; }
double acceptCash(double money) { retum money * moneyDiscount; }
};
class CashRetum : public CashSuper { // 滿額返利
private:
double moneyCondition; // 滿額數額
double moneyReturn; // 返利數額
public:
CashRetnm(double motieyCondition, double moneyReturn) {
this->moneyCondition=moneyCondition;
this->moneyReturn=moneyReturn;
}
double acceptCash(double money) {
double result = money;
if(money>=moneyCondition)
result=money-(int)(money/moneyCondition ) * moneyReturn;
return result ;
}
};
class CashContext {
private:
CashSuper *cs;
public:
CashContext(int type) {
switch(type) {
case NORMAL: //正常收費
(2) ;
break;
case CASH_RETURN: //滿300返100
(3) ;
break;
case CASH_DISCOUNT: //打八折
(4) ;
break;
}
}
double GetResult(double money) {
(5) ;
}
};
//此處略去main()函數
答案解析與討論:
m.xiexiliangjiufa.com/st/3816115424.html