C++練習題(摘自自學考試)_第1頁
C++練習題(摘自自學考試)_第2頁
C++練習題(摘自自學考試)_第3頁
C++練習題(摘自自學考試)_第4頁
C++練習題(摘自自學考試)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C++程序設計練習題1

一、單項選擇題

1.對C++語言和C語言的兼容性,描述正確的是(A)

A.C++兼容cB.C+4■部分兼容C

C.C++不兼容CD.c兼容C++

2.在C++中使用流進行輸入輸出,其中用于屏幕輸出的對象是(C)

A.cerrB.cin

c.coutD.cfile

3.對使用關鍵字new所開辟的動態(tài)存儲空間,釋放時必須使用(C)

A.freeB.create

c.deleteD.realse

4.如沒有使用成員訪問權限關鍵字定義類的數據成員,則默認為(A)

A.privateB.pilbllC

C.protectedD.friend

5.使用值傳遞方式將實參傳給形參,下列說法正確的是(A)

A.形弁是實參的備份B.實參是形參的備份

C.形參和實參是同一對象D.形參和實參無聯(lián)系

6.在函數調用時,如某一默認參數要指明一個特定值,則有(A)

A.其之前所有叁數都必須st值B.其之后所有參數都必須賦值

C,其前、后所有參數都必須賦值D,其前、后所有參數都不必賦值

7.設存在函數intmax(int,int)返回兩參數中較大值,若求22,59,70三者中最大值,下列表達式不正確的是(C)

A.intm=max(22>max(59,70));B.intm=max(max(22,59),70);

m"maM22,59,7o)tD.intm=max(59,max(22,70));

8.下列哪個類型函數不適合聲明為內聯(lián)函數(A)

A.函數體語句較多B.函數體語句較少

C.函數執(zhí)行時間較短D.函數執(zhí)行時間過長

9.intFunc(int,int);不可與下列哪個函數構成重載(BC)

