




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2021年云南省保山市全國計算機等級考試
C++語言程序設計真題(含答案)
學校:班級:姓名:考號:
一、1.選擇題(10題)
1.下列關于類和對象的敘述中,錯誤的是()o
A.一個類只能有一個對象B.對象是類的具體實例C.類是對某一類對
象的抽象D.類和對象的關系是一種數據類型與變量的關系
2.下列不是描述類的成員函數的是()
A.構造函數B.析構函數C.友元函數D.拷貝構造函數
3.對于一個類定義,下列敘述中錯誤的是
A.如果沒有定義拷貝構造函數,編譯器將生成一個拷貝構造函數。
B.如果沒有定義缺省的構造函數,編譯器將一定生成一個缺省的構造函
數。
C.如果沒有定義構造函數,編譯器將生成一個缺省的構造函數和一個拷
貝構造函數。
D.如果已經定義了構造函數和拷貝構造函數,編譯器不會生成任何構造
函數。
4.下列敘述中正確的是()。
A.在面向對象的程序設計中,各個對象之間具有密切的關系
B.在面向對象的程序設計中,各個對象都是公用的
C.在面向對象的程序設計中,各個對象之間相對獨立,相互依賴性小
D.上述三種說法都不對
5.算法的時間復雜度是指o
A.執(zhí)行算法程序所需要的時間B.算法程序的長度C.算法執(zhí)行過程中
所需要的基本運算次數D.算法程序中的指令條數
6.下面關于虛函數的描述中正確的是
A.虛函數是一個靜態(tài)成員函數
B.虛函數是一個非成員函數
C.虛函數既可以在函數說明時定義,也可以在函數實現時定義
D.派生類的虛函數與基類中對應的虛函數具有相同的參數個數和類型
7.下列關于虛函數的描述中,正確的是()。
A.虛函數是一個static類型的成員函數
B.虛函數是一個非成員函數
C.基類中采用virtual說明一個虛函數后,派生類中定義相同原型的函數
時可不必加virtual說明
D.派生類中的虛函數與基類中相同原型的虛函數具有不同的參數個數
或類型
8.關于虛函數下面說的正確的是()。
A.若在重定義虛函數時使用了virtual,則該重定義函數還是虛函數
B.虛函數不能聲明為友元
C.子類必須重定義父類的虛函數
D.虛函數不能是static的
9.有如下程序:#nclude<iostream>usingnamespacestd;class
Base{public:voidfun1(){cout<<"Base\n";}virtualvoidfun2(){cout
<<"Base\n";}};classDerived:publicBase{public:voidfun1(){cout<
<"Derived\n";}voidfun2(){cout<<"Derived\n";}}voidf(Base&b)
{B.fun1();B.fun2();}intmain(){Derivedobj;f(obj);return0;}
A.BaseBaseB.BaseDerivedC.DerivedBaseD.DerivedDerived
10.有下列二叉樹,對此二叉樹中序遍歷的結果為
A.BDYEACFXZB.DYBEAFCZXC.ABCDEFXYZD.ABDYECFXZ
二、單選題(13題)
11.某二叉樹共有7個結點,其中葉子結點只有1個,則該二叉樹的深度
為(假設根結點在第1層)()o
A.3B.4C.6D.7
12.C++程序執(zhí)行總是從【】開始的。
A.main函數B.第一行C.頭文件D.函數注釋
13.下列排序方法中,最壞情況下比較次數最少的是
A.冒泡排序B.簡單選擇排序C.直接插入排序D.堆排序
14.
24.有以下程序:
voidfun(inta?a,inti?intj)
{int
fun(a,++i,-----j)?
}
)
mainO
{inta[]={l,2,3,4,5,6},i?
fun(a?0?5);
for(i=0;i<6;i+4-)
cout<<a[i]t
)
執(zhí)行后輸出結果是(
A.654321B.432156
C.456123D.123456
15.下列運算符函數中肯定不屬于類FunNumber的成員函數的是()。
A.intoperator—(FunNumber);
B.FunNumberoperator一;
C.FunNumberoperator—(int);
D.intoperator—(FunNumber,FunNumber);
16.必須用一對大括號括起來的程序段是
A.switch語句中的case標號語句。B.if語句的分支。C.循環(huán)語句的循
環(huán)體。D.函數的函數體。
17.有下列程序:
#include<stdiO.h>
voidf(int*P,int*q);
voidmain()
(intm=1,n=2,*r=&m;
f(r,&n);printf("%d,%d",m,n);
)
voidf(int*P,int*q)
{p=p+l;*q=*q+l;}
程序運行后的輸出結果是()oA.l,3B.2,3C.l,4D.1,2
18.有如下程序:
#include<iostream>
usingnamespacestd;
classBook{
public:
Book(char*t='"'){strcpy(title,t);}
private:
chartitle[40];
};
classNovel:publicBook{
public:
Novel(charBook(t){}
char*Category()const{return"文學";)
);
intmain(){
Book*pb;
pb=newNovel();
cout?pb->Category();
return0;
)
若程序運行時輸出結果是“文學”,則劃線處缺失的語句是
A.char*Category();
B.char*Category()const;
C.virtualchar*Category()const;
D.virtualchar*Category()const=0;
19.如果表達式“-x/y”中的”和“/”是作為友元函數重載的運算符,采
用運算符函數調用格式,該表達式還可以表示為()o
A.operator/(X.operator—(),y);
B.operator/(operator—(x),y);
C.X.operator—().operator/(y);
D.y.operator/operator—(x));
20.數據視圖的描述稱為()。
A.A.外模式B.內模式C.概念模式D.存儲模式
21.下面有關this指針的敘述中,正確的是()。
A.類的成員函數都有this指針
B.任何與類相關的函數都有this指針
C.類的非靜態(tài)成員函數才有this指針
D.類的友元函數都有this指針
22.有如下程序:
#include<iostream>
usingnamespacestd;
classMyClass{
public:
MyClass(intx):val(x){}
voidPrint()const{cout?"const:val="?<val?\t;}
voidPrint(){cout?"val="?val?t;}
private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
objl.Print();
obj2.Print();
returnO;
)
程序的輸出結果是()0A.val=10const:val=20
B.const:val=10const:val=20
C.const:val=10val=20
D.val=lOva1=20
23.下列關于虛函數的說明中,正確的是()。
A.從虛基類繼承的函數都是虛函數
B.虛函數不得是靜態(tài)成員函數
C.只能通過指針或引用調用虛函數
D.抽象類中的成員函數都是虛函數
三、2.填空題(12題)
24.程序的輸出結果是【】。
#include<iostream>
usingnamespacestd;
classA{
intx;
public:
A(intx=l):x(x){cout<<x;)
};
voidmain(){
Aa,b(2),c(3);
)
25.數據庫管理系統(tǒng)常見的數據模型有層次模型、網狀模型和3
種。
26.【】是在進行了成功的測試之后才開始的。它與軟件測試不同,測
試的目的是發(fā)現錯誤,進一步診斷和改正錯誤,則是調試的任務。
27.C++語言中的多態(tài)性是在編譯時通過____和模板體現的,在運行
時是通過_____體現的。
28.類是一個支持集成的抽象數據類型,而對象是類的【】。
29.C++語言的參數傳遞機制包括傳值和傳地址兩種,如果調用函數時,
需要改變實參或者返回多個值,應該采取【】方式。
30.下列程序的輸出結果是【】。
#include<iostream.h>
#include<string.h>
voidmain(){
charb[30];
strcpy(&b[0],"XY");
strcpy(&b[l],"YZW");
strcpy(&b[2],"ZXY");
cout<<b<<endl;
)
31.軟件是程序、數據和的集合。
32.一個類中有個析構函數。
33.軟件生存周期包括軟件定義、【】、軟件使用和維護三個階段。
34.一棵二叉樹第六層(根結點為第一層)的結點數最多為【】個。
35.內聯函數是通過【】來實現的,因此內聯函數是真正的函數。
四、程序改錯題(10題)
36.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運
行時有錯,請改正其中的錯誤,使程序正常運行,輸出的結果為
Constructor,i=0,
Destructor
注意:錯誤的語句在//******error******的下面,修改該語句即可。
試題程序:
#include(iostream.h)
classTC
(
inti;
public:
TC;
voiddisplay;
-TC;
);
II******enor******
TC:TC
(
cout?"Constructor"?",";
i=0;
)
!1******enol******
TC:display
tout?"i="?i<<","?endl;
TC:TC
COUI?"Destructor"?endl:
voidmain
(
TCa;
a.display;
)
37.使用VC++6.0打開考生文件夾下的源程序文件1.叩p,該程序
運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個
catch必須拋出執(zhí)行的任何異常。
程序異常,輸出信息為
error
0
ERROR
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******error******的下面。
試題程序:
#include<iostream.h)
intmain
throw("error");
II********enor********
catch(chars)
cout?s?endl;
)
try
(
throw((int)0);
catch
(
cout?i?endl;
)
try
(
throw(O);
throw("error");
catch
(
cout?"ERROR"?endl;
)
retumO;
38.使用VC++6.。打開考生文件夾下的源程序文件1.cpp,該程序
運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個
catch必須拋出執(zhí)行的任何異常。
程序異常,輸出信息為
error
O
ERROR
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******errc)r******的下面。
試題程序:
#include<iostream.h)
intmain
(
try
(
throw("error");
}
II********error*********
catch(chars)
(
cout?s?endl;
)
try
{
throw((int)0);
catch
(
cout?i?endl;
)
try
(
throw(O);
throw("error");
II***************
catch
(
cout?"ERROR"?endl;
)
retumO;
)
39.使用VC++6.。打開考生文件夾下的源程序文件I.cpp,該程序運
行有問題,請改正main函數中的錯誤,使程序的輸出結果為:
number=1
number=10
number=100
注意:不要改動main函數,不能增加或刪除行。也不能更改程序的結
構,錯誤的語句在//******errc)r******的下面。
試題程序:
#include<iostream.h>
classTC
(
public:
TC(inti)
(
number=i;
)
voidSetNumber(intm)
(
number=m;
)
intGetNumberconst
retumnumber;
)
voidPrintconst
{
cout<<"number="?number?endl;
)
private:
intnumber;
);
voidmain
(
II********error********
TCobjl;
objl.Print;
TCobj2(3);
II********error********
objl.number=10;
Ii********error*%o******
TC.SetNumber(lOO);
objl.Print;
obj2.Print;
)
40.使用VC++6.0打開考生文件夾下的源程序文件1.cpp。本程序要
求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可能輸
入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出到屏幕
中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******error******的下面。
試題程序:
#include<iostream.h>
voidmain
(
inti=O;
charstr[120];
cout?"Enterastringendwith?."?endl;
//********error********
cin.getline(str,120);
1I********error********
while(str)
(
II********error********
if(str[i])=a)
str[i]=str[i]-a+A;
i++;
)
cout?str?endl;
return;
)
41.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序
運行時有錯。請改正程序中的錯誤,使程序輸出的結果為
100
37
32
注意:錯誤的語句在//******errc)r******的下面,修改該語句即
可。
試題程序:
#include<iostream.h>
/*1**1*4,*4**.1*
//小不不不小不prrcr不不不不不不
voidmain
/*!**1**1**1**1**1**.1**1*?£?
//小個個個不不prmr不不不不不不
intm=0142:
/*!?**!?、,,、,,*1*、,,*1*
//個不不不不不prmr個不不不不不
intn=0X27:
intq=32;
cout<<m<<endl;
cout<<n<<endl;
cout<<q<<endl;
return;
)
42.使用VC++6.0打開考生文件夾下的源程序文件1.cpp。本程序
要求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可
能輸入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出
到屏幕中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******errc)r******的下面。
試題程序:
#include<iostream.h>
voidmain
inti=O;
charstr[120];
cout?"Enterastringendwith?."?endl;
II********enor********
cin.getline(str,120);
II********enor********
while(str)
II********error********
if(str[i])=a)
str[i]=str[i]-a+A;
i++;
cout?str?endl;
return;
)
43.使用VC++6.0打開考生文件夾下的源程序文件
1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現
的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在
I!******error******-jx'p^~|
試題程序:
#include<iostream>
#include<fstream>
!1********error********
usingstd;
voidWriteFile(char*s)
(
ofstreamoutl;
II********error********
outl.open("l.txt",binarylapp);
for(inti=0;s[i]!=0;i++)
!1********enor********
outl.puts(s[i]);
)
outl.close;
)
voidClearFile
(
ofstreamoutl;
outl.open("l.txt");
outl.close;
)
intmain
(
chars[1024];
ClearFile;
cout?"pleaseinputastrin9:"?endl;
cin.getline(s,1024);
WriteFile(s);
retumO;
}
44.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運
行時有錯誤,請改正程序中的錯誤,使得程序輸出:
9,8,7,6,5
注意:錯誤的語句在/********error********/的下面,修改該語句即
可。其他的語句不能修改。
試題程序:
#include(iostream.h>
classTC
(
I********error********/
TC(inti)
(
m_i=i;
)
voidprint
cout?—m_i?,
public:
intm_i;
);
intmain
I********error********/
inti;
TC04(10);
while(i>5)
(
I**************
i++:
04.print;
)
cout?endl;
returnO;
45.使用VC++6.0打開考生文件夾下的源程序文件
1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實
現的功能為從鍵盤輸入一個字符串,并將結果保存到文件Ltxt中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在
I!******ei*ror******白勺~|>*]什j°
試題程序:
#include<iostream>
#include<fstream>
II********error********
usingstd;
voidWriteFile(char*s)
(
ofstreamoutl;
outl.open("l.txt",binary|app);
for(inti=0;s[i]!=0;i++)
(
II********error********
outl.puts(s[i]);
}
outl.close;
)
voidClearFile
(
ofstreamoutl;
outl.open("l.txt");
outl.close;
)
intmain
(
chars[1024];
ClearFile;
cout?"pleaseinputastrin9:"?endl;
cin.getline(s,1024);
WriteFile(s);
returnO;
)
五、綜合應用題(2題)
46.使用VC++6.。打開考生文件夾下的源程序文件3.cpp,其中定
義了類BA、PA1和PA2,其中PA1類由BA類公有派生,PA2類由
PA1類公有派生。上述3個類的定義并不完整,請按要求完成下列操
作,將程序補充完整。
程序輸出結果如下:
10
5
1057
(1)定義類BA的構造函數,該構造函數有一個整型的參數m,在構造
函數中將m賦值給數據成員a。請在注釋1之后添加適當的語句。
(2)定義類PA1的構造函數,該構造函數有兩個整型的參數m和n,在
構造函數中將m賦值給數據成員b,將n作為基類BA構造函數的參
數值傳人。請在注釋2之后添加適當的語句。
(3)定義類PA2的構造函數,該構造函數有3個整型的參數m、n和
k,在構造函數中請將m賦值給數據成員c,將n和k分別賦值給基類
PA1構造函數的參數m和n。請在注釋3之后添加適當的語句。
(4)完成類PA2的成員函數show的定義,該函數調用基類成員函數,
輸出基類私有成員a、b及類PA2自身的數據成員C的值,上述3個
值在輸出時用空格隔開。請在注釋4之后添加適當的語句。
注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。
試題程序:
#include(iostream.h>
classBA
(
inta;
public:
intgeta{returna;}
};
classPAl:publicBA
{
intb;
public:
///小*1*軍*1*不*1*不*1*木*1木*不*1*不*!*2木*1**木1?*1不**1*/*木1**!木?*1*木*1*
intgetb{retumb;}
};
classPA2:publicPAl
(
intC;
public:
voidshow
(
//********4********
)
};
voidmain
{
PA2a(7,5,10);
cout?a.geta?endl;
cout?a.getb?endl;
a.show;
)
47.請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件
proj3,此工程中包含一個源程序文件proj3.cpp,補充編制c++程序
proj3.cpp,其功能是讀取文本文件in.dat中的全部內容,將文本存
放到doc類的對象myDoc中。然后將myDoc中的字符序列反轉,并
輸出到文件out.dat中。文件in.dat的長度不大于1000字節(jié)。
要求:
補充編制的內容寫在“〃***********與''//**********''兩行之間。實現
將myDoc中的字符序列反轉,并將反轉后的序列在屏幕上輸出。不得
修改程序的其他部分。
注意:程序最后已將結果輸出到文件Out.dat中,輸出函數
writeToFile已經給出并且調用。
//proj3.cpp
#include<iostream>
#include<fstream>
#include<catting>
usingnamespacestd;
classdoc
(
private:
char*sir;//文本字符串首地址
intlength;〃文本字符個數
public:
//構造函數,讀取文件內容,用于初始化新對象,filename是文件名字
符串首地址
doc(char*filename);
voidreverse;//將字符序列反轉
一doc;
voidwriteToFile(char*filename);
);
doc::doc(char}filename)
(
ifstreammyFile(filename);
intlen=1001,tmp;
atr=newcharflen];
length=O;
while((trap=myFile.get)!=EOF)
strflength++]=trap;
str[length]=t\O,;
myFile.close;
)
voiddoc::reverse{
//將數組atr中的length個字符中的第一個字符與最后一個字符交換,
第二個字符與倒數第二個
〃字符交換
//*************666*************
)
doc::?doe
(
delete[]str;
)
voiddoc::writeToFile(char*filename)
(
OfstreamoutFile(filename);
outFile?str;
outFile.close;
)
voidmain
docmyDoc(,,in.dat'>
myDoc.reveme;
myDoc.writeToFile("out.dat");
}
六、3.綜合應用題(2題)
48.使用VC6打開考生文件夾下的工程test34_3o此工程包含一個
test34_3.cpp,其中定義了表示棧的類stack。源程序中stack類的定義并
不完整,請按要求完成下列操作,將程序補充完整。
⑴定義類stack的私有數據成員sp和size,它們分別為整型的指針和變
量,其中sP指向存放棧的數據元素的數組,size為棧中存放最后一個元
素的下標值。請在注釋“〃**1**”之后添加適當的語句。
⑵完成類stack的構造函數,該函數首先從動態(tài)存儲空間分配含有100
個元素的加型數組,并把該數組的首元素地址賦給指針sp,然后將該
數組的所有元素賦值為0,并將size賦值為-l(size等于-1表示棧為空)。
請在注釋“〃**2**”之后添加適當的語句。
(3)完成類stack的成員函數push的定義。該函數將傳入的整型參數x壓
入棧中,即在size小于數組的最大下標情況下,size自力口1,再給x賦
值。請在注釋“〃**3**”之后添加適當的語句。
⑷完成類stack的成員函數pop的定義,該函數返回棧頂元素的值,即
在size不等于-1的情況下,返回數組中下標為size的元素的值,并將
size減1。請在注釋“〃**4**”之后添加適當的語句。
程序輸出結果如下:
thetopelem:1
thepopelem:1
thestackisempty
注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。
源程序文件test34_3.cpp清單如下:
#include<iostream.h>
classstack
(
〃**]**
public:
stack();
boolempty(){returnsize=="l;}
boolfull(){returnsize==99;}
voidpush(intx);
voidpop();
voidtop();
);
stack::stack()
(
〃**2**
for(inti=0;i<100;i++)
*(sp+i)=0;
size=-1;
)
voidstack::push(intx)
{
〃**3**
cout<<"thestackisfull"<<endl;
else
{
size++;
*(sp+size)=x;
)
voidstack::pop()
{
〃**4**
cout<<"thestackisempty"<<endl;
else
(
cout<<"thepopelem:"<<*(sp+size)<<endl;
size—;
)
)
voidstack::top()
(
ifiemptyO)
cout<<"thestackisempty"<<endl;
else
(
cout<<"thetopelem:"<<*(sp+size)<<endl;
)
)
voidmain()
(
stacks;
s.push(l);
s.top();
s.popO;
s.top();
)
49.使用VC6打開考生文件夾下的工程testl3_3o此工程包含一個
testl3_.cpp,其中定義了類Vector,但類的定義并不完整。請按要求完成
下列操作,將程序補充完整。
⑴完成構造函數的定義,把數據成員size初始化為參數s的值,數據成
員buffer指向動態(tài)申請的int型size大小的空間。請在注釋“〃**1***之
后添加適當的語句。
⑵完成拷貝構造函數的定義,注意解決多次刪除的問題。請在注釋
“〃**2**,,之后添加適當的語句。
⑶完成成員函數elem的定義,該函數返回buffer的第ndx個元素的值,
注意如果ndx超界,請輸出“errorinindex”。請在注釋“〃**3**”之后添加
適當的語句。
(4)完成析構函數的定義,要求先將字符d打印在屏幕上,再釋放buffer
指向的空間。請在注釋“〃**4**”之后添加適當的語句。
輸出結果如下:
123456789101234567891Odd
注意:除在指定的位置添加語句外,請不要改動程序中的其他語句。
源程序文件testl3_3清單如下:
#include<iostream.h>
#include<stdlib.h>
classVector
(
public:
Vector(ints=100);
Vector(Vector&v);
int&elem(intndx);
voiddisplayO;
voidset();
~Vector();
protected:
intsize;
int*buffer;
);
Vector::Vector(ints)
■
<
、****
u
Vector::Vector(Vector&v)
(
〃**2**
i+
*(buffer+i)=*(v.buffer+i);
int&Vector::elem(intndx)
(
l?
**3**
f
1<
cout<<errorinindex<<end!;
exit(1);
)
returnbuffer[ndx];
)
voidVector::displayO
(
for(intj=0;j<size;j++)
cout<<elem(i)<<endl;
)
voidVector::set()
for(intj=0;i<size;j++)
elem(j)=j+l;
)
Vector::~Vector()
{
〃**4**
)
voidmain()
(
Vectora(10);
Vectorb(a);
a.set();
b.set();
a.displayO;
b.displayO;
)
參考答案
LA解析:此題考查的是類和對象的相關概念。類是將不同的數據和與
這些數據相關的操作封裝起來裝在一起的集合體。對象是類的具體實例,
也即類是對某一類對象的抽象,類和對象之間可以說是數據類型與變量
的關系。一個類可以有無數個對象。
2.C
3.B
解析:本題考查的知識點是:構造函數。如果一個類中沒有定義任何
構造函數,編譯器將生成一個不帶參數的公有缺省構造函數。但只要
定義了一個任意的構造函數,就不會生成缺省構造函數了。故本題應
該選擇Bo
4.CCO【解析】面向對象的程序設計是用對象模擬問題領域中的實體,
各對象之間相對獨立,相互依賴性小,通過消息來實現對象之間的相互
聯系。
5.C解析:算法的時間復雜度實際上就是執(zhí)行算法程序所需要的計算工
作量。為了客觀地反映算法性能,在度量算法的時間復雜度時,應該與
編寫算法程序所使用的程序設計語言、執(zhí)行算法程序時所使用的計算的
工具以及程序員的水平無關。選項A錯誤,因為同一算法程序在運行速
度不同的計算機上運行時,其計算時間是不同的。選項B錯誤,因為算
法所編寫的程序長度往往與程序設計語言以及程序員的水平有關,同一
個算法,用不同的程序設計語言或者不同的程序員所編寫出的程序其長
度可能會大不相同。選項D錯誤,因為根據一個算法所編制出的程序之
中,其指令條數往往與程序設計語言以及程序員的水平有關,不能用算
法程序中的指令條數來度量算法的時間復雜度。所以,本題正確答案為
Co
6.D解析:本題考核虛函數的定義。虛函數是非靜態(tài)的成員函數。它不
能是友元函數,但可以在另一個類中被聲明為友元函數。虛函數聲明只
能出現在類定義的函數原型聲明中,而不能在成員函數的函數體實現的
地方。派生類的虛函數與基類中對應的虛函數必須滿足下列條件,否則
派生類中的虛函數將丟失其虛函數特性,在調用時進行靜態(tài)聯編:①派
生類中的虛函數與基類中的虛函數具有相同的名稱。②派生類中的虛函
數與基類中的虛函數具有相同的參數個數和相同的對應參數類型。③派
生類中的虛函數與基類中的虛函數的返回值,或者相同,或者都返回指
針或引用。并且派生類中虛函數所返回的指針或引用的基類型,是基類
型中的虛函數所返回的指針或引用的基類型的子類型。
7.C解析:本題考核對虛函數的了解。在成員函數聲明的前面加上virtual
關鍵字修飾,即把該函數聲明為虛函數。虛函數可以是另一個類的友元
函數,但不是靜態(tài)成員函數。所以A、B選項的描述都是錯誤。在派生
類中可以重新定義從基類繼承下來的虛函數,在派生類中重定義虛函數
時,函數名、形參表和返回值類型必須保持不變,所以D選項是錯誤的。
8.D解析:虛函數一定不能定義為靜態(tài)的。虛函數可以聲明為友元,子
類也不是必須重定義父類的虛函數,若在重定義虛函數時使用了virtual,
則該重定義函數不一定還是虛函數。
9.B
10.B對二叉樹的中序遍歷是指:首先遍歷左子樹,然后訪問根結點,最
后遍歷右子樹。在遍歷左、右子樹時,注意依舊按照“左子樹一根結點一
右子樹”的順序。本題的遍歷順序是這樣的:①首先訪問左予樹:BDEY;
②在左子樹BDEY中,也按中序遍歷,先訪問左子樹DY;在左子樹DY
中,也按中序遍歷,先訪問左子樹,左子樹沒有,則訪問根結點D,然
后訪問右子樹Y;③接著訪問根B,再訪問右子樹E;④訪問左子樹
BDEY后,接著訪問根結點A,接著訪問右子樹CFXZ;⑤右子樹CFXZ
的訪問順序同理可得:FCZXO
11.DD【解析】根據二叉樹的基本性質3:在任意一棵二叉樹中,多為0
的葉子結點總比度為2的結點多一個,所以本題中度為2的結點為1-
1=0個,所以可以知道本題目中的二又樹的每一個結點都有一個分支,
所以共7個結點共7層,即度為7。
12.A
13.D冒泡排序、簡單插入排序與簡單選擇排序法在最壞情況下均需要比
較n(n-l)/2次,而堆排序在最壞情況下需要比較的次數是nlog2n。故答
案為D選項。
14.A
15.D
本題考查運算符重載的一些規(guī)則:①一般情況下,單目運算符最好重
載為類的成員函數,雙目運算符則最好重載為類的友元函數;②雙目
運算符=、、小-〉不能重載為類的友元函數;③類型轉換函數只能定
義為一個類的成員函數,而不能定義為類的友元函數;④若一個運算
符的操作需要修改對象的狀態(tài),選擇重載為成員函數較好;⑤若運算
符所需的操作數(尤其是第一個操作數)希望有隱式類型轉換,則只能選
用友元函數;⑥當運算符函數是一個成員函數時,最左邊的操作數(或
者只有最左邊的操作數)必須是運算符類的一個類對象(或者是對該類對
象的引用);如果左邊的操作數必須是一個不同類的對象,或者是一個
內部類型的對象,該運算符函數必須作為一個友元函數來實現。所以
答案為D。
16.D
解析:本題考查的知識點是;語句塊和函數。if語句的分支和循環(huán)語
句的循環(huán)體可以是一條語句也可以是一個語句塊,所以不是必須用一
對大括號括起來;switch語句中的case標號語句可以是一系列語句,
也可以包含語句塊,也不是必須用一對大括號括起來:函數的函數體
必須使用一對大括號括起來。故本題應該選擇D。
17.A
Ao【解析】本題中子函數f(int*p,*q)的功能是對指針p的值加1,
*q的值加1。主函數中調用子函數f(r,&n)時,子函數的執(zhí)行結果是r
值加1,n的值加1。而m的值并沒有發(fā)生變化,最后程序輸出的結果
為1,3。所以正確答案為選項A。
18.D
本題考查虛函數的定義。
19.B
Bo【解析】本題考查運算符的重載。假定已經作為某個類的成員函數
重載了二元運算符+,且cl、c2都是該類的對象,則“cl.operator+
(c2)”,與“cl+c2”含義相同。如果+作為該類的非成員函數重載,則
“operator+(cl,c2)"與“cl+c2”含義相同。同理,運算符"/”作為友元
函數重載,則"(-x)/y”與表達式“operator/((-X),y)”相同。前綴運算
符“-"作為友元函數重載,則”--X與operator--(x)”相同,所以組合起來
是"Operator/(operator--(x),y);”,即B選項。
20.A解析:外模式也稱子模式,它是數據庫用戶能夠看見和使用的局
部數據的邏輯結構和特征的描述,它是由概念模式推導而出來的,是數
據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。
21.C
22.D
Do【解析?】在建立類對象時,構造函數的執(zhí)行順序如下:執(zhí)行基類的
構造函數,調用順序按照各個基類被繼承的聲明順序;執(zhí)行成員對象
的構造函數,調用順序按照各個成員在類中的聲明順序;執(zhí)行自身的
構造函數。根據以上總結以及題意可知答案選擇D選項。
23.B
在某基類中聲明為virtual并在一個或多個派生類中被重新定義的成員
函數一虛函數必須是基類的非靜態(tài)成員函數,其訪問權限可以是
protected或public。如果一個類包含了純虛函數,稱此類為抽象類。所
以本題答案為B。
24.123123解析:a對象使用和默認的構造函數,b對象使用2來初始化
對象c對象使用3來初始化對象,輸出相應的值后,結果變?yōu)?23。
25.關系模型關系模型
26.程序調試程序調試解析:本題考查軟件測試和軟件調試的區(qū)別。軟
件測試貫穿整個軟件生命期,它是盡可能的發(fā)現軟件中的錯誤。軟件調
試主要在開發(fā)階段,它是在測試成功后開始,診斷和改正程序中潛在的
錯誤。
27.函數重載;虛函數函數重載;虛函數解析:C++中的多態(tài)性是在編
譯時通過函數重載和模板體現的,在運行時是通過虛函數體現的。
28.實例實例解析:將屬性、操作相似的對象歸為類,也就是說,類是
具有共同屬性、共同方法的對象的集合。所以,類是對象的抽象,對象
則是其對應類的一個實例。
29.傳地址傳地址解析:本題考查的是傳值調用和傳址調用的區(qū)別——
傳值調用只是進行值的簡單復制,返回之后不會改變原來的值;而傳址
調用是把參數的地址傳入,會改變原來的值。
30.XYZXY
31.相關文檔相關文檔
32.1
33.軟件開發(fā)軟件開發(fā)
34.3232解析:二叉樹第n層的結點數為2的n-1次方。
35.編譯器編譯器解析:內聯函數是通過編譯器,只是在調用的時候,
像宏一樣展開。注意:內聯函數比普通函數的效率更高。
36.⑴應改為“TC::TC”。
\n⑵應改為"voidTC::display”。
\n(3)應改為“TC::?TC”。
\n【解析】在類的外部定義成員函數時,必須在成員函數前面加上類名
和作用域運算符“::”,作用域運算符用采表示某個成員屬于哪個類,使
用格式為“(類名)::<成員函數>((參數函數)),因此第1處應改為“TC::
TC”,默認構造函數沒有參數。由第2處“TC=display”后的語句看,這
是在類外實現TC函數,因此也有作用域運算符使用錯誤問題,display
函數返回值為void,因此第2處的語句應改為“voidTC::display"。由第
3處的語句叮(2::丁€:”可知,顯然這里是在類外實現析構函數,析構函
數是一個特殊的函數,它的名稱和類名相同,并在前面加“字符,用
采與構造函數加以區(qū)別,因此第3處的語句應改為“TC::~TC”。
37.(1)應改為"catch(char*s)”。
⑵應改為“cateh(inti)”。
(3)應改為"catch(…)”。
【解析】本題中第1個標識前的異常拋出語句為“throw("error");",其
中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類
型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語
句修改為“catch(char*S)”°第2個標識前的異常拋出語句為
44throw((int)0);",其中的類型為int。對應的異常捕捉語句catch中應
該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配
的catch塊,系統(tǒng)就會調用一個系統(tǒng)函數,使程序終止運行。即第2處
的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類
型,那么就用刪節(jié)號"…''表示它可以捕捉任何類型的異常信息,即修
改為“catch(…)”。
38.(1)應改為"catch(char*s)"°
⑵應改為“cateh(inti)”。
(3)應改為"catch(…)”。
【解析】本題中第1個標識前的異常拋出語句為“throw("error");",其
中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類
型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語
句修改為“catch(char*S)”°第2個標識前的異常拋出語句為
44throw((int)0);",其中的類型為int。對應的異常捕捉語句catch中應
該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配
的catch塊,系統(tǒng)就會調用一個系統(tǒng)函數,使程序終止運行。即第2處
的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類
型,那么就用刪節(jié)號"…''表示它可以捕捉任何類型的異常信息,即修
改為“catch(...)"。
39。)應改為“TCobjl(l);
\n(2)應改為“Objl.SetNumber(lO);”。
\n(3)應改為“0bj2.SelNumber(lOO);"。
\n【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象Objl,根據
TC類構造函數的定義TC(inti),存在整型參數,并且題目要求第一個輸
出結果兩1,所以補全參數1,即第1處的“TCobjl⑴;第2處處的
“objl.number=10;”應該是調用成員函數SetNumber賦值。在C++中
成員函數的使用形式應該是:對象名.成員函數,所以修改為
“objl.SetNumber(lO);"。類是對象的抽象,而對象是類的具體實例。
第3處“式:.56四110版「(100);”語句中的丁(:為類,并不是對象,這里
應該使用定義的對象,即obj2,所以將語句修改為
“obj2.SetNumber(lOO);
40.(1)應改為“ein.getline(str,120,?);
\n⑵應改為"while(str[i])”。
,,
\n⑶應改為"if(str[i]>=a&&str[i]<=2)o
\n【解析】本題中要求以輸入字符“?”為結束符,用于字符輸入的流成員
函數getline函數讀入一行字符,格式為“cin.getline(字符數組,字符個
數,終止標志字符)”,所以第1處改為“cin.getline(str,120,?);"。第
2處的“while(str)”語句應該是判斷字符串str中的每一個字符是否為結
束符,若不是結束符,在循環(huán)中判斷每一個字符是否為小寫,若為小寫,
則轉換。所以應該修改為“while(str[i])”°第3處的“if(st明>=a)”語句是
判斷字符str用是否為小寫字符,而現有的語句只是判斷字符是否大于a,
,,
但是小寫字符應該是a到2,所以修改為“if(str[i]>=a&&str[i]>=z)o
tt,,
41.(l)voidmaino
(2)“intm=0144;
(3)“intn=OX25;”或“intn===0x25;
【解析】本題主要考查了主函數定義及嘉同進制之間的轉換,包括十
進制到八進制,十進制到十六進制。主函數定義的定義形式為
“main”,函數名之后必須是一對括號,因此第1處應改為“voidmain”。
cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發(fā)
現變量的初值不正確,十進制的100對應八進制的144,卡進制的37
對應十六進制的25,因此2和3應分另IJ改成“intm=0144;”,
“intn=0x25;”或"intn=0x25;
42.(1)應改為“ein.getline(str,120,?);
(2)應改為"while(str[i])"°
,,
⑶應改為“if(st巾]>=a&&str[i]<=2)o
【解析】本題中要求以輸入字符“?”為結束符,用于字符輸入的流成員
函數getline函數讀入一行字符,格式為“cin.getline(字符數組,字符
個數,終止標志字符)”,所以第1處改為“cin.getline(str,
120,?);"。第2處的“while(str)”語句應該是判斷字符串str中的每一
個字符是否為結束符,若不是結束符,在循環(huán)中判斷每一個字符是否
為小寫,若為小寫,則轉換。所以應該修改為“while(str[i])”°第3處的
“if(st巾]>=a)”語句是判斷字符str國是否為小寫字符,而現有的語句只
是判斷字符是否大于a,但是小寫字符應該是a到2,所以修改為
“if(str[i]>=a&&str[i]>=z)”。
43.(1)應改為"usingnamespacestd;
\n(2)應改為"outl.open('l.txt',ios::binary|ios::app);
\n(3)應改為“outl.put(s[i]);”。
\n【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,
對于C++中引入標準命名空間的格式,缺少namespace,所以第1處
的語句修改為“usingnamespacestd第2處,調用成員函數open中,
輸入、輸出方式是在ios類中定義的,所以“outl.open是.txt',binary|
app);”語句缺少類ios,即第2處的語句修改為“outl.open(1l.txt',ios::
binary|ios::app);第3個標識應該用流成員函數put輸出字符,所
以第3處的語句修改為“outl.put(s[i]);
44.(1)應添加“public:
\n(2)“inti”應改為"inti(10);
\n(3)“i++廠'應改為“i—;”。
\n【解析】本題主要考查的是成員的訪問屬性。成員的訪問屬性有公有、
保護和私有3種,而默認的訪問屬性為私有,只有公有成員才能通過類
的對象被訪問。故應在構造函數前添加“public:“,否則該類無法被實例
化。變量的初始化可以通過“=”號,也可以和初始化對象一樣添加構造
參數,題目已要求使用后者。本題要求輸出5個數,while的循環(huán)變量i
每次減1,在i>5時循環(huán),故i初始化應為10o若循環(huán)中i每次增1,則
循環(huán)永遠不會退出。
45.(I)應改為"usingnamespacestd;"。
(2)應改為"outl.op
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動人工智能賦能消費升級方案
- 農藝師個人學習評估試題及答案
- 推動經濟社會綠色轉型的策略與實施路徑
- 業(yè)務往來合作合同樣本
- 強化輔導員考試中的自我管理能力挑戰(zhàn)試題及答案
- 2024年福建事業(yè)單位考試考前準備事項總結試題及答案
- 2024年農業(yè)市場監(jiān)管技術與措施試題及答案
- 福建事業(yè)單位考試行政審批試題及答案
- 氣動測試題目大全及答案
- 生石灰行業(yè)發(fā)展動態(tài)與市場潛力探析
- 從電影《第二十條》中學習刑法
- 2024年河南省許昌市九年級中考物理一模試卷+
- (2024年)AED(自動體外除顫器)使用指南
- (高清版)TDT 1036-2013 土地復墾質量控制標準
- 大學生朋輩心理輔導智慧樹知到期末考試答案2024年
- 小學語文五年下冊《兩莖燈草》說課稿(附教學反思、板書)課件
- 社會穩(wěn)定風險評估 投標方案(技術標)
- 中心靜脈深靜脈導管維護操作評分標準
- 婚姻家庭指導服務工作方案
- 小微企業(yè)安全生產標準化模板
- 助產士的產婦心理疏導與支持技巧
評論
0/150
提交評論