一、選擇題
1.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為( )
A.GEDHFBCA B.DGEBHFCA
C.ABCDEFGH D.ACBFEDHG
【參考答案】 B
2.如果進(jìn)棧序列為e1,e2,e3,e4,則可能的出棧序列是( )
A.e3,e1,e4,e2 B.e2,e4,e3,e1 C.e3,e4,e1,e2 D.任意順序
【參考答案】 B
3.程序設(shè)計(jì)語(yǔ)言的基本成分是數(shù)據(jù)成分、運(yùn)算成分、控制成分和( )
A.對(duì)象成分 B.變量成分 C.語(yǔ)句成分 D.傳輸成分
【參考答案】 D
4.下列不屬于軟件工程的3個(gè)要素的是( )
A.工具 B.過程 C.方法 D.環(huán)境
【參考答案】 D
5.將E-R圖轉(zhuǎn)換到關(guān)系模式時(shí),實(shí)體與聯(lián)系都可以表示成( )
A.屬性 B.關(guān)系 C.鍵 D.域
【參考答案】 B
6.在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為( )
A.32 B.31 C.16 D.15
【參考答案】 B
7.一些重要的程序語(yǔ)言(如C語(yǔ)言和Pascal語(yǔ)言)允許過程的遞歸調(diào)用。而實(shí)現(xiàn)遞歸調(diào)用中的存儲(chǔ)分配通常用( )
A.棧 B.堆 C.數(shù)組 D.鏈表
【參考答案】 A
8.開發(fā)軟件時(shí)對(duì)提高開發(fā)人員工作效率至關(guān)重要的是( )
A.操作系統(tǒng)的資源管理功能 B.先進(jìn)的軟件開發(fā)工具和環(huán)境
C.程序人員的數(shù)量 D.計(jì)算機(jī)的并行處理能力
【參考答案】 B
9.數(shù)據(jù)處理的最小單位是( )
A.數(shù)據(jù) B.數(shù)據(jù)元素 C.數(shù)據(jù)項(xiàng) D.數(shù)據(jù)結(jié)構(gòu)
【參考答案】 C
10.下述關(guān)于數(shù)據(jù)庫(kù)系統(tǒng)的敘述中正確的是( )
A.數(shù)據(jù)庫(kù)系統(tǒng)減少了數(shù)據(jù)冗余
B.數(shù)據(jù)庫(kù)系統(tǒng)避免了一切冗余
C.數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)的一致性是指數(shù)據(jù)類型一致
D.數(shù)據(jù)庫(kù)系統(tǒng)比文件系統(tǒng)能管理更多的數(shù)據(jù)
11.以下各選項(xiàng)組中,均是C++語(yǔ)言關(guān)鍵字的組是( )
A.public operator this
B.shod string static
C.it while>=
D.private cout printf
【參考答案】 A
12.下列描述正確的是( )
A.表示m>n為true或mn&&m
B.switch語(yǔ)句結(jié)構(gòu)中必須有default語(yǔ)句
C.if語(yǔ)句結(jié)構(gòu)中必須有else語(yǔ)句
D.如果至少有一個(gè)操作數(shù)為true,則包含“||”運(yùn)算符的表達(dá)式為true
【參考答案】 D
13.下面關(guān)于break語(yǔ)句的描述中,不正確的是( )
A.break可以用于循環(huán)體內(nèi)
B.break語(yǔ)句可以在for循環(huán)語(yǔ)句中出現(xiàn)多次
C.break語(yǔ)句可以在switch語(yǔ)句中出現(xiàn)多次
D.break語(yǔ)句可用于if條件判斷語(yǔ)句內(nèi)
【參考答案】 D
14.下面程序錯(cuò)誤的是( )
① #include
② void main()
③ {
④ int *p=new int[1];
⑤ p=9;
⑥ cout<<*p<
⑦ delete[]p;
⑧ }
A.④ B.⑤ C.⑥ D.⑦
【參考答案】 B
15.不能作為重載函數(shù)的調(diào)用的依據(jù)是( )
A.參數(shù)個(gè)數(shù) B.參數(shù)類型 C.函數(shù)類型 D.函數(shù)名稱
【參考答案】 D
16.在C++語(yǔ)言中,數(shù)據(jù)封裝要解決的問題是( )
A.數(shù)據(jù)的規(guī)范化 B.便于數(shù)據(jù)轉(zhuǎn)換
C.避免數(shù)據(jù)丟失 D.防止不同模塊之間數(shù)據(jù)的非法訪問
【參考答案】 D
17.類的構(gòu)造函數(shù)和析構(gòu)函數(shù)描述正確的是()
A.構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)不能重載
B.構(gòu)造函數(shù)不能重載,析構(gòu)函數(shù)可以重載
C.構(gòu)造函數(shù)可以重載,析構(gòu)函數(shù)也可以重載
D.構(gòu)造函數(shù)不能重載,析構(gòu)函數(shù)也不能重載
【參考答案】 A
18.對(duì)靜態(tài)數(shù)據(jù)成員的描述中,正確的是( )
A.靜態(tài)數(shù)據(jù)成員是類的所有對(duì)象共享的數(shù)據(jù)
B.類的每個(gè)對(duì)象都有自己的靜態(tài)數(shù)據(jù)成員
C.類的不同對(duì)象有不同的靜態(tài)數(shù)據(jù)成員值
D.靜態(tài)數(shù)據(jù)成員不能通過類的對(duì)象調(diào)用
【參考答案】 A
19.可以用p.a的形式訪問派生類對(duì)象p的基類成員a,其中a是( )
A.私有繼承的公有成員 B.公有繼承的私有成員
C.公有繼承的保護(hù)成員 D.公有繼承的公有成員
【參考答案】 D
20.下面關(guān)于虛函數(shù)的描述,錯(cuò)誤的是( )
A.在成員函數(shù)聲明的前面加上virtual修飾,就可把該函數(shù)聲明為虛函數(shù)
B.基類中說(shuō)明了虛函數(shù)后,派生類中對(duì)應(yīng)的函數(shù)也必須說(shuō)明為虛函數(shù)
C.虛函數(shù)可以是另一個(gè)類的友元函數(shù),但不能是靜態(tài)成員函數(shù)
D.基類中說(shuō)明的純虛函數(shù)在其任何派生類中都必須實(shí)現(xiàn)
【參考答案】 B
21.語(yǔ)句ofstream f(″SALARY.DAT″,
ios::app|ios::binary);的功能是建立流對(duì)象f,試圖打開文件SALARY.DAT并與之連接,且( )
A.若文件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個(gè)新文件
B.若文件存在,將其置為空文件;若文件不存在,找開失敗
C.若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個(gè)新文件
D.若文件存在,找開失敗;若文件不存在,建立一個(gè)新文件
【參考答案】 A
22.下面程序的運(yùn)行結(jié)果是( )
#include
void fun(int *a,int *b)
{int x=*a;
*a=*b;*b=x;
cout<<*a<<*b<<″ ″;}
void main()
{int x=1,y=2;
fun(&x,&y);
cout<
A.12 12 B.12 21 C.21 12 D.21 21
【參考答案】 D
23.以下哪個(gè)特征不是面向?qū)ο笏枷胫械闹饕卣?( )
A.多態(tài) B.繼承 C.封裝 D.垃圾回收
【參考答案】 D
24.C++中運(yùn)算符優(yōu)先級(jí)由高到低排列正確的是( )
A.:: ++ +|| B.< * ||,
C.sizeof % + :: D., && new sizeof
【參考答案】 A
25.以下for語(yǔ)句中不是死循環(huán)的是( )
A.for(int i=0;i<1;++i); B.for(int i=0;;++i); C.for(int i=1;i>0;++i); D.for(;;);
【參考答案】 A
26.以下定義數(shù)組中錯(cuò)誤的是( )
A.int a[10]; B.int a[2][20]; C.int a[20][]; D.int a[];
【參考答案】 C
27.下面程序錯(cuò)誤的語(yǔ)句是( )
#include ″iostrteam.h″
① void main()
② {
③ int A=0;
④ int & B;
⑤ B=A;
⑥ cout<
⑦ cout<
⑧ }
A.② B.③ C.④ D.⑥
【參考答案】 C
28.函數(shù)int test(int a,int b=1,int c=0),下列調(diào)用不合法的個(gè)數(shù)是( )
test(0); test(0,0); test(); test(0,0,0);
A.0 B.1 C.2 D.3
【參考答案】 C
29.C++語(yǔ)言中關(guān)于構(gòu)造函數(shù)的說(shuō)法正確的是( )
A.構(gòu)造函數(shù)的函數(shù)名不必和類名相同 B.構(gòu)造函數(shù)只能每一個(gè)
C.每個(gè)類必定有構(gòu)造函數(shù) D.構(gòu)造函數(shù)必有返回值
【參考答案】 C
30.下面程序的執(zhí)行結(jié)果為( )
#include ″iostream″
using namespace std;
class A
{
int a;
public:
void Seta(int x){a=x;}
void Display_a(){cout<
};
class B
{
int b;
public:
void Setb(int x){b=x;}
void Dispaly_b(){cout<
};
class C:public A,private B
{private:
int c;
public:
void Setc(int x,int y,int z)
{ c=z;Seta(x);Setb(y);}
void Display_c(){cout<
① void main()
② {
③ C cc;
④ cc.Seta(1);
⑤ cc.Display_a();
⑥ cc.Setc(2,2,3);
⑦ cc.Dispaly_b();
⑧ cc.Display_c();
}
A.輸出為2 2 3 B.有錯(cuò)誤在第5行 C.輸出為1 2 3 D.有錯(cuò)誤在第7行
【參考答案】 D
31.多態(tài)性指的是( )
A.以任何方式調(diào)用一個(gè)虛函數(shù)
B.以任何方式調(diào)用一個(gè)純虛函數(shù)
C.借助于指向?qū)ο蟮幕愔羔樆蛞谜{(diào)用一個(gè)虛函數(shù)
D.借助于指向?qū)ο蟮幕愔羔樆蛞谜{(diào)用一個(gè)純虛函數(shù)
【參考答案】 C
32.只能作為成員函數(shù)重載的是( )
A.= B.++ C.* D.new
【參考答案】 A
33.語(yǔ)句cout<
A.1024.4567 B.1024 C.1024.45 D.1e+003
【參考答案】 D
34.下列程序的結(jié)果是( )
#include ″iostream.h″
void main()
{
char *str;
str=″test!″;
cout<
}
A.程序錯(cuò)誤 B.! C.′\0′ D.為空字符
【參考答案】 D
35.C++語(yǔ)言函數(shù)中不能由系統(tǒng)自動(dòng)生成的是( )
A.析構(gòu)函數(shù) B.構(gòu)造函數(shù) C.內(nèi)聯(lián)函數(shù) D.拷貝構(gòu)造函數(shù)
【參考答案】 C
二、填空題
1.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲(chǔ)結(jié)構(gòu),線性鏈表屬于【1】。
【參考答案】
【1】存儲(chǔ)結(jié)構(gòu)
2.耦合和內(nèi)聚是評(píng)價(jià)模塊獨(dú)立性的兩個(gè)主要標(biāo)準(zhǔn),其中【2】反映了模塊內(nèi)各成分之間的聯(lián)系。
【參考答案】
【2】?jī)?nèi)聚
3.數(shù)據(jù)庫(kù)設(shè)計(jì)分為以下6個(gè)設(shè)計(jì)階段:需求分析階段、【3】、邏輯設(shè)計(jì)階段、物理設(shè)計(jì)階段、實(shí)施階段、運(yùn)行和維護(hù)階段。
【參考答案】
【3】數(shù)據(jù)庫(kù)概念設(shè)計(jì)階段
4.面向?qū)ο蟮哪P椭?,最基本的概念是?duì)象和【4】。
【參考答案】
【4】類
5.數(shù)據(jù)模型按不同應(yīng)用層次分成3種類型,它們是概念數(shù)據(jù)模型、【5】和物理數(shù)據(jù)模型。
【參考答案】
【5】邏輯數(shù)據(jù)模型
6.開發(fā)一個(gè)C++語(yǔ)言程序的步驟通常包括編輯、【6】、鏈接、運(yùn)行和調(diào)試。
【參考答案】
【6】編譯
7.下面程序的輸出結(jié)果為【7】。
#include
void main()
{
int num=0,i=8;
do{
i--;
num++;
}while(--i);
cout<
}
【參考答案】
【7】-4
8.下面程序的運(yùn)行結(jié)果為【8】。
#include
void fun(int x=0,int y=0)
{cout<
void main()
{fun(5);}
【參考答案】
【8】50
9.C++語(yǔ)言支持的兩種多態(tài)性分別是編譯時(shí)的多態(tài)性和【9】的多態(tài)性。
【參考答案】
【9】運(yùn)行時(shí)
10.cout.put(′A′);,還可以表示為【10】。
【參考答案】
【10】cout<<′A′;
11.將以下程序?qū)懗扇窟\(yùn)算表達(dá)式是【11】。
if(a>b)max=a;
else max=b;
【參考答案】
【11】max=(a>b)?a:b;
12.下面程序的功能是將字符數(shù)組a中下標(biāo)值為偶數(shù)的元素從小到大排列,其他元素不變,請(qǐng)?zhí)羁铡?BR> #include
#include
void main()
{ char a[]=″clanguage″,t;
int i,j,k;
k=strlen(a);
for(i=0;i<=k-2;i+=2)
for(j=i+2;j<=k;【12】)
if(【13】)
{ t=a[i];a[i]=a[j];a[j]=t;}
cout<
cout<
【12】j+=2 【13】a[i]>=a[j]或a[i]>a[j]
13.請(qǐng)定義一個(gè)函數(shù)名為A,返回值為int,沒有參數(shù)的純虛函數(shù)的定義是【14】。
【參考答案】
【14】virtual int A()=0;
14.假設(shè)fin是一個(gè)文件流對(duì)象,則關(guān)閉文件的語(yǔ)句是【15】。
【參考答案】
【15】fin
上機(jī)部分
一、改錯(cuò)題
使用VC6打開考生文件夾下的工程kt5_1,此工程包含一個(gè)源程序文件kt5_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:
(1,2)
5,6
(6,9)
源程序文件kt5_1.cpp清單如下:
#include
classA{
public:
A(inti,intj){a=i;b=j;}
/****************found*******************/
voidMove(intx,inty){a+=x;b+=y}
voidShow(){cout<<"("<
private:
inta,b;
};
classB:privateA
{
public:
/****************found*******************/
B(inti,intj,intk,intl):(i,j){x=k;y=l;}
voidShow(){cout<
voidfun(){Move(3,5);}
/****************found*******************/
voidf1(){Show();}
private:
intx,y;
};
voidmain()
{
Ae(1,2);
e.Show();
Bd(3,4,5,6);
d.fun();
d.Show();
d.f1();
}
【參考答案】
(1)將void Move( int x, int y) {a+=x;b+=y}
改為:void Move( int x, int y) {a+=x;b+=y;}
(2)將B(int i,int j,int k,int l):(i,j) {x=k;y=l;}
改為:B(int i,int j,int k,int l):A(i,j) {x=k;y=l;}
(3)將void f1(){Show();}
改為:void f1(){A::Show();}
【試題解析】
(1)主要考查對(duì)表達(dá)式定義規(guī)則的掌握,此處缺少一個(gè)“;”,任何一個(gè)表達(dá)式都應(yīng)該以分號(hào)作為結(jié)束標(biāo)志;
(2)主要考查對(duì)派生類構(gòu)造函數(shù)定義的掌握,參數(shù)列表中基類的成員應(yīng)使用基類構(gòu)造函數(shù)初始化,因此必須向基類傳遞參數(shù),傳遞時(shí)直接使用基類名;
(3)主要考查對(duì)基類函數(shù)調(diào)用方法的掌握,為了調(diào)用基類的函數(shù)應(yīng)該使用作用域符“::”以限定訪問的位置。
二、簡(jiǎn)單應(yīng)用題
請(qǐng)編寫一個(gè)函數(shù)intpattern_index(charsubstr[],charstr[]),該函數(shù)執(zhí)行含通配符"?"的字符串的查找時(shí),該通配符可以與任一個(gè)字符匹配成功。當(dāng)子串substr在str中匹配查找成功時(shí),返回子串substr在str中的位置,否則返回值為0。要求使用for循環(huán)實(shí)現(xiàn)。輸出結(jié)果如下:
子串起始位置:5
注意:部分源程序已存在文件kt5_2.cpp中。
請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)pattern_index的花括號(hào)中填寫若干語(yǔ)句。
文件kt5_2.cpp的內(nèi)容如下:
#include
intpattern_index(charsubstr[],charstr[])
{
}
voidmain()
{
char*substring,*string;
intsame;
substring="???gram";
string="thisprogramreturnindexofsubstring";
same=pattern_index(substring,string);
if(same)
cout<<"子串起始位置:"<
else
cout<<"匹配不成功"<
}
【參考答案】
int pattern_index(char substr[],char str[])
{int i,j,k;
for(i=0;str[i];i++)
for(j=i,k=0;(str[j]==substr[k])||(substr[k]=='?');j++,k++)
if(!substr[k+1])
return(i);
return(0);}
【試題解析】
本題主要考查使用for循環(huán)和一維數(shù)組的能力。對(duì)于復(fù)雜查找,往往使用for的多重循環(huán)。
三、綜合應(yīng)用題
使用VC6打開考生文件夾下的工程kt5_3,此工程包含一個(gè)源程序文件kt5_3.cpp,其中定義了用于表示復(fù)數(shù)的類comp,但類comp的定義并不完整。請(qǐng)按要求完成下列操作,將類comp的定義補(bǔ)充完整。
(1)定義comp的構(gòu)造函數(shù),函數(shù)含參數(shù)x和y,它們都是int型的數(shù)據(jù),默認(rèn)值都為0,請(qǐng)使用參數(shù)列表的形式分別將類數(shù)據(jù)成員a和b初始化x和y的值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z(yǔ)句。
(2)完成類comp的成員函數(shù)input(intx,inty)的定義,將int型的參數(shù)x和y分別賦值給數(shù)據(jù)成員a和b,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z(yǔ)句;
(3)完成類comp的友元函數(shù)friendcompplus(comp&x,comp&y)的定義,該函數(shù)首先要定義一個(gè)comp類的對(duì)象c,然后將參數(shù)x和y的數(shù)據(jù)成員a與b分別相加并分別賦值給c的成員a和b,最后返回c的值,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z(yǔ)句。輸出結(jié)果如下:
10+20i
2+3i
result:12+23i
注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。
源程序文件kt5_3.cpp清單如下:
#include
classcomp
{inta;
intb;
public:
//**1**
friendcompplus(comp&x,comp&y);
voidinput(intx,inty)
{//**2**}
voidoutput()
{cout<
compplus(comp&x,comp&y)
{//**3**
c.b=x.b+y.b;
returnc;}
voidmain()
{compx(10,20),y,z;
y.input(2,3);
z=plus(x,y);
x.output();
y.output();
cout<<"result:";
z.output();}
【參考答案】
(1)comp(int x=0,int y=0):a(x),b(y){}
(2)a=x;
b=y;
(3)comp c;
c.a=x.a+y.a;
【試題解析】
本題主要考查類的定義和友元函數(shù)定義的。