第
1題: 閱讀下列說(shuō)明和圖,回答問(wèn)題1至問(wèn)題4,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某大學(xué)欲開(kāi)發(fā)一個(gè)基于Web的課程注冊(cè)系統(tǒng)。該系統(tǒng)的主要功能如下:
1、驗(yàn)證輸入信息
(1)檢查學(xué)生信息:檢查學(xué)生輸入的所有注冊(cè)所需信息。如果信息不合法,返回學(xué)生信息不合法提示;如果合法,輸出合法學(xué)生信息。
(2)檢查學(xué)位考試信息:檢查學(xué)生提供的學(xué)位考試結(jié)果。如果不合法,返回學(xué)位考試結(jié)果不合法提示;如果合法,檢查該學(xué)生注冊(cè)資格。
(3)檢查學(xué)生資格:根據(jù)合法學(xué)生信息和合法學(xué)位考試結(jié)果,檢查該學(xué)生對(duì)欲選課程的注冊(cè)資格。如果無(wú)資格,返回?zé)o注冊(cè)資格提示;如果有注冊(cè)資格,則輸出注冊(cè)學(xué)生信息(包含選課學(xué)生標(biāo)識(shí))和欲注冊(cè)課程信息。
2、處理注冊(cè)申請(qǐng)
(1)存儲(chǔ)注冊(cè)信息:將注冊(cè)學(xué)生信息記錄在學(xué)生庫(kù)。
(2)存儲(chǔ)所注冊(cè)課程:將選課學(xué)生標(biāo)識(shí)與欲注冊(cè)課程進(jìn)行關(guān)聯(lián),然后存入課程庫(kù)。
(3)發(fā)送注冊(cè)通知:從學(xué)生庫(kù)中讀取注冊(cè)學(xué)生信息,從課程庫(kù)中讀取所注冊(cè)課程信息,給學(xué)生發(fā)送接受提示;給教務(wù)人員發(fā)送所注冊(cè)課程信息和已注冊(cè)學(xué)生信息。
現(xiàn)采用結(jié)構(gòu)化方法對(duì)課程注冊(cè)系統(tǒng)進(jìn)行分析和設(shè)計(jì),獲得如圖1-1所示的0層數(shù)據(jù)流圖和圖1-2所示的1層數(shù)據(jù)流圖。

