2015年計算機二級考試《C++》突破試卷(2)
30下列程序的輸出結果為( )。
#include
{
if(n<1)return l;
else return n+time(n一1); return 0;
}
void main() {
cout<
}
A.0B.10C.15D.16
參考答案:D
參考解析:本題考查的是遞歸函數的使用,題中遞歸函數的結束條件為n
31有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1;}
MyClass(const MyClass&x){cout<<2;}
MyClass&operator=(const MyClass&x){cout<<3;retum$this;}
~MyClass()}cout<<4;}
};
int main()
{
MyClass objl(1),obj2(2),obj3(objl);
retum 0;
{
執行這個程序的輸出結果是( )。
A.112444B.11114444C.121444D.11314444
參考答案:A
參考解析:本題:考查構造函數和復制構造函數以及重載運算符。本題中先后定義了兩個對象obj1,obj2,依次輸出口,然后定義了對象obj3,凋用復制構造函數,輸出2,最后執行三次析構函數,輸出444。
32在下列模式中,能夠給出數據庫物理存儲結構與物理存取方法的是( )。
A.外模式B.內模式C.概念模式D.邏輯模式
參考答案:B
參考解析:數據庫系統的蘭級模式是概念模式、外模式和內模式。概念模式是數據庫系統中全局數據邏輯結構的描述,是全體用戶公共數據視圖。外模式也稱子模式或用戶模式,它是用戶的數據視圖,給出了每個用戶的局部數據描述、、內模式又稱物理模式,它給出r數據庫物理存儲結構與物理存取方法,所以選擇8。
33有如下程序:
#inClude using namespaCe std; Class Base{
publiC:
void output(){Cout<<1;}
virtual void Print(){Cout<<'B’;} };
Class Derived:publiC Base{ publiC:
void output(){Cout<<2;} void Print(){Cout<<’D ';} };
int main() {
Base * ptr=new Derived; ptr一>output();
ptr一>Print(); delete ptr;
retum0; }
執行這個程序的輸出結果是( )。
A.1BB.lDC.2BD.2D
參考答案:B
參考解析:在某基類中聲明為vitua1并在一個或多個派生類中被重新定義的成員函數,本題中定義了一個指向派生類對象的基類指針ptr,執行ptr一>outpnt后,會執行基類的output函數,輸出1,由于Print是虛函數,所以ptr->Print()會執行派生類的Print,即輸出D,所以本題答案為B。
34以下程序中,錯誤的行為是( )。
①#include
②class A
③{
④public:
⑤ int n=2;
⑥ A(int val){cout<
⑦ -A(){};
⑧};
⑨void main() ⑩{
⑪ A a(0);
⑫}
A.⑤B.⑥C.⑦D.⑪
參考答案:A
參考解析:C++語言中規定在類體中不允許對所定義的數據成員進行初始化。
35下列數據結構中,屬于非線性結構的是( )。
A.循環隊列B.帶鏈隊列C.二叉樹D.帶鏈棧
參考答案:C
參考解析:樹是簡單的非線性結構,所以二叉樹作為樹的一種也是一種非線性結構。
36有如下程序:
#inClude using namespaCe std; Class A{
publiC:
statiC int a;
void init( ){。a=1;}
A(int a=2){init( );a++;} };
int A::a:0: A obj;
int main( ) {
Cout<
}
運行時輸出的結果是( )。
A.0B.1C.2D.3
參考答案:B
參考解析:本題考查構造函數,本題中對類中的a數據成員先是賦值為0,當定義了對象obj時,執行構造函數,將a的值變為了1,所以輸出1。
37軟件詳細設計產生的圖如下:
該圖是( )。
A.N—S圖B.PAD圖C.程序流程圖D.E—R圖
參考答案:C
參考解析:N—S圖提出了用方框圖來代替傳統的程序流程圖,所以A不對。PAD圖是問題分析圖,它是繼承程序流程圖和方框圖之后提出的又一種主要用于描述軟件詳細設計的圖形表示工具,所以B不對。E—R圖是數據庫中的用于表示E—R模型的圖示工具,所以D不對。根據圖中所示表示方法是進行軟件詳細設計時使用的程序流程圖。
38秘序調試的任務是( )。
A.設計測試用例B.驗證程序的正確性C.發現程序中的錯誤D.診斷和改正程序中的錯誤
參考答案:D
參考解析:程序調試的任務是診斷和改正程序中的錯誤。
39有如下程序:
#include
using namespace std;
class A{
public:
virtual void fancl(){cout<<”Al”;}
void func2(){cout<<”A2”;}
};
class B:public A{
public:
void funcI(){tout<<”Bl”;}
void func2(){tout<<”B2”;}
};
intmain()}
A*P=new B:
P—>funcl();
P—>func2();
delete p;
return 0;
}
執行這個程序的輸出結果是( )。
A.B182B.A1A2C.B1A2D.AIB2
參考答案:C
參考解析:本題考查虛函數。虛函數指在基類中聲明為virtual并在一個或多個派生類中被重新定義的成員函數。題中定義了一個派生類對象8,并使用類A的對象指針指向B,由于基類A中的funcl為虛函數,所以會執行派生類的funcl,輸出Bl,而基類中的func2不是虛函數,所以P->func2()會執行基類的func2,輸出A2。故答案為c。
40下列字符串中。不可以用做c++標識符的是( )。
A.y_2006B._EST_HC.ReturnD.switch
參考答案:D
參考解析:本題考查C++標識符的命名規則,其規則有如下幾點:①所有標識符必須由字母、數字或下畫線組成,且必須由字母或下畫線開頭;②所有標識符不能使用C++已有的關鍵字;③大、小寫字母表示不同意義,即代表不同的標識符。選項C中雖然retum是關鍵字,但因首字母大、小寫不同,也可用于標識符,但不建議使用。故答案為D。
二、基本操作題
41請使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,其中有枚舉DOGCOLOR、狗類Dog和主函數main的定義。程序中位于每個“//ERROR ****found****”下的語句行有錯誤,請加以改正。改正后程序的輸出結果應該是:
There is a white dog named Hoh0. There is a blaCk dog named Haha. There is a motley dog named Hihi. 注意:只修改每個//ERROR****found****女料下的那一行,不要改動程序中的其他內容。
#inClude using namespaCe std; //狗的顏色:黑、白、黃、褐、花、其他
enum DOGCOLOR{BLACK,WHITE,YELLOW,BROWN,PIEBALD,OTHER}; Class Dog{//狗類
DOGCOLOR Color; Char name[20]; statiC int Count; publiC:
Dog(Char nalTle[],DOGCOLOR Color){ strCpy(this一>name,name);
//ERROR**********found**********、
strCpy(this一>Color,Color);
} 1 DOGCOLOR getColor()Const{retum Color;}
//ERROR**********found**********
Const Char * 9etName()Const{return*finin9;} Const Char * 9etColorString()Const{
switCh(Color){
Case BLACK:return”blaCk“; Case WHITE:return”white”:
Case YELLOW:return’"yellow”: Case BROWN:return”brown”; ease PIEBALD:return”piebald”:
}
return”motley”;
}
void show()Const{ . Cout<<”There is a”<
} }; int main(){
//ERROR**********found**********
Dog dogl(”Hoh0”,WHITE),dog2(”Haha”,BLACK);d0g3(”Hihi”,0THER); d091.show();
dos2.show(); dos3.show(); return 0;
}
參考解析:
(1)this->color=color:
(2)consL char getName()eonst{return*name;}
(3)Dog dogl(”Hoho”,WHITE)。dog2(”Haha”,
BLACK),dog3(”Hihi”,OTHER);
三、簡單應用題
42請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2。此工程中包含一個源程序文件main.cpp,其中有“房間”類Room及其派生出的“辦公室”類0ffice的定義,還有主函數main的定義。請在程序中“//****found****”下的橫線處填寫適當的代碼并刪除橫線,以實現上述類定義。此程序的正確輸出結果應為:
辦公室房間號:308
辦公室長度:5.6
辦公室寬度:4.8
辦公室面積:26.88
辦公室所屬部門:會計科
注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“///料料found••料”。
#include
using namespaee std;
class Room{ //“房間”類
int room_n0;//房間號
double length;//房間長度(m)
double width;//房間寬度(n1)
public:
Room(int the—room—n0,double the~length,double the—width):loom—no(the—room—no),length(the—
length),width(the—width){}
int theRoomNo()eonst{return iDonl—n0;}
//返回房間號
double theLength()const{return length;}//返回房間長度
double theWidth()const{return width;}//返回房間寬度
//**********found**********
double theArea()const{_______________}//返回房間面積(矩形面積)
};
class Office:public Room{//“辦公室”類
char*depart;//所屬部門
public:
Office(int the_room_n0,double the_length,double the_width,eonst char木the_depart)
//**********found**********
:_______________{
depart=new char[strlen(the depart)+1];
//**********found**********
strcpy(_______________);
}
~Office(){delete[]depart;}
const char*theDepartment()const{return depart;}//返回所屬部門
};
int main(){
//**********found**********
Office_______________;
cout<<”辦公室房間號:”<
<<”辦公室長度:”<
<<”辦公室寬度:”<
<<”辦公室面積:”<
<<”辦公室所屬部門:”<
return 0;
}
參考解析:
(1)returtl length*width;
(2)Room(the_room_no,the_lengih,the_width)
(3)depart,the_depart
(4)an_office(308,5.6,4.8,”會汁科”)
四、綜合應用題
43請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件proj3,此工程中包含一個源程序文件proj3.cpp,補充編制c++程序proj3.cpp,其功能是讀取文本文件in.dat中的全部內容,將文本存放到doc類的對象myDoc中。然后將myDoc中的字符序列反轉,并輸出到文件out.dat中。文件in.dat的長度不大于1000字節。
要求:
補充編制的內容寫在“//**********”與“//**********”兩行之間。實現將myDoc中的字符序列反轉,并將反轉后的序列在屏幕上輸出。不得修改程序的其他部分。
注意:程序最后已將結果輸出到文件0ut.dat中,輸出函數writeToFile已經給出并且調用。
//proj3.cpp
#include
#include
#include
using namespace std;
class doc
{
private:
char*sir;//文本字符串首地址
int length;//文本字符個數
public:
//構造函數,讀取文件內容,用于初始化新對象,filename是文件名字符串首地址
doc(char*filename);
void reverse();//將字符序列反轉
一doc();
void writeToFile(char*filename);
};
doc::doc(char}filename)
{
ifstream myFile(filename);
int len=1001,tmp;
atr=new char[1en];
length=0;
while((trap=myFile.get())!=EOF)
{
str[1ength++]=trap;
}
str[1ength]=‘\0’;
myFile.close();
}
void doc::reverse(){
//將數組atr中的length個字符中的第一個字符與最后一個字符交換,第二個字符與倒數第二個
//字符交換……
//*************333*************
//*************666*************
}
doc::~doe()
{
delete[]str;
}
void doc::writeToFile(char*filename)
{
Ofstream outFile(filename);
outFile<
outFile.close();
}
void main()
{
doc myDoc(”in.dat”);
myDoc.reveme();
myDoc.writeToFile(”out.dat”);
}
參考解析:
int j,J;//定義兩個整數l臨時變量i.j.
for(i=0,j=length一1;i
chartemp=str[i];
//把str[i]中的值保存在臨時變量temp
str[i]=str[j];
//把Str[j]值賦給Str[i],實現字符前后替換
str[j]=temp;
//把保存在臨時變量temp中的值再賦值給Str[j]
}
【考點分析】
本題主要考查的是doc類、構造函數、成員函數和析構函數。
【解題思路】
題目要求將myDoc中的字符序列反轉,在main函數中我們看到myDoc是doc類,根據doc類的定義可以知道它是把讀取文件的字符串存到str動態數組中。reverse函數實現將數組str中的length個字符中的第一個字符與最后一個字符交換,第二個字符與倒數第二個字符交換,依次類推。使用變量i和J,分別表示第一個字符和最后一個字符的下標,定義temp作為中間變量進行交換。第43題 筆記記錄我的筆記(0) | 精選筆記(1)選擇筆記標簽:試題內容(1)答案解析(0)