自考C試題及答案(11套合集)_第1頁
自考C試題及答案(11套合集)_第2頁
自考C試題及答案(11套合集)_第3頁
自考C試題及答案(11套合集)_第4頁
自考C試題及答案(11套合集)_第5頁
已閱讀5頁,還剩177頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

全國2008年10月自學考試C++程序設計試題

課程代碼:04737

一、單項選擇題(本大題共20小題,每小題1分,共20分)

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

A.C++兼容CB.C++部分兼容CD.C兼容C++

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

A.cerrB.cinC.coutD.cfile

(cerr:標準錯誤輸出(非緩沖方式);cin:標準輸入;

clog標準錯誤輸出(緩沖方式))

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

A.freeB.createC.deleteD.realse

4.如沒有使用private關鍵字定義類的數(shù)據(jù)成員,則默認為(A)

A.privateB.publicC.protectedD.friend

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

A.形參是實參的備份B.實參是形參的備份C.形參和實參是同一對象D.形參和實參無

聯(lián)系

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

A.其之前所有參數(shù)都必須賦值B.其之后所有參數(shù)都必須賦值C.其前、后所有參數(shù)都必須

賦值D.其前、后所有參數(shù)都不必賦值

7.設存在函數(shù)intmax(int,int)返回兩參數(shù)中較大值,若求22,59,70三者中最大值,

下列表達式不正確的是(C)

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

max(22,59,70);

D.intm=max(59,max(22,70));

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

A.函數(shù)體語句較多B.函數(shù)體語句較少C.函數(shù)執(zhí)行時間較短D.函數(shù)執(zhí)行時間過長

9.intFunc(int?int);不可與下列哪個函數(shù)構成重載(B)

A.intFunc(int,int,int);B.doubleFunc(int,int);

C.doubleFunc(double,double);D.doubleFunc(int,double);

說明:不能以形參名來區(qū)分函數(shù);不能以

函數(shù)返回值來區(qū)分函數(shù)。必須是形參的個

數(shù)或者類型不同才能構成函數(shù)重載。

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

A.屬于全局變量B.只屬于該類C.屬J-該類,某些情況卜也可被該類不同實例所共享

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

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

A.通過子類的對象訪問B.本類及子類的成員函數(shù)中C.通過該類對象訪問D.本類的

成員函數(shù)中

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

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

B.這個類沒有構造函數(shù)C.這個類不需要構造函數(shù)D.該類不能通過編譯

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

A.0個B.1個C.至少一個D.0個或多個

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

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

B.保證每個對象擁有自己的數(shù)據(jù)成員,但共享處理這些數(shù)據(jù)成員的代碼

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

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

A.類本身的成員函數(shù)只能訪問自身的私有成員B.類的對象只能訪問該類的公有成員

C.普通函數(shù)不能直接訪問類的公有成員,必須通過對象訪問D.一個類可以將另一個類的

對象作為成員

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

A.#includeB.SdefineC.#ifD.#else

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

A.A類構造函數(shù)先執(zhí)行B.成員構造函數(shù)先執(zhí)行C.兩者并行執(zhí)行D.不能確定

類的組合,描述的是一個類內嵌其他類的對象作為成員的情況,它們之間的關系是一種包含

與被包含的關系。

在聲明一個組合類的對象時,不僅它自身的構造函數(shù)將被調用,而且還將調用其內嵌對象的

構造函數(shù)。這時構造函數(shù)的調用順序是:

(1)按照內嵌對象在組合類的聲明中出現(xiàn)的次序,依次調用內嵌對象的構造函數(shù);

(2)執(zhí)行本類構造函數(shù)的函數(shù)體

析構函數(shù)的調用執(zhí)行順序與構造函數(shù)剛好相反。

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

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

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

說明:靜態(tài)成員函數(shù)可以直接訪問該類的靜態(tài)數(shù)據(jù)和函數(shù)成員,而訪問非靜態(tài)成員,必須通

過參數(shù)傳遞方式得到對象名,然后通過對象名來訪問。

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

A.友元是本類的成員函數(shù)B.友元不是本類的成員函數(shù)C.友元不是函數(shù)D.友元不能訪問

本類私有成員

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