圖1-1 0層數(shù)據(jù)流圖
圖1-2 1層數(shù)據(jù)流圖
?【問(wèn)題1】(2分)
使用說(shuō)明中的詞語(yǔ),給出圖1-1中的實(shí)體E1和E2的名稱。
?【問(wèn)題2】(2分)
使用說(shuō)明中的詞語(yǔ),給出圖1-2中的數(shù)據(jù)存儲(chǔ)D1和D2的名稱。
?【問(wèn)題3】(8分)
根據(jù)說(shuō)明和圖中術(shù)語(yǔ),補(bǔ)充圖1-2中缺失的數(shù)據(jù)流及其起點(diǎn)和終點(diǎn)。
?【問(wèn)題4】(3分)
根據(jù)補(bǔ)充完整的圖1-1和圖1-2,說(shuō)明上層的哪些數(shù)據(jù)流是由下層的哪些數(shù)據(jù)流組合而成。
答案解析與討論:
m.xiexiliangjiufa.com/st/3813320302.html第
2題: 閱讀下列說(shuō)明,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某快遞公司為了方便管理公司物品運(yùn)送的各項(xiàng)業(yè)務(wù)活動(dòng),需要構(gòu)建一個(gè)物品運(yùn)送信息管理系統(tǒng)。
【需求分析結(jié)果】
(1)快遞公司有多個(gè)分公司,分公司信息包括分公司編號(hào)、名稱、經(jīng)理、辦公電話和地址。每個(gè)分公司可以有多名員工處理分公司的日常業(yè)務(wù),每位員工只能在一個(gè)分公司工作。每個(gè)分公司由一名經(jīng)理負(fù)責(zé)管理分公司的業(yè)務(wù)和員工,系統(tǒng)需要記錄每個(gè)經(jīng)理的任職時(shí)間。
(2)員工信息包括員工號(hào)、姓名、崗位、薪資、手機(jī)號(hào)和家庭地址。其中,員工號(hào)唯一標(biāo)識(shí)員工信息的每一個(gè)元組。崗位包括經(jīng)理、調(diào)度員、業(yè)務(wù)員等。業(yè)務(wù)員根據(jù)客戶提交的快件申請(qǐng)單進(jìn)行快件受理事宜,一個(gè)業(yè)務(wù)員可以受理多個(gè)客戶的快件申請(qǐng),一個(gè)快件申請(qǐng)只能由一個(gè)業(yè)務(wù)員受理。調(diào)度員根據(jù)已受理的申請(qǐng)單安排快件的承運(yùn)事宜,例如:執(zhí)行承運(yùn)的業(yè)務(wù)員、運(yùn)達(dá)時(shí)間等。一個(gè)業(yè)務(wù)員可以執(zhí)行調(diào)度員安排的多個(gè)快件的承運(yùn)業(yè)務(wù)。
(3)客戶信息包括客戶號(hào)、單位名稱、通信地址、所屬省份、聯(lián)系人、聯(lián)系電話、銀行賬號(hào)。其中,客戶號(hào)唯一標(biāo)識(shí)客戶信息的每一個(gè)元組。當(dāng)客戶要寄快件時(shí),先要提交快件申請(qǐng)單,申請(qǐng)?zhí)栍上到y(tǒng)自動(dòng)生成??旒暾?qǐng)信息包括申請(qǐng)?zhí)?、客戶?hào)、發(fā)件人、發(fā)件人電話、快件名稱、運(yùn)費(fèi)、發(fā)出地、收件人、收件人電話、收件地址。其中,一個(gè)申請(qǐng)?zhí)枌?duì)應(yīng)唯一的一個(gè)快件申請(qǐng),一個(gè)客戶可以提交多個(gè)快件申請(qǐng),但一個(gè)快件申請(qǐng)由唯一的一個(gè)客戶提交。
【概念模型設(shè)計(jì)】
根據(jù)需求階段收集的信息,設(shè)計(jì)的實(shí)體聯(lián)系圖(圖2-1)和關(guān)系模型(不完整)如下:
【關(guān)系模型設(shè)計(jì)】
分公司(分公司編號(hào),名稱,經(jīng)理,辦公電話,地址)
員工(員工號(hào),姓名, (a) ,崗位,薪資,手機(jī)號(hào),家庭地址)
客戶(客戶號(hào),單位名稱,通信地址,所屬省份,聯(lián)系人,聯(lián)系電話,銀行賬號(hào))
申請(qǐng)單( (b) ,發(fā)件人,發(fā)件人電話,發(fā)件人地址,快件名稱,運(yùn)費(fèi),收件人,收件人電話,收件地址,受理標(biāo)志,業(yè)務(wù)員)
安排承運(yùn)( (c) ,實(shí)際完成時(shí)間,調(diào)度員)
?【問(wèn)題1】
根據(jù)問(wèn)題描述,補(bǔ)充五個(gè)聯(lián)系,完善圖2-1的實(shí)體聯(lián)系圖。聯(lián)系名可用聯(lián)系1、聯(lián)系2、聯(lián)系3、聯(lián)系4和聯(lián)系5代替,聯(lián)系的類型分為1:1、1:n和m:n(或1:1、1:*和*:*)。
?【問(wèn)題2】
(1)根據(jù)實(shí)體聯(lián)系圖,將關(guān)系模式中的空(a)~(c)補(bǔ)充完整;
(2)給出員工、申請(qǐng)單和安排承運(yùn)關(guān)系模式的主鍵和外鍵。
?【問(wèn)題3】
(1)客戶關(guān)系的通信地址可以進(jìn)一步分為郵編、省、市、街道,那么該屬性是否屬于簡(jiǎn)單屬性,為什么?請(qǐng)用100字以內(nèi)的文字說(shuō)明。
(2)假設(shè)分公司需要增設(shè)一位經(jīng)理的職位,那么分公司與經(jīng)理之間的聯(lián)系類型應(yīng)修改為(d),分公司的主鍵應(yīng)修改為(e)。
答案解析與討論:
m.xiexiliangjiufa.com/st/38134841.html第
4題: 閱讀下列說(shuō)明和C代碼,回答問(wèn)題1至問(wèn)題3,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
某工程計(jì)算中要完成多個(gè)矩陣相乘(鏈乘)的計(jì)算任務(wù)。
兩個(gè)矩陣相乘要求第一個(gè)矩陣的列數(shù)等于第二個(gè)矩陣的行數(shù),計(jì)算量主要由進(jìn)行乘法運(yùn)算的次數(shù)決定。采用標(biāo)準(zhǔn)的矩陣相乘算法,計(jì)算A
m×n*B
n×p,需要m*n*p次乘法運(yùn)算。
矩陣相乘滿足結(jié)合律,多個(gè)矩陣相乘,不同的計(jì)算順序會(huì)產(chǎn)生不同的計(jì)算量。以矩陣A1
10×100,A2
100×5,A3
5×50三個(gè)矩陣相乘為例,若按(A1*A2)*A3計(jì)算,則需要進(jìn)行10*100*5+10*5*50=7500次乘法運(yùn)算;若按A1*(A2*A3)計(jì)算,則需要進(jìn)行100*5*50+10*100*50=75000次乘法運(yùn)算。可見(jiàn)不同的計(jì)算順序?qū)τ?jì)算量有很大的影響。
矩陣鏈乘問(wèn)題可描述為:給定n個(gè)矩陣
,矩陣Ai的維數(shù)為pi-1×pi,其中i = 1,2,….n。確定一種乘法順序,使得這n個(gè)矩陣相乘時(shí)進(jìn)行乘法的運(yùn)算次數(shù)最少。
由于可能的計(jì)算順序數(shù)量非常龐大,對(duì)較大的n,用蠻力法確定計(jì)算順序是不實(shí)際的。經(jīng)過(guò)對(duì)問(wèn)題進(jìn)行分析,發(fā)現(xiàn)矩陣鏈乘問(wèn)題具有最優(yōu)子結(jié)構(gòu),即若A1*A2*…*An的一個(gè)最優(yōu)計(jì)算順序從第k個(gè)矩陣處斷開(kāi),即分為A1*A2*….Ak和Ak+1*Ak+2*…*An兩個(gè)子問(wèn)題,則該最優(yōu)解應(yīng)該包含A1*A2*…*Ak的一個(gè)最優(yōu)計(jì)算順序和Ak+1*Ak+2*…An的一個(gè)最優(yōu)計(jì)算順序。據(jù)此構(gòu)造遞歸式,

