




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2023年江西省景德鎮市全國計算機等級考
試C++語言程序設計真題(含答案)
學校:班級:姓名:考號:
一、1.選擇題(10題)
1.以下敘述正確的是()。
A.函數可以嵌套定義但不能嵌套調用
B.函數既可以嵌套調用也可以嵌套定義
C函數既不可以嵌套定義也不可以嵌套調用
D.函數可以嵌套調用但不可以嵌套定義
2.下列敘述中,不屬于測試的特征的是()o
A.測試的挑剔性B.完全測試的不可能性C.測試的可靠性D.測試的經
濟性
3.對于長度為n的線性表,在最壞情況下,下列各種排序法所對應的比
較次數中正確韻是()。
A.冒泡排序為n/2B.冒泡排序為nC.快速排序為nD.快速排序為n(n-
1)/2
4.算法的空間復雜度是指()。
A.算法程序的長度B.算法程序中的指令條數C.算法程序所占的存儲
空間D.算法執行過程中所需要的存儲空間
5.以下程序的執行結果為()。#include<iostream.h>classSample{int
n;public:Sample(inti){n=i;}operator++(){n++;}〃前綴重載運算符
operator++(int){n+=2;)〃后綴重載運算符voiddisp(){cout<<"n="<<
n<<endl;}};voidmain(){SampleA(2),B(2);A++;++B;A.dispO;
B.dispO;}
A.n=4n=3B.n=ln=2C.n=3n=4D.n=5n=6
6.以下C++語言中用于單行注釋的是
A.//B./*C.*/D.|
7.有如下程序:#include{iostream)usingnamespacestd;classBase
{private:charc;public:Base(charn):c(n){}~Base(){cout〈〈c;}};
classDerived:publicBase{private:charc;public:Derived(char
n):Base(n+l),c(n){}~Derived(){cout〈〈c;}};intmain(){Derived
obj('x');return0;}執行上面的程序將輸出()。
A.xyB.yxC.xD.y
8.對于順序存儲的隊列,存儲空間大小為n,頭指針為F,尾指針為R。
若在邏輯上看成一個環,則隊列中元素的個數為O
A.R-FB.n+R-FC.(R-F+l)modnD.(n+R-F)modn
9.下列敘述中正確的是()。
A.順序存儲結構的存儲一定是連續的,鏈式存儲結構的存儲空間不一定
是連續的
B.順序存儲結構只針對線性結構,鏈式存儲結構只針對非線性結構
C.順序存儲結構能存儲有序表,鏈式存儲結構不能存儲有序表
D.鏈式存儲結構比順序存儲結構節省存儲空間
10.下列說法正確的是()。
A.內聯函數在運行時是將該函數的目標代碼插入每個調用該函數的地
方
B.內聯函數在編譯時是將該函數的目標代碼插入每個調用該函數的地
方
C.類的內聯函數必須在類體內定義
D.類的內聯函數必須在類體外通過加關鍵字inline定義
二、單選題(13題)
11.若有下面的函數調用:fun(fl+b,3,max(n-1,B.)則fun的實參
個數是()。
A.3B.4C.5D.6
12.下列有關繼承和派生的敘述中,正確的是
A.派生類不能訪問基類的保護成員
B.作為虛基類的類不能被實例化
C.派生類應當向基類的構造函數傳遞參數
D.虛函數必須在派生類中重新實現
13.下列關于成員函數特征的描述中錯誤的是()。
A.成員函數可以重載B.成員函數一定是內聯函數C.成員函數可以是
靜態的D.成員函數可以設置參數的默認值
14.數據流圖用于抽象描述一個軟件的邏輯模型,數據流圖由一些特定
的圖符構成。下列圖符名標識的圖符不屬于數據流圖合法圖符的是
()o
A.控制流B.加工C.數據存儲D.源和潭
15.關于內聯函數的說法,不正確的是()。
A.在說明類的同時定義成員函數,則函數隱含為內聯函數
B.也可在類外用inline關鍵字對成員函數進行說明,則該函數也為內聯
函數
C.當內聯函數被調用時,內聯函數的代碼在調用處被展開
D.當內聯函數被調用時,內聯函數將返回結果
16.有如下程序:
#include<iostream>
usingnamespacestd;
classMonkey{
public:
MonkeyO{cout?'M';}
Monkey(charn){cout?n;}
-Monkey(){cout?'Y';}
};
intmain(){
Monkeypl,*p2;
p2=newMonkey('X');
deletep2;
return0;
)
運行這個程序的輸出結果是
A.MYXB.MYMYC.MXYD.MXYY
17.下面關于虛函數的描述中正確的是()o
A.虛函數是一^靜態成員函數
B.虛函數是一個非成員函數
C.虛函數可以在函數說明時定義,也可以在函數實現時定義
D.派生類的虛函數與基類中對應的虛函數具有相同的參數個數和類型
18.下列關于數據庫系統的敘述中正確的是()。
A.數據庫系統減少了數據冗余
B.數據庫系統避免了一切冗余
C.數據庫系統中數據的一致性是指數據類型一致
D.數據庫系統比文件系統能管理更多的數據
19.以下程序的輸出結果是#include<iostream.h>voidreverse(inta[],
intn){inti,t;for(i=0;<n/2;i++){t=a[i]=a[i]=a[n-l-i];a[n-l-i]=t;}}
voidmain(){intb[10]={l,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);for(i=6;i<10;i++)s+=b[i];cout<<s;}
A.22B.10C.34D.30
20.語句int*P=&k;定義了指針P,與這個語句等效的語句序列是()。
A.int*p;P=&k;
B.int*P;P=k;
C.int*p;*P=&k;
D.int*p;*P=k;
21.下列選項,不正確的是()。
A.for(inta=l;a<=10;a++);
B.inta=l;do{a++:}while(a<=10);
C.inta=l;while(a<=10){a++:}
D.for(inta=l;a<=10;a++)a++;
22.模板對類型的參數化提供了很好的支持,因此()。
A.類模板的主要作用是生成抽象類
B.類模板實例化時,編譯器將根據給出的模板實參生成一個類
C.在類模板中的數據成員都具有同樣類型
D.類模板中的成員函數都沒有返回值
23.假定MyClass為一個類,那么下列的函數說明中,()為該類的
析構函數。
A.void-MyClass();
B.~MyClass(intn);
C.MyClass();
D.~MyClass();
三、2.填空題(12題)
24.數據的邏輯結構在計算機存儲空間中的存放形式稱為數據的
25.以下程序的輸出結果是【】。
#include<iostream.h>
voidmain()
)
inta=0;
a+=(a=8);
cout<<a;
)
26.C++語言中的基本符號可以分為____三類。
27.在關系模型中,把數據看成一個二維表,每一個二維表稱為一個【】。
28.面向對象的程序設計方法中涉及的對象是系統中用來描述客觀事物
的一個【】。
29.數據結構分為邏輯結構與存儲結構,線性鏈表屬于【】。
30.測試的,目的是暴露錯誤,評價程序的可靠性;而【】的目的是發
現錯誤的位置并改正錯誤。
31.以下函數模板min的功能是返回數組a中最小元素的值。請將橫線
處缺失部分補充完整。
template<typenameT>Tmin(Ta[],intn)
(
Ttemp=a[01;
for(inti=l,i<n;i++)
if(a[i]<temp);
returntemp;
)
32.虛函數必須是類的【】。
33.假定用戶沒有給一個名為MyClass的類定義析構函數,則系統為其
定義的默認析構函數首部形式為【】。
34.插入排序算法的主要思想:每次從未排序序列中取出一個數據,插
入到已排序序列中的正確位置。Insert類的成員函數sort。實現了插入排
序算法,請填空。
classInsert{
public:
Insert(int*bO,intnO):b(bO),n(nO)<);〃參數bO是某數組首地址,n是數組
元素個數
voidsort()
{〃此函數假設已排序序列初始化狀態只包含b[0],未排序序列初始為
for(inti=l;i<n;++i)
intt=b[i];
intj;
for(;j>0;-j)
(
if(t>=bU-l])
break;
b[j]=b[j-l];
b[j]=t;
}
)
)
35.重載的運算符保持其原有的【】、優先級和結合性不變。
四、程序改錯題(10題)
36.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,但該程
序運行有問題,請改正main函數中的錯誤,使該程序的輸出結果正
確。
程序輸出:
8
8
注意:錯誤的語句在/********error********/的下面。修改該語句
即可,其他的語句不能修改。
試題程序:
#include(iostream.h>
classCO
{
public:
I********enor********/
staticintn=O:
CO
n++:
)
?CO
(
n—:
)
):
<!>*1**1**1**1**1**1**1**A?*A?*1**!*/
/不不不不不不不不crrcr不不不不不不下不/
intCO::n;
voidmain
(
COobj;
COobj2[7];
CO*C=NULL:
c=&obj:
<!**!>>1**1**1**.1**.£**4*?X**1**1**5**1**!*/
/不不小不不不不下errcr不不不個不不不不/
eout?C.n?endl;
cout?C0::n?endl;
)
37.使用VC++6.0打開考生文件夾下的源程序文件1.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
{
I!********error********
TCobjl;
objl.Print;
TCobj2(3);
II********error********
objl.number=10;
I/********error*******
TC.SetNumber(lOO);
objl.Print;
obj2.Print;
)
38.使用VC++6.。打開考生文件夾下的源程序文件1.cpp,該程序
運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個
catch必須拋出執行的任何異常。
程序異常,輸出信息為
error
0
ERROR
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******error******的下面。
試題程序:
#include<iostream.h)
intmain
try
(
throw("error");
)
/*1**1**1**!**1*、上*1*7,*1**1**1**1**1*、1,
//個不不不■不平不個errcr個不不不不不不不
catch(chars)
{
cout?s?endl;
)
try
(
throw((int)0);
)
/*1>*1**1**1**1**1*、1,
//不不不不不不不個prrcr不不不不不不不不
catch
(
cout?i?endl;
)
try
(
throw(O);
throw("error");
}
/*1**1**1**1*、卜*1*、,,*1**1^>1*<1**1**1*、!,
//小不不小不下不不ermr不不不不不不不不
catch
(
cout?"ERROR"?endl;
returnO;
39.使用VC++6.0打開考生文件夾下的源程序文件
1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現
的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在
I!******error******-jx'p^~|
試題程序:
#include<iostream>
#include<fstream>
!1********enor********
usingstd;
voidWriteFile(char*s)
(
ofstreamoutl;
!1********enor********
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);
retumO;
40.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序
運行時有錯。請改正程序中的錯誤,使程序輸出的結果為
100
37
32
注意:錯誤的語句在//******error******的下面,修改該語句即
可。
試題程序:
#include<iostream.h>
II******enor******
voidmain
II******error******
intm=0142:
I/******ej*j*or******
intn=0X27:
intq=32;
cout<<m<<endl;
cout<<n<<endl;
cout<<q<<endl;
return;
)
41.使用VC++6.0打開考生文件夾下的源程序文件1.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
(
returnnumber;
)
voidPrintconst
(
cout?"number="?number?endl;
)
private:
intnumber;
voidmain
!1********error********
TCobjl;
objl.Print;
TCobj2(3);
!1********error********
objl.number=10;
II********ej*j*or*******
TC.SetNumber(lOO);
objl.Print;
obj2.Print;
42.使用VC++6.0打開考生文件夾下的源程序文件1.cppo本程序要
求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可能輸
入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出到屏幕
中。
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******errc*r******的下面。
試題程序:
#include<iostream.h>
voidmain
(
inti=O;
charstr[120];
cout?"Enterastringendwith?."?endl;
!1********enor********
cin.getline(str,120);
II********enor********
while(str)
!1********enor********
if(str[i])=a)
str[i]=str[i]-a+A;
i++;
)
cout?str?endl;
return;
)
43.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運
行時有錯,請改正其中的錯誤,使程序正常運行,并使程序輸出的結果
為:
sizeof(Sl)=5
sizeof(s2)=10
sizeof(s3)=l
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******error******的下面。
⑴不能刪除assert()語句。
(2)只能修改后面的數字。
提示:assert函數如果為假,則會產生一個中斷異常。
試題程序:
#include<iostream.h>
#include<assert.h>
voidmain()
(
char*sl="abc":
II********ej*ror********
assert(sizeof(s1)==3):
cout?"sizeof(sl)=5"?endl;
chars2[10]="ab":
//********error********
assert(sizeof(s2)==2);
cout?"sizeof(s2)=10"?endl;
chars3=23:
1I********error********
assert(sizeof(s3)==4);
cout?"sizeof(s3)=l"?endl;
return;
)
44.使用VC++6.。打開考生文件夾下的源程序文件1.cpp,該程序
運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個
catch必須拋出執行的任何異常。
程序異常,輸出信息為
error
0
ERROR
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結
構,錯誤的語句在//******errc)r******的下面。
試題程序:
#include<iostream.h)
intmain
(
try
{
throw("error");
catch(chars)
(
cout?s?endl;
)
try
{
throw((int)0);
)
//********error********
catch
(
cout?i?endl;
)
try
{
throw(O);
throw("error");
}
I!********enor********
catch
(
cout?"ERROR"?endl;
)
retumO;
}
45.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運
行時有錯誤,請改正程序中的錯誤,使得程序輸出:
9,8,7,6,5
注意:錯誤的語句在/********error********/的下面,修改該語句即
可。其他的語句不能修改。
試題程序:
#include(iostream.h>
classTC
!********enor********/
TC(inti)
(
m_i=i;
)
voidprint
(
cout?—m_i?,;
)
public:
intm_i;
);
intmain
I********error********/
inti;
TC04(10);
while(i>5)
I**************!
1++:
04.print;
)
cout?endl;
returnO;
)
五、綜合應用題(2題)
46.使用VC++6.0打開考生文件夾下的源程序文件3.cpp。請完成
以下部分,實現在屏幕上輸出為
C3
C2
這個程序需要修改的部分,請按照以下部分實現。
(1)類CO不能被實例化,請定義一個純虛函數print,在注釋1后添加
適當的語句。
(2)類C1私有虛繼承類CO,請在注釋2后添加適當的語句。
(3)類C2公有繼承于CO,請在注釋3后添加適當的語句。
(4)類c3公有繼承于C2與C1,請在注釋4后添加適當的語句。
注意:增加代碼或者修改代碼的位置已經用符號表示出來。請不要修
改其他的程序代碼。
試題程序:
#include(iostream.h)
classCO
(
};
II********2********
classCl:
public:
voidprint
cout<",,Cl"<<endl;
classC2:
public:
voidprint
cout<<"C2"<<endl;
};
//********4***x****
classC3:
public:
voidprint
cout<<"C3"<<endl;
};
voidmain
C3Obj3;
C20bj2;
obj3.print;
obj2.print;
return;
)
47.請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程
proj3,其中包含了類IntegerSet和主函數main的定義。一個IntegerSet
對象就是一個整數的集合,其中包含。個或多個無重復的整數;為了
便于進行集合操作,這些整數按升序存放在成員數組elem的前若干單
元中。成員函數add的作用是將一個元素添加到集合中(如果集合中不
存在該元素),成員函數remove從集合中刪除指定的元素(如果集合中
存在該元素)。請編寫成員函數remove。在main函數中給出了一組測
試數據,此時程序的正確輸出結果應為:
23452728316675
234562728315675
23456192728316675
3456192728316675
3456192728316675
要求:
補充編制的內容寫在“〃***********333************與
“〃***********666************之間,不得修改程序的其他部分。
注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile
已經編譯為。bj文件,并且在本程序中調用。
//IntegorSet.h
#ifndefINTEGERSET
#defineINTEGERSET
#include<iostream>
usingnamespacestd;
constintMAXELEMENTS=100;
//集合最多可擁有的元素個數
classIntegerSet{
intelem[MAXELEMENTS];
//用于存放集合元素的數組
intcounter;//用于記錄集合中元素個數的計數器
public:
IntegerSet:counter(0){}
〃創建一個空集合
IntegerSet(intdata[],intsize);
//利用數組提供的數據創建一個整數集合
voidadd(intelement);
〃添加一個元素到集合中
voidremeve(intelement);
〃刪除集合中指定的元素
intgetCountconst{returncounter;}
〃返回集合中元素的個數
intgetElement(inti)const{returnelem[i];}〃返回集合中指定的元素
voidshowconst;
};
voidWriteToFile(char*);
#endif
//main,cpp
#include,,IntegerSet.h"
#include<inmanip>
IntegerSet::IntegerSet(intdata[],intsize):counter(0){
for(inti=0;i<size;i++)
add(data[i]);
)
)
voidIntegerSet::add(intelement){
intj;
〃從后往前尋找第一個小于等于element的元素
for(j=counter;j>0;j-)
if(element>=elem[j一l])break;
〃如果找到的是等于element的元素,說明要添加的元素已經存在,直
接返回
if(element==elemfj-1])return;
〃如果找到的是小于element的元素,j就是要添加的位置
//該元素及其后面的元素依次后移,騰出插入位置
for(intk=counter;k>j;k一)
elem[k]=elem[k一1];
elem[j]=element;〃將element插入到該位置
counter++;〃計數器加1
voidIntegerSet::remove(intelement){
〃***************333***************
voidIntegerSet::showconst{
for(inti=0;i<getCount;i++)
cout?setw(4)?getElement(i);
cout?endl:
)
intmain{
intd[]={5,28,2,4,5,3,2,75,27,66,31);
IntegerSetS(d,11);S.show;
S.add(6);s.show;
S.add(19);S.show;
S.remove(2);s.show;
S.add(4);S.show;
,,,,
writeToFile();
return0;
六、3.綜合應用題(2題)
48.使用VC6打開考生文件夾下的工程MyProj80此工程包含一個源程
序文件MyMain8.cpp,該程序實現棧的入棧和出棧的操作。其中有兩個
類:一個是節點類node,它包含節點值和指向上一個節點的指針prey;
另一個類是棧類stack,它包含棧的頭指針top。但類的定義并不完整。
請按要求完成下列操作,將類Sample的定義補充完成:
①定義私有節點值data,它是血型的數據,以及定義一個指向上一個節
點的指針prev。請在注釋“〃**1**”之后添加適當的語句。
②完成構造函數node(intd,node*n)的定義,使得私有成員data和prev分
別初始化為d和no請在注釋“//**2**”之后添加適當的語句。
③完成類stack的成員函數push(inti)的類體內的定義。函數push()實現
入棧這個操作,即把形參i壓入棧中,那么此時應該創建一個新的節點,
并讓這個節點的prev指針指向棧頂。請在注釋“//**3**”之后添加適當
的語句。
注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。
源程序文件MyMain8.cpp清單如下:
//MyMain8.cpp
#include<iostream>
usingnamespacestd;
classstack;
classnode
(
private:
〃**]**
public:
node(intd,node*n)
(
〃**2**
)
friendclassstack;
);
classstack
node*top;//棧頭
public:
stack()
{
top=0;
)
voidpush(inti)
(
〃**3**
)
intpop()
{
node*t=top;
if(top)
(
top=top->prev;
intc=t->data;
deletet;
returnc;
)
return0;
)
);
intmain()
(
stacks;
s.push(6);
s.push(3);
s.push(l);
return0;
49.使用VC6打開考生文件夾下的工程test32_3o此工程包含一個
test32_3.cpp,其中定義了復數類complex,但該類的定義并不完整。請
按要求完成下列操作,將程序補充完整。
(1)定義復數類complex的私有數據成員real和image,用來分別表示復
數的實部和虛部,它們都是double型的數據。請在注釋“〃**1**”之后添
加適當的語句。
(2)添加復數類complex的帶一個參數的構造函數,分別將real和image
賦值為參數r的值和0.0,請在注釋“〃**2**”之后添加適當的語句。
⑶完成復數類complex的“+”運算符重載成員函數的定義,兩個復數相
加是將復數的實部和虛部分別進行相加,請在注釋“〃**3**”之后添加適
當的語句。
(4)完成復數類complex的友元函數isequal(complex*cl,complex*c2)的
定義,如果復數cl與c2相等即cl與c2的實部和虛部分別相等,則返
回1,否則返回0。請在注釋“〃**4**”之后添加適當的語句。
程序輸出結果如下:
36+0i=36+0i
注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。
源程序文件test32_3.cpp清單如下:
#include<iostream.h>
classcomplex
{
public:
complex(){real=image=O.O;}
complex(doubler)
〃**2**
)
complexoperator+(constcomplex&c);
friendboolisequal(complex*cl,complex*c2
voiddisplayO;
);
complexcomplex::operator+(constcomplex&c)
{
〃**3**
temp.real=real+c.real;
temp.image=image+c.image;
returntemp;
)
boolisequal(complex*cl,complex*c2)
(
//**4**
return1;
else
return0;
)
voidcomplex::display()
(
cout<<real;
if(image>=0)cout<<<<image<<"i";
elseif(image<0)cout<<image<<"i";
)
voidmain()
(
complexcl,c2(36.0);
cl=cl+c2;
cl.displayO;
if(isequal(&cl,&c2))cout<<
elsecoat<<"<>
c2.display();
cout<<end1;
)
參考答案
1.D解析:在C語言中,所有的函數都是平行的,即在定義函數時是互
相獨立的,一個函數并不從屬于另一個函數,即函數不能嵌套定義,但
可以互相調用,但不能調用main函數。注意:函數不能嵌套定義,但
可以嵌套調用,故選項A)、B)和C)中的描述都錯誤。
2.C解析:軟件測試的目標是在精心控制的環境下執行程序,以發現程
序中的錯誤,給出程序可靠性的鑒定。它有3個方面的重要特征,即測
試的挑剔性、完全測試的不可能性及測試的經濟性。其中沒有測試的可
靠性這一說法。注意:軟件測試與軟件調試的概念,以及相應的方法。
3.D
4.D【解析】算法的空間復雜度是指執行這個算法所需要的內存空間。一
個算法所占用的存儲空間包括算法程序所占的空間、輸入的初始數據所
占的存儲空間以及算法執行中所需要的額外空間。其中額外空間包括算
法程序執行過程中的工作單元以及某種數據結構所需要的附加存儲空
間。如果額外空間量相對于問題規模來說是常數,則稱該算法是原地工
作的。在許多實際問題中,為了減少算法所占的存儲空間,通常采用壓
縮存儲技術,以便盡量減少不必要的額外空間。
5.A解析:此題考查的是“++”運算符的重載。為了區分前綴和后綴運算
符,規定:重載后綴運算符時必須多一個虛擬參數:int。本題中,A(2)
首先給n賦值2,語句A++,調用的是后綴運算符重載語句,使得n加
2變為4。B(2)首先給n賦值2,然后語句++B,調用前綴運算符重載函
數,使得n加1。因此最終的輸出結果是n=4n=3。
6.A解析:C++語言中的注釋與C潔言不同,C語言的注釋符號只有/*
*/,而C++在此基礎上又加上了//,此注釋用于單行注釋。注意:注釋
不影響程序的運行。
7.A解析:在C++中,由于析構函數不能被繼承,因此在執行派生類的
析構函數時,基類的析構函數也將被調用。執行順序是先執行派生類的
析構函數,再執行基類的析構函數,其順序與執行構造函數的順序正好
相反。在此題的程序中,在主函數結束時,派生類Derived對象。obj將
被刪除,所以就會調用對象的析構函數。先調用派生類的析構函數,輸
出x,然后調用基類的析構函數,輸出y。
8.D解析:循環隊列中,頭指針指向的是隊頭元素的前一個位置,而尾
指針的是隊尾元素所在的位置,因此隊列中元素的個數為(n+R.F)mod
no
9.A
解析:順序存儲結構就是用一組地址連續的存儲單元依次存儲該線性
表中的各個元素,鏈式存儲結構中各數據結點的存儲序號是不連續
的,并且各結點在存儲空間中的位置關系與邏輯關系也不一致,所以
選項A是正確的。兩者都可以存儲線性的、有序的邏輯結構,所以選
項B、C不正確。順序結構使用的是連續物理空間,鏈式結構可以使
用零散的物理空間存儲,鏈式結構更靈活,不存在誰節約空間的說
法,所以選項D不正確。
10.B解析:本題考查的是內聯函數的定義,引入內聯函數是為了解決
程序中函數調用的效率問題,是以目標代碼的增加為代價換取時間的節
省;一般函數在運行時被調用,而調用的內聯函數在編譯時就被替代了,
如果不加inline關鍵字,則編譯器會將在類說明部分定義的任何函數都
被認定為內聯函數。
11.A
本題考查函數實參個數的基礎知識,根據實參的概念,(a+b)、3、
mflJc(n-1,b)分別為其中的3個實參。故答案為A。
12.C
解析:本題考查的知識點是:繼承和派生。無論使用哪種繼承方式,
派生類中的成員都不能訪問基類中的私有成員,而可以訪問基類中的
公有成員和保護成員,因此選項A)不正確。在C++中,只有抽象類
不能被實例化,而虛基類不一定非得是抽象類,所以選項B)不正確。
在派生類中可以重新定義從基類繼承下來的虛函數,也可以不重新定
義,因此選項D)不正確。故本題應該選擇C。
13.B解析:C++中,成員函數可以是內聯函數,也可以不是內聯函數。
在類定義體外實現的函數可以通過在函數說明和定義上分別加上inline
來表示函數是內聯函數,否則就不是內聯函數。
14.A解析:數據流圖包括4個方面,即加工(轉換)(輸入數據經加工變
換產生輸出)、數據流CG箭頭方向傳送數據的通道,一般在旁邊標注數
據流名)、存儲文件(數據源)(表示處理過程中存放各種數據的文件)、
源和潭(表示系統和環境的接口,屬系統之外的實體)。不包括選項中的
控制流。
15.D解析:內聯函數被調用時,只是把代碼在被調用處展開,不是把函
數的運算結果返回。
16.A
17.DD。【解析】本題考查虛函數的概念。虛函數是非靜態的成員函數,
它不能是友元函數,但可以在另一個類中被聲明為友元函數。虛函數必
須是類的成員函數,虛函數聲明只能出現在類定義的函數原型聲明中,
而不能在成員函數的函數體實現的地方,一般要求基類中說明了虛函數
后,派生類說明的虛函數應該與基類中虛函數的參數個數相等,對應參
數的類型相同。如果不相同,則將派生類虛函數的參數類型強制轉換為
基類中虛函數的參數類型。
18.A
19.A解析:在main函數中,調用reverse函數將b數組中的前8個成員
進行互置,執行完畢后,b數組中的成員為{8,7,6,5,4,3,2,1,
9,10),在執行for循環結構后,將b[6],b[7]……b[9]的值相加,結果
為1+2+9+10=22。注意:在計算累加和時,應將累加變量賦值為零。
20.A
解析:本題考查的知識點是:指針的賦值。題目中的語句int*p=&k;
有兩個作用:首先,定義了一個int型指針p;然后,將變量k的地址
&k賦給剛定義的指針p。所以等效的語句序列為:int*p;p=&k;,應
該選擇Ao
21.B解析:本題考查的是基本循環語句的使用,選項A),選項C)和選
項D)都為正確的形式,在選項B)中的while(a<=10)后缺少結束符分號
,,
22.B
本題考查類模板的基本概念。類模板的定義和聲明都以關鍵字template
開頭。關鍵字后面是一個用逗號分隔的模板參數表,用尖括號“<>”括
起來,這個表被稱為類模板的模板參數表。類模板是類的抽象,類是
類模板的實例。類模板使類中的一些數據成員和成員函數的參數或返
回值可以取任意的數據類型。所以B選項正確。
23.D解析:本題考核類的析構函數。在C++中,析構函數名為符號“?”
加類名,析構函數沒有參數和返回值。根據以上知識可知,MyClass類
的正確析構函數的說明為~MyClass()。
24.模式或邏輯模式或概念模式模式或邏輯模式或概念模式
25.1616解析:賦值表達式的值就是所賦值變量的值,本題中a+=8相當
于a=a+8,對表達式逐步進行求解:a+=(a=8)此時,a的值由于賦值為8,
而不是o
a+=8
a=a+8
a=16
注意:要掌握“+=”等相關運算符的用法。
26.字母數字特殊符號字母數字特殊符號
27.關系關系解析:在關系模型中,把數據看成一個二維表,每一個二
維表稱為一個關系。表中的每一列稱為一個屬性,相當于記錄中的一個
數據項,對屬性的命名稱為屬性名;表中的一行稱為一個元組,相當于
記錄值。
28.實體實體解析:面向對象的程序設計方法中涉及的對象是系統中用
來描述客觀事物的一個實體,是構成系統的一個基本單位,它由一組表
示其靜態特征的屬性和它可執行的一組操作組成。
29.存儲結構存儲結構解析:數據的邏輯結構是指反映數據元素之間邏
輯關系的數據結構;數據的存儲結構是指數據的邏輯結構在計算機存儲
空間中的存放形式。在數據的存儲結構中,不僅要存放各數據元素的信
息,還需要存放各數據元素之間的前后件關系的信息。
30.調試調試
31.temp=a[i]或temp=*(a+i)或temp=*(i+a)temp=a[i]或temp=*(a+i)或
temp=*(i+a)
32.成員函數成員函數解析:C++中,只有類的成員函數才能說明為虛
函數。這是因為,虛函數僅適用于有繼承關系的類對象,所以普通函數
不能說明為虛函數。
33.?MyClass()
34.j=ij=i解析:在函數sort。中,外層for循環中依次將數組b中的值賦
值給變量t,然后在內層循環中依次與已經排序的數組元素進行比較,
并在符合條件的位置插入該元素。由語句可知,數組中有i個
元素已經排好了序。因此,根據內層循環中的語句,知道內層
循環是將當前的第i個元素與j個元素進行比較,前面已知數組中有i
個元素已經排好了序根據題干中的要求“插入到已排序序列中",即j=i。
35.操作符個數操作符個數解析:本題考查的是運算符重載的概念,用
戶重新定義的運算符不改變原運算符的優先性和結合性,也不改變運算
符的語法結構.也就是說重載運算符不會產生新的運算符。
36.(1)44staticintn=O,,lS0t^/t€staticintn;"。
(2)“intC0::n;”應改為“intCO::n=0;”。
(3)“cout?c.n?endl;"應改為"cout?c->n?endl;"。
【解析】本題要在屏幕上輸出兩個字符,首先要靜態變量初始化,第1
處應改為“staticintn;",第2處要給n賦值,第3處輸出時引用c的對
象,應改為"cout?c-〉n<<endl;
37.(1)應改為"TCobjl(l);
(2)應改為“Objl.SetNumber(lO);
(3)應改為“0bj2.SelNumber(lOO);
【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象Objl,根據
TC類構造函數的定義TC(inti),存在整型參數,并且題目要求第一個
輸出結果兩1,所以補全參數1,即第1處的“TCobjl(l);第2處處
的“objl.number=10;”應該是調用成員函數SetNumber賦值。在C+
+中成員函數的使用形式應該是:對象名.成員函數,所以修改為
“objl.SetNumber(lO);類是對象的抽象,而對象是類的具體實
例。第3處“TC.SetNumber(lOO);”語句中的TC為類,并不是對象,
這里應該使用定義的對象,即。bj2,所以將語句修改為
“obj2.SetNumber(lOO);
38.(1)應改為"catch(char*s)”。
⑵應改為“cateh(inti)”。
(3)應改為"catch(…)”。
【解析】本題中第1個標識前的異常拋出語句為“throw("error");",其
中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類
型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語
句修改為“catch(char*S)”°第2個標識前的異常拋出語句為
“throw((int)0);",其中的類型為int。對應的異常捕捉語句catch中應
該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配
的catch塊,系統就會調用一個系統函數,使程序終止運行。即第2處
的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類
型,那么就用刪節號"…''表示它可以捕捉任何類型的異常信息,即修
改為“catch(…)”。
39.(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。1.txt',binary|
app);”語句缺少類ios,即第2處的語句修改為"outl.open(,l.txt',ios::
binary|ios::app);”。第3個標識應該用流成員函數put輸出字符,所
以第3處的語句修改為“outl.put(s[i]);
40.(l)“voidmain”。
(2)“intm=0144;
(3)“intn=OX25;”或“intn=0x25;”。
【解析】本題主要考查了主函數定義及幕同進制之間的轉換,包括十
進制到八進制,十進制到十六進制。主函數定義的定義形式為
“main”,函數名之后必須是一對括號,因此第1處應改為“voidmain”。
cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發
現變量的初值不正確,十進制的100對應八進制的144,卡進制的37
對應十六進制的25,因此2和3應分別改成“intm=0144;”,
“intn=0x25;”或“intn=0x25;
41.⑴應改為"TCobjl(l);
\n(2)應改為“Objl.SetNumber(lO);
\n(3)應改為“0bj2.SelNumber(lOO);"。
\n【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象Objl,根據
TC類構造函數的定義TC(inti),存在整型參數,并且題目要求第一個輸
出結果兩1,所以補全參數1,即第1處的“TCobjl(l);第2處處的
“objl.number=10;”應該是調用成員函數SetNumber賦值。在C++中
成員函數的使用形式應該是:對象名.成員函數,所以修改為
"objl.SetNumber(lO);類是對象的抽象,而對象是類的具體實例。
第3處刀(3.56時110收式100);”語句中的T(2為類,并不是對象,這里
應該使用定義的對象,即obj2,所以將語句修改為
“obj2.SetNumber(lOO);
42.(1)應改為“ein.getline(str,120,?);
\n⑵應改為"while(st巾])”。
>,
\n⑶應改為"if(str[i]>=a&&str[i]<=2)o
\n【解析】本題中要求以輸入字符“?”為結束符,用于字符輸入的流成員
函數getline函數讀入一行字符,格式為“cin.g
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 暖童心六一活動方案
- 最近中國銀行活動方案
- 2025年會計職稱考試《初級會計實務》財務管理基礎重點難點試題匯編
- 2025至2030LED封裝設備發展趨勢分析與未來投資戰略咨詢研究報告
- 2025至2030InGaAsAPD模塊行業市場占有率及投資前景評估規劃報告
- 2025-2030裝配機器人市場發展現狀分析及行業投資戰略研究報告
- 松崗美食活動策劃方案
- 村民族聯誼活動方案
- 松門公司團建活動方案
- 景區迎亞運活動方案
- 公司適用法律法規標準清單2025年08月更新
- 中意紙質文物脫酸技術應用與思考
- 大慶師范學院《跳高》2023-2024學年第一學期期末試卷
- 中央民族大學強基校測面試題
- 幸福與健康課件
- 2025年 中國南水北調集團新能源投資公司第一批中層及考試筆試試卷附答案
- 敘事護理學智慧樹知到答案2024年中國人民解放軍海軍軍醫大學
- 六年級主題班隊會記錄表(6個表)
- 三國群英傳7物品編號課件
- 42式太極拳拳譜動作圖解
- 卵巢惡性腫瘤臨床路徑
評論
0/150
提交評論