A.public和privateB.publicftlprotectedC.protected和privateD.{X.protected

二、填空題(本大題共20小題,每小題1分,共20分)

請在每小題的空格中填上正確答案。錯填、不填均無分。

21.設要把一個文件輸出流對象myFile與文件“f:\myText.txt相關聯(lián),所用的C++語句

是:myFile.open("f:\\myText.txt");。

22.C++中ostream類的直接基類是ios類。

23.運算符[]只能用成員運算符來重載,不能用友元運算符來重載。

24.定義虛函數(shù)所用的關鍵字是virtual。25.vector類中用于返回向量中第1個對象的方

法是front()o

26.在C++中,利用向量類模板定義一個具有20個char的向量E,其元素均被置為字符

't',實現(xiàn)此操作的語句是vector〈char>E(20,'t')。

27.類的繼承是指子類繼承基類的數(shù)據(jù)成員和成員函數(shù)。

28.不同對象可以調用相同名稱的函數(shù),但可導致完全不同的行為的現(xiàn)象稱為多態(tài)性或(類

的多態(tài)性)。

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

30.設類A有成員函數(shù)

voidFun(void);

若要定義一個指向類成員函數(shù)的指針變量pafn來指向Fun,該指針變量的聲明語句是:

void(A::*pafn)(void);。

31.設在程序中使用如下語句申請了一個對象數(shù)組:

Point*ptr=newPoint[2];

則在需要釋放ptr指向的動態(tài)數(shù)組對象時,所使用的語句是de在te[

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

33.類A有如下成員函數(shù)

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

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

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

為工。

34.對象傳送的消息一般由3部分組成:接收對象名、調用操作名和必要的參數(shù)。

35.將指向對象的指針作為函數(shù)參數(shù),形參是對象指針,實參是對象的地址值。

36.在使用string類的find成員函數(shù)來檢索主串中是否含有指定的子串時,若在主串中不

含指定的子串,find函數(shù)的返回值是-1。

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

38.執(zhí)行下列代碼

inta=29,b=100;

cout<<setw(3)<<a<<b<<endl;

程序的輸出結果是:29100o

39.執(zhí)行下列代碼

cout<<"Hex:"?hex<<255;

程序的輸出結果為Hex:ffo

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

三、改錯題(本大題共5小題,每小題2分,共10分)

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

41.#include<iostream.h>

voidmain(){

intx=5,y=6;

constint*p=&x;

*P=y;

cout<<*p?endl;

)

*P=y;指針P所指向的為一常量,不能進行左值操作

42.#include<iostream.h>

classf{

private:intx,y;

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

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

};

voidmain(){

fa;

a.fl(l,1);

a.print();

)

a.fl(1,1);fl()調用時實參與形參數(shù)量不一致

43.#include<iostream.h>

classf{

private:intx=0,y=0;

public:voidfl(inta,intb){x=a;y=b;}

voidget(){cout<<x<<,<<y?endl;}

);

voidmain(){

fa;

a.fl(1,3);

a.get();

)

private:intx=0,y=0;數(shù)據(jù)成員聲明時不允許直接賦值

44.#include<iostream.h>

classpoint{private:floatx;

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

voidf(){x=0;}

friendfloatmax(point&a,point&b);

);

floatmax(point&a,pointfeb)

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

voidmain(){

pointa,b;

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

cout?a.max(a,b);

}

cout?a.max(a,b);max()不是類的成員函數(shù),不能用a.max()方式調用

45.#include<iostream.h>

template<classT>

classf{

private:Tx,y;

public:voidfl(Ta,Tb){x=a;y=b;}

Tmax(){return(x>y)?x:y;}

};

voidmain(){

fa;

a.fl(1.5,3.8);'

cout<<a.x<<a.y?a.max()<<endl;

)

cout?a.x?a.y?a.max()?endl;x,y是私有類型,不能在主函數(shù)中直接使用

四、完成程序題(本大題共5小題,每小題4分,共20分)

46.完成下面類中的成員函數(shù)的定義。

classpoint

(

private:

intm,n;

public:

point(int,int);

point(point&);

);

point::point(inta,intb)

m=a;

n二b;

}

point::point(point&t)

(

m=t.m;

n=t.n;

)

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

#include<iostream>

usingnamespacestd;

constdoublepi=3.14159;

voidmain()

(

doubler;

cout<<"r=";

cin?r;

double1=2.0*pi*r;

doubles=pi*r*r;

cout?n\nThelongis:"<<K<endl;

cout<<z,Theareais:"<<s<<endl;

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

#include<iostream>

#include<fstream>

usingnamespacestd;

classcomplex

(

public:

intreal;

intimag;

complex(intr=0,inti=0)

(

real=r;

imag=i;

}

);

complexoperator+(complex&a,complex&b)

(

intr=a.real+b.real;

inti=a.imag+b.imag;

returncomplex(r,i);

voidmain()

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

z=x+y;

cout?z.real?,/+”<<z.imag<<"i"?endl;

)

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

1,9

50,30

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

源程序如下:

#include<iostream>

usingnamespacestd;

classbase

(

private:

intm;

public:

base(){};

base(inta):m(a){}

intget(){returnm;}

voidset(inta){m=a;}

);

voidmainO

(

base*ptr=newbase[2];

ptr->set(30);

ptr=ptr+1;;

ptr->set(50);

basea[2]={L9};

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

cout<<ptr->get()<<",";

ptr=ptr-l;

cout<<ptr->get()〈<endl;

delete[]ptr;

)

50.在下面橫線處填上求兩個浮點數(shù)之差的cha函數(shù)的原型聲明、調用方法。

#include<iostream>

usingnamespacestd;

voidmain()

{

floata,b;

floatcha(float,float);//函數(shù)cha的原型聲明

a=12.5;

b=6.5;

floatc=cha(a,b);//調用函數(shù)cha

cout<<c<<endl;

)

floatcha(floatx,floaty)

(

floatw;

w=x-y;

returnw;

)

五、程序分析題(本大題共4小題,每小題5分,共20分)

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

#include<iostream.h>

template<classT>

classSample

{

Tn;

public:

Sample(Ti){n=i;}

intoperator==(Sample&);

);

template<classT>

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

if(n==s.n)

return1;

else

return0;

)

voidmain()

(

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

cout?"si與s2的數(shù)據(jù)成員”《(sl=s2V相等〃:〃不相等〃)?endl;

Sample<double>s3(2.5),s4(2.5);

cout?//s3與s4的數(shù)據(jù)成員〃?(s3==s4?〃相等〃:〃不相等〃)?endl;

)

S1與S2的數(shù)據(jù)成員不相等

S3與S4數(shù)據(jù)成員相等

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(,y',b'<<"\t"?max(nA","a")<<endl;

)75

ya

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;}

1315

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

include<iostream>

#include<string>

usingnamespacestd;

classBook{

char*title;char*author;intnumsold;

public:

Book(){}

Book(constchar*strl,constchartstr2,constintnum){

intlen=strlen(strl);

title=newchar[len+1];

strcpy(title,strl);

len=strlen(str2);

author=newchar[len+1];

strcpy(author,str2);

numsold=num;}

voidsetbook(constchar*strl,constchartstr2,constintnum)

intlen=strlen(strl);

title=newchar[len+1];

strcpy(title,strl);

len=strlen(str2);author=newchar[len+1];

strcpy(author,str2);numsold=num;

~Book(){

deletetitle;deleteauthor;

)

voidprint(ostream&output){

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

output^〈"作者:"?author?endl;

output?,,月銷售量:ff?numsold?endl;

).

};

書名:數(shù)據(jù)結構

voidmain()

作者:嚴蔚敏

Bookobjl(〃數(shù)據(jù)結構","嚴蔚敏〃,200),obj2;月銷售量:200

書名:C++程序設

objl.print(cout);計

作業(yè):李春葆

obj2.setbook(〃C++語言程序設計〃李春葆〃,210);|一?

obj2.print(cout);

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

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

#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;floatsi,s2,s3;

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

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

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

判斷三條邊能構成三角形的條件:任

意兩邊之和大于第三邊或任意兩邊之

差小于第3邊。

voidtri::settri(floatxl,floatyl,floatx2,floaty2,floatx3,floaty3)

{x.set(xl,yl);y.set(x2,y2);z.set(x3,y3);}

voidtri::test。{

sl=sqrt((x.getx()-y.getx())*(x.g

etx()-y.getx())+(x.gety()-y.gety

())*(x.gety()-y.gety()));

s2=sqrt((x.getx()-z.getx())*(x.getx()-z.getx())+(x.gety()-z.gety())*(x.gety()-z.gety()));

s3=sqrt((y.getx()-z.getx())*(y.getx()-z.getx())+(y.gety()-z.gety())*(y.gety()-z.gety()));

全國2009年1月百學考試C++程序設計試題

課程代碼:04737

-單項選擇題(本大題共20小題,每小題1分,共20分)

在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題后的括號內。錯選、多選或未

選均無分。

1.C++源程序文件擴展名為(A)

A..cppB..hC..libD..obj

2.在C++中使用流進行輸入輸出,其中專用于從鍵盤進行輸入的流是(B)

A.cerrB.cinC.coutD.cfile

3.包含自定義頭文件file.h的預處理指令是(D)

A.#define<file.h>B.ttincludefile,hC.^definefile,hD.#include*file.h*

4.用于標識十六進制前綴或后綴是(D)

A.無B.后綴L或eC.前綴零D.前綴Ox

5.設存在整型變量intx,則下列句與其它三項含義不同的是(A)

A.int*p=&x;B.int&p=x;C.int&p=x;D.int&p=x;

6.在定義類成員時,為產生封裝性,則需使用哪個關鍵字(D)

A.publicB.publishC.protectedD.private

7.設函數(shù)voidswap(int&,int&)將交換兩形參的值,如兩整型變量inta=10;intb=15;

則執(zhí)行swap(a,b)后,a、b值分別為(C)

A.10,10B.10,15C.15,10D.15,15

8.函數(shù)默認參數(shù)在函數(shù)原型中說明,默認參數(shù)必須放在參數(shù)序列的(C)

A.前部B.中部C.后部D.兩端

9.設存在函數(shù)intmin(int,int)返回兩參數(shù)中較小值,若求15,26,47三者中最小值,下列表達式中錯誤

的是(B)

A.intm=min(min(15,26),min(15,47));

B.intm=min(15,26,47);

C.intm=min(15,min(47,26));

D.intm=min(min(47,26),16);

10.下列函數(shù)不能和函數(shù)voidprint(char)構成重載的是(C)

A.intprint(int);B.voidprint(char,char);

C.intprint(char);D.voidprint(int,int);

11.在下列成對的表達式中,運算結果類型相同的一對是(D)

A.7/2和7.0/2.0B.7/2.0和7/2

C.7.0/2和7/2D.7.0/2.0和7.0/2

12.內聯(lián)函數(shù)的特點是(A)

A.減少代碼量,加快訪問速度B.減少代碼量,減緩訪問速度

C.增加代碼量,減緩訪問速度D.增加代碼量,加快訪問速度

13.類的私有成員可在何處被訪問(A)

A.本類的成員函數(shù)中B.本類及子類的成員函數(shù)中

C.通過對象名在任何位置D.不可訪問

14.類的構造函數(shù)在以下什么情況下會被自動調用(B)

A.定義成員函數(shù)時B.定義對象時

C.定義數(shù)據(jù)成員時D.定義友元函數(shù)時

15.下列關于析構函數(shù)描述正確的是(D)

A.可以重載B.函數(shù)體中必須有delete語句

C.返回類型必須是void類型D.不能指定返回類型

16.設有函數(shù)TSum(Tx,Ty){returnx+y;},其中T為模板類型,則下列語句中對該函數(shù)錯誤的使用是

(D)

A.Sum(l,2);B.Sum(3.0,2.2);C.Sum('A,,'C,);D.Sum("A","C");

17.下列哪個編譯指令屬于條件編譯指令(C)

A.ttincludeB.^defineC.#elseD.ttpragma

18.關于類的靜態(tài)成員函數(shù)描述錯誤的是(A)

A.在創(chuàng)建對象前不存在B.不能說明為虛函數(shù)

C.不能直接訪問非靜態(tài)函數(shù)D.不是對象的成員

19.如果類A被聲明成類B的友元,則(D)

A.類A的成員即類B的成員

B.類B的成員即類A的成員

C.類A的成員函數(shù)不得訪問類B的成員

D.類B不一定是類A的友元

20.派生類的對象可以訪問以下那種情況繼承的基類成員(D)

A.私有繼承的私有成員B.公有繼承的私有成員

C.私有繼承的保護成員D.公有繼承的公有成員

二、填空題(本大題共20小題,每小題1分,共20分)

請在每小題的空格中填上正確答案。錯填、不填均無分。

21.若使用標準輸出流把整型變量a的值輸出到屏幕上,實現(xiàn)此操作的C++語句是_cout?a;—。

22.C++將數(shù)據(jù)從一個對象流向另一個對象的流動抽象為“流”,從流中獲取數(shù)據(jù)的操作稱為一提取—o

23.執(zhí)行下列代碼

intb=100;cout?z,Hex:/,?hex<<b;

程序的輸出結果是_Hex:64o

24.靜態(tài)聯(lián)編所支持的多態(tài)性稱為一編譯時的多態(tài)性。

25.C++程序必須有且只有一個主函數(shù),其函數(shù)名為_main-。

26.寫出聲明一個復數(shù)對象的語句,并使該對象被初始化為2.2+1.3i,此聲明語句是_complex<double>

c(2.2,1.3);。

27.若有函數(shù)定義為:

intadd(intml=0,intm2=2,intm3=4)

{returnml+m2+m3;}

在主函數(shù)中有ints=add(l)+add(0,l)+add(0,1,2);

則執(zhí)行此語句后S的值為_15—o

28.C++中使用—inline—關鍵字說明函數(shù)為內聯(lián)函數(shù)。

29.在源程序中有宏定義:#definePI3.14,則若不想使該宏定義影響到程序的其它地方,可以使用_#undef

PI刪除該宏定義。(注:配套教材上沒有)

30.類和其它數(shù)據(jù)類型不同的是,組成這種類型的不僅可以有數(shù)據(jù),還可以有對數(shù)據(jù)進行操作的一函數(shù)。

31.有下列代碼inta=0;doubleb=0;cin?a?b;當用鍵盤輸入1.25時,b=0.25。

32.對于類Point而言,其析構函數(shù)的定義原型為「Point();。

33.對象成員構造函數(shù)的調用順序取決于這些對象在類中說明的順序,與它們在成員初始化列表中給出的順序

—無關—o

34.類的簡單成員函數(shù)是指聲明中不含_const、volatile、static關鍵字的函數(shù)。

35.與操作對象的數(shù)據(jù)類型相互獨立的算法稱為—范型算法—o

36.從一個或多個以前定義的類產生新類的過程稱為一派生___o

37.在vector類中向向量尾部插入一個對象的方法是_push_back()。

38.C++中用于動態(tài)創(chuàng)建對象,并返回該對象的指針的關鍵字是-。

39.C++的流類庫預定義的與標準輸出設備相聯(lián)接的流是_couto

40.執(zhí)行下列代碼

cout?noshowpoint?123.0;

程序輸出結果是—123o

三、改錯題(本大題共5小題,每小題2分,共10分)

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

41.#include<iostream.h>

classf{

private:floatx,y;

public:f(floata,floatb){x=a;y=b;}

floatmax(){return(x<y)?x:y;}//求最大值〃error應改為floatmax(){return(x>y)?x:y;}

);

main(){

fa(l.5,3.8);cout?a.max()?endl;

)

42.#include<iostream.h>

classtest{

private:intx;

public:test(inta){x=a;}

voidset(inta){x=a;}

voidget(){cout?x?endl;}

}//error缺少分號;

mainO{

consttesta(3);

a.set(5);

a.get();

)

43.#include<iostream.h>

classpoint{

private:floatx,y;

public:fl(floata,floatb){x=a;y=b;}

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

voidgetx(){cout?x?endl;}

voidgetyO{cout?y?endl;}

);

voidprint(pointa){cout?a.x?endl;"/error:應將print函數(shù)說明為point類的友元函數(shù)

main(){

pointa;

a.fl(3.0,5.0);

print(a);

)

44.#include<iostream.h>

classf{

private:intx,y;

public:fl(inta,intb){x=a;y=b;}

voidprint(){cout?x?y?endl;}

};

main(){

fa;

a.fl(L5,1.8);//error:實際參數(shù)類型與fl函數(shù)的形參類型不一致,應修改為一致。

a.print();

}

45.#include<iostream.h>

main(){

intx=6;

constint*p=x;//error:應改為constint*p=&x;

cout?*p?endl;

)

四、完成程序題(本大題共5小題,每小題4分,共20分)

46.完成下面程序,使其輸出10,并在退出運行時正確釋放分配給指針的存儲空間。

Sinclude<iostream>

usingnamespacestd;

voidmain()

(

int*a,*p;

a=newint(10);

P=_a;

cout?*p?endl;

___deletep;(或deletea;)

)

47.ttinclude<iostream>

usingnamespacestd;

classbase

(

private:intx;

public:base(inta){x=a;}

intget(){returnx;}

voidshowbase(){cout?/zx=*?x?endl;}

);

classDerived:publicbase

{private:inty;

public:Derived(inta,intb):base(a){y=b;}

voidshowderivedO

{cout??zx="z?get()<<",y="z?y?endl;}

};

voidmain()

(

baseb(3);

Derivedd(6,7);

b.showbase();

d.showderivedO;

b=d;

b.showbase();

Derivedbl(d);(或Derivedbl(6,7);或basebl(6);或basebl(d);)

bl.showbase();

base*pb=&bl;

pb->showbase();

d.showderivedO;

b.showbase();

)

輸出結果如下:

x=3

x=6,y=7

x=6

x=6

x=6

x=6,y=7

x=6

48.下面程序的運行結果如下:

B::display()

C::display()

在下劃線處填上缺少的部分。源程序如下:

#include<iostream>

usingnamespacestd;

classB

(

public:

virtualvoiddisplay(){cout?"B::display()*?endl;}

);

classC:publicB

(

public:

virtualvoid(或void)display。{cout?/*C::display()/z?endl;}

);

voidfun(B*p)

(

p->display();

)

voidmain()

Bb,*pb;

Cc;

pb=&b;

fun(pb);

pb=&c;

fun(pb);

}

49.下面程序的運行結果如下:

Thisislinel

Thisisline2

Thisisline3

在下劃線處填上缺少的部分。源程序如下:

ttinclude<iostream>

^include<fstream〉

usingnamespacestd;

voidmain()

(

fstreamfin,font;

fout.open("my?txt”,ios::out);

if(!fout.is_open())

return;

for(inti=0;i<3;i=i+l)

fout?*Thisislinezr?i+l?endl;

fout.close();

fin.open("my?txt”,ios::in);

if(!fin.is_open())

return;

charstr[100];

while(!fin.eof()(或等價答案))

(

fin.getline(str,100);

cout?str?endl;

)

fin.close();

50.在下劃線處填上缺少的部分。源程序如下:

#include<iostream>

usingnamespacestd;

template〈classT>

Tfun(Tx)

(

_T_y;

y=x*x-T(5);

returny;

)

voidmainO

(

floata=2;

cout?fun(a);

)

五、程序分析題(本大題共4小題,每小題5分,共20分)

51.請寫出myTextl.txt文本文件中的內容

#include<iostream>

#include<string>

usingnamespacestd;

#include<fstream>

voidmainO

(

ofstreammyFilel;

myFilel.open(^myTextl.txt");

cout?*EnterthedatainChineseformat(e.g.,2008,May25):"<<endl;

stringDate(^2008,January1");

stringYear=Date.substr(0,4);

intk二Date.find(",");

inti二Date,find("");

stringMonth=Date,substr(k+1,i-k-1);

stringDay=Date.substr(i+1,2);

stringNewDate=Day+""+Month+“"+Year;

myFilel?/zoriginaldate:/z?Date?endl;

myFile1?^Converteddate:z*?NewDate?endl;

myFilel.close();

)

originaldate:2008,January1

Converteddate:1January2008

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

#include<iostream>

usingnamespacestd;

classSimple

(

intx,y;

public:

Simple(){x=y=0;}

Simple(inti,intj){x=i;y=j;}

voidcopy(Simple&s);

voidsetxy(inti,intj){x=i;y=j;}

voidprint(){cout?,zx=zr?x?*,y=^?y?endl;}

};

voidSimple::copy(Simple&s)

(

x=s.x;y=s.y;

)

voidfunc(Simplesi,Simple&s2)

(

si.setxy(30,40);

s2.setxy(70,80);

)

voidmain()

(

Simpleobjl(l,2),obj2;

obj2.copy(objl);

func(objl,obj2);

objl.print();

obj2.print();

)

x=l,y=2

x=70,y=80

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

ttinclude^iostream.h"

intmain()

(

inti=17;

while(i>=10)

if(—i%4=3)continue;

else

cout?"i="?i―?endl;

)

i=16

i=14

i=12

i=10

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

#include<iostream>

usingnamespacestd;

voidmain()

(

intnum=300;

int&ref=num;

cout?ref;

ref=ref-100;

cout?^“<<num;

num=num-50;

cout<<"*?ref?endl;

}

300200150

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

55.定義堆棧類模板Stack(先進后出),棧的大小由使用者確定。要求該類模板對外提供

如下二種基本操作:

(l)push入棧(2)pop出棧,用數(shù)組來實現(xiàn)

#include<iostream>

usingnamespacestd;

template<classT,intsize>

classStack{

Tx[size];

intcurrent;

public:

Stack(){current=O;}

????push(....);

.?.?pop(....);

);

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

參考答案

#include<iostream>

usingnamespacestd;

template<classT,intsize>

classStack(

Tx[size];

intcurrent;

public:

Stack(){current=0;}

boolPush(Te);

boolPop(T&e);

);

template<classT,intsize>

boolStack<T,size>::Push(Te){〃插入新元素e為新的棧頂元素

if(current==size){〃棧滿

returnfalse;

}

x[++current]=e;

returntrue;

}//Push

template<classT,intsize>

boolStack<T,size>::Pop(T&e){〃若棧不空,刪除棧頂元素,并用e返回其值,并返回true,否則返回false

if(current=0)returnfalse;

e=x[current一];

returntrue;

}//Pop

〃測試程序,不是答案的一部分

voidmain(){

Stack<int,5>s;

s.Push(1);s.Push⑵;

inte;

if(s.Pop(e))

cout?e?endl;

else

cout<<"???<<endl;

cout<<”再次出棧,試試看?.."<<endl;

if(s.Pop(e))

cout?e?endl;

else

cout<<"棧已空"<<endl;

2009年全國自考C++程序設計模擬試卷(-)38

一、單項選擇題(本大題共20小題,每小題1分,共20分)在每小題列出的四個備選項

中只有一個是符合題目要求的,請將其代碼填寫在題后的括號內。錯選'多選或未選均

無分。

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

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

B.編輯、編譯、連接、運行

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

D.編譯、編輯、連接、運行

答案:B解析:(P21)經過編輯、編譯、連接和運行四個步驟。編輯是將C++源程序輸入計算機

的過程,保存文件名為cpp。編譯是使用系統(tǒng)提供的編譯器將源程序cpp生成機器語言的過程,

目標文件為。bj,由于沒有得到系統(tǒng)分配的絕對地址,還不能直接運行。連接是將目標文件。bj

轉換為可執(zhí)行程序的過程,結果為exe。運行是執(zhí)行exe,在屏幕上顯示結果的過程。

2.決定C++語言中函數(shù)的返回值類型的是。

A.return語句中的表達式類型

B.調用該函數(shù)時系統(tǒng)隨機產生的類型

C.調用該函數(shù)時的主調用函數(shù)類型

D.在定義該函數(shù)時所指定的數(shù)據(jù)類型答案:D解析:(P51)函數(shù)的返回值類型由定義函數(shù)時的

指定的數(shù)據(jù)類型決定的。A項的表達式的值要轉換成函數(shù)的定義時的返回類型。

3.下面敘述不正確的是()

A.派生類一般都用公有派生

B.對基類成員的訪問必須是無二義性的

C.賦值兼容規(guī)則也適用于多重繼承的組合

D.基類的公有成員在派生類中仍然是公有的答案:D解析:(P136)繼承方式有三種:公有、私

有和保護。多繼承中,多個基類具有同名成員,在它們的子類中訪問這些成員,就產生了二

義性,但進行訪問時,不能存在二義性。賦值兼容規(guī)則是指派生類對象可以當作基類對象使

用,只要存在繼承關系,所以單繼承或多繼承都適用?;愔械墓谐蓡T采用私有繼承時,

在派生類中變成了私有成員,所以D項錯誤。

4.所謂數(shù)據(jù)封裝就是將一組數(shù)據(jù)和與這組數(shù)據(jù)有關操作組裝在一起,形成一個實體,這實體

也就是。

A.類

B.對象

C.函數(shù)體

D.數(shù)據(jù)塊

答案:A解析:(P39)類即數(shù)據(jù)和操作的組合體,數(shù)據(jù)是類的靜態(tài)特征,操作是類具有

的動作。

5.在公有派生類的成員函數(shù)不能直接訪問基類中繼承來的某個成員,則該成員一定是基類中的

()

A.私有成員

B.公有成員

C.保護成員

D.保護成員或私有成員

答案:A解析:(P133)在派生類中基類的保護或者基類公有都可以直接訪問,基類的私有成員只

能是基類的成員函數(shù)來訪問。所以選擇A項。

6.對基類和派生類的關系描述中,錯誤的是()

A.派生類是基類的具體化

B.基類繼承了派生類的屬性

C.派生類是基類定義的延續(xù)

。.派生類是基類的特殊化答案:B解析:(P129)派生類的成員一個是來自基類,一個來自本身,

所以派生類是基類的擴展,也是基類的具體化和特殊化,派生類是對基類擴展。B項基類不

能繼承派生類成員,所以錯誤。

7.關于this指針使用說法正確的是()

A.保證每個對象擁有自己的數(shù)據(jù)成員,但共享處理這些數(shù)據(jù)的代碼

B.保證基類私有成員在子類中可以被訪問。

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

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

答案:A解析:(P86)this指針是隱藏的,可以使用該指針來訪問調用對象中的數(shù)據(jù)?;惖某?/p>

員在派生類中能否訪問,與繼承方式有關,與this沒有關系。所以選擇A項。

8.所謂多態(tài)性是指()

A.不同的對象調用不同名稱的函數(shù)

B.不同的對象調用相同名稱的函數(shù)

C.一個對象調用不同名稱的函數(shù)

D.一個對象調用不同名稱的對象答案:B解析:(P167)多態(tài)性有兩種靜態(tài)多態(tài)性和動態(tài)多態(tài)性,

靜態(tài)多態(tài)性是指調用同名函數(shù),由于參數(shù)的不同調用不同的同名函數(shù);動態(tài)多態(tài)性是指不同

對象調用同名函數(shù)時,由于對象不同調用不同的同名函數(shù)。多態(tài)性肯定具有相同的函數(shù)名,

所以選擇B項。

9.一個函數(shù)功能不太復雜,但要求被頻繁調用,則應把它定義為()

A.內聯(lián)函數(shù)

B.重載函數(shù)

C.遞歸函數(shù)

D.嵌套函數(shù)

答案:A解析:(P59)內聯(lián)函數(shù)特征代碼少,頻繁調用,執(zhí)行效率高。重載函數(shù)解決統(tǒng)一接口的問題;

遞歸是子程序調用,程序調用要耗費很多空間和時間,循環(huán)/迭代都比遞歸有效率得多,遞歸只是從

形式上,邏輯比較簡潔。嵌套函數(shù)即反復調用,速度較慢。所以選擇A項。

10.下面函數(shù)模板定義中不正確的是()

A.A

B.B

C.C

D.D

答案:A解析:(P147)A項中F是一個返回Q類型的值,而return中用返回類型作為返回值錯

誤。所以選擇

A項。

11.假設ClassY:publicX,即類Y是類X的派生類,則說明一個Y類的對象時和刪除Y類對象

,調用構造函數(shù)和析構函數(shù)的次序分別為()

A.X,Y;Y,X

B.X,Y;X,Y

C.Y.X;X,Y

D.Y.X;Y,X

答案:A解析:(P130)派生類構造函數(shù)必須對這三類成員進行初始化,其執(zhí)行順序:調用基類構

造函數(shù)

;調用子對象的構造函數(shù);派生類的構造函數(shù)體。析構函數(shù)在執(zhí)行過程中也要對基類和成員對象

進行操作,但它的執(zhí)行過程與構造函數(shù)正好相反,即對派生類新增普通成員進行清理;調用成員

對象析構函數(shù),對派生類新增的成員對象進行清理;調用基類析構函數(shù),對基類進行清理,所以

選擇A項。

12.適宜采用inline定義函數(shù)情況是()

A.函數(shù)體含有循環(huán)語句

B.函數(shù)體含有遞歸語句

C.函數(shù)代碼少、頻繁調用

D.函數(shù)代碼多、不常調用

答案:C解析:(P59)內聯(lián)函數(shù)具有程序代碼少、頻繁調用和執(zhí)行效率高的特征,所以選擇C項。

13.假定一個類的構造函數(shù)為A(intaa,intbb)[a=aa—;b=a*bb;},則執(zhí)行Ax(4,5);語句

,x.a和x.b的值分別為()

A.3和15

B.5和4

C.4和20

D.20和5答案:C解析:(P75)a=4,因為后減,b的值與a、bb相關,b=4*5=20,而與aa沒

有任何關系。

14.在類中說明的成員可以使用關鍵字的是()

A.public

B.extern

C.cpu

D.register

答案:A解析:extern用于聲明外部變量的。register聲明寄存器類型變量。無cpu類型。它

們都不能聲明類成員。public聲明為公有訪問權限,所以選擇A項。

15.下列不能作為類的成員的是()

A.自身類對象的指針

B.自身類對象

C.自身類對象的引用

D.另一個類的對象

答案:B解析:類的定義,如果有自身類對象,使得循環(huán)定義,B項錯誤。在類中具有自身類的

指針,可以實現(xiàn)鏈表的操作,當然也可以使用對象的引用。類中可以有另一個類的對象,即成員

對象。所以選擇B選項。

16.使用地址作為實參傳給形參,下列說法正確的是()

A.實參是形參的備份

B.實參與形參無聯(lián)系

C.形參是實參的備份

D.實參與形參是同一對象答案:D解析:(P51)地址作為實參,表示實參與形參代表同一個對

象。如果實參是數(shù)值,形參也是普通變量,此時形參是實參的備份。所以選擇D項。

17.下列程序的輸出結果是()

Sinclude<iostream.h>

voidmain()

{intn[][3]={10,20,30,40,50,60};int(*p)[3];vnp=n;

cout?p[0]E0]?z,,"?*(pE0]+1)<X",”〈<(*p)[2]?endl;}

A.10,30,50

B.10,20,30

C.20,40,60

D.10,30,60

答案:B

解析:如果數(shù)組元素都是相同類型的指針,則稱這個數(shù)組為指針數(shù)組。指針數(shù)組一般用于處理二

維數(shù)組。聲明的格式為:〈數(shù)據(jù)類型〉<(*變量名)><[元素個數(shù)]>o

P表示指向數(shù)組n的行指針。如果將指針的初始化(*p)[3]=b;地址的等價形式:

p+ipLi]*(p+i)都表示b數(shù)組第i+1行的第1個元素的首地址。

*(p+i)+jpLi]+j&p[i]Ej]都表示b數(shù)組第i+1行、第j+1列元素的地址。

值的等價形式:

*(*(p+i)+j)*(pEi]+j)pEi][j

溫馨提示

  • 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

提交評論