A.intint,int);B.doubleEunc(int?int)(

C.doubleFunc(double9double);D.doubleFunc(int>double);

10.對類中聲明的變量,下列描述中正確的是()

A.屬于全局變量B.只屬于該類

c.屬于詼類,某些情況下也可被該類不同實例所共享

D.任何情況下都可被該類所有實例共享

11.類的私有成員可在何處訪問()

A.通過子類的對象訪問B.本類及子類的成員函數中

C,通過該類對象訪問D.本類的成員函數中

12.如果沒有為一個類定義任何構造函數的情況下,下列描述正確的是()

A.編譯界總是自動創(chuàng)建一個不帶參數的構迨函數

B.這個類沒有構造函數

C.這個類不需要構造函數D.該類不能通過編譯

13.一個類可包含析構函數的個數是()

A.0個B.1個

C.至少一個D.0個或多個

14.this指針存在的目的是()

A.保證基類公有成員在子類中可以被訪問

B.保證年個對象擁有自己的數據成員,但共享處理這些數據成員的代碼

C.保證基類保護成員在子類中可以被訪問

D,保證基類私有成員在子類中可以被訪問

15.下列關于類的權限的描述錯誤的是()

A.類本身的成員函數只能訪問自身的私有成員

B.類的對象只能訪問該類的公有成員

C.普通函數不能直接訪問類的公有成員,必須通過對象訪問

D.一個類可以將另一個類的對象作為成員

16.在編譯指令中,宏定義使用哪個指令()

A.#includeB.#加自牌

C.#ifD.#else

17.設類A將其它類對象作為成員,則建立A類對象時,下列描述正確的是()

A.A類構造函數先執(zhí)行B.成員構造函數先執(zhí)行

C.兩者并行執(zhí)行D.不能確定

18.下列描述錯誤的是()

A.在創(chuàng)建對象前,靜態(tài)成員不存在B.靜態(tài)成員是類的成員

C.靜態(tài)成員函數不能是虛函數D.靜態(tài)成員函數不能直接訪問非靜態(tài)成員

19.對于友元描述正確的是()

A.友元是本類的成員函數B.友元不是本類的成員函數

C.友元不是函數D.友元不能訪問本類私有成員

20.在哪種派生方式中,派生類可以訪問基類中的protected成員()

A.public和privateB.public和protected

C.protected和privateD.僅protected

二、填空題

24.定義虛函數所用的關鍵字是—

27.類的繼承是指子類繼承基類的—成員地—和成員函數。

28.不同對象可以調用相同名稱的函數,但可導致完全不同的行為的現(xiàn)象稱為—多彩

29.指令指示編譯器將一個源文件嵌入到帶該指令的源文件之中。

30.設類A有成員函數voidFun(void);若要定義一個指向類成員函數的指針變量pafn來指向Fun,

該指針變量的聲明語句是:void(A::*palnXvo>>l):。

31.設在程序中使用如下語句申請了一個對象數組:Point*ptr=newPoint|2|;

則在需要釋放ptr指向的動態(tài)數組對象時,所使用的語句是_dd“e即":_。

32.在保護派生中,基類權限為Private的成員在派生類中—不可訪問

33.類A有如下成員函數

intA::fun(doublex){return(int)x/2;}

intA::fun(intx){returnx*2;}

設a為類A的對象,在主函數中有ints=a.fun(6.0)+a.fun(2),則執(zhí)行該語句后,s的值為7.

34.對象傳送的消息一般由3部分組成:接收對象名、調用操作名和—參數

35.將指向對象的指針作為函數參數,形參是對象指針,實參是對象的_獻_。

37.在C++中,聲明布爾類型變量所用的關鍵字是

40.C++語言中可以實現(xiàn)輸出一個換行符并刷新流功能的操控符是_姬_。

三、改錯題(下面的類定義中有一處錯誤,請用下橫線標出錯誤所在行并給出修改意見)

41.#include<iostream.h>

voidmain(){

intx=5,y=6;

constint*p=&x;

廿二〃修改慧見;去掉本句或去掉上句中的const

cout?*p?endl;

)

42.#include<iostream.h>

classf{

private:intx,y;

public:fl(){x=0;y=0;}

print(){cout?x?,,?y?endl;}

};

voidmain(){

fa;

a.flU,1):,"修改意見:本句改為a.fl。:改修改成員函數11的定義

a.print();

44.#lnclude<iostream.h>

classpoint{

private:floatx;

public:voidf(floata){x=a;}

voidf(){x=0;}

friendfloatmax(point&a,point&b);

}?

floatmax(point&a,point&b)

{return(a.x>b.x)?a.x:b.x;}

voidmain(){

pointa,b;

a.f(2.2);b.f(3.3);

cout?a.max(a.bh〃修改為,cout?max(a,b”

四、完成程序題

46.完成下面類中的成員函數的定義。

classpoint

(

private:intm,n;

public:

point(int?int);

point(point&);

)s

point::point(inta,intb)

(

m=a;n=b:

)

point::point(point&t)

{

m=t.m;n=t.n;

)

47.下面是一個輸入半徑,輸出其面積和周長的CX?程序,在下劃線處填上正確的語句。

#include<iostream>

usingnamespacestd;

constdoublepi=3.14159;

voidmain()

doubler;

cout?/,r=";

_cin>>r_;

doublel=2.0*pi*r;

doubles=pi*r*r;

coutw"\nThelongis:"?l?endl;

coutvv"Theareais:"?s?endl;

)

48.在下劃線處填上缺少的部分。

#include<iostream>

usingnamespacestd;

classcomplex

(

public:

intreal;

intimag;

complex(intr=0,inti=0)

(

real=r;

imag=i;

)

);

complexoDerator+(fonwicx&a,complex&b)

(

intr=a.real+b.real;

inti=aJmag+b.imag;

retucomplexy-:

}

voidmain()

(

complexx(l,2),y(3,4),z;

z=x+y;

cout?z.real?w+"?z.imag?z/i"?endl;

)

49.程序的輸出結果如下:

1,9

50,30

請根據輸出數據在下面程序中的下劃線處填寫正確的語句。

源程序如下:

#include<iostream>

usingnamespacestd;

classbase

(

private:

public:

base(){};

base(inta):m(a){}

intget(){returnm;}

voidset(inta){m=a;}

);

voidmain()

{base*ptr=newbase|2|;

ptr->set(30);

ptr=ptr+l;

ptr->set(50);

basea[2]={l,9};

cout?a[0].get()?,z,"?a|l|.get()?endl;

cout?ptr->get()?,r,";

ptr=ptr-l;

cout?ptr->gct()?endl;

delete||ptr;

)

五、程序分析題

51.給出下面程序的輸出結果。

#include<iostream.h>

template〈classT>

classSample

(

Tn;

public:

SampIe(Ti){n=i;}

intoperator==(Sample&);

);

template<classT>

intSample<T>::operator==(Sample&s)

(

if(n=s.n)return1;

elsereturn0;

)

voidmain()

(

Sample<int>sl(2),s2(3);.

cout?z,si與s2的數據成員"?(sl=s2?〃相等〃:〃不相等")vvendl;

Sample<long>s3(25),s4(25);

cout?ws3與s4的數據成員"?Cs3=s4?"相等":"不相等")vvendl;

)

52.給出下面程序的輸出結果。

#include<iostream>

usingnamespacestd;

template<classT>

Tmax(Tml,Tm2)

{return(ml>m2)?ml:m2;}

voidmain(){

cout?max(L7)?"\t"?max(2.0,5.0)?endl;

cout?max(zyf/b,)vv"\t"?max(,zA","a")?endl;

)

53.給出下面程序的輸出結果

#include<iostream>

usingnamespacestd;

classA{

public:

intx;

A(){)

A(inta){x=a;}

intget(inta){returnx+a;}

};

voidmain(){

Aa(8);

int(A::*p)(int);

p=A::get;

cout?(a.*p)(5)?endl;

A*pi=&a;

cout?(pi->*P)(7)?endl;

}

54.給出下面程序的輸出結果。

include<iostream>

#include<string>

usingnamespacestd;

classBook{

char*title;

char*author;

intnumsold;

public:

Book(){}

Book(constchar*strLconstchar*str2,constintnum)

(

intlen=strlen(strl);

title=newchar|len+l|;

strcpy(title,strl);

len=strlen(str2);

author=newchar|len+l|;

strcpy(author,str2);

numsold=num;

)

voidsetbook(constchar*strl,constchar*str2,constintnum)

(

intlen=strlen(strl);

title=newchar[len+l|;

strcpy(title,strl);

len=strlen(str2);

author=newchar|len+l|;

strcpy(author,str2);

numsold=num;

}

?Book(){

deletetitle;

deleteauthor;

)

voidprint(ostream&output){

output?,z書名:"?title?endl;

output?/,作者:,f?author?endl;

output?,/月銷售量:"?numsold?endl;

}

};

voidmain(){

Bookobjl(,/數據結構",〃嚴蔚敏",200),obj2;

objl.print(cout);

obj2.setbook(z,C++語言程序設計","李春葆",210);

obj2.print(cout);

}

六、程序設計題(本大題共1小題,共10分)

55.在三角形類TRI實現(xiàn)兩個函數,功能是輸入三個頂點坐標判斷是否構成三角形

#include<iostream.h>

#include<math.h>

classpoint{

private:floatx,y;

public:point(floata,floatb)

{x=a;y=b;}

point(){x=0;y=0;}

voidset(floata,floatb){x=a;y=b;}

floatgetx(){returnx;}

floatgety(){returny;}

};

classtri{

pointx,y,z;

floatsL§2,s3;

public:???settri(....);//用于輸入三個頂點坐標

???.test(???.);//用于判斷是否構成三角形

請寫出兩個函數的過程(如果需要形式參數,請給出形參類型和數量,以及返回值類型)

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

C++程序設計練習題2

一、單項選擇題

1.編寫C++程序一般需經過的幾個步驟依次是()

A.編譯、編輯、連接、調試B.編輯、編譯、連接、調試

C.編譯、調試、編輯、連接D.編輯、調試、編譯、連接

2.函數調用func((expl,exp2),(exp3,exp4,exp5))中所含實參的個數為()

A.lB.2

C.4D.5

3.假定AB為一個類,則執(zhí)行“ABaQ),b[3],*p[4]語句時共調用該類構造函數的次數為()

A.3B.4

C.5D.9

4.假定AB為一個類,px為指向該類的一個含有n個對象的動態(tài)數組的指針,則執(zhí)行"delete[]px;”語句時共調

用該類析構函數的次數為()

A.OB.1

D.n+l

5.如果表達式++a中的“++”是作為成員函數重載的運算符,若采用運算符函數調用格式,則可表示為()

A.a.operator++(l)B.operator++(a)

C.operator-H-(a,l)D.a.operator-H-()

6.繼承機制的作用是()

A.信息隱藏B.數據封裝

c.定義新類D.數據抽象

7.以下哪個基類中的成員函數表示純虛函數?()

A.virtualvoidvf(int);B.voidvf(int)=0;

C.virtualvoidvf()=O;D.virtualvoidyf(int){}

8.假定一■個類的構造函數為"A(intaa,intbb){a=aa;b=aa*bb;}”,貝愀行"Ax(4,5);”語句后,x.a和x.b的值分

別為()

A.4和5B.5和4

C4和20D.20和5

9.一個類的靜態(tài)數據成員所表示屬性()

A.是類或對象的屬性B.只是對象的屬性

c.只是類的屬性D.是類和友元的屬性

10.一個C++源程序文件的擴展名為()

A..hB..c

C..cppD..cp

二、填空題

11.重載操作符時,應聲明為—函數。

12.在C++中,編譯指令都是以—#(符號)開始。

14.C++支持兩種多態(tài)性,編譯時的多態(tài)性和__運行一時的多態(tài)性。

15.假定用戶為類AB定義了一個構造函數“AB(intaa=0):a(aa){}",則定義該類的對象時,可以有—2種不同

的定義格式。

16.若p指向X,則_*p與x的表示是等價的。

18.當函數參數表用___保留字表示時,則表示該參數表為空。

19.每個對象都是所屬類的二b___實例_

20.作為類的成員函數重載一個運算符時,參數表中只有一個參數,說明該運算符有—?一個操作數。

-本套試題共分6頁,當前頁是第I頁-

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

三、改錯題

21.假定要求下面程序輸出“d=800,f=60”,在第5-20行中存在著三條語句錯誤,請指出錯誤語句的行號并改正。

#include<iostream.h>

classA{//I行

inta[10];intn;〃2行

public:〃3行

A(intaa[],intnn):n(nn){〃4行

for(inti=0;i<n;i++)aa[i]=a[i];"5行修改為,for(inti=0;i<n;i++)a[i]=aa[i];

)〃6行

intGet(inti){returna[i];}〃7行

intSumA(intn);〃8行

};〃9行

intA::SumA(intn){〃10行

ints=0;〃11行

for(intj=0;j<n;j-H-)s+=a[j];〃12行

returns;〃13行

)〃14行

voidmain(){〃15行

inta[]={2,5,8,10,15,20};〃16行

Ax(a,6);〃17行

intd=l;//18行

for(inti=0;i<4;i-H-)d*=x.a[i];"19行修改為,for(inti=0;i<4;i++)d*=x.Get(i);

intf=SumA(6);行修改為,intf=x.SumA(6);

cout?Md=n?d<<,/;//21行

cout?Mf=M?f?endl;〃22行

}〃23行

22.下面程序段第4到7行中存在著三條語句的語法錯誤,請指出錯誤語句的行號并改正.

classA{〃1行

inta,b;〃2行

constintc;〃3行

public〃4行

A0:c(0);a(0);b(0){)行“A():c(0),a(0),b(0){}

A(intaa,intbb)c(aa+bb);{a=aa;b=bb;}〃6行->A(intaa,intbb):c(aa+bb){a=aa;b=bb;}

};〃7行

Aa,b(l,2);〃8行

A*x=&a,&y=b;〃9行

A*z=nevvA,w[10];//io行6A*z=newA;

四、程序填空題(請按提示要求完成以下程序段的填空)

23.在下面一段類定義中,Derived類公有繼承了基類Base。需要填充的函數由注釋內容給出了功能.

classBase

{

private:intmeml,mem2;〃基類的數據成員

public:Base(intml,intm2){meml=ml;mem2=m2;}

voidoutput(){cout?meml?,,?mem2?,,;}

//...

?本套試題共分6頁,當前頁是第2頁.

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

classDerived:publicBase

{

private:

intmem3;〃派生類本身的數據成員

public:

〃構造函數面ml和m2分別初始化meml和mem2,由m3初始化mem3

Derived(intml,intm2,intm3);

/施出meml,mem2和mem3數據成員的值

voidoutput(){

(i):cout?mem3?endl;

}

//...

};

Derived::Derived(intml,intm2,intm3):⑵{⑶;}

需要補充的語句為:

(1)Basc::output()(2)Basc(ml,m2)(3)mem3=m3;

24.classA{

inta,b;

public:

(4)〃定義構造函數,使參數aa和bb的默認值為0,

{a=aa;b=bb;}/底函數體中用aa初始化a,用bb初始化b

};

main(){

A*pl,*p2;

⑸;〃調用無參構造函數生成由pl指向的動態(tài)對象

(6);〃調用帶參構造函數生成由p2指向的動態(tài)對象,

〃使a和b成員分別被初始化為4和5

}

需要補充的語句為:

(4)A(intaa=0,intbb=O)(5)pl=newA;(6)p2=newA(4,5);

25.已知一個類的定義如下:(假設類的成員函數已實現(xiàn))

#include<iostream.h>

classAA{

inta[10];

intn;

public:

voidSetA(intaa[|9intnn);//用數組aa初始化數據成員a,

〃用nn初始化數據成員n

intMaxAO;〃從數組a中前n個元素中查找最大值

voidSortA();〃采用選擇排序的方法對數組a中前n個元素

〃進行從小到大排序

voidInsertA();//采用插入排序的方法對數組a中前n個元素進行從小到大排序

voidPrintA();〃依次輸出數組a中的前n個元素

〃最后輸出一個換行

);

使用該類的主函數如下:

voidmain()

?本套試題共分6頁,當前頁是第3頁?

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

inta[10]={23,78,46,55,62,76,90,25,38,42};

AAx;

J2L;

intm=(8);

J91;

cout?m?endl;

}

該程序運行結果為:

237846556276

78

需要補充的語句為?

(7)x.Seta(a,6);(8)x.MaxA()(9)x.PrintA()

五、程序分析題(閱讀以下程序,寫出其運行結果)

26.當從鍵盤上輸入9.98時,寫出下面程序的執(zhí)行結果。

#include<iostream.h>

voidmain()

{

inta,b;

charch;

cin?a?ch?b;//從鍵盤上輸入9.98

cout?a?endl?b?endl;

)

27.#include<iostream.h>

classaa{

public:

virtualintfunc(){return0;}

);

classtest:publicaa{

public:

intfunc(){return58;}

);

voidmain(){

testd;

aa<&b=d;

cout?b.func()?endl;

cout?b.aa::func()?endl;

}

28.#include<iostream.h>

classmyclass{

public:

intnumber;

voidset(inti);

);

-本套試題共分6頁,當前頁是第4頁-

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

intnumber=8;

voidmyclass::set(inti)

(

number=i;

)

voidmain()

(

myclassmyl;

intnumber=20;

myl.set(6);

cout?myl.number?endl;

myl.set(number);

cout?myl.number?endl;

myl.set(::number);

cout?myl.number?endl;

)

29.#include<iostream.h>

classa

(

public:virtualvoidprint(){cout?”thisisclassaprinting.n?endl;};

};

classb:publica

(

public:voidprint(){};

};

classc:publicb

(

public:voidprint(){cout?nthisisclasscprinting.M?endl;}

);

voidshow(a&aa)

(

aa.print();

)

voidmain()

{

aa;bb;cc;

show(a);

show(b);

show(c);

}

30.#include<iostream.h>

classDate

(

intYear,Month,Day;

public:

Date(inty=2001,intm=l,intd=l){Year=y;Month=m;Day=d;}

voidPrintDate(){cout?Year?n/M?Month?M/M?Day?endl;}

?本套試題共分6頁,當前頁是第5頁?

摘自:全國2008年1月高等教育自學考試面向對象程序設計試題

classTime

{

intHoure,Minutes,Seconds;

public:

Time(inth=5,intm=30,ints=0){Houre=h;Minutes=m;Seconds=s;}

voidPrintTime(){cout?Houre?H:H?Minutes?n:H?Seconds?endl;}

};

classDate_Time:publicDate,publicTime

{

public:

Date_Time(){};

Date_Time(inty,intmo,intd9inth=O,intmi=0,ints=0):

Date(y,mo,d),Time(h,mi,s){}

voidPrintDate_Time(){PrintDate();PnntTime();}

};

voidmain()

{

Date_Timea,b(2002,10,l,6,20,0),c(2003,3,8,6,7);

a.PrintDate_Time();

b.PrintDate_Time();

c.PrintDate_Time();

}

31.#include<iostream.h>

voidf2(int<&x,int<&y)

(

intz=x;x=y;y=z;

)

voidmain()

(

intx=10,y=26;

cout?Mx,y=M?x?n,M?y?endl;

f2(x,y);

cout?Mx,y=M?x?M,n?y?endl;

X-H-;yr

&(y,x);

cout?Mx,y=M?x?n,M?y?endl;

)

-本套試題共分6頁,當前頁是第6頁-

2007年10月自考面向對象程序設計試題

C++程序設計練習題3

一、單項選擇題

1.以下說法中正確的是()

A.C++程序總是從第一個定義的函數開始執(zhí)行

B.c++Sff總是從main函數開始執(zhí)行

C.C++函數必須有返回值,否則不能使用函數

D.C++程序中有調用關系的所有函數必須放在同一個程序文件中

2.以下關于函數模板敘述正確的是()

A.函數模板也是一個具體類型的函數

B.函數模板的類型參數與函數的參數是同一個概念

c.iB過使用不同的類型參數,函數模板可以生成不同類型的函數

D.用函數模板定義的函數沒有類型

3.在重載一個運算符時,其參數表中沒有任何參數,這表明該運算符是()

A.作為友元函數重載的1元運算符

B.作為成員函數重我的I元運算符

C.作為友元函數重載的2元運算符

D.作為成員函數重載的2元運算符

4.構造函數不具備的特征是()

A.構造函數的函數名與類名相同

B.構造函數可以重載

C.構造函數可以設置默認參數

D.構造函數必須指定類型說明

5.在C++中,封裝是借助什么達到的()

A.結構B.數組

c類D.函數

6.在哪種情況下適宜采用inline定義內聯(lián)函數?()

A.函數體含有循環(huán)語句B.函數體含有遞歸語句

c.函數代嗎少、頻繁調用D.函數代碼多、不常調用

7.在關鍵字public后面定義的成員為類的()

A.私有成員B.公用成員

C.保護成員D.任何成員

8.以下哪個基類中的成員函數表示純虛函數?()

A.virtualvoidtt()=O:B.voidtt(int)=0;

C.virtualvoidtt(int);D.virtualvoidtt(int){}

9.假定AA是一個類,"AA*abc()const;”是該類中一個成員函數的原型,若該函數返回this值,當用x.abcO

調用該成員函數后,x的值()

A.已經被改變B.可能被改變

c.不變D.受到函數調用的影響

10.C++對C語言作了很多改進,即從面向過程變成為面向對象的主要原因是()

A.增加了一些新的運算符

B.允許函數重載,并允許設置缺省參數

C.規(guī)定函數說明符必須用原型

D.引進了類和對象的柢含

-本套試題共分8頁,當前頁是第1頁-

2007年10月自考面向對象程序設計試題

二、填空題

11.如果一個派生類只有一個唯一的基類,則這樣的繼承關系稱為_單繼承一。

12.C++支持兩種多態(tài)性:__編譯——時的多態(tài)性和運行時的多態(tài)性。

14.所有模板都以template關鍵字和一個__類型弁數__表開頭。

15.若一個函數的定義處于調用它的函數之前,則在程序開始可以省去該函數的—下虬_語句。

16.類型轉換函數沒有返回值類型,而且參數表為—空?

17.C+銀供的預處理命令有嵌入指令,條件編譯指令和_定定義指缸

18.對象將其大部分實現(xiàn)細節(jié)隱藏起來,這種機制稱為_信息隱蔽_。

19.定義類動態(tài)對象數組時,其元素只能靠自動調用該類的—承造函虬—來進行初始化。

20.在函數體之前加一co.,sl—關鍵字可以防止函數誤操作改變數據成員的值。

三、改錯題(本大題共2小題,每小題6分,共12分)

21.下面是分數類fract的定義及測試主程序,在類定義及其友元函數定義中1到6行中有三處錯誤,更正

錯誤后程序應顯示41/28,請指出錯誤所在行的行號并給出改正意見。

classfract{

intden;〃分子

intnum;〃分母

public〃i行

fract(intd=0,intn=l):den(d),num(n){}〃2行

friendfract&opcrator+=(fract,fract&);〃3行

voidshow(){cout?den?f/'?num;}〃4行

};〃5行

friendfract&operator+=(fractfl,fractf2)〃6行

{〃7行

fl.den=fl.den*f2.num+fl.num*f2.den;〃8行

fl.num*=f2.num;〃9行

returnfl;〃10行

}

voidmain(){

fractfr(3,4);

fr+=fract(5,7);

fr.shovv();

)

錯誤行的行號為一!_____、―3一和一6—_o

分*另0己攵1E為J__public:__、___friendfract&operator+=(fract&,fract&);_

^13____friendfract&operator+=(fract&fl,fr我ct&f2);_______o

22.下面程序段第13-17行中存在著三條語句錯誤,請指出錯誤語句的行號并說明原因。

classA{〃1行

inta;〃2行

public:〃3行

A(intaa=0):a(aa){)〃4行

};〃5行

classB{〃6行

inta,b;〃7行

constintc;〃8行

-本套試題共分8頁,當前頁是第2頁-

2007年10月自考面向對象程序設計試題

Ad;〃9行

public:〃10行

B():c(0){a=b=0;}//II行

B(intaa,intbb):d(aa+bb){〃12行

a=aa;b=bb;c=aa-bb;〃13行應去掉c=aa-bb;

)〃14行

)〃”行應加上分號(;)

Ba,b(l,2);〃16行

Bx=a,y(b),z(l,2,3);〃17行z的定義可以是41,2);

錯誤行的行號為_13____、_____和_____17____o

錯誤原因分別為_常成員變量只能用初始化表的方式初始化_、_沒有分號_和__Z定義錯誤__O

四、程序填空題(請按提示要求完成以下程序段的填空)

23.在下面一段類定義中,Derived類是由直接基類Base1和Base2所派生的,Derived類包含有兩個間

接基類BaseBase,在初始化函數Init中,需要把xl和x2的值分別賦給屬于基類Basel的x成員和屬于

基類Basel的x成員。

classBaseBase{

protected:

intx;

public:

BaseBaseO{x=1;}

);

classBasel:publicBaseBase{

public:

Basel(){}

);

classBase2:publicBaseBase{

public:

Base2(){}

);

classDerived:_(1)_

{

public:

Derived(){}

voidInit(intxl,intx2){

一(2)一;

一⑶一;

)

voidoutput(){cout?Basel::x?,,?Base2::x?endl;}

);

需要補充的語句為:

(1)publicBasci,publicBasc2(2)Bascl::x?xl;(3)Basc2::x=x2;

24.#include<iostream.h>

#include<stdlib.h>

classA{

-本套試題共分8頁,當前頁是第3頁-

2007年10月自考面向對象程序設計試題

int*a;intn;

intMaxLen;

public:

A():a(0),n(0),MaxLen(O){}

A(int*aa,intnn,intMM){

n=nn;

MaxLen=MM;

if(n>MaxLen)exit(l);

a=newint|MaxLen];

(4);〃以i為循環(huán)變量把aa數組中每個元素值

//傳送給a數組的對應元素中

}

~A();

intGetValue(inti){returna[i];}〃函數體返回a[i]的值

);

(5)//析構函數的類外定義

voidmain()

{

intb|10|={l,2,3,4,5,6,7,8,9,10);

Ar(b,10,10);

inti,s=0;

(6);〃以i為

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論