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;
}