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

來源:文萃谷 6.68K

以下是應屆畢業生考試網小編整理的計算機二級《C++》上機考前衝刺試題,更多計算機二級考試內容請關注yjbys考試網。

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

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

1、一個教師可講授多門課程,一門課程可由多個教師講授。則實體教師和課程間的聯繫是( )。

A.1:1聯繫

B.1:m聯繫

C.m:1聯繫

D.m:n聯繫

2、 Tilil程序的運行結果是( )。

#include void main()

{

int i=1:

while(i<=8)

if(++i%3 1=2)continue: else eout< }

A.25

B.36

C.258

D.369

3、下列關於線性鏈表的敍述中,正確的是( )。

A.各數據結點的存儲空間可以不連續,但它們的存儲順序與邏輯順序必須一致

B.各數據結點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續

C.進行插入與刪除時,不需要移動表中的元素

D.以上説法均不正確

4、對於一個類定義,下列敍述中錯誤的是( )。

A.如果沒有定義拷貝構造函數,編譯器將生成一個拷貝構造函數

B.如果沒有定義缺省的構造函數,編譯器一定將生成一個缺省的構造函數

C.如果沒有定義構造函數,編譯器將生成一個缺省的構造函數和一個拷貝構造函數

D.如果已經定義了構造函數和拷貝構造函數,編譯器不會生成任何構造函數

5、為了使類中的某個成員不能被類的對象通過成員操作符訪問,則不能把該成員的訪問權限定義為( )。

ic

ected

ate

ic

6、下列關於運算符函數的描述中,錯誤的是( )。

A.運算符函數的名稱總是以operator為前綴

B.運算符函數的參數可以是對象

C.運算符函數只能定義為類的成員函數

D.在表達式中使用重載的運算符相當予調用運算符重載函數

7、 一個棧的初始狀態為空。現將元素1、2、3、4、5、A、B、C、D、E依次入棧,然後再依次出棧,則元素出棧的順序是(  )。

A.12345ABCDE

A54321

El2345

D.5432lEDCBA

8、在數據管理技術發展的三個階段中,數據共享最好的是(  )。

A.人工管理階段

B.文件系統階段

C.數據庫系統階段

D.三個階段相同

9、下面程序的運行結果為( )。

#include

void main() {

char a=’3’: switch(8)

{

case '3':cout<<”3”:

case '2':cout<<”2”;break; default:cout<<”l”;

}

}

A.3

B.321

C.31

D.32

10、數據庫設計中反映用户對數據要求的模式是( )。

A.內模式

B.概念模式

C.外模式

D.設計模式

11、一棵二叉樹共有25個結點,其中5個是葉子結點,則度為1的結點數為( )。

A.16

B.10

C.6

D.4

12、 下列( )是C++語言的有效標識符。

B.N0.1

C.12345

13、 下列關於運算符重載的敍述中,錯誤的是( )。

A.有的運算符可以作為非成員函數重載

B.所有的運算符都可以通過重載而被賦予新的含義

C.不得為重載的運算符函數的參數設置默認值

D.有的運算符只能作為成員函數重載

14、 F列關於棧的敍述正確的是( )。

A.棧按“先進先出”組織數據

B.棧按“先進後出”組織數據

C.只能在棧底插入數據

D.不能刪除數據

15、 軟件生命週期中的活動不包括( )。

A.市場調研

B.需求分析

C.軟件測試

D.軟件維護

16、 下面對靜態數據成員的描述中,正確的是( )。

A.靜態數據成員是類的所有對象共享的數據

B.類的每個對象都有自己的靜態數據成員

C.類的不同對象有不同的靜態數據成員值

D.靜態數據成員不能通過類的對象調用

17、 軟件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬於應用軟件的是(  )。

A.編譯程序

B.操作系統

C.教務管理系統

D.彙編程序

18、下面敍述中錯誤的是(  )。

A.軟件測試的目的是發現錯誤並改正錯誤

B.對被調試的程序進行“錯誤定位”是程序調試的必要步驟

C.程序調試通常也稱為Debug

D.軟件測試應嚴格執行測試計劃,排除測試的隨意性

19、 層次型、網狀型和關係型數據庫劃分原則是( )。

A.己錄長度

B.文件的大小

C.聯繫的複雜程度

D.數據之間的聯繫方式

20、 下面程序的運行結果為( )。

#include void swap(int&a,int B. int temp;

temp=a++: a=b:

b=temp;

}

void main()

{

im a=2,b=3; swap(a,B.;

eout< }

A.2,3

B.3,2

C.2,2

D.3,3

21、 有如下程序:

#inClude using namespaCe std; Class MyClass{

publiC:

MyClass(int X):val(X){}

void Print()Const}tout<<”Const:val=”< private:

int val; };

int main(){

Const MyClass objl(10); MyClass obj2(20);

t(); t(); retum 0;

}

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

=10 Const:val=20

t:val=10 Const:val=20

t:val=10 val=20

=10 val=20

22、 一個工作人員可以使用多台計算機,而一台計算機可被多個人使用,則實體工作人員與實體計算機之間 的聯繫是( )。

A.一對一

B.一對多

C.多對多

D.多對一

23、下列程序的運行結果是( )。

#include class Loeation{

private:

int X,Y;

public: void init(int=0,int=0);

void valueX(int val){X=val;} int valueX(){returnx;}

void valueY(int val){Y=val;} int valueY(){return Y;}};

void Location::init(int initX,int initY) {X=initX;

Y=initY4}