其中,cost[i][j]表示Ai+1*Ai+2*...Aj+1的最優(yōu)計(jì)算的計(jì)算代價(jià)。最終需要求解cost[0][n-1]。
【C代碼】
算法實(shí)現(xiàn)采用自底向上的計(jì)算過(guò)程。首先計(jì)算兩個(gè)矩陣相乘的計(jì)算量,然后依次計(jì)算3個(gè)矩陣、4個(gè)矩陣、…、n個(gè)矩陣相乘的最小計(jì)算量及最優(yōu)計(jì)算順序。下面是算法的C語(yǔ)言實(shí)現(xiàn)。
(1)主要變量說(shuō)明
n:矩陣數(shù)
seq[]:矩陣維數(shù)序列
cost[][]:二維數(shù)組,長(zhǎng)度為n*n,其中元素cost[i][j]表示Ai+1*Ai+2*…Aj+1的最優(yōu)計(jì)算的計(jì)算代價(jià)
trace[][]:二維數(shù)組,長(zhǎng)度為n*n,其中元素trace[i][j]表示Ai+1*Ai+2*Aj+1的最優(yōu)計(jì)算對(duì)應(yīng)的劃分位置,即k
(2)函數(shù)cmm
#define N 100
int cost[N][N];
int trace[N][N];
int cmm(int n,int seq[]){
int tempCost;
int tempTrace;
int i,j,k,p;
int temp;
for( i=0;i for(p=1;p for(i=0; (1) ;i++){
(2) ;
tempCost = -1;
for(k = i;k temp= (3) ;
if(tempCost==-1||tempCost>temp){
tempCost = temp;
(4) ;
}
}
cost[i][j] = tempCost;
trace[i][j] = tempTrace;
}
}
return cost[0][n-1];
}
【問(wèn)題1】(8分)
根據(jù)以上說(shuō)明和C代碼,填充C代碼中的空(1)~(4)。
【問(wèn)題2】(4分)
根據(jù)以上說(shuō)明和C代碼,該問(wèn)題采用了 (5) 算法設(shè)計(jì)策略,時(shí)間復(fù)雜度 (6) 。(用O符號(hào)表示)
【問(wèn)題3】(3分)
考慮實(shí)例n=6,各個(gè)矩陣的維數(shù):A1為5*10,A2為10*3,A3為3*12,A4為12*5,A5為5*50,A6為50*6,即維數(shù)序列為5,10,3,12,5,50,6。則根據(jù)上述C代碼得到的一個(gè)最優(yōu)計(jì)算順序?yàn)?(7) (用加括號(hào)方式表示計(jì)算順序),所需要的乘法運(yùn)算次數(shù)為 (8) 。
答案解析與討論:
m.xiexiliangjiufa.com/st/3813627375.html第
5題: 閱讀下列說(shuō)明和C++代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
欲開(kāi)發(fā)一個(gè)繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形。以繪制直線和圓形為例,對(duì)應(yīng)的繪圖程序如表5-1所示。
該繪圖軟件的擴(kuò)展性要求,將不斷擴(kuò)充新的圖形和新的繪圖程序。為了避免出現(xiàn)類爆炸的情況,現(xiàn)采用橋接(Bridge)模式來(lái)實(shí)現(xiàn)上述要求,得到如圖5-1所示的類圖。
圖5-1 類圖
【C++代碼】
class DP1{
public:
static void draw_a_line(double x1,double y1,double x2,double y2){/*代碼省略*/}
static void draw_a_circle(double x,double y,double r){ /*代碼省略*/}
};
class DP2{
public:
static void drawline(double x1,double x2,double y1,double y2){/*代碼省略*/}
static void drawcircle(double x,double y,double r){/*代碼省略*/}
};
class Drawing{
public:
(1) ;
(2) ;
};
class V1Drawing:public Drawing{
public:
void drawLine(double x1,double y1,double x2, double y2){/*代碼省略*/}
void drawCircle(double x, double y, double r){ (3) ;}
};
class V2Drawing:public Drawing{
public:
void drawLine(double x1,double y1,double x2, double y2){/*代碼省略*/}
void drawCircle(double x, double y, double r){ (4) ;}
};
class Shape{
public:
(5) ;
Shape(Drawing * dp){ _dp = dp;}
void drawLine(double x1, double y1,double x2, double y2){_dp->drawLine(x1,y1,x2,y2);}
void drawCircle(double x, double y, double r){_dp->drawCircle(x,y,r);}
private: Drawing * _dp;
};
class Rectangle:public Shape{
public:
void draw(){/*代碼省略*/}
//其余代碼省略
};
class Circle:public Shape{
private: double _x,_y,_r;
public:
Circle(Drawing * dp, double x, double y, double r): (6) {_x = x; _y = y; _r = r;}
void draw(){ drawCircle(_x, _y, _r);}
};
答案解析與討論:
m.xiexiliangjiufa.com/st/3813723129.html第
6題: 閱讀下列說(shuō)明和Java代碼,將應(yīng)填入(n)處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
欲開(kāi)發(fā)一個(gè)繪圖軟件,要求使用不同的繪圖程序繪制不同的圖形。以繪制直線和圓形為例,對(duì)應(yīng)的繪圖程序如表6-1所示。
該繪圖軟件的擴(kuò)展性要求,將不斷擴(kuò)充新的圖形和新的繪圖程序。為了避免出現(xiàn)類爆炸的情況,現(xiàn)采用橋接(Bridge)模式來(lái)實(shí)現(xiàn)上述要求,得到如圖6-1所示的類圖。
圖6-1 類圖
【Java代碼】
(1) Drawing{
(2) ;
(3) ;
}
class DP1{
static public void draw_a_line(double x1, double y1, double x2, double y2) {/*代碼省略*/}
static public void draw_a_circle(double x, double y, double r) {/*代碼省略*/}
}
class DP2{
static public void drawline(double x1, double y1, double x2 ,double y2){/*代碼省略*/}
static public void drawcircle (double x, double y, double r){/*代碼省略*/}
}
class V1Drawing implements Drawing{
public void drawLine(double x1, double y1, double x2 ,double y2){/*代碼省略*/}
public void drawCircle(double x, double y, double r){ (4) ;}
}
class V2Drawing implements Drawing{
public void drawLine(double x1, double y1, double x2 ,double y2){/*代碼省略*/}
public void drawCircle (double x, double y, double r){ (5) ;}
}
abstract class Shape{
private Drawing _dp;
(6) ;
Shape(Drawing dp) {_dp=dp;}
public void drawLine(double x1, double y1, double x2 ,double y2){_dp.drawLine(x1,y1,x2,y2); }
public void drawCircle (double x, double y, double r){ _dp.drawCircle(x,y,r);}
}
class Rectangle extends Shape{
private double _x1,_x2,_y1,_y2;
public Rectangle(Drawing dp,double x1, double y1, double x2 ,double y2) {/*代碼省略*/}
public void draw(){/*代碼省略*/}
}
class Circle extends Shape{
private double _x, _y, _r;
public Circle(Drawing dp,double x, double y, double r) {/*代碼省略*/}
public void draw(){drawCircle(_x,_y,_r);}
}
答案解析與討論:
m.xiexiliangjiufa.com/st/3813815424.html