2016年計算機二級《C++》上機考前衝刺題

以下是本站小編爲大家整理的2016年計算機二級《C++》上機考前衝刺題,希望對大家的考試有所幫助!

2016年計算機二級《C++》上機考前衝刺題

  一、選擇題(每小題1分,共40分)

1、有如下程序:

#inClude using namespaCe std; Class B{

publiC:

virtual void show(){Cout<<”B”;} };

Class D:publiC B{ . publiC:

void show(){Cout<<”D”;} };

void funl(B * ptr){ptr一>show();} void fUN2(B&ref){();}

voidfhIl3(B B.{();} int main()

{

B b,* P=new D; D d;

funl(P); fun2(B.; fun3(D);

delete P; return 0; }

執行這個程序的輸出結果是( )。

2、下面描述中錯誤的是( )。

A.系統總體結構圖支持軟件系統的詳細設計

B.軟件設計是將軟件需求轉換爲軟件表示的過程

C.數據結構與數據庫設計是軟件設計的任務之一

圖是軟件詳細設計的表示工具

3、已知函數FA調用函數FB,若要把這兩個函數定義在同一個文件中,則( )。

必須定義在FB之前

必須定義在FA之前

C.若FA定義在FB之後,則FA的原型必須出現在FB的定義之前

D.若FB定義在FA之後,則FB的原型必須出現在FA的定義之前

4、有如下函數定義:

void funC(int a,int&B. {a++;b++;}

若執行代碼段:

int x=0,Y = 1; funC(X,Y);

則變量x和y的值分別是(  )。

A.0和1

B.1和1

C.0和2

D.1和2

5、下面程序的輸出結果是( )。

#include

class example

{

int a;

public:

example(int B.{a=b++;}

void print(){a=a+1;eout< void print()const{cout< };

void main()

{

example x(3);

const example Y(2);

A print();

B print();

}

A.2 2

B.4 3

C.4 2

D.3 2

6、下列有關類繼承的敘述中,錯誤的是( )。

A.繼承可以實現軟件複用

B.虛基類可以解決由多繼承產生的二義性問題

C.派生類構造函數要負責調用基類的構造函數

D.派生類沒有繼承基類的私有成員

7、下面程序的運行結果是( )。

#include

int fun(int a[],int n) {

int resuh=1;

for(inl i=1;i<11;1‘++)

result=result * a[i];

retum result;

} void main()

int a[3]={3,4,5}:

cout< }

A.12

B.15

C.20

D.60

8、下列敘述中正確的是( )。

A.在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化

B.在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化

C.在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化

D.以上說法都不正確

9、在滿足實體完整性約束的條件下( )。

A.一個關係中應該有一個或多個候選關鍵字

B.一個關係中只能有一個候選關鍵字

C.一個關係中必須有多個候選關鍵字

D.一個關係中可以沒有候選關鍵字

10、下面關於c+十語言變量的.敘述錯誤的是( )。

A.c++語言中變量分爲aut0、static、extem和register4種存儲類型

B.自動變量和外部變量的作用域爲整個程序

C.內部靜態變量的作用域是定義它的函數

D.外部靜態變量的作用域是定義它的文件

11、 下面程序的運行結果是( )。

#include void main()

{

int num=1:

int&ref=num; ref=ref+2:

cout< }

A.13

B.16

C.36

D.33

12、 有以下程序:

#include float tun(int X,int Y) {return(X+Y);} void main()

{int a=2,b=5,c=8;

cout< 程序運行後的輸出結果是( )。

A.編譯出錯

B.9

C.21

D.9.0

13、 下列運算符中,不能被重載的是(  )。

A.&&

B.!=

C..

D.++

14、 算法的空間複雜度是指( )。

A.算法在執行過程中所需要的計算機存儲空間

B.算法所處理的數據量

C.算法程序中的語句或指令條數

D.算法在執行過程中所需要的臨時工作單元數

15、 c++語言類體系中,不能被派生類繼承的有( )。

A.轉換函數

B.構造函數

C.虛函數

D.靜態成員函數

16、 對C++編譯器區分重載函數無任何意義的信息是( )。

A.參數類型

B.參數個數

C.返回值類型

D.常成員函數關鍵字Const

17、 對類成員訪問權限的控制,是通過設置成員的訪問控制屬性實現的,下列不是訪問控制屬性的是( )。

A.公有類型

B.私有類型

C.保護類型

D.友元類型

18、 下列程序的運行結果爲(  )。

#include int i=0;

class A{ public: A(){i++;}

};

void main() {

A a,b[3],*C; C=b;

cout< }

A.2

B.3

C.4

D.5

19、 以下關鍵字不能用來聲明類的訪問權限的是(  )。

iC

iC

eCted

ate

20、 設有定義int a=1;float f=1.2;char C='a';,則下列表示錯誤的是( )。

A.++a;

B.f一一;

C.c++;

D.8++;

  二、基本操作題(18分)

41、請使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,此工程中含有一個源程礙文件 。其中位於每個註釋“//ERROR ****found****”之後的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結果爲:

ConstruCtor Called. The value is 10

Copy ConstruCtor Called. The value is 10

DestruCtor Called. DestruCtor Called. 注意:只修改註釋“//ERROR ****found****”的下一行語句,不要改動程序中的其他內容。

//

#inClude ’using namespaCe std; Class MyClass{

publiC:

//ERROR**********found**********

MyClass(int i)

{value=i;Cout<<”ConstruCtor Called.” < //ERROR**********found********** MyClass(eonst MyClass P)

{

value = e;

eout<<”Copy ConstruCtor Called.”< }

void Print()

{Cout<<”The value is” < //ERROR**********found********* void-MyClass()

{Cout<<”DestruCtor Called.”< private:

int value;

}; int main()

{ MyChas objl

t();

MyClmss obj2(owl); t();

retum 0;

  三、簡單應用題(24分)

42、請使用VC6或使用【答題】菜單打開考生文件夾pr092下的工程pros2。此工程中包含一個程序文件,其中有“部門”類Department和“職工”類Staff的定義,還有主函數main的定義。在主函數中定義了兩個“職工”對象,他們屬於同一部門。程序展示,當該部門改換辦公室後,這兩個人的辦公室也同時得到改變。請在程序中的橫線處填寫適當的代碼並刪除橫線,以實現上述類定義。此程序的正確輸出結果應爲:

改換辦公室前:

職工號:0789姓名:張三部門:人事處辦公室:521

職工號:0513姓名:李四部門:人事處辦公室:521

改換辦公室後:

職工號:0789姓名:張三部門:人事處辦公室:311

職工號:0513姓名:李四部門:人事處辦公室:311

注意:只在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。

#include

using namespace std;

class Department{ //“部門”類

public:

Department(const char*name,const char*office){

strcpy(this一>name,nanle);

//**********found**********

}

const char*getName()const{return name;}//返回部門名稱

//**********found**********

const char*getOffice()const{________} //返回辦公室房號

void changeOfficeTo(const char*office){ //改換爲指定房號的另一個辦公室

strcpy(this一>office,office);

}

private:

char name[20];//部門名稱

char office[20];//部門所在辦公室房號

};

class staff{//“職工”類

public:

//**********found**********

Staff(const char*my—id,const char木my_name,Department&my_dept):——{

strcpy(this一>staff id,my_id);

strcpy(this一>name,my_name);

}

const char*getlD()const{return staff_id;}

const char*getName()consl{return name;}

Department getDepartment()const{return dept;} char staff=id[10];//職工號

char name[20];//姓名

Department&dept;//所在部門

}; void showStaff(Staff&staff){

cout<<”職工號:”< cout<<”姓名:”< cout<<”部門:”< cout<<”辦公室:”< int main(){

Department dept(”人事處”,”521”);

Staff Zhang(”0789”,”張三”,dept),Li(”0513”,”李四”,dept);

cout<<”改換辦公室前:”< showStaff(Zhang); showStaff(Li);

//人事處辦公室由521搬到311 //**********found********** ———————————————————————一

cout<<”改換辦公室後:”< showStaff(Zhang); showStaff(Li);

return 0; }

  四、綜合應用題(18分)

43、

請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中包含了類IntegerSet和主函數main的定義。一個IntegerSet對象就是一個整數的集合,其中包含0個或多個無重複的整數;爲了便於進行集合操作,這些整數按升序存放在成員數組elem的前若干單元中。成員函數add的作用是將一個元素添加到集合中(如果集合中不存在該元素),成員函數remove從集合中刪除指定的元素(如果集合中存在該元素)。請編寫成員函數remove。在main函數中給出了一組測試數據,此時程序的正確輸出結果應爲:

2 3 4 5 27 28 31 66 75

2 3 4 5 6 27 28 31 56 75

2 3 4 5 6 19 27 28 31 66 75

3 4 5 6 19 27 28 31 66 75

3 4 5 6 19 27 28 31 66 75

要求:

補充編制的內容寫在“//***********333***********”與“//***********666***********”之間,不得修改程序的其他部分。

注意:程序最後將結果輸出到文件中。輸出函數writeToFile已經編譯爲obj文件,並且在本程序中調用。

//IntegorSet.h

#ifndef INTEGERSET

#define INTEGERSET

#include

using namespace std;

const int MAXELEMENTS=100;

//集合最多可擁有的元素個數

class IntegerSet{

int elem[MAXELEMENTS];

//用於存放集合元素的數組

int counter; //用於記錄集合中元素個數的計數器

puhlic:

IntegerSet():counter(0){}

//創建一個空集合

IntegerSet(int data[],int size);

//利用數組提供的數據創建一個整數集合

void add(int element);

//添加一個元素到集合中

void remeve(int element);

//刪除集合中指定的元素

int getCount()const{return counter;}

//返回集合中元素的個數

int getElement(int i)const{retum elem[i];}//返回集合中指定的元素

void show()const;

};

void WriteToFile(char*);

#endif

//

#include”IntegerSet.h”

#include

IntegerSet::IntegerSet(int data[],int size):counter(0){

for(int i=0;i add(data[i]);

}

}

void IntegerSet::add(int element){

int j;

//從後往前尋找第一個小於等於element的元素

for(j=counter;j>0;j-)

if(element>=elem[j一1])break;

//如果找到的是等於element的元素,說明要添加的元素已經存在,直接返回

if(j>0)

if(element==elem[j-1])return;

//如果找到的是小於element的元素,j就是要添加的位置

//該元素及其後面的元素依次後移,騰出插入位置

for(int k=counter;k>j;k一)

elem[k]=elem[k一1];

elem[j]=element;//將element插入到該位置

counter++; //計數器加l

}

void IntegerSet::remove(int element){

//***************333***************

//***************666***************

void IntegerSet::show()const{

for(int i=0;i cout< cout< }

int main(){

int d[]={5,28,2,4,5,3,2,75,27,66,31};

IntegerSet S(d,11);();

(6); ();

(19); ();

ve(2); ();

(4); ();

writeToFile(””);

return 0;

}