試題三(共 15 分)
閱讀以下說明和 C 程序,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
第1題
試題三(共15分)
閱讀以下說明和C函數(shù),回答問題 l和問題 2,將解答填入答題紙的對應(yīng)欄內(nèi)。
【說明】
對于具有n個元素的整型數(shù)組a,需要進行的處理是刪除a中所有的值為 0的數(shù)組元素,并將a中所有的非 O元素按照原順序連續(xù)地存儲在數(shù)組空間的前端。下面分別用函數(shù)CompactArr_v1 和CompactArr v2來實現(xiàn)上述處理要求,函數(shù)的返回值為非零元素的個數(shù)。 函數(shù)CompactArr_vl(int a[],int n)的處理思路是:先申請一個與數(shù)組a的大小相同的動態(tài)數(shù)組空間,然后順序掃描數(shù)組a的每一個元素,將遇到的非O元素依次復(fù)制到動態(tài)數(shù)組空間中,最后再將動態(tài)數(shù)組中的元素傳回數(shù)組a中。
函數(shù)CompactArr_v2(int a[],int n)的處理思路是:利用下標(biāo)i(初值為 0)順序掃描數(shù)組a的每一個元素,下標(biāo)k(初值為0)表示數(shù)組 a中連續(xù)存儲的非0元素的下標(biāo)。掃描時,每遇到一個數(shù)組元素,i就增 1,而遇到非 0元素并將其前移后k才增 1。
【問題1】 (12分)
請根據(jù)說明中函數(shù)CompactArr_v1的處理思路填補空缺(1)~(3),根據(jù)CompactArr_v2的處理
思路填補空缺(4)。
【問題2】(3分)
請說明函數(shù)CompactArr vl存在的缺點。
第2題
試題六(共15分)
閱讀以下說明、圖和Java代碼,填補Java代碼中的空缺(1)~(6),將解答寫在答題紙的
對應(yīng)欄內(nèi)。
【說明】
已知對某幾何圖形繪制工具進行類建模的結(jié)果如圖6.1所示,其中Shape為抽象(abstract)類,表示通用圖形,Box(矩形)、Ellipse(橢圓)和Line(線條)繼承(extends)了Shape類,其中,Circle表示圓(即特殊的橢圓)。
下面的Java代碼用于實現(xiàn)圖 6-1所給出的設(shè)計思路,將其空缺處填充完整并編譯運行,輸出結(jié)果為:
Ellipse
Circle
Ellipse
C
E
【Java代碼】
(1) class Shape{
public Shape(String name){
this.name= name;
}
(2) void paint();
String getName(){
retum this.name;
}
final String name;
};
//Box 和Line類似下面 Ellipse,其代碼略
class Ellipse (3) {
public Ellipse(String name){
super(name);
System.out.println("Ellipse");
}
Void paintO{∥繪制現(xiàn)狀示意代碼
System.out.println(getName0);
}
};
class Circle (4) {
public Circle(String name){
super(name);
System.out.println("Circle");
}
};
class Diagram{
private Shape shapes[]= new Shape[2];
public void drawAShape(Shape shape){
shape.paint();
}
void erase A Shape(Shape shape){
∥刪除形狀,代碼略
}
void drawShapes(){
shapes*0+= new Circle("C”);
shapes[l]= new Ellipse("E");
for (int i=O; i<2;++i) {
drawAShap(shapes[i]);//繪制形狀
}
}
void close(){
for (int i=0;i<2; ++1) { []關(guān)閉圖,刪除所繪制圖形
(5) ;
}
}
public static void main(String[] args){
Diagram diagram= (6) ;
diagram.drawShapes();
diagram.close();
}
}
第3題
●試題五
閱讀以下應(yīng)用說明、屬性設(shè)置及Visual Basic程序代碼,將應(yīng)填入(n)處在字句寫在答題紙的對應(yīng)欄內(nèi)。
【說明】
本應(yīng)用程序的運行窗口如圖2所示。
只要用戶單擊"閃爍"按鈕,文字"歡迎光臨"就會以0.3秒消失、0.3秒顯示反復(fù)進行閃爍;單擊"停止"按鈕時,閃爍停止,恢復(fù)圖示的初態(tài)。
在開發(fā)過程中,需要設(shè)置的屬性如表1所示。
在開發(fā)過程中,需要編寫的程序代碼如下:
【程序】
Private Sub CmdF_Click()
Timer1. (3) =True
Labe1.Visible=False
End Sub
Private Sub Timer1_Timer()
(4) =not Label.Visible
End Sub
Private Sub CmdT_Click()
Timer1.Enabled= (5)
Labe1.Visible=true
End Sub
第4題
●試題六
閱讀以下說明和Java代碼,將解答寫入答題紙的對應(yīng)欄內(nèi)。
【說明】
請完成下列Java程序。程序的執(zhí)行結(jié)果是生成一個具有一個TextField類型的對象in、Button類型的對象btn和Label類型的對象out圖形用戶界面,程序的功能是計算用戶輸入數(shù)的平方,如圖3所示。
注意:請勿改動main()主方法和其他已有的語句內(nèi)容,僅在下劃線處填入適當(dāng)?shù)恼Z句。
【程序】
import javA.a(chǎn)wt.*;
import javA.a(chǎn)wt.event.*;
public class square {
public static void main(String args[]){
(1)
}
}
class AppFrame. extends Frame{
TheAdapterTest listener=new TheAdapterTest();
TextField in=new TextField (5) ;
Button btn=new Button("計算");
Label ut=new Label("用于顯示計算結(jié)果");
public AppFrame()
{
setLayout(new FlowLayout());
add(in);
add(btn);
add(out);
btn.addActionListener(new BtnActionAdapter());
addWindowListener(listener);
setSize(400,100);
show();
}
class BtnActionAdapter implements (2) {
public void actionPerformed( (3) ){
String s=in.getText();
double d= (4)
double sq=d*d;
out.setText(d+"的平方是:"+sq);
}
}
class TheAdapterTest extends WindowAdapter
{
public void windowClosing( (5) )
{
System.exit (1) ;
}
}
}
第5題
●試題七
閱讀以下說明和Java代碼,將解答寫入答題紙的對應(yīng)欄內(nèi)。
【說明】
下面的程序的功能是利用實現(xiàn)Runnable接口的方法來創(chuàng)建線程,并利用它來執(zhí)行響應(yīng)的一些操作。最后使得m的執(zhí)行結(jié)果:100,如圖3。
注意:請勿改動main()主方法和其他已有的語句內(nèi)容,僅在下劃線處填入適當(dāng)?shù)恼Z句。
class ClassName (1) Runnable{
int n;
(2) {
try{
Threa
D.sleep(2000);
n=100;
}catch( (3) e){}
}
public static void main(String[]args){
try{
ClassName a=new ClassName();
(4)
thread1. (5) ();
thread1.join();
int m=A.n;
System.out.println("m="+m);
}catch( (3) e){}
}
}
第6題
試題七(共 15 分)
閱讀下列說明、圖和Java代碼,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
[說明]
已知對某載客車輛(Car)進行類建模,如圖 7-1所示,其中類 Engine 表示發(fā)動機引擎,類 Wheel 表示車輪,類 Body 表示車身,類 Driver 表示司機,類 Passenger 表示乘客。
[Java 代碼]
class Body{ //此處代碼省略 }; //車身類
class Passenger{ //此處代碼省略 }; //乘客類
class Wheel{ //此處代碼省略 }; //車輪類
class Driver{ //司機類
public String name; //表示第幾路公交車司機
public Driver(String driverName){name = driverName;} //構(gòu)造函數(shù)
};
class Engine{ //引擎類
public String engineNo; //引擎編號
public Engine(String engineNo){ this.engineNo = engineNo; } //構(gòu)造函數(shù)
};
public class Car{ //汽車類
static final int (1) = 7; //定義最多載客數(shù)
static final int MAX_WHEELS = 5; //定義最多輪胎數(shù)
protected Engine engine;
protected Driver driver;
protected Body body = new Body();
protected Wheel[] wheels;
protected Passenger[] passengers;
public Car(Driver driver){ //構(gòu)造函數(shù)
(2) .driver = driver;
engine = new Engine("TX6536 型號引擎");
wheels = new Wheel[MAX_WHEELS];
passengers = new Passenger[MAX_PASSENGERS];
for (int index = 0; index < MAX_WHEELS; index++){
wheels[index] = new Wheel();
}
for (int index = 0; index < MAX_PASSENGERS; index++){
passengers[index] = null;
}
}
int getPassengerNumber(){ //獲取車上乘客數(shù)量
//此處代碼省略
}
void getOnPassenger(Passenger aPassenger ){ //乘客上車
//此處代碼省略
}
void run(){ //開車
if( (3) ){ System.out.println("司機尚未上車!"); return;}
//此處代碼省略
}
public static void main(String args[]){
Driver driver = new Driver("第五路公交車司機");
Car car = new Car( (4) );
for (int index = 0 ; index < MAX_PASSENGERS; index ++)
car.getOnPassenger( (5) Passenger());
car.run();
}
}
第7題
試題七(共 15 分)
閱讀下列說明、圖和Java 代碼,回答問題1 至問題3,將解答寫在答題紙的對應(yīng)欄內(nèi)。
[說明]
已知四個類之間的關(guān)系如圖 7-1 所示,分別對每個類的方法進行編號,例如 Shape的 perimeter()為 1 號,表示為“1:perimeter()” ,Rectangle 類的 perimeter()為 2 號,表示為“2:perimeter()” ,依此類推,其中,每個類的 perimeter方法簽名相同。
[Java 代碼]
Triangle tr = new Triangle();
Square sq = new Square();
Shape sh = tr;
[問題 1] 關(guān)于上述 Java代碼中 sh 和 tr 的以下敘述中,哪兩個是正確的(寫出編號) 。
① sh 和 tr 分別引用同一個對象;
② sh 和 tr 分別引用同一類型的不同的對象;
③ sh 和 tr 分別引用不同類型的不同對象;
④ sh 和 tr 分別引用同一個對象的不同拷貝;
⑤ sh 和 tr 所引用的內(nèi)存空間是相同的。
[問題 2] 寫出下面消息對應(yīng)的方法編號(如果該消息錯誤或者沒有對應(yīng)的方法調(diào)用,請
填寫“無” ) 。
tr.height() (1)
sh.perimeter() (2)
sq.height() (3)
sq.perimeter() (4)
sh.height() (5)
tr.perimeter() (6)
[問題 3] 下列賦值語句中哪兩個是合法的(寫出合法賦值語句的編號) 。
① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;
第8題
試題六(共 15 分)
閱讀以下應(yīng)用說明以及 Visual Basic 程序代碼,將應(yīng)填入 (n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
[應(yīng)用說明]
某電視臺擬開發(fā)應(yīng)用程序來顯示戲曲大賽中1~4號四位選手決賽的現(xiàn)場投票情況。該程序從現(xiàn)場觀眾中(不超過 2000 人)每 0.5 秒收集一次對這四位選手的支持票數(shù),并在屏幕上動態(tài)顯示這四位選手的票柱(以高度反映票數(shù))與累計得票數(shù),如圖 6-1 所示。投票過程限時 30 秒,每名觀眾最多為 1 名選手投票。投票結(jié)束后系統(tǒng)通過比較各位選手的累計得票數(shù),顯示決賽結(jié)果: “*號勝出” (如有單個冠軍)或“繼續(xù)進行 PK”(如有多人獲得相同的最高票數(shù)) 。
該程序中設(shè)置公共變量 T 動態(tài)記錄投票時間。四個形狀 ShpM(1 to 4)動態(tài)增長的
底線固定。
[Visual Basic 程序代碼]
Dim T As Integer '聲明全局變量
Private Sub Form_Load()
For i = 1 To 4
ShpM(i).Top = 2000 : ShpM(i).Height = 0 ' 初始票柱高度為0
TxtM(i).Text = 0
Next i
Tim1.Enabled = False : Tim1.Interval = 500 : T = 0
End Sub
Private Sub CmdStart_Click()
Tim1.Enabled = True '開始投票
CmdStart.Enabled = False
End Sub
Private Sub Tim1_Timer()
Dim n(1 To 4) As Integer ' n(1 to 4)為每次收集的票數(shù)
Dim i As Integer, j As Integer
Dim G As Integer ' G 用于計算最高票數(shù)
Dim ng As Integer ' ng 用于計算冠軍個數(shù)
For i = 1 To 4
n(i) = … ' 收集 i 號選手的票數(shù),此處省略
TxtM(i).Text = TxtM(i).Text + n(i) ' 累計票(VB 能進行自動轉(zhuǎn)換)
ShpM(i).Top = ShpM(i).Top - n(i)
ShpM(i).Height = ShpM(i).Height + (1) ' 算出票柱高度
Next i
T = T + 1 ' 計時
If T = 60 Then ' 投票時間到
(2) ' 停止數(shù)據(jù)收集處理
ng = 1
G = TxtM(1).Text
For i = 2 To 4
If G < TxtM(i).Text Then
G = TxtM(i).Text
ng = (3)
j = i
Else
If G = TxtM(i).Text Then ng = (4) ' 計算冠軍個數(shù)
End If
Next i
If ng = 1 Then
txtResult.Text = (5) ' 單個冠軍結(jié)果
Else
txtResult.Text = "繼續(xù)進行PK"
End If
End If
End Sub
第9題
試題三(共15分)
閱讀以下說明和C 函數(shù),將應(yīng)填入(n) 處的字句寫在答題紙的對應(yīng)欄內(nèi)。
[說明]
若一個矩陣中的非零元素數(shù)目很少且分布沒有規(guī)律,則稱之為稀疏矩陣。對于m行n 列的稀疏矩陣M,進行轉(zhuǎn)置運算后得到n 行m列的矩陣MT,如圖3-1 所示。
函數(shù)TransposeMatrix(Matrix M)的功能是對用三元組順序表表示的稀疏矩陣M 進行轉(zhuǎn)置運算。
對 M 實施轉(zhuǎn)置運算時,為了將M 中的每個非零元素直接存入其轉(zhuǎn)置矩陣MT 三元組順序表的相應(yīng)位置,需先計算M 中每一列非零元素的數(shù)目(即MT 中每一行非零元素的數(shù)目),并記錄在向量num 中;然后根據(jù)以下關(guān)系,計算出矩陣M 中每列的第一個非零元素在轉(zhuǎn)置矩陣MT 三元組順序表中的位置:
cpot[0] = 0
cpot[j] = cpot[j-1] + num[j-1] /* j 為列號 */
類型ElemType、Triple 和Matrix 定義如下:
typedef int ElemType;
typedef struct { /* 三元組類型 */
int r,c; /* 矩陣元素的行號、列號*/
ElemType e; /* 矩陣元素的值*/
}Triple;
typedef struct { /* 矩陣的三元組順序表存儲結(jié)構(gòu) */
int rows,cols,elements; /* 矩陣的行數(shù)、列數(shù)和非零元素數(shù)目 */
Triple data[MAXSIZE];
}Matrix;
[C函數(shù)]
int TransposeMatrix(Matrix M)
{
int j,q,t;
int *num, *cpot;
Matrix MT; /* MT 是M的轉(zhuǎn)置矩陣 */
num = (int *)malloc(M.cols*sizeof(int));
cpot = (int *)malloc(M.cols*sizeof(int));
if (!num || !cpot)
return ERROR;
MT.rows = (1) ; /* 設(shè)置轉(zhuǎn)置矩陣MT行數(shù)、列數(shù)和非零元數(shù)目*/
MT.cols = (2) ;
MT.elements = M.elements;
if (M.elements > 0) {
for(q = 0; q < M.cols; q++)
num[q] = 0;
for(t = 0; t < M.elements; ++t) /* 計算矩陣M 中每一列非零元素數(shù)目*/
num[M.data[t].c]++;
/* 計算矩陣M中每列第一個非零元素在其轉(zhuǎn)置矩陣三元組順序表中的位置*/
(3) ;
for(j = 1;j < M.cols; j++)
cpot[j] = (4) ;
/* 以下代碼完成轉(zhuǎn)置矩陣MT三元組順序表元素的設(shè)置 */
for(t = 0; t < M.elements;t++){
j = (5) ; /* 取矩陣M 的一個非零元素的列號存入j */
/* q 為該非零元素在轉(zhuǎn)置矩陣MT 三元組順序表中的位置(下標(biāo))*/
q = cpot[j];
MT.data[q].r = M.data[t].c;
MT.data[q].c = M.data[t].r;
MT.data[q].e = M.data[t].e;
++cpot[j]; /* 計算M 中第j列的下一個非零元素的目的位置 */
}/* for */
}/* if */
free(num); free(cpot);
/*此處輸出矩陣元素,代碼省略*/
return OK;
}/* TransposeMatrix */
第10題
試題一(共 15分)
閱讀以下說明和算法,完善算法并回答問題,將解答寫在答題紙的對應(yīng)欄內(nèi)。
[說明]
假設(shè)以二維數(shù)組G[1..m,1..n]表示一幅圖像各像素的顏色,則G[i,j]表示區(qū)域中點(i,j)處的顏色,顏色值為0到k 的整數(shù)。下面的算法將指定點(i0,j0)所在的同色鄰接區(qū)域的顏色置換為給定的顏色值。約定所有與點(i0,j0)同的上、下、左、右可連通的點組成同色鄰接區(qū)域。
例如,一幅8×9 像素的圖像如圖1-1 所示。設(shè)用戶指定點(3,5),其顏色值為0,此時其上方(2,5)、下方 (4,5)、右方(3,6)鄰接點的顏色值都為0,因此這些點屬于點(3,5)所在的同色鄰接區(qū)域,再從上、下、左、右四個方向進行擴展,可得出該同色鄰接區(qū)域的其他點(見圖1-1 中的陰影部分)。將上述同色區(qū)域的顏色替換為顏色值7所得的新圖像如圖1-2 所示。
[算法]
輸入:矩陣 G,點的坐標(biāo)(i0,j0),新顏色值newcolor。
輸出:點(i0,j0)所在同色鄰接區(qū)域的顏色置換為newcolor之后的矩陣G。
算法步驟(為規(guī)范算法,規(guī)定該算法只在第七步后結(jié)束):
第一步:若點(i0,j0)的顏色值與新顏色值newcolor相同,則(1) ;
第二步:點(i0,j0)的顏色值→oldcolor;創(chuàng)建棧S,并將點坐標(biāo)(i0,j0)入棧;
第三步:若 (2) ,則轉(zhuǎn)第七步;
第四步:棧頂元素出棧→(x,y),并(3) ;
第五步:1) 若點(x,y-1)在圖像中且G[x,y-1]等于oldcolor,則(x,y-1)入棧S;
2) 若點(x,y+1)在圖像中且G[x,y+1]等于oldcolor,則(x,y+1)入棧S;
3) 若點(x-1,y)在圖像中且G[x-1,y]等于oldcolor,則(x-1,y)入棧S;
4) 若點(x+1,y)在圖像中且G[x+1,y]等于oldcolor,則(x+1,y)入棧S;
第六步:轉(zhuǎn) (4) ;
第七步:算法結(jié)束。
[問題]
是否可以將算法中的棧換成隊列?回答: (5) 。
為了保護您的賬號安全,請在“上學(xué)吧”公眾號進行驗證,點擊“官網(wǎng)服務(wù)”-“賬號驗證”后輸入驗證碼“”完成驗證,驗證成功后方可繼續(xù)查看答案!