1[判斷題] C++語言程序的實(shí)現(xiàn)也要經(jīng)過編輯、編譯連接和運(yùn)行3個步驟。
參考答案:對
2[單選題]在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,不正確的敘述是( )。
A.派生類的對象可以賦給基類的對象
B.派生類的對象可以初始化基類的引用
C.派生類的對象可以直接訪問基類中的成員
D.派生類的對象的地址可以賦給指向基類的指針
參考答案:C
3[單選題] 有如下函數(shù)定義:
void funC(int a,int&B.{a++;b++;} 若執(zhí)行代碼段:
int x=0,Y=1: funC(X,y);
則變量X和y的值分別是( )。
A.0和1B.1和1C.0和2D.1和2
參考答案:C
參考解析:函數(shù)參數(shù)的3種傳遞方式:①將變量名作為形參和實(shí)參,即傳值方式;②傳遞變量指針;③引用形參。本題中實(shí)參x為傳值方式,所以X的值不會改變;Y為引用形參,所以會改變。故本題答案為C。
4[單選題]下面程序的結(jié)果為
#include
int c;
class A
{
private:
int a;
static int b;
public;
A(){a=0;c=0;}
void seta(){a++;}
void setb(){b++;}
void setc(){c++;}
void display(){cout <<<<
int A::b=0;
void main()
{
A al,a2;
al.seta();
al.setb();
al.setc();
a2.seta();
a2.setb();
a3.setc();
a2.display();
A.121 B.122 C.112 D.222
參考答案:B
6[單選題]已知char a;int b;float c;double d;則表達(dá)式a*b+c-d結(jié)果為( )。
A.doubleB.intC.floatD.char
參考答案:A
參考解析:本題考察混合運(yùn)算表達(dá)式類型,由表達(dá)式中具有優(yōu)先級的類型所確定,所以答案為A。
8[單選題] 下列敘述中正確的是( )。
A.循環(huán)隊(duì)列有隊(duì)頭和隊(duì)尾兩個指針,因此循環(huán)隊(duì)列是非線性結(jié)構(gòu)
B.在循環(huán)隊(duì)列中,只需要隊(duì)頭指針就能反映隊(duì)列中元素的動態(tài)變化情況
C.在循環(huán)隊(duì)列中,只需要隊(duì)尾指針就能反映隊(duì)列中元素的動態(tài)變化情況
D.循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)頭指針和隊(duì)尾指針共同決定
參考答案:D
參考解析:循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)首指針和隊(duì)尾指針共同決定的,元素的動態(tài)變化也是通過隊(duì)首指針和隊(duì)尾指針來反映的,當(dāng)隊(duì)首等于隊(duì)尾時,隊(duì)列為空。
9[簡答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運(yùn)行時有錯誤,請改正其中的錯誤,使得程序正確運(yùn)行。
程序輸出:
s1:n=20
s2:n=10
執(zhí)行s3.add(s1,s2)
s3:n=30
s4:n=30
注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。
試題程序:
#include
classTC
{
intn;
public:
TC(){}
TC(intm)
{
n=m:
}
//********error********
TCadd(TCs1,s2)
{
this->n=s1.n+s2.n;
//********error********
return(this);
}
voiddisp()
{
cout<<"n一="<
}
//********error********
}
voidmain()
{
TCs1(20),s2(10),s3,s4;
cout<<"s1:";
s1.disp();
cout<<"s2:";
s2.disp();
s4=s3.add(s1,s2);
cout<("執(zhí)行s3.add(s1,s2)\ns3:";
s3.disp();
COUt<<"s4:";s4.disp();
}
參考解析:
(1)應(yīng)改為“TCadd(TCs1,TCs2)”。
(2)應(yīng)改為“return(*this);”。
(3)應(yīng)改為“};”。
【解析】本題中的變量“s2”沒有聲明類型,所以補(bǔ)充“s2”的類型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”語句中的this變量為指針變量,所以第2處的“return(this);”返回語句中的this變量,應(yīng)該返回指針型,所以修改為“return(*this);”。C++中類的定義格式應(yīng)為“class類名{};”,以分號為結(jié)尾,所以在第3處的類結(jié)尾處補(bǔ)充分號“;”,即修改為“};”。
10[簡答題]使用VC++6.0打開考生文件夾下的源程序文件2.cpp。請完成函數(shù)fun(char*str,charch)的定義,本函數(shù)采用二分法,在已按字母次序從小到大排序的字符數(shù)組str中,查找字符ch,若ch在數(shù)組中,函數(shù)返回字符ch在數(shù)組中的下標(biāo),否則返回1。
二分法查找的思想是初始查找區(qū)間的下界為0,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。在新區(qū)間內(nèi)繼續(xù)用二分法查找。
注意:請勿改動主函數(shù)main與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include(iostream.h>
intfun(char*str,charch)
{
}
voidmain()
{
charstr[]={'a','b','C','d','e','f','9','h','i,'
j','k');
charch;
cout<<"請輸入一個字符:"<
cin>>ch;
cout<<"輸入字符的位置是:"<
return;
}
參考解析:
intlow=0;//初始查找區(qū)間的下界
inthigh;
intk;
for(high=0;str[high]!=0;high++)//求字符串長度
while(10w
{
k=(low+high)/2;
if(str[k]==ch)
returnk;
elseif(str[k]>ch)
high=k-l:
elselow=k+1:
}
if(str[low]==ch)
returnlow;
return-1:
【解析】本題首先初始查找區(qū)間的下界為0,然后求得字符串長度len,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。
參考答案:對
2[單選題]在公有派生情況下,有關(guān)派生類對象和基類對象的關(guān)系,不正確的敘述是( )。
A.派生類的對象可以賦給基類的對象
B.派生類的對象可以初始化基類的引用
C.派生類的對象可以直接訪問基類中的成員
D.派生類的對象的地址可以賦給指向基類的指針
參考答案:C
3[單選題] 有如下函數(shù)定義:
void funC(int a,int&B.{a++;b++;} 若執(zhí)行代碼段:
int x=0,Y=1: funC(X,y);
則變量X和y的值分別是( )。
A.0和1B.1和1C.0和2D.1和2
參考答案:C
參考解析:函數(shù)參數(shù)的3種傳遞方式:①將變量名作為形參和實(shí)參,即傳值方式;②傳遞變量指針;③引用形參。本題中實(shí)參x為傳值方式,所以X的值不會改變;Y為引用形參,所以會改變。故本題答案為C。
4[單選題]下面程序的結(jié)果為
#include
int c;
class A
{
private:
int a;
static int b;
public;
A(){a=0;c=0;}
void seta(){a++;}
void setb(){b++;}
void setc(){c++;}
void display(){cout <<<<
int A::b=0;
void main()
{
A al,a2;
al.seta();
al.setb();
al.setc();
a2.seta();
a2.setb();
a3.setc();
a2.display();
A.121 B.122 C.112 D.222
參考答案:B
6[單選題]已知char a;int b;float c;double d;則表達(dá)式a*b+c-d結(jié)果為( )。
A.doubleB.intC.floatD.char
參考答案:A
參考解析:本題考察混合運(yùn)算表達(dá)式類型,由表達(dá)式中具有優(yōu)先級的類型所確定,所以答案為A。
8[單選題] 下列敘述中正確的是( )。
A.循環(huán)隊(duì)列有隊(duì)頭和隊(duì)尾兩個指針,因此循環(huán)隊(duì)列是非線性結(jié)構(gòu)
B.在循環(huán)隊(duì)列中,只需要隊(duì)頭指針就能反映隊(duì)列中元素的動態(tài)變化情況
C.在循環(huán)隊(duì)列中,只需要隊(duì)尾指針就能反映隊(duì)列中元素的動態(tài)變化情況
D.循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)頭指針和隊(duì)尾指針共同決定
參考答案:D
參考解析:循環(huán)隊(duì)列中元素的個數(shù)是由隊(duì)首指針和隊(duì)尾指針共同決定的,元素的動態(tài)變化也是通過隊(duì)首指針和隊(duì)尾指針來反映的,當(dāng)隊(duì)首等于隊(duì)尾時,隊(duì)列為空。
9[簡答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運(yùn)行時有錯誤,請改正其中的錯誤,使得程序正確運(yùn)行。
程序輸出:
s1:n=20
s2:n=10
執(zhí)行s3.add(s1,s2)
s3:n=30
s4:n=30
注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。
試題程序:
#include
classTC
{
intn;
public:
TC(){}
TC(intm)
{
n=m:
}
//********error********
TCadd(TCs1,s2)
{
this->n=s1.n+s2.n;
//********error********
return(this);
}
voiddisp()
{
cout<<"n一="<
}
//********error********
}
voidmain()
{
TCs1(20),s2(10),s3,s4;
cout<<"s1:";
s1.disp();
cout<<"s2:";
s2.disp();
s4=s3.add(s1,s2);
cout<("執(zhí)行s3.add(s1,s2)\ns3:";
s3.disp();
COUt<<"s4:";s4.disp();
}
參考解析:
(1)應(yīng)改為“TCadd(TCs1,TCs2)”。
(2)應(yīng)改為“return(*this);”。
(3)應(yīng)改為“};”。
【解析】本題中的變量“s2”沒有聲明類型,所以補(bǔ)充“s2”的類型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”語句中的this變量為指針變量,所以第2處的“return(this);”返回語句中的this變量,應(yīng)該返回指針型,所以修改為“return(*this);”。C++中類的定義格式應(yīng)為“class類名{};”,以分號為結(jié)尾,所以在第3處的類結(jié)尾處補(bǔ)充分號“;”,即修改為“};”。
10[簡答題]使用VC++6.0打開考生文件夾下的源程序文件2.cpp。請完成函數(shù)fun(char*str,charch)的定義,本函數(shù)采用二分法,在已按字母次序從小到大排序的字符數(shù)組str中,查找字符ch,若ch在數(shù)組中,函數(shù)返回字符ch在數(shù)組中的下標(biāo),否則返回1。
二分法查找的思想是初始查找區(qū)間的下界為0,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。在新區(qū)間內(nèi)繼續(xù)用二分法查找。
注意:請勿改動主函數(shù)main與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。
試題程序:
#include(iostream.h>
intfun(char*str,charch)
{
}
voidmain()
{
charstr[]={'a','b','C','d','e','f','9','h','i,'
j','k');
charch;
cout<<"請輸入一個字符:"<
cin>>ch;
cout<<"輸入字符的位置是:"<
return;
}
參考解析:
intlow=0;//初始查找區(qū)間的下界
inthigh;
intk;
for(high=0;str[high]!=0;high++)//求字符串長度
while(10w
{
k=(low+high)/2;
if(str[k]==ch)
returnk;
elseif(str[k]>ch)
high=k-l:
elselow=k+1:
}
if(str[low]==ch)
returnlow;
return-1:
【解析】本題首先初始查找區(qū)間的下界為0,然后求得字符串長度len,上界為len-1,查找區(qū)間的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,則新的查找區(qū)間的下界不變,上界改為k-1;否則新的查找區(qū)間的下界改為k+1,上界不變。