一、選擇題(每小題1分,共40分)
1、有如下程序:
#include
using namespace std;
class Base{
protected:
Base(){cout<<’A’;}
Base(char C){cout< };
class Derived:public Base{
public:
Derived(char C){tout< };
int main(){
Derived dl(’B’);
retum 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.B
B.BA
C.AB
D.BB
2、下列符號(hào)中能夠作為C++標(biāo)識(shí)符的是( )。
A.Coflst
B.2a
C._shape
D..Count
3、有如下程序:
#include
using namespace std;
class Base
{
private:
void funl()const{tout<<”funl”;}
protected:
void fun2()const{tout<<”fun2”;}
public:
void fun3()const{cout<<”fhll3”;}
};
class Derived:protected Base
{
public:
void fhn4()const{cout<<”filn4”;}
};
int main()
{
Derived obj;
obj.funl();//①
obj.fun2();//②
obj.furd();//③
obj.fun4();//④
return U:
}
其中有語法錯(cuò)誤的語句是( ?。?BR> A.①②③④
B.①②③
C.②③④
D.①④
4、有如下程序:
#include
using namespace std;
class Instrument{
public:
virtual void Display()=0;
};
class Pian0:public Instrument}
public:
void Display(){/*函數(shù)體略*/}
};
intmain(){
Instrument S;
Instrument*P=0:
//…;
return 0;
}
下列敘述中正確的是( )。
A.語句“Insturment*P=0;”編譯時(shí)出錯(cuò)
B.語句“Instnunent s;”編譯時(shí)出錯(cuò)
C.類Pian0中的Display函數(shù)不是虛函數(shù)
D.類Instrument是一個(gè)虛基類
5、如下函數(shù)模板:
templateT square(T x){return x*x;} 其中T是( ?。?。
A.函數(shù)形參
B.函數(shù)實(shí)參
C.模板形參
D.模板實(shí)參
6、為了提高函數(shù)調(diào)用的實(shí)際運(yùn)行速度,可以將較簡單的函數(shù)定義為( )。
A.內(nèi)聯(lián)函數(shù)
B.重載函數(shù)
C.遞歸函數(shù)
D.函數(shù)模板
7、有如下程序:
#inClude using namespaCe std; Class Point{
publiC:
statiC int number;
publiC:
Point( ?。﹖.number++;} ~Point( ?。﹞number--;}
}; , int P0int::number=0;
int main( ?。﹞
Point *ptr:
Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’
}
Point C;
Cout< return 0; }
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?。
A.3
B.4
C.6
D.7
8、有三個(gè)關(guān)系R、S和T如下.
由關(guān)系R和s通過運(yùn)算得到關(guān)系T,則所使用的運(yùn)算為( )。
A.并
B.自然連接
C.笛卡爾積
D.交
9、下列符號(hào)中,正確的c++標(biāo)識(shí)符是( )。
A.enum
B.2b
C.f00一9
D._32
10、下列關(guān)于C++預(yù)定義流對(duì)象的敘述中,正確的是( )。
A.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
B.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
C.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
D.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
11、 下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是( ?。?。
A.用一個(gè)對(duì)象去初始化同一類的另一個(gè)新對(duì)象時(shí)
B.將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)
C.函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)
D.函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)
12、 下列敘述中正確的是( )。
A.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間是相同的
B.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要多于順序存儲(chǔ)結(jié)構(gòu)
C.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要少于順序存儲(chǔ)結(jié)構(gòu)
D.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)在存儲(chǔ)空間的需求上沒有可比性
13、 類的析構(gòu)函數(shù)的作用是( )。
A.一般成員函數(shù)的初始化
B.類的初始化
C.對(duì)象的初始化
D.刪除類創(chuàng)建的對(duì)象
14、 下列運(yùn)算符不能重載為友元函數(shù)的是( )。
A.=()( )->
B. + - ++ --
C.> < >= <=
D.+= -= *=/=
15、 下面關(guān)于運(yùn)算符重載的描述錯(cuò)誤的是( )。
A.運(yùn)算符重載不能改變操作數(shù)的個(gè)數(shù)、運(yùn)算符的優(yōu)先級(jí)、運(yùn)算符的結(jié)合性和運(yùn)算符的語法結(jié)構(gòu)
B.不是所有的運(yùn)算符都可以進(jìn)行重載
C.運(yùn)算符函數(shù)的調(diào)用必須使用關(guān)鍵字operat。
D.在C+十語言中不可通過運(yùn)算符重載創(chuàng)造出新的運(yùn)算符
16、 當(dāng)使用fstream流類定義一個(gè)流對(duì)象并打開一個(gè)磁盤文件時(shí),文件的隱含打開方式為( )。
A.ios::in
B.ios::0ut
C.ios::in I ios::0ut
D.以上都不對(duì)
17、 由于常對(duì)象不能被更新,因此( )。
A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
C.常對(duì)象的成員都是常成員
D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
18、 支持子程序調(diào)用的數(shù)據(jù)結(jié)構(gòu)是( ?。?BR> A.棧
B.樹
C.隊(duì)列
D.二叉樹
19、 有如下類定義:
class B
{
public:void funl(){}
private:void fun2(){}
protected:void fun3(){}
};
class D:public B
j
protected:void fun4(){}
};
若obj是類D的對(duì)象,則下列語句中不違反訪問控制權(quán)限的是( ?。?。
A.obj.fun1();
B.obj.fun2();
C.obj.tim3();
D.ohj.fun4();
20、 有如下語句序列:
Char str[10];Cin>>str;
當(dāng)從鍵盤輸入“I love this game”時(shí),str中的字符串是( )。
A.”I love this game”
B.”I love thi”
C.”I love”
D.”I”
21、 繼承機(jī)制的作用是( )。
A.信息隱藏
B.?dāng)?shù)據(jù)封裝
C.定義新類
D.?dāng)?shù)據(jù)抽象
22、 模板對(duì)類型的參數(shù)化提供了很好的支持,因此( ?。?BR> A.類模板的主要作用是生成抽象類
B.類模板實(shí)例化時(shí),編譯器將根據(jù)給出的模板實(shí)參生成一個(gè)類
C.在類模板中的數(shù)據(jù)成員都具有同樣類型
D.類模板中的成員函數(shù)都沒有返回值
23、if語句的語法格式可描述為:
格式l:if(<條件>)<語句>
或
格式2:if(<條件>)<語句l>
else<語句2>
關(guān)于上面的語法格式,下列表述中錯(cuò)誤的是( ?。?BR> A.<條件>部分可以是一個(gè)if語句,例如if(if(a==0)…)…
B.<語句>部分可以是一個(gè)if語句,例如if(…)if(…)…
C.如果在<條件>前加上邏輯非運(yùn)算符!并交換<語句l>和<語句2>的位置,語句功能不變
D.<語句>部分可以是一個(gè)循環(huán)語句,例如if(…)while(…)…
24、 下面的程序中,錯(cuò)誤的語句是( ?。?。
①#inClude
②void main()
③{
④ int *p=new int[1];
⑧P=9;
⑥cout<<.*P< ⑦delete[]p;
⑧}
A.④
B.⑤
C.⑥
D.⑦
25、 下面有關(guān)for循環(huán)的正確描述是( )。
A.for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況
B.for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式
C.在for循環(huán)中,不能用break語句跳出循環(huán)體
D.在for循環(huán)的循環(huán)體語句中,可以包含多條語句,但必須用花括號(hào)括起來
26、 下列敘述中正確的是( )。
A.算法就是程序
B.設(shè)計(jì)算法時(shí)只需要考慮數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
C.設(shè)計(jì)算法時(shí)只需要考慮結(jié)果的可靠性
D.以上三種說法都不對(duì)
27、 由于常對(duì)象不能被更新,因此( ?。?。
A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
C.常對(duì)象的成員都是常成員
D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
28、 有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(){cout<<’A’;}
MyClass(char C.{cout< ~MyClass(){cout<<’B’;}
};
int main(){
MyClass pl,+p2;
p2=new MyClass(’X’);
delete p2;
return 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.ABX
B.ABXB
C.AXB
D.AXBB
29、有如下程序:
#include
using namespace std;
class Pair{
int m,n;
public:
Pair(int j,int k):m(j),n(k){}
int get(){return m;}
int get()const{return m+n;}
};
int main(){
Pair a(3,5);
const Pair b(3,5);
tout< return U:
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.33
B.38
C.83
D.88
30、 執(zhí)行下列語句段后,輸出字符“*”的個(gè)數(shù)是( ?。?。
for(int i=50;i>1;--i) Cout<<'*':
A.48
B.49
C.50
D.51

32、 軟件測試的目的是( )。
A.評(píng)估軟件可靠性
B.發(fā)現(xiàn)并改正程序中的錯(cuò)誤
C.改正程序中的錯(cuò)誤
D.發(fā)現(xiàn)程序中的錯(cuò)誤
33、 軟件設(shè)計(jì)中劃分模塊的一個(gè)準(zhǔn)則是( )。
A.低內(nèi)聚低耦合
B.高內(nèi)聚低耦合
C.低內(nèi)聚高耦合
D.高內(nèi)聚高耦合
34、 下列數(shù)據(jù)結(jié)構(gòu)中,能夠按照“先進(jìn)后出”原則存取數(shù)據(jù)的是( )。
A.循環(huán)隊(duì)列
B.棧
C.隊(duì)列
D.二叉樹
35、 有如下程序:
#inClude using namespaCe std; Class Base{
publiC:
Base(int x=0){Cout< Class Derived:publiC Base{ publiC:
Derived(int X=0){Cout< Base val; };
int main() {
Derived d(1); return 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
A.0
B.1
C.01
D.001
36、 已知Value是一個(gè)類,value是Value的一個(gè)對(duì)象。下列以非成員函數(shù)形式重載的運(yùn)算符函數(shù)原型中,正確的是( )。
A.Value operator+(Value v,int i);
B.Value operator+(Value v=value,int i);
C.Value operator+(Value v,inl:i=0):
D.Value operator+(Value v=vallle,int i=0);
37、 有如下程序段:
int i=0,J=1;
nt&r=i;//④ ’ r=j;//②
int * P=&i;//③ * P=&r;//④
其中會(huì)產(chǎn)生編譯錯(cuò)誤的語句是( ?。?。
A.④
B.③
C.②
D.①
38、 有如下程序:
﹟nclude
using namespace std;
int main()
{
int*P;
*P=9:
cout<<”The value at p:”<< *p;
return 0;
}
編譯運(yùn)行程序?qū)⒊霈F(xiàn)的情況是( )。
A.編譯時(shí)出現(xiàn)語法錯(cuò)誤,不能生成可執(zhí)行文件
B.運(yùn)行時(shí)一定輸出:l'lle value at P:9
C.運(yùn)行時(shí)一定輸出:llle value at P:*9
D.運(yùn)行時(shí)有可能出錯(cuò)
39、 在軟件設(shè)計(jì)中不使用的工具是( )。
A.系統(tǒng)結(jié)構(gòu)圖
B.PAD圖
C.?dāng)?shù)據(jù)流圖(DFD圖)
D.程序流程圖
40、 C++中的模板包括( ?。?。
A.對(duì)象模板和函數(shù)模板
B.對(duì)象模板和類模板
C.函數(shù)模板和類模板
D.變量模板和對(duì)象模板
二、基本操作題(18分)
41、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,此工程中包含一個(gè)源程序文件main.cpp,其中有類Book(“書”)和主函數(shù)main的定義。程序中位于每個(gè)“//ERROR****found****”下的語句行有錯(cuò)誤,請(qǐng)加以改正。改正后程序的輸出結(jié)果應(yīng)該是:
書名:C++語句程序設(shè)計(jì)總頁數(shù):299
已把“c++語言程序設(shè)計(jì)”翻到第50頁
已把“c++語言程序設(shè)計(jì)”翻到第51頁
已把“c++語言程序設(shè)計(jì)”翻到第52頁
已把“c++語言程序設(shè)計(jì)”翻到第51頁
已把書合上。
當(dāng)前頁:0
注意:只修改每個(gè)“//ERROR ***found***”下的那一行,不要改動(dòng)程序中的其他內(nèi)容。
#include
using namespace std;
class Book{
char*title;
int num—pages;//頁數(shù)
int cur_page;//當(dāng)前打開頁面的頁碼,0表示書未打開
public:
//ERROR***********found***********
Book(const char*theTitle,int pages)num_pages(pages)
{
title=new char[strlen(theTitle)+1];
strepy(title,theTitle);
cout< <<”總頁數(shù):”< }
~Book(){delete[]title;}
bool isClosed()const{return cur_page==0;} //書合上時(shí)返回true,否則返回false
bool isOpen()const{return!isClosed();}//書打開時(shí)返回true,否則返回false
int numOfPages()const{return num_pages;}//返回書的頁數(shù)
int currentPage()const{return cur_page;}//返回打開頁面的頁碼
//ERROR***********found***********
void openAtPage(int page_no)const{ //把書翻到指定頁
cout< i“page_nohum_pages){
tOUt<<”無法翻到第”< ClOSe();
}
else{
cur_page=page_n0;
tout<<”已把“"< }
}
void openAtPrevPage(){openAtPage(cur page—1);{//把書翻到上一頁
void openAtNextPage(){openAtPage(cur_page+1);}//把書翻到下一頁
void close(){//把書合上
tout< if(isClosed())
tout<<"書是合上的。";
else{
//ERROR**********found**********
num_pages=0;
cout<<”已把書合上?!?;
}
cOut< }
};
int main(){
Book book(”C++語言程序設(shè)計(jì)”,299);
book.openAtPage(50);
book.openAtNextPage();
book.openAtNextPage();
book.openA.tPrevPage();
book.close();
tout<<”當(dāng)前頁:”< return 0:
}
三、簡單應(yīng)用題(24分)
42、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個(gè)程序文件main.cpp,其中有日期類Date、人員類Person及排序函數(shù)sortByName和主函數(shù)main的定義。請(qǐng)?jiān)诔绦蛑械臋M線處填寫適當(dāng)?shù)拇a并刪除橫線,以實(shí)現(xiàn)上述類定義和函數(shù)定義。此程序的正確輸出結(jié)果應(yīng)為:
按姓名排序
排序前:
張三 男 出生日期:1978年4月20日
王五 女 出生日期:1965年8月3日
楊六 女 出生日期:1965年9月5日
李四 男 出生日期:1973年5月30日
排序后:
李四 男 出生日期:1973年5月30日
王五 女 出生日期:1965年8月3日
楊六 女 出生日期:1965年9月5日
張三 男 出生日期:1978年4月20日
注意:只能在橫線處填寫適當(dāng)?shù)拇a,不要改動(dòng)程序中的其他內(nèi)容,也不要?jiǎng)h除或移動(dòng)“//****found****”。
#include
using namespace std;
class Date{//日期類
int year,month,day;//年、月、日
public:
Date(int year,int month,int day):year(year),month(month),day(day){}
int getYear()const{return year;}
int getMonth()const{return month;}
int getDay()const{return day;}
};
class Person{ //人員類
char name[14];//姓名
bool is—male;//性別,為true時(shí)表示男性
Date birth—date;//出生日期
public:
Person(char*name,bool is—male,Date birth_date)
//***************found***************
:——————
{
{
strcpy(this一>name,name);
}
const char * getName()const{return name;}
bool isMale()const{return is—male;}
Date getBirthdate()const{return birth—date;}
//利用strcmp()函數(shù)比較姓名,返回一個(gè)正數(shù)、0或負(fù)數(shù),分別表示大于、等于、小于
int compareName(const Person&p)const{
//***************found*****************
————}
void show(){
cout< cout< //**************found**************
__________________________//顯示出生月
<< “birth—date.getDay()<<”日”;//顯示出生日
}
};
void sortByName(Person ps[],int size){
//將人員數(shù)組按姓名排列為升序
for(int i=0;i //采用選擇排序算法
int m=i;
for(int j=i+1;j if(ps[j].eompareName(ps[m])<0)
m=j;
if(m>i){
Person P=ps[m];
ps[m]=ps[i];
ps[i]=p;
}
}
}
int main(){
Person staff[]={
Person(”張三”,true,Date(1978,4,20)),
Person(”王五”,false,Date(1965,8,3)),
Person(”楊六”,false,Date(1965,9,5)),
Person(”李四”,tme,Date(1973,5,30))
};
const int size=sizeof(staff)/sizeof(staff[0]);
int i;
eout< cout< for(i=0;i sortByName(staff,size);
cout< for(i_0;i cout< return 0;
{
四、綜合應(yīng)用題(18分)
43、
請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾prosS下的工程pr093,其中包含了類TaxCaleulator(“個(gè)稅計(jì)算器”)和主函數(shù)main的定義。創(chuàng)建“個(gè)稅計(jì)算器”需要接收稅率表信息和起征額信息。在main函數(shù)中,通過兩個(gè)數(shù)組創(chuàng)建了如下的稅率表:

利用這個(gè)稅率表創(chuàng)建“個(gè)稅計(jì)算器”時(shí),假定起征額為2 000元(即不超過2 000元的所得不征收個(gè)人所得稅)。請(qǐng)補(bǔ)充完成計(jì)算應(yīng)納個(gè)人所得稅額的成員函數(shù)getTaxPayable,其中的參數(shù)income為月收入。此程序的正確輸出結(jié)果應(yīng)為:
月收入為800元時(shí)應(yīng)繳納個(gè)人所得稅0元
月收入為l 800元時(shí)應(yīng)繳納個(gè)人所得稅0元月收入為2 800元時(shí)應(yīng)繳納個(gè)人所得稅 55元 月收入為3 800元時(shí)應(yīng)繳納個(gè)人所得稅l55元
月收入為4 800元時(shí)應(yīng)繳納個(gè)人所得稅295元月收入為5 800元時(shí)應(yīng)繳納個(gè)人所得稅455元
注意:只能在函數(shù)9etTaxPayable中的“//**********333**********”和“//**********666**********”之間
填人若干語句,不要改動(dòng)程序中的其他內(nèi)容。 //Tax Calculator.h #include #include
using flamespace std; class TaxCalculator{ public:
TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
list_len(the_length),threshold(the—threshold){ for(int i=0;i lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
} f
—TaxCalculator(){delete[]lower_limits;delete[]rates;}
double getTaxPayable(double income)eonst;//返回指定月收入的應(yīng)納個(gè)人所得稅額 void showTaxPayable(double income)const;//顯示指定月收入的應(yīng)納個(gè)人所得稅額 private:
double$lower—limits;//適用收入段下限 double *rates; //適用稅率
int list—len;//稅率表項(xiàng)數(shù)
double threshold; //起征額 };
void writeToFile(consl char * path); //TaxCalcnlator.cpp
‘#include”TaxCalculator.h”
double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
//應(yīng)納稅工資額
double tax_payable=0.0; //應(yīng)納個(gè)人所得稅額
int i=list_len-1;
//從稅率表的適用段開始計(jì)算 while(i>=0){
//**********333**********
//**********666**********
--i; }
return tax_payable;
} void TaxCalculator::showTaxPayable(double income)const{
cout<<”月收入為”< }
//main.cpp
#include”TaxCalculator.h” int main(){
double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
return 0;
}
1、有如下程序:
#include
using namespace std;
class Base{
protected:
Base(){cout<<’A’;}
Base(char C){cout< };
class Derived:public Base{
public:
Derived(char C){tout< };
int main(){
Derived dl(’B’);
retum 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.B
B.BA
C.AB
D.BB
2、下列符號(hào)中能夠作為C++標(biāo)識(shí)符的是( )。
A.Coflst
B.2a
C._shape
D..Count
3、有如下程序:
#include
using namespace std;
class Base
{
private:
void funl()const{tout<<”funl”;}
protected:
void fun2()const{tout<<”fun2”;}
public:
void fun3()const{cout<<”fhll3”;}
};
class Derived:protected Base
{
public:
void fhn4()const{cout<<”filn4”;}
};
int main()
{
Derived obj;
obj.funl();//①
obj.fun2();//②
obj.furd();//③
obj.fun4();//④
return U:
}
其中有語法錯(cuò)誤的語句是( ?。?BR> A.①②③④
B.①②③
C.②③④
D.①④
4、有如下程序:
#include
using namespace std;
class Instrument{
public:
virtual void Display()=0;
};
class Pian0:public Instrument}
public:
void Display(){/*函數(shù)體略*/}
};
intmain(){
Instrument S;
Instrument*P=0:
//…;
return 0;
}
下列敘述中正確的是( )。
A.語句“Insturment*P=0;”編譯時(shí)出錯(cuò)
B.語句“Instnunent s;”編譯時(shí)出錯(cuò)
C.類Pian0中的Display函數(shù)不是虛函數(shù)
D.類Instrument是一個(gè)虛基類
5、如下函數(shù)模板:
templateT square(T x){return x*x;} 其中T是( ?。?。
A.函數(shù)形參
B.函數(shù)實(shí)參
C.模板形參
D.模板實(shí)參
6、為了提高函數(shù)調(diào)用的實(shí)際運(yùn)行速度,可以將較簡單的函數(shù)定義為( )。
A.內(nèi)聯(lián)函數(shù)
B.重載函數(shù)
C.遞歸函數(shù)
D.函數(shù)模板
7、有如下程序:
#inClude using namespaCe std; Class Point{
publiC:
statiC int number;
publiC:
Point( ?。﹖.number++;} ~Point( ?。﹞number--;}
}; , int P0int::number=0;
int main( ?。﹞
Point *ptr:
Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’
}
Point C;
Cout< return 0; }
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?。
A.3
B.4
C.6
D.7
8、有三個(gè)關(guān)系R、S和T如下.
由關(guān)系R和s通過運(yùn)算得到關(guān)系T,則所使用的運(yùn)算為( )。
A.并
B.自然連接
C.笛卡爾積
D.交
9、下列符號(hào)中,正確的c++標(biāo)識(shí)符是( )。
A.enum
B.2b
C.f00一9
D._32
10、下列關(guān)于C++預(yù)定義流對(duì)象的敘述中,正確的是( )。
A.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
B.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
C.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
D.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
11、 下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是( ?。?。
A.用一個(gè)對(duì)象去初始化同一類的另一個(gè)新對(duì)象時(shí)
B.將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)
C.函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)
D.函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)
12、 下列敘述中正確的是( )。
A.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間是相同的
B.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要多于順序存儲(chǔ)結(jié)構(gòu)
C.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要少于順序存儲(chǔ)結(jié)構(gòu)
D.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)在存儲(chǔ)空間的需求上沒有可比性
13、 類的析構(gòu)函數(shù)的作用是( )。
A.一般成員函數(shù)的初始化
B.類的初始化
C.對(duì)象的初始化
D.刪除類創(chuàng)建的對(duì)象
14、 下列運(yùn)算符不能重載為友元函數(shù)的是( )。
A.=()( )->
B. + - ++ --
C.> < >= <=
D.+= -= *=/=
15、 下面關(guān)于運(yùn)算符重載的描述錯(cuò)誤的是( )。
A.運(yùn)算符重載不能改變操作數(shù)的個(gè)數(shù)、運(yùn)算符的優(yōu)先級(jí)、運(yùn)算符的結(jié)合性和運(yùn)算符的語法結(jié)構(gòu)
B.不是所有的運(yùn)算符都可以進(jìn)行重載
C.運(yùn)算符函數(shù)的調(diào)用必須使用關(guān)鍵字operat。
D.在C+十語言中不可通過運(yùn)算符重載創(chuàng)造出新的運(yùn)算符
16、 當(dāng)使用fstream流類定義一個(gè)流對(duì)象并打開一個(gè)磁盤文件時(shí),文件的隱含打開方式為( )。
A.ios::in
B.ios::0ut
C.ios::in I ios::0ut
D.以上都不對(duì)
17、 由于常對(duì)象不能被更新,因此( )。
A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
C.常對(duì)象的成員都是常成員
D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
18、 支持子程序調(diào)用的數(shù)據(jù)結(jié)構(gòu)是( ?。?BR> A.棧
B.樹
C.隊(duì)列
D.二叉樹
19、 有如下類定義:
class B
{
public:void funl(){}
private:void fun2(){}
protected:void fun3(){}
};
class D:public B
j
protected:void fun4(){}
};
若obj是類D的對(duì)象,則下列語句中不違反訪問控制權(quán)限的是( ?。?。
A.obj.fun1();
B.obj.fun2();
C.obj.tim3();
D.ohj.fun4();
20、 有如下語句序列:
Char str[10];Cin>>str;
當(dāng)從鍵盤輸入“I love this game”時(shí),str中的字符串是( )。
A.”I love this game”
B.”I love thi”
C.”I love”
D.”I”
21、 繼承機(jī)制的作用是( )。
A.信息隱藏
B.?dāng)?shù)據(jù)封裝
C.定義新類
D.?dāng)?shù)據(jù)抽象
22、 模板對(duì)類型的參數(shù)化提供了很好的支持,因此( ?。?BR> A.類模板的主要作用是生成抽象類
B.類模板實(shí)例化時(shí),編譯器將根據(jù)給出的模板實(shí)參生成一個(gè)類
C.在類模板中的數(shù)據(jù)成員都具有同樣類型
D.類模板中的成員函數(shù)都沒有返回值
23、if語句的語法格式可描述為:
格式l:if(<條件>)<語句>
或
格式2:if(<條件>)<語句l>
else<語句2>
關(guān)于上面的語法格式,下列表述中錯(cuò)誤的是( ?。?BR> A.<條件>部分可以是一個(gè)if語句,例如if(if(a==0)…)…
B.<語句>部分可以是一個(gè)if語句,例如if(…)if(…)…
C.如果在<條件>前加上邏輯非運(yùn)算符!并交換<語句l>和<語句2>的位置,語句功能不變
D.<語句>部分可以是一個(gè)循環(huán)語句,例如if(…)while(…)…
24、 下面的程序中,錯(cuò)誤的語句是( ?。?。
①#inClude
②void main()
③{
④ int *p=new int[1];
⑧P=9;
⑥cout<<.*P< ⑦delete[]p;
⑧}
A.④
B.⑤
C.⑥
D.⑦
25、 下面有關(guān)for循環(huán)的正確描述是( )。
A.for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況
B.for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式
C.在for循環(huán)中,不能用break語句跳出循環(huán)體
D.在for循環(huán)的循環(huán)體語句中,可以包含多條語句,但必須用花括號(hào)括起來
26、 下列敘述中正確的是( )。
A.算法就是程序
B.設(shè)計(jì)算法時(shí)只需要考慮數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
C.設(shè)計(jì)算法時(shí)只需要考慮結(jié)果的可靠性
D.以上三種說法都不對(duì)
27、 由于常對(duì)象不能被更新,因此( ?。?。
A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
C.常對(duì)象的成員都是常成員
D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
28、 有如下程序:
#include
using namespace std;
class MyClass{
public:
MyClass(){cout<<’A’;}
MyClass(char C.{cout< ~MyClass(){cout<<’B’;}
};
int main(){
MyClass pl,+p2;
p2=new MyClass(’X’);
delete p2;
return 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.ABX
B.ABXB
C.AXB
D.AXBB
29、有如下程序:
#include
using namespace std;
class Pair{
int m,n;
public:
Pair(int j,int k):m(j),n(k){}
int get(){return m;}
int get()const{return m+n;}
};
int main(){
Pair a(3,5);
const Pair b(3,5);
tout< return U:
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR> A.33
B.38
C.83
D.88
30、 執(zhí)行下列語句段后,輸出字符“*”的個(gè)數(shù)是( ?。?。
for(int i=50;i>1;--i) Cout<<'*':
A.48
B.49
C.50
D.51

32、 軟件測試的目的是( )。
A.評(píng)估軟件可靠性
B.發(fā)現(xiàn)并改正程序中的錯(cuò)誤
C.改正程序中的錯(cuò)誤
D.發(fā)現(xiàn)程序中的錯(cuò)誤
33、 軟件設(shè)計(jì)中劃分模塊的一個(gè)準(zhǔn)則是( )。
A.低內(nèi)聚低耦合
B.高內(nèi)聚低耦合
C.低內(nèi)聚高耦合
D.高內(nèi)聚高耦合
34、 下列數(shù)據(jù)結(jié)構(gòu)中,能夠按照“先進(jìn)后出”原則存取數(shù)據(jù)的是( )。
A.循環(huán)隊(duì)列
B.棧
C.隊(duì)列
D.二叉樹
35、 有如下程序:
#inClude using namespaCe std; Class Base{
publiC:
Base(int x=0){Cout< Class Derived:publiC Base{ publiC:
Derived(int X=0){Cout< Base val; };
int main() {
Derived d(1); return 0;
}
執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
A.0
B.1
C.01
D.001
36、 已知Value是一個(gè)類,value是Value的一個(gè)對(duì)象。下列以非成員函數(shù)形式重載的運(yùn)算符函數(shù)原型中,正確的是( )。
A.Value operator+(Value v,int i);
B.Value operator+(Value v=value,int i);
C.Value operator+(Value v,inl:i=0):
D.Value operator+(Value v=vallle,int i=0);
37、 有如下程序段:
int i=0,J=1;
nt&r=i;//④ ’ r=j;//②
int * P=&i;//③ * P=&r;//④
其中會(huì)產(chǎn)生編譯錯(cuò)誤的語句是( ?。?。
A.④
B.③
C.②
D.①
38、 有如下程序:
﹟nclude
using namespace std;
int main()
{
int*P;
*P=9:
cout<<”The value at p:”<< *p;
return 0;
}
編譯運(yùn)行程序?qū)⒊霈F(xiàn)的情況是( )。
A.編譯時(shí)出現(xiàn)語法錯(cuò)誤,不能生成可執(zhí)行文件
B.運(yùn)行時(shí)一定輸出:l'lle value at P:9
C.運(yùn)行時(shí)一定輸出:llle value at P:*9
D.運(yùn)行時(shí)有可能出錯(cuò)
39、 在軟件設(shè)計(jì)中不使用的工具是( )。
A.系統(tǒng)結(jié)構(gòu)圖
B.PAD圖
C.?dāng)?shù)據(jù)流圖(DFD圖)
D.程序流程圖
40、 C++中的模板包括( ?。?。
A.對(duì)象模板和函數(shù)模板
B.對(duì)象模板和類模板
C.函數(shù)模板和類模板
D.變量模板和對(duì)象模板
二、基本操作題(18分)
41、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,此工程中包含一個(gè)源程序文件main.cpp,其中有類Book(“書”)和主函數(shù)main的定義。程序中位于每個(gè)“//ERROR****found****”下的語句行有錯(cuò)誤,請(qǐng)加以改正。改正后程序的輸出結(jié)果應(yīng)該是:
書名:C++語句程序設(shè)計(jì)總頁數(shù):299
已把“c++語言程序設(shè)計(jì)”翻到第50頁
已把“c++語言程序設(shè)計(jì)”翻到第51頁
已把“c++語言程序設(shè)計(jì)”翻到第52頁
已把“c++語言程序設(shè)計(jì)”翻到第51頁
已把書合上。
當(dāng)前頁:0
注意:只修改每個(gè)“//ERROR ***found***”下的那一行,不要改動(dòng)程序中的其他內(nèi)容。
#include
using namespace std;
class Book{
char*title;
int num—pages;//頁數(shù)
int cur_page;//當(dāng)前打開頁面的頁碼,0表示書未打開
public:
//ERROR***********found***********
Book(const char*theTitle,int pages)num_pages(pages)
{
title=new char[strlen(theTitle)+1];
strepy(title,theTitle);
cout< <<”總頁數(shù):”< }
~Book(){delete[]title;}
bool isClosed()const{return cur_page==0;} //書合上時(shí)返回true,否則返回false
bool isOpen()const{return!isClosed();}//書打開時(shí)返回true,否則返回false
int numOfPages()const{return num_pages;}//返回書的頁數(shù)
int currentPage()const{return cur_page;}//返回打開頁面的頁碼
//ERROR***********found***********
void openAtPage(int page_no)const{ //把書翻到指定頁
cout< i“page_nohum_pages){
tOUt<<”無法翻到第”< ClOSe();
}
else{
cur_page=page_n0;
tout<<”已把“"< }
}
void openAtPrevPage(){openAtPage(cur page—1);{//把書翻到上一頁
void openAtNextPage(){openAtPage(cur_page+1);}//把書翻到下一頁
void close(){//把書合上
tout< if(isClosed())
tout<<"書是合上的。";
else{
//ERROR**********found**********
num_pages=0;
cout<<”已把書合上?!?;
}
cOut< }
};
int main(){
Book book(”C++語言程序設(shè)計(jì)”,299);
book.openAtPage(50);
book.openAtNextPage();
book.openAtNextPage();
book.openA.tPrevPage();
book.close();
tout<<”當(dāng)前頁:”< return 0:
}
三、簡單應(yīng)用題(24分)
42、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個(gè)程序文件main.cpp,其中有日期類Date、人員類Person及排序函數(shù)sortByName和主函數(shù)main的定義。請(qǐng)?jiān)诔绦蛑械臋M線處填寫適當(dāng)?shù)拇a并刪除橫線,以實(shí)現(xiàn)上述類定義和函數(shù)定義。此程序的正確輸出結(jié)果應(yīng)為:
按姓名排序
排序前:
張三 男 出生日期:1978年4月20日
王五 女 出生日期:1965年8月3日
楊六 女 出生日期:1965年9月5日
李四 男 出生日期:1973年5月30日
排序后:
李四 男 出生日期:1973年5月30日
王五 女 出生日期:1965年8月3日
楊六 女 出生日期:1965年9月5日
張三 男 出生日期:1978年4月20日
注意:只能在橫線處填寫適當(dāng)?shù)拇a,不要改動(dòng)程序中的其他內(nèi)容,也不要?jiǎng)h除或移動(dòng)“//****found****”。
#include
using namespace std;
class Date{//日期類
int year,month,day;//年、月、日
public:
Date(int year,int month,int day):year(year),month(month),day(day){}
int getYear()const{return year;}
int getMonth()const{return month;}
int getDay()const{return day;}
};
class Person{ //人員類
char name[14];//姓名
bool is—male;//性別,為true時(shí)表示男性
Date birth—date;//出生日期
public:
Person(char*name,bool is—male,Date birth_date)
//***************found***************
:——————
{
{
strcpy(this一>name,name);
}
const char * getName()const{return name;}
bool isMale()const{return is—male;}
Date getBirthdate()const{return birth—date;}
//利用strcmp()函數(shù)比較姓名,返回一個(gè)正數(shù)、0或負(fù)數(shù),分別表示大于、等于、小于
int compareName(const Person&p)const{
//***************found*****************
————}
void show(){
cout< cout< //**************found**************
__________________________//顯示出生月
<< “birth—date.getDay()<<”日”;//顯示出生日
}
};
void sortByName(Person ps[],int size){
//將人員數(shù)組按姓名排列為升序
for(int i=0;i //采用選擇排序算法
int m=i;
for(int j=i+1;j if(ps[j].eompareName(ps[m])<0)
m=j;
if(m>i){
Person P=ps[m];
ps[m]=ps[i];
ps[i]=p;
}
}
}
int main(){
Person staff[]={
Person(”張三”,true,Date(1978,4,20)),
Person(”王五”,false,Date(1965,8,3)),
Person(”楊六”,false,Date(1965,9,5)),
Person(”李四”,tme,Date(1973,5,30))
};
const int size=sizeof(staff)/sizeof(staff[0]);
int i;
eout< cout< for(i=0;i sortByName(staff,size);
cout< for(i_0;i cout< return 0;
{
四、綜合應(yīng)用題(18分)
43、
請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾prosS下的工程pr093,其中包含了類TaxCaleulator(“個(gè)稅計(jì)算器”)和主函數(shù)main的定義。創(chuàng)建“個(gè)稅計(jì)算器”需要接收稅率表信息和起征額信息。在main函數(shù)中,通過兩個(gè)數(shù)組創(chuàng)建了如下的稅率表:

利用這個(gè)稅率表創(chuàng)建“個(gè)稅計(jì)算器”時(shí),假定起征額為2 000元(即不超過2 000元的所得不征收個(gè)人所得稅)。請(qǐng)補(bǔ)充完成計(jì)算應(yīng)納個(gè)人所得稅額的成員函數(shù)getTaxPayable,其中的參數(shù)income為月收入。此程序的正確輸出結(jié)果應(yīng)為:
月收入為800元時(shí)應(yīng)繳納個(gè)人所得稅0元
月收入為l 800元時(shí)應(yīng)繳納個(gè)人所得稅0元月收入為2 800元時(shí)應(yīng)繳納個(gè)人所得稅 55元 月收入為3 800元時(shí)應(yīng)繳納個(gè)人所得稅l55元
月收入為4 800元時(shí)應(yīng)繳納個(gè)人所得稅295元月收入為5 800元時(shí)應(yīng)繳納個(gè)人所得稅455元
注意:只能在函數(shù)9etTaxPayable中的“//**********333**********”和“//**********666**********”之間
填人若干語句,不要改動(dòng)程序中的其他內(nèi)容。 //Tax Calculator.h #include #include
using flamespace std; class TaxCalculator{ public:
TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
list_len(the_length),threshold(the—threshold){ for(int i=0;i lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
} f
—TaxCalculator(){delete[]lower_limits;delete[]rates;}
double getTaxPayable(double income)eonst;//返回指定月收入的應(yīng)納個(gè)人所得稅額 void showTaxPayable(double income)const;//顯示指定月收入的應(yīng)納個(gè)人所得稅額 private:
double$lower—limits;//適用收入段下限 double *rates; //適用稅率
int list—len;//稅率表項(xiàng)數(shù)
double threshold; //起征額 };
void writeToFile(consl char * path); //TaxCalcnlator.cpp
‘#include”TaxCalculator.h”
double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
//應(yīng)納稅工資額
double tax_payable=0.0; //應(yīng)納個(gè)人所得稅額
int i=list_len-1;
//從稅率表的適用段開始計(jì)算 while(i>=0){
//**********333**********
//**********666**********
--i; }
return tax_payable;
} void TaxCalculator::showTaxPayable(double income)const{
cout<<”月收入為”< }
//main.cpp
#include”TaxCalculator.h” int main(){
double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
return 0;
}