《C++期末考試題(共7頁)》由會員分享,可在線閱讀,更多相關(guān)《C++期末考試題(共7頁)(7頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
C++期末考試題及答案
一、填空題(25小題,共50分)
(以下每小題1分,共10分)
1.在C++中,函數(shù)的參數(shù)有兩種傳遞方式,它們是值傳遞和地址或指針或引用傳遞。
2.當(dāng)一個成員函數(shù)被調(diào)用時,該成員函數(shù)的this指針指向調(diào)用它的對象。
3.在基類和派生類中,派生類可以定義其基類中不具備的數(shù)據(jù)和操作。對兩個有相同名字的數(shù)據(jù)成員進(jìn)行訪問時,如果沒有作用域分隔符限定時,對此數(shù)據(jù)成員的訪問將出現(xiàn)歧義。
4.拷貝構(gòu)造函數(shù)使用引用作為參數(shù)初始化創(chuàng)建中的對象。
5.在公有繼承的情況下,基類數(shù)據(jù)成員在派生類中的訪問權(quán)限保持不變。
6.描述命題"A小于B
2、或小于C"的表達(dá)式為Ac&&b==c"的值是0。
(以下每小題2分,共20分)
11.面向?qū)ο蟮某绦蛟O(shè)計(jì)有四大特征,它們是抽象、封裝、繼承、多態(tài)。
12.在VisualC++中,定義重載函數(shù)時
3、,應(yīng)至少使重載函數(shù)的參數(shù)個數(shù)或參數(shù)類型不同;在基類和派生類中,成員函數(shù)的覆蓋是指派生類成員函數(shù)與在基類被覆蓋的成員函數(shù)名、參數(shù)個數(shù)、參數(shù)類型和返回值類型均相同。
13.構(gòu)造函數(shù)與析構(gòu)函數(shù)除功能不同外,在定義形式上,它們的區(qū)別還包括構(gòu)造函數(shù)名與類名相同,而析構(gòu)函數(shù)名是在類名前加一個~、析構(gòu)函數(shù)沒有參數(shù)、析構(gòu)函數(shù)可以定義為虛函數(shù)。
14.動態(tài)聯(lián)編要滿足兩個條件,它們是被調(diào)用的成員函數(shù)是虛函數(shù)、用指針或引用調(diào)用虛函數(shù)。
15.在C++類中,有一種不能定義對象的類,這樣的類只能被繼承,稱之為抽象類,定義該類至少具有一個純虛函數(shù)。
16.在C++類中,const關(guān)鍵字可以修飾對象和成員函數(shù),co
4、nst對象不能被修改,const成員函數(shù)不能修改類數(shù)據(jù)成員。
17.舉出C++中兩種用戶自定義的數(shù)據(jù)類型:類、枚舉。
18.C++中沒有字符串類型,字符串是通過字符數(shù)組來表示的,每一個字符串都有一個結(jié)尾字符\0。
19.C++中沒有輸入輸出語句,輸入輸出是通過輸入輸出庫實(shí)現(xiàn)的,寫出一條打印整型變量n的輸出語句:cout<
voidmain()
{
chara=a,b=j;
floatx;
x=(b-a)/(F-A);
5、
printf("%d\n",(int)(3.14*x));
}
22.下面程序的運(yùn)行結(jié)果是2581114。
#include"iostream.h"
voidmain()
{
inti=1;
while(i<=15){
i++;
if(i%3!=2)continue;
elsecout<<"i="<
6、turnnum;}
floatgetfloat(){returnfl;}
~test();
};
test::test()
{
cout<<"Initalizingdefault"<
7、gdefault
00
Desdtructorisactive
Desdtructorisactive
24.下面程序的運(yùn)行結(jié)果是________。
#include
classA
{
public:
A(){cout<<"A::A()called.\n";}
virtual~A(){cout<<"A::~A()called.\n";}
};
classB:publicA
{
public:
B(inti){
cout<<"B::B()called.\n";
buf=newchar;}
virtual~B()
{
delete[]
8、buf;
cout<<"B::~B()called.\n";
}
private:
char*buf;
};
voidfun(A*a)
{
deletea;
}
voidmain()
{
A*a=newB(15);
fun(a);
}
A::A()called.
B::B()called.
B::~B()called.
A::~A()called.
25.下面程序的運(yùn)行結(jié)果是________。
#include
inta[]={1,3,5,7,9};
int*p[]={a,a+1,a+2,a+3,a+4};
voidmain()
9、
{
printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]);
printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);
}
953
847
二、問答題(每小題5分,共20分)
1.若程序員沒有定義拷貝構(gòu)造函數(shù),則編譯器自動生成一個缺省的拷貝構(gòu)造函數(shù),它可能會產(chǎn)生什么問題?
解答要點(diǎn):當(dāng)對象含有指針數(shù)據(jù)成員,并用它初始化同類型的另一個對象時,缺省的拷貝構(gòu)造函數(shù)只能將該對象的數(shù)據(jù)成員復(fù)制給另一個對象,而不能將該對象中指針?biāo)赶虻膬?nèi)存單元也復(fù)制過去。這樣,就可能出現(xiàn)同一內(nèi)存單元釋放兩次
10、,導(dǎo)致程序運(yùn)行出錯。
2.簡述成員函數(shù)、全局函數(shù)和友元函數(shù)的差別。
解答要點(diǎn):以下幾點(diǎn)必須說清楚:
成員函數(shù)是在類內(nèi)部定義的,作用域在類的內(nèi)部,成員函數(shù)可以訪問類的數(shù)據(jù)成員(公有、保護(hù)和私有數(shù)據(jù)成員),可以調(diào)用該類的其它成員函數(shù)(公有、保護(hù)和私有成員函數(shù)),可以調(diào)用全局函數(shù)。如果友元函數(shù)是另一個類的公有成員函數(shù),則該類的成員函數(shù)也只能通過那個類的對象調(diào)用,不能調(diào)用那個類的保護(hù)和私有成員函數(shù)。非本類成員函數(shù)(其它類成員函數(shù)或全局函數(shù))可以通過該類的對象訪問該類的公有數(shù)據(jù)成員和調(diào)用該類的的公有成員函數(shù)。
不是在類中定義的成員函數(shù)都是全局函數(shù)。
如果某一個函數(shù)(全局函數(shù)或類的成員函數(shù))定義
11、為另一個類的友元函數(shù),需要在那個類中用friend關(guān)鍵字聲明,友元函數(shù)并不是類的成員,它的定義自然是在那個類的外面。
3.簡述結(jié)構(gòu)化的程序設(shè)計(jì)、面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思想。
解答要點(diǎn):結(jié)構(gòu)化的程序設(shè)計(jì)將數(shù)據(jù)和對數(shù)據(jù)的操作分離,程序是由一個個的函數(shù)組成的,面向?qū)ο蟮某绦蛟O(shè)計(jì)將數(shù)據(jù)和操作封裝在一起,程序是由一個個對象組成的,對象之間通過接口進(jìn)行通信,它能夠較好地支持程序代碼的復(fù)用。
4.結(jié)構(gòu)struct和類class有什么異同?
解答要點(diǎn):struct和class都可以定義類,但是缺省訪問權(quán)限說明時,struct的成員是公有的,而class的成員是私有的。在C++中,struct可被cl
12、ass代替。
三、找出下面程序(或程序段)中的語法錯誤,并予以糾正(每小題4分,共8分)
(1)程序功能是倒序輸出各給定的字符串。
#include
voidmain()
{
charstr[5][]={"First","Second","Third","Forth","Fifth"};
char*cp[]={str[4],str[3],str[2],str[1],str[0]};
inti;
while(i<=5)
{
printf("%c",*(cp+i));
i++;
}
}
①"charstr[5][]={"First","Second"
13、,"Third","Forth","Fifth"};"應(yīng)為
"charstr[5][10]={"First","Second","Third","Forth","Fifth"};"
②"while(i<=5)"應(yīng)為"while(i<5)"
③"printf("%c",*(cp+i));"應(yīng)為"printf("%s",*(cp+i));"
④"inti;"應(yīng)為"inti=0;"
(2)程序功能是將各個平方根值放入數(shù)組中。
#include
voidmain()
{
intmax,a,i;
scanf("%d%d",max,a);
doublex[max];
14、
for(i=0;i"
②"scanf("%d%d",max,a);"應(yīng)為"scanf("%d%d",&max,&a);"
③"doublex[max];"改為:
"double*x=newdouble[max];"
…
"delete[]x;"
四、(8分)下列shape類是一個表示形狀的抽象類,area()為求圖形面積的函數(shù),total()則是一個通用的用以求不同形狀的圖形面積總和的函數(shù)。請從shape類派生三角形類(triangle)、矩形類(rectangle),并給出具體的求
15、面積函數(shù)
classshape{
public:
virtualfloatarea()=0;
};
floattotal(shape*s[],intn)
{
floatsum=0.0;
for(inti=0;iarea();
returnsum;
}
classTriangle:publicShape
{
public:
Triangle(doubleh,doublew){H=h;W=w;}
doubleArea()const{returnH*W*0.5;}
private:
doubleH,W;
};
classRe
16、ctangle:publicShape
{
public:
Rectangle(doubleh,doublew){H=h;W=w;}
doubleArea()const{returnH*W;}
private:
doubleH,W;
};
五、(6分)完成順序查找函數(shù)f_seq()。其過程是:從表頭開始,根據(jù)給定的模式,逐項(xiàng)與表中元素比較。如果找到所需元素,則查找成功,并打印出它在表中的順序號。如果查找整個表仍未找到所需對象,則查找失敗
#include
voidf_seq(char*list[],char*object,intlen)
//li
17、st指針數(shù)組,指向字符串
//object模式串
//len表的長度
{
char**p;
intstrcmp(char*s,char*t);
p=list;
while(_____①______)//p
18、*t;s++,t++)
if(*s==\0)
return(0);
return(_____③______);//s-t或*s-*t或1
}
六、(8分)完成使鏈表逆置函數(shù)reverse,若有鏈表:
鏈表結(jié)點(diǎn)的結(jié)構(gòu)如下:
structnode
{
intnum;
structnode*next;
}
structnode*reverse(structnode*head)
//head鏈表頭結(jié)點(diǎn)
{
structnode*p,*temp1,*temp2;
if(head==NULL____①____)returnhead;//||head->next==NULL
p=head->next;head->next=NULL;
while(____②____)//p!=NULL或p
{
temp1=head;
____③____;//head=p;
temp2=p;
p=p->next;
____④____;//temp2->next=temp1;或head->next=temp1;
}//Matchwhilestatenment
returnhead;//返回逆置后的鏈表的頭結(jié)點(diǎn)
}
專心---專注---專業(yè)