void main(X

{Location A,B;

();

e X(5);

cout< e Y(4);

eout< }

A.5

0

6

4

B.0

0

6

4

C.5

0

6

2

D.0

0

6

2

24、 下面程序的運行結果為( )。

#include class A

static int n;

public:

A(){n=1;}

A(int num){n=hum;} void print(){cout< int A::n=2;

void main() {

A a,b(3); t(); t();

coutB.13

C.23

D.33

25、 負責數據庫中查詢操作的數據庫語言是( )。

A.數據定義語言

B.數據管理語言

C.數據操縱語言

D.數據控制語言

26、 已知枚舉類型聲明語句為:

enum COl,OR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};

則下列説法中錯誤的是( )。

A.枚舉常量YELLOW的值為1

B.枚舉常量RED的值為6

C.枚舉常量BLACK的值為10

D.枚舉常量WHITE的值為1

27、 有如下程序:

#include

using namespace std;

class Base

{

public:

void funl(){cout<<”Basen”;}

virtual void fun2(){eout<<”Basen”;}

};

class Derived:public Base{

public:

void funl(){eout<<”Derived、n”;}

void fura(){eout<.<”Derivedn”;}

};

void f(Base&B.}();2();}

int main()

{

Derived obj;

f(obj);

return 0;

}

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

Base

Derived

ved

Base

ved

Derived

28、有如下類聲明:

class SAMPLE

{

int n:

public:

SAMPLE(int i=0):n(i){}

void setValue(int nO);

};

下列關於9etValue成員函數的定義中,正確的是(  )。

LE::setValue(int nO){n=n0;}

SAMPLE::setValue(int胡){n=n0;

setValue(int nO){n=n0;}

alue(int nO){n=n0;}

29、 下列關於c++函數的説明中,正確的是( )。

A.內聯函數就是定義在另一個函數體內部的函數

B.函數體的最後一條語句必須是return語句

C.標準c++要求在調用一個函數之前,必須先聲明其原型

D.編譯器會根據函數的返回值類型和參數表來區分函數的不同重載形式

30、 有如下程序:

#inClude using namespaCe std; Class MusiC{

publiC:

void setTitle(Char*str){strCpy(title,str);} proteCted:

Char type[10]; private:

Char title[20];

Class Jazz:publiC MusiC{ publiC:

void set(Char*str){

strCpy(type,”Jazz'’);//① strCpy(title,str);//②

} }; 下列敍述中正確的是(  )。

A.程序編譯正確

B.程序編譯時語句①出錯

C.程序編譯時語句②出錯

D.程序編譯時語句①和②都出錯

31、 在公有繼承的情況下,允許派生類直接訪問的基類成員包括(  )。

A.公有成員

B.公有成員和保護成員

C.公有成員、保護成員和私有成員

D.保護成員

32、 有三個關係R、S和T如下:

由關係R和S通過運算得到關係T,則所使用的運算為(  )。

A.笛卡爾積

B.交

C.並

D.自然連接

33、有如下類定義:

class MyClass

{

public:

private:

______________________________________

int data;

};

若要為MyClass類重載流輸入運算符“>>”,使得程序中可以“cin>>obj;”的形式改變MyClass類的對象0bj中數據成員data的值,則橫線處的聲明語句應為( )。

nd istream& operator>>(istream&is,MyClass&A.;

nd istream&operator>>(istream&is,MyClass A.;

eam&operator>>(istream&is,MyClass&A.;

eam&operator>>(istream&is,MyClass A.;

34、 有如下程序:

#inClude using namespaCe std; Class Sample{

friend long fun(Sample S); publiC:

Sample(10ng A.{x=a;} private:

long X;

}; long fun(Sample S){

if(S.x<2)return l;

return S.X*fun(Sample(s.x-1)); }

int main(  ) {

int sum=0;

for(int i=0;i<6;i++) {sum+=fun(Sample(i));}

Cout< }

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

A.120

B.16

C.154

D.34

35、 有如下程序:

#inClude using namespaCe std; Class Book{

publiC:

Book(Char*t=””){strCpy(title,t);}

private:

Char titlel40]; };

Class Novel:publiC Book{ publiC:

Novel(Char*t=””):Book(t){}

Char*Category(  )Const{return”文學”;} };

int main(  ){ Book * pb; pb=new Novel(  );

Cout< return 0; }

若程序運行時輸出結果是“文學”,則橫線處缺失的語句是(  )。

*Category(  );

*Category(  )Const;

ual Char*Category(  )Const;

ual Char*Category(  )Const=0;

36、 有如下頭變件:

int f1()

StatiCintf2( ); Class MA

publiC: intf3();

1statiC int f4();

};

在所描述的函數中,具有隱含的this指針的是( )。

B.f2

C.B

D.f4

37、下面對靜態數據成員的描述中,正確的是( )。

A.靜態數據成員可以在類體內進行初始化

B.靜態數據成員不可以被類的對象調用

C.靜態數據成員不能受private控制符的作用

D.靜態數據成員可以直接用類名調用

38、 設int a=10,b=11,C=12;,表達式(a+B.A.2

B.0

C.-2

D.1

39、 下列説法正確的是( )。

A.內聯函數在運行時是將該函數的目標代碼插入每個調用該函數的地方

B.內聯函數在編譯時是將該函數的目標代碼插入每個調用該函數的地方

C.類的內聯函數必須在類體內定義

D.類的內聯函數必須在類體外通過加關鍵字inline定義

40、 下面對於友元函數描述正確的是( )。

A.友元函數的實現必須在類的內部定義

B.友元函數是類的成員函數

C.友元函數破壞了類的封裝性和隱藏性

D.友元函數不能訪問類的私有成員

二、基本操作題(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;

}

熱門標籤