() 閱讀下列說明和JAVA代碼,將應填入空(n)處的字句寫在答題紙的對應欄內。【說明】 某中學開展中外中學生野外生存夏令營活動,由于中外學生的語言障礙,隨隊為外籍學員配置一名翻譯。以下代碼采用適配器(Adapter)模式模擬翻譯適配器。其類圖如下:
第1題
閱讀以下說明和C代碼,將應填入(n)處的字句寫在對應欄內。
[說明]
函數combine(a,b,c)是計算兩個整數的組合數。由于計算結果可能超出10ng整型的可表示范圍,故采用數組方式存儲,例如:k位長整數m用數組c[]存儲結構如下:m=c[k]×10k-1+c[k-1]×10k-2+…+c[2]×10+c[1],利用c[0]存儲長整數m的位數,即c[0]=k。數組的每個元素只存儲長整數m的一位數字,長整數運算時,產生的中間結果的某位數字可能會大于9,這是就應該調用format將其歸整,使數組中的每個元素始終只存儲長整數的一位數字。
整數a和b(a>b)的組合數為:,其中u1=a,u2]=a-1,…,ub=a-b+1,d1=1,d2=2,…,db=b。為了計算上述分式,先從u1,u2,…,ub中去掉d1×d2×…×db的因子,得到新的u1,u2,…,ub,然后再將它們相乘。
[函數]
define NAXN 100
int gcd(int a,int b)//求兩個整數a和b的最大公因子
{
if(a<b){
intC=a;a=b;b=c;
}
for(inti=b;i>=2;i--){
if( (1) )return i;
}
return 1;
void format(int *a)//將長整數數組歸整
{
int i;
for(i=1;i<a[0]||a[i]>=10;i++){
if(i>=a[0]) (2);
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
}
if(i>a[0]) (3);
}
void combine(int a,int b,int *C)
{
int i,J,k,x;
int d[MAXN],u[MAXN];
k=0;
for(i=a;i>=a-b+1;i--)u[++k]=i;
u[0]=b;
for(i=1;i<=b;i++)d[i]=i;
for(i=1;i<=u[0];i++){//從u中各元素去掉d中整數的因子
for(j=1;j<=b;j++){
x=gcd(u[i],d[j]);//計算最大公約數
u[i]/=X;
d[j]/=x;
}
(4);C[1]=1;//長整數c初始化
for(i=1;i<=u[0];i++)(//將u中各整數相乘,存于長整數c中
if(u[i]!=1){
for(j=1;j<=c[0];j++){
C[j]=(5);
}
format(C);//將長整數c歸整
}
}
}
(1)
第2題
確的內容。
SELECT Student.SNo, (1),SUM(Grade),AVG(Grade)
FROM Student,Grade
WHERE Student.SNo=Grade.SNo,
GROUP BY (2);
(1)
第3題
閱讀以下函數說明和Java代碼,將應填入(n)處的字句寫在對應欄內。
【說明】
以下程序實現數據的排序,將n個整數分別按照升序和降序進行排序,類SortInt_1實現升序排序,類SortInt_2實現降序排序。
【Java代碼】
class SortInt_1{
int i,i,k,temp;
void SortInt(int a1,int a2[]){//升序排序
for(i=0;i<a1-1;i++){
k=i;
for(j=i+1;j<a1;j++){
if((1)) k=j;
if(k !=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
}
class SortInt_2 (2) {
int i,j,k,temp;
void SortInt(int a1, int a2[]){//降序排序
for(i=0; i<a1-1;i++){
k=i;
for(j=i+1;j<a1;j++){
if((3))k=j;
}
if(k !=i){
temp=a2[i];a2[i]=a2[k];a2[k]=temp;
}
}
}
}
public class test{
public static void main(String args[]){
int a[]={10,55,100,35,87,90,100,16};
SortInt_1 NewInt=(4);
NewInt.SortInt(a.lenvh,a);//調用SortInt_1類的方法
System.out.println("升序排列的數據: ");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
NewInt=new SortInt_2();//創建類SortInt_2的對象
(5);//調用相應方法進行降序排序
System.out.println("降序排列的數據: ");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
第5題
閱讀以下函數說明、圖和C程序代碼,將C程序段中(1)~(6)空缺處的語句填寫完整。
[說明]
散列文件的存儲單位稱為桶(BUCKET)。假如一個桶能存放m個記錄,當桶中已有m個同義詞(散列函數值相同)的記錄時,存放第m+1個同義詞會發生“溢出”。此時需要將第m+1個同義詞存放到另一個稱為“溢出桶”的桶中。相對地,稱存放前m個同義詞的桶為“基桶”。溢出桶和基桶大小相同,用指針鏈接。查找指定元素記錄時,首先在基桶中查找。若找到,則成功返回,否則沿指針到溢出桶中進行查找。
例如,設散列函數為Hash(Key)=Key mod7,記錄的關鍵字序列為15,14,21,87,96,293,35,24, 149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件內容如圖2-27所示。
為簡化起見,散列文件的存儲單位以內存單元表示。
函數InsertToHashTable(int NewElemKey)的功能是:若新元素NewElemKey正確插入散列文件中,則返回值0;否則返回值-1。
采用的散列函數為Hash(NewElemKey)=NewElemKey%P,其中P設定基桶的數目。
函數中使用的預定義符號如下。
第6題
對于本試題的作業處理問題,用圖3-25的貪心算法能否求得最高收益? (6)。(能或不能)
用貪心算法求解任意給定問題時,是否一定能得到最優解? (7)。(能或不能)
第7題
請使用[說明]中數據字典條目定義形式,將以下(1)和(2)空缺處的內容填寫完整。
初錄數據=(1) 復錄數據=(2)
第9題
閱讀以下某門禁控制系統的技術說明,根據要求回答問題1~問題3。
[說明]
門禁系統是樓宇安防系統的重要組成部分,也是大廈智能化管理的體現。其工作過程是,如果在入口處的讀卡器上刷卡,鎖控器(LockController)接收讀卡器(FingerReader)的讀卡信息并進一步識別,如果為有效卡,則觸發控制電控鎖(Lock)的繼電器,讓持卡人通過。鎖控器還會將這些讀卡及進出事件存儲起來,并將相關事件記錄傳送給上位機。每個鎖控器管理1~4個門,每5~8個鎖控器接入1條RS-485總線,并轉換成RS-232方式與管理主機的串行口。對鎖控器進行相關設置后,允許它脫機獨立對門禁點進行控制,管理主機或通信線路故障都不會影響它的正常運行。在普通場合通常會設置1個出門按鈕,允許已進入的人員按動此按鈕以打開電控鎖;而對于一些重要場合通常會在門的內外安裝兩個讀卡器,進出門時都需按預設方式進行刷卡。
門禁系統中的每個電控鎖都有一個唯一的編號。鎖的狀態有兩種:“已鎖住”和“未鎖住”。在管理主機上可以設置每把鎖的安全級別及用戶的開鎖權限。只有當用戶的開鎖權限大于或等于鎖的安全級別并且鎖處于“已鎖住”狀態時,才能將鎖打開。用戶的感應卡信息、開鎖權限及鎖的安全級別都保存在管理主機的數據庫中。表2-19給出了門禁系統主要組成部件的作用。
軟件開發公司A承擔了該門禁控制系統的開發任務,其開發小組采用根據問題領域的模型建立系統結構的面向對象方法完成該系統的設計,系統中的類及類之間的關系用UML類圖表示。
如圖2-25所示是門禁控制系統的一個不完整類圖,根據題干說明中給出的術語,請給出類Lock的主要屬性。
為了保護您的賬號安全,請在“上學吧”公眾號進行驗證,點擊“官網服務”-“賬號驗證”后輸入驗證碼“”完成驗證,驗證成功后方可繼續查看答案!