2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)_第1頁
2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)_第2頁
2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)_第3頁
2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)_第4頁
2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2021年吉林省松原市全國計算機等級考試C++語言程序設計真題(含答案)學校:________班級:________姓名:________考號:________

一、1.選擇題(10題)1.派生類的構造函數(shù)的成員初始化列表中,不能包含()。

A.基類的構造函數(shù)B.派生類中子對象的初始化C.基類中子對象的初始化D.派生類中一般數(shù)據(jù)成員的初始化

2.以下非法的賦值表達式是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

3.執(zhí)行下面程序中的輸出語句后,a的值是main(){inta;cout<<(a=3*5,a*4,a+5);}

A.65B.20C.15D.10

4.可以用P.a的形式訪問派生類對象P的基類成員a,其中a是()。

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

5.下列關于運算符重載的敘述中,錯誤的是()。

A.有的運算符可以作為非成員函數(shù)重載

B.所有的運算符都可以通過重載而被賦予新的含義

C.不得為重載的運算符函數(shù)的參數(shù)設置默認值

D.有的運算符只能作為成員函數(shù)重載

6.為使程序的輸出結果為:Base::fun那么應在下列程序畫線處填入的正確語句是()。#include<iostream>usingnamespacestd;classBase{public:voidfun(){cout<<"Base::fun"<<end1;}};classDerived:publicBase{public:voidfun(){cout<<"Derived::fun"<<end1;}};intmain(){Basea,*pb;Derivedb;_________;pb->fun();//調用基類的成員函數(shù)fun()return0;}

A.pb=&aB.pb=bC.pb=&bD.pb=&Base

7.下列關于線性鏈表的描述中正確的是()

A.存儲空間不一定連續(xù),且各元素的存儲順序是任意的

B.存儲空間不一定連續(xù),且前件元素一定存儲在后件元素的前面

C.存儲空間必須連續(xù),且各前件元素一定存儲在后件元素的前面

D.存儲空間必須連續(xù),且各元素的存儲順序是任意的

8.下面程序的輸出結果是()。#include<iostream>usingnamespacestd;voidswap(intx[2]){intt;t=x[0];x[0]=x[1];x[1]=t;}voidmain(){inta[2]={4,8};swap(a);cout<<a[0]<<""<<a[1];}

A.48B.84C.44D.88

9.在結構化方法中,用數(shù)據(jù)流程圖(DFC)作為描述工具的軟件開發(fā)階段是()。

A.可行性分析B.需求分析C.詳細設計D.程序編碼

10.以下程序的正確運行結果是()。#include<iostream.h>intf(int);voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<f(a)<<"";cout<<endl;}intf(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}

A.777B.71013C.7911D.789

二、單選題(13題)11.下列對重載函數(shù)的描述中,錯誤的是()。

A.重載函數(shù)中不允許使用默認參數(shù)

B.重載函數(shù)中編譯是根據(jù)參數(shù)表進行選擇的

C.不要使用重載函數(shù)來描述毫不相干的函數(shù)

D.構造函數(shù)重載將會給初始化帶來多種方式

12.程序段“intx=12;doubley=3.141593;printf(”%d%8.6f",X,y);”的輸出結果是()。

A.123.141593B.123.141593C.12,3.141593D.123.1415930

13.下列程序的運行結果為()。

#include<iostream.h>

template<classTT>

classFF

{TTa1,a2,a3;

public:

FF(TTb1,TTb2,TTb3){a1=b1;a2=b2;a3=b3;}

TTSum(){returna1+a2+a3;}};

voidmain()

{FF<int>x(int(1.1),2,3),y(int(4.2),5,6);

cout<<x.Sum()<<''<<y.Sum()<<endl;}A.A.6.115.2B.615C.615.2D.6.115

14.下列關于類定義的說法中,正確的是()。

A.類定義中包括數(shù)據(jù)成員和函數(shù)成員的聲明

B.類成員的缺省訪問權限是保護的

C.數(shù)據(jù)成員必須被聲明為私有的

D.成員函數(shù)只能在類體外進行定義

15.下列關于類定義的說法中,正確的是A.類定義中包括數(shù)據(jù)成員和函數(shù)成員的聲明

B.類成員的缺省訪問權限是保護的

C.數(shù)據(jù)成員必須被聲明為私有的

D.成員函數(shù)只能在類體外進行定義

16.下列敘述中錯誤的是()。

A.軟件測試的目的是發(fā)現(xiàn)錯誤并改正錯誤

B.對被調試的程序進行“錯誤定位”是程序調試的必要步驟

C.程序調試通常也稱為Debug

D.軟件測試應嚴格執(zhí)行測試計劃。排除測試的隨意性

17.在C++中,編譯系統(tǒng)自動為一個類生成缺省構造函數(shù)的條件是()。A.該類沒有定義任何有參構造函數(shù)

B.該類沒有定義任何無參構造函數(shù)

C.該類沒有定義任何構造函數(shù)

D.該類沒有定義任何成員函數(shù)

18.在深度為7的滿二叉樹中,葉子結點的個數(shù)為A.32B.31C.64D.63

19.已知在一個類體中包含如下函數(shù)原型:VOLUMEOPERATOR-(VOLUME)const;,下列關于這個函數(shù)的敘述中,錯誤的是()。

A.這是運算符一的重載運算符函數(shù)

B.這個函數(shù)所重載的運算符是一個一元運算符

C.這是一個成員函數(shù)

D.這個函數(shù)不改變類的任何數(shù)據(jù)成員的值

20.若有以下程序:#include<iostream>usingnamespacestd;classA{private:intx;public:intz;voidsetx(inti){x=i;}intgetx(){returnx;}}:classB:publicA{private:intm;public:intp;voidsetvalue(inta,intb,intc){setx(a);z=b;m=c;}voiddisplay{){cout<<getx()<<","<<z<<","<<m<<end1;}};intmain(){Bobj;obj.setvalue(2,3,4);obj.display();return0;}程序運行以后的輸出結果是

A.產生語法錯誤B.2,3,4C.2,2,2D.4,3,2

21.對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

22.有如下類聲明:classSAMPLE{intn:public:SAMPLE(inti=0):n(i){}voidsetValue(intnO);};下列關于9etValue成員函數(shù)的定義中,正確的是()。A.SAMPLE::setValue(intnO){n=n0;}

B.voidSAMPLE::setValue(int胡){n=n0;

C.voidsetValue(intnO){n=n0;}

D.setValue(intnO){n=n0;}

23.有下列程序:#include<stdi0.h>intb=2;intfun(int*k){b=*k+b;return(b);)voidmain(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);}printf("\n");}程序運行后的輸出結果是()。A.1012B.810C.1028D.1016

三、2.填空題(12題)24.將一個函數(shù)聲明為一個類的友元函數(shù)必須使用關鍵字【】。

25.下面程序的結果為【】。

#include<iostream.h>

voidmain()

{

inta=1,b=2;

boolc=1;

if((a>b)||c)cout<<"true"<<end1;

else

cout<<"false"<<end1;

}

26.下列程序的輸出結果是非曲直【】。

#include<iostream,h>

classbase

{

intx,y;

public:

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

virtualintadd(){returnx+y;}

};

classthree:publicbase

{

intz;

public:

three(inti,intj,intk):base(i,j){z=k;}

intadd(){return(base::add()+z);}

};

voidmain()

{

three*q=newthree(lO,20,30);

cout<<q->add()<<end1;

}

27.軟件開發(fā)環(huán)境是全面支持軟件開發(fā)全過程的______集合。

28.表達式operator+(x,y)還可以表示為【】。

29.C++語言中的友元函數(shù)為在類外訪問類中的私有成員和保護成員提供了方便,但破壞了類的______和______。

30.下列程序的輸出結果是【】。

#include<iostream.h>

template<classT>

Tmax(Tx[],intn)

{

inti;

Tmaxv=x[0];

for(i=1;i<n;i++)

if(maxv<x[i])

maxv=x[i];

returnmaxv;

}

voidmain()

{

inta[]={3,2,7,6,8,9};

doubleb[]={1.2,3.4,2.5,7.3,6.8};

cout<<max(a,4)<<","<<max(b,3)<<endl;

}

31.關系模型的完整性規(guī)則是對關系的某種約束條件,包括實體完整性、______和自定義完整性。

32.分析以下程序的執(zhí)行結果【】。

#include<iostream.h>

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inta,intb){x=a;y=b;}

~Sample()

{

if(x==y)

cout<<"x=y"<<end1;

else

cout<<"x!=y"<<end1;

}

voiddisp()

{

cout<<"x="<<x<<",y="<<y<<end1;

}

};

voidmain()

{

Samples1(2,3);

s1.disp();

}

33.寫出執(zhí)行完下列代碼段之后指定變量的值:

boolx=true,y=false,z=false;

x=x&&y||z;

y=x||y&&z;

z=!(x!=y)||(y==z);

則x=false,y=false,z=【】。

34.數(shù)據(jù)的邏輯結構有線性結構【】兩大類。

35.閱讀下面程序:

#include<iostream.h>

voidfun1(chara,charb)

{

charc;

c=a;a=b;b=c;

}

voidfun2(char&a,char&b)

{

charc;

c=a;a=b;b=c;

}

voidmain()

{

chara,b;

a='x';b='y';

fun1(a,b);cout<<a<<b;

a='x';b='y';

fun2(a,b);cout<<a<<b;

}

則該程序的輸出為______。

四、程序改錯題(10題)36.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,輸出的結果為

Constructor,i=0,

Destructor

注意:錯誤的語句在//******error******的下面,修改該語句即可。

試題程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

//******error******

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

//******error******

TC:display

{

tout<<"i="<<i<<","<<endl;

}

//******error******

TC:TC

{

COUI<<"Destructor"<<endl:

}

voidmain

{

TCa;

a.display;

}

37.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,輸出的結果為Constructor,i=0,Destructor注意:錯誤的語句在//******error******的下面,修改該語句即可。試題程序:#include(iostream.h)classTC{inti;public:TC;voiddisplay;~TC;};//******error******TC:TC{cout<<"Constructor"<<",";i=0;)//******error******TC:display{tout<<"i="<<i<<","<<endl;}//******error******TC:TC{COUI<<"Destructor"<<endl:}voidmain{TCa;a.display;}

38.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結果為:number=1number=10number=100注意:不要改動main函數(shù),不能增加或刪除行。也不能更改程序的結構,錯誤的語句在//******error******的下面。試題程序:#include<iostream.h>classTC{public:TC(inti){number=i;}voidSetNumber(intm){number=m;}intGetNumberconst{returnnumber;}voidPrintconst{cout<<"number="<<number<<endl;}private:intnumber;};voidmain{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}

39.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現(xiàn)的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。試題程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}

40.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并使程序輸出的結果為:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=1

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。

(1)不能刪除assert()語句。

(2)只能修改后面的數(shù)字。

提示:assert函數(shù)如果為假,則會產生一個中斷異常。

試題程序:

#include<iostream.h>

#include<assert.h>

voidmain()

{

char*s1="abc":

//********error********

assert(sizeof(s1)==3):

cout<<"sizeof(s1)=5"<<endl;

chars2[10]="ab":

//********error********

assert(sizeof(s2)==2);

cout<<"sizeof(s2)=10"<<endl;

chars3=23:

//********error********

assert(sizeof(s3)==4);

cout<<"sizeof(s3)=1"<<endl;

return;

}

41.使用VC++6.0打開考生文件夾下的源程序文件

1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現(xiàn)的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結構,錯誤的語句在

//******error******的下面。

試題程序:

#include<iostream>

#include<fstream>

//********error********

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

//********error********

out1.open("1.txt",binary|app);

for(inti=0;s[i]!=0;i++)

{

//********error********

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<<endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

42.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結果為:

number=1

number=10

number=100

注意:不要改動main函數(shù),不能增加或刪除行。也不能更改程序的結構,錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h>

classTC

{

public:

TC(inti)

{

number=i;

}

voidSetNumber(intm)

{

number=m;

}

intGetNumberconst

{

returnnumber;

}

voidPrintconst

{

cout<<"number="<<number<<endl;

}

private:

intnumber;

};

voidmain

{

//********error********

TCobjl;

objl.Print;

TCobj2(3);

//********error********

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

43.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,但該程序運行有問題,請改正main函數(shù)中的錯誤,使該程序的輸出結果正確。程序輸出:88注意:錯誤的語句在/********error********/的下面。修改該語句即可,其他的語句不能修改。試題程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}

44.使用VC++6.0打開考生文件夾下的源程序文件1.cpp。本程序要求輸入一個字符串,然后將其中的小寫字母改成大寫字母,字符可能輸入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出到屏幕中。

注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。

試題程序:

#include<iostream.h>

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<<endl;

//********error********

cin.getline(str,120);

//********error********

while(str)

{

//********error********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

}

cout<<str<<endl;

return;

}

45.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯。請改正程序中的錯誤,使程序輸出的結果為1003732注意:錯誤的語句在//******error******的下面,修改該語句即可。試題程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}

五、綜合應用題(2題)46.使用VC++6.0打開考生文件夾下的源程序文件3.cpp,其中定義了類A、A1和A2,其中A1類由A類公有派生,A2類由A1類公有派生。(1)定義類A的構造函數(shù),該構造函數(shù)有一個整型的參數(shù)x,在構造函數(shù)中請將x賦值給數(shù)據(jù)成員a。請在注釋“//********1********”之后添加適當?shù)恼Z句。(2)定義類A1的構造函數(shù),該構造函數(shù)有兩個整型的參數(shù)x和y,在構造函數(shù)中請將x賦值給數(shù)據(jù)成員b,將y作為基類A構造函數(shù)的參數(shù)值傳人。請在注釋“//********2********”之后添加適當?shù)恼Z句。(3)定義類A2的構造函數(shù),該構造函數(shù)有3個整型的參數(shù)x,y和z,在構造函數(shù)中請將x賦值給數(shù)據(jù)成員C,將y和z分別賦值給基類A1構造函數(shù)的參數(shù)x和y。請在注釋“//********3********”之后添加適當?shù)恼Z句。(4)完成類A2的成員函數(shù)show的定義,該函數(shù)調用基類成員函數(shù),輸出基類數(shù)據(jù)成員a和b及類A2自身的數(shù)據(jù)成員C的值,上述3個值在輸出時以空格隔開。請在注釋“//********4********”之后添加適當?shù)恼Z句。程序輸出結果如下:73738注意:除在指定的位置添加語句之外,請不要改動程序的其他部分。試題程序:#include<iostream.h>classA{inta;public://********1********intgeta{returna;}};classA1:publicA{intb;public://********2********intgetb{returnb;}};classA2:publicA1{intC;public://****,****3********voidshow{//********4********}};voidmain{A2a(8.3.7):cout<<a.geta<<endl:cout<<a.getb<<endl:a.show;}

47.(1)應添加“BA(intm){a=m;}”。

(2)應添加“PAl(intm,intn):BA(n){b=m;}”。

(3)應添力Ⅱ“PA2(intm,intn,intk):PAl(n,k){C=m;)”。

(4)應添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

【解析】根據(jù)第1處要求,構造函數(shù)的函數(shù)名和類名一致,顯然BA構造函數(shù)的名稱為BA,在BA中通過參數(shù)m完成對成員變量a的賦值,因此構造函數(shù)的名稱為BA(intm),在函數(shù)內部對成員a賦值,故第1處的語句應添加“BA(intm){a=m;)”。根據(jù)第2處的要求,構造函數(shù)的形式為“PAl(intm,intn)”,m賦值給PA1類成員b,將n作為基類BA構造函數(shù)的參數(shù)值傳入,故第2處應添加“PA1(intm,intn):BA(n){b=m;}”。根據(jù)第3處的要求,函數(shù)形式為PA2(intm,intn,intk),在構造函數(shù)中將m賦值給數(shù)據(jù)成員c,將n和k分別賦值給基類PA1構造函數(shù)的參數(shù)m和n,因此第3處應添加“PA2(intm,intn,intk):PA1(n,k){C=m;}”。根據(jù)第4處的要求,PA2類公有派生于PA1,而PA1公有派生于BA,因此在PA2類中可以調用基類的geta和getb來獲得基類私有成員a和b,再輸出PA2的私有成員C即滿足要求,因此第4處應添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

六、3.綜合應用題(2題)48.使用VC6打開考生文件夾下的工程test8_3,此工程包含一個源程序文件test8_3.cpp,該文件設計了用于輸出乘法九九表的類。請認真閱讀已有的代碼,按要求完成下列操作,將程序補充完整。

(1)定義類Table的私有數(shù)據(jù)成員x和y,分別用于表示九九表中的兩個乘數(shù)(x*y),它們都是int型的數(shù)據(jù)。請在注釋“//**1**”之后添加適當?shù)恼Z句;

(2)完成類Table的成員函數(shù)prin()的定義,該函數(shù)以“x*y=z”的格式打印出九九表中的一個乘法算式,請使用格式化輸出函數(shù)prinff實現(xiàn),在注釋“//**2**”之后添加適當?shù)恼Z句;

(3)完成類Table9的成員函數(shù)print()的定義,該函數(shù)調用基類Table的print()函數(shù),將九九表輸出到屏幕,請在注釋“//**3**”之后添加適當?shù)恼Z句;

(4)補充主函數(shù),在屏幕上輸出九九表,以便測試所定義的類的正確性。請在注釋“//**4**”之后添加適當?shù)恼Z句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。

源程序文件test8_3.cpp清單如下:

#include<iostream.h>

#include<stdio.h>

classTable

{

//**1**

intz;

public:

voidprint(intx,inty,intz);

};

voidTable::print(intx,inty,intz)

{

//**2**

}

classTable9:publicTable

{

public:

voidprint();

};

voidTable9::print()

{

//**3**

intx,y,z;

for(i=1;i<1O;i++)

{

for(j=1;j<i+1;j++)

{

x=i;

y=j;

z=i*j;

Table::print(y,x,z);

}

printf("\n");

}

}

main()

{

//+*4**

return0;

}

49.使用VC6打開考生文件夾下的工程test9_3,此工程包含一個源程序文件test9_3.cpp,其中定義了Circle類與Money類,Circle類可對半徑為r的圓進行周長與面積的計算,而Money類用于計算一圓形游泳池的造價。游泳池四周有原形過道,過道外圍上柵欄,過道寬度為3米,根據(jù)鍵入的游泳池半徑,每米柵欄價格及每平方米過道價格,即可計算出游泳池的造價。請按要求完成下列操作,將程序補充完整。

(1)定義符號常量PI(值為3.14159f)與WIDTH(值為3.00f),分別用于表示圓周率與過道的固定寬度。請在注釋“//**1**”之后添加適當?shù)恼Z句。

(2)定義Circle類默認構造函數(shù),把私有成員radius初始化為參數(shù)r的值。請在注釋“//**2**”后添加適當?shù)恼Z句。

(3)完成Money類默認構造函數(shù)的定義,把私有成員FencePrice(每米柵欄的價格)、ConcretePrice(每平方米過道的價格)初始化為參數(shù)f,c的值。請在注釋“//**3**”之后添加適當?shù)恼Z句。

(4)完成Money類成員函數(shù)floatMoney::TotalMoney(noatfencelen,floatconarea)的定義,根據(jù)參數(shù)fencelen(柵欄的長度)和conarea(過道的面積),返回柵欄與過道的總造價。請在注釋“//**4**”之后添加適當?shù)恼Z句。

注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。

源程序文件test9_3.cpp清單如下:

#include<iostream.h>

//**1**

classCircle

{

private:

floatradius;

public:

//**2**

floatCircumference(){return2*PI*radius;)

floatArea(){returnPI*radius*radius;)

};

classMoney

{

private:

floatFencePrice;

floatConcretePrice;

public:

Money(floatf,floatc);

floatTotalMoney(floatfencelen,floatconarea);

};

Money::Money(floatf,floatc)

{

//**3**

}

floatMoney::TotalMoney(floatfencelen,floatconarea)

{

//**4**

}

voidmain()

{

floatradius,fence,concrete;

cout.setf(10s::fixed);

cout.setf(ios::showpoint);

cout.precision(2);

cout<<"Entertheradiusofthepool:";

cin>>radius;

cout<<"EntertheFencePrice:";

cin>>fence;

cout<<"EntertheConcretePrice:";

cin>>concrete;

CirclePool(radius);

CirclePoolRim(radius+WIDTH);

Moneymon(fence,concrete);

floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-P00l.Area()));

cout<<"ThetotalmoneyisRMB"<<totalmoney<<endl;

}

參考答案

1.C解析:構造函數(shù)的主要作用是對數(shù)據(jù)成員初始化。在設計派生類的構造函數(shù)中,不僅要考慮派生類所增加數(shù)據(jù)成員的初始化,還應考慮基類中構造函數(shù)的初始化。子對象是對象中的對象,子對象的初始化是在建立派生類時通過調用派生類構造函數(shù)來實現(xiàn)。所以派生類構造函數(shù)的任務包括3部分,對基類數(shù)據(jù)成員初始化;對子對象數(shù)據(jù)成員初始化;對派生類數(shù)據(jù)成員初始化。即本題選擇選項C)。

2.C解析:對于任何一種賦值運算,其賦值號或復合賦值號左邊必須是一個左值。左值是指具有對應的可由用戶訪問的存儲單元,并且能夠由用戶改變其值的量。而在C)選項中賦值號對應的是表達式“i+1”,不是一個左值,因此是非法的賦值表達式。

3.B解析:本題考查逗號表達式的運算特點。逗號表達式是所有表達式中優(yōu)先級最低的,從左到右結合,其求解過程是:將逗號表達式各表達式按從左到右的順序依次求值,并將最右邊的表達式結果作為整個逗號表達式的結果。這里考生要注意的是,第二個表達式執(zhí)行完后,n的值并沒有發(fā)生變化,依然是15,所以在執(zhí)行a+5的時候,結果是20,而不是65。有的考生可能誤選A。正確答案應是B。

4.DD?!窘馕觥恐挥泄欣^承的公有成員才能被派生類的對象直接訪問,其他的情況都會因為訪問權限問題產生錯誤。

5.B解析:此題考查的是運算符的重載。C++中運算符重載是多態(tài)性的一種表現(xiàn),在C++語言中,“.”、“.*”、“->”、“::”、“?:”這5個運算符不能重載,所以選項B)錯誤。由于很多符號是一元運算符和二元運算符公用的,為了避免含混,不得為重載的運算符函數(shù)設置默認值,調用時也就不得省略實參。其中“=”、“[]”、“->”及所有的類型轉換運算符只能作為成員函數(shù)重載:如果允許第一操作數(shù)不是同類對象,而是其他數(shù)據(jù)類型,則只能作為非成員函數(shù)重載。

6.C解析:本題程序中類Derived是從基類Base公有繼承的。主函數(shù)中定義了一個基類對象a和一個指向基類對象的指針pb,又定義了一個派生類Derived對象b。當pb指向對象b時,pb->fun()調用基類Base的成員函數(shù)fun()。這是由于Derived是Base的子類型,因此可以將派生類Derived的對象b的地址賦值給指向基類Base的指針pb,但這時指針pb只能使用從基類Base繼承的成員。

7.A解析:線性表的鏈式存儲結構中的結點空間是動態(tài)生成的,它們在內存中的地址可能是連續(xù)的,也可能是不連續(xù)的。

8.B解析:數(shù)組名作為函數(shù)參數(shù)屬于地址傳遞,形參、實參共用同一內存空間。

9.B解析:數(shù)據(jù)流程圖是描述數(shù)據(jù)處理過程的工具,是需求理解的邏輯模型的圖形表示,在需求分析時使用。

10.D

11.AA?!窘馕觥窟x項A中,重載函數(shù)中是允許使用默認參數(shù)的;為了使重載函數(shù)有意義,不要使用重載函數(shù)來描述毫不相干的函數(shù);重載函數(shù)中編譯是根據(jù)參數(shù)表進行選擇的,包括參數(shù)的個數(shù)和類型。

12.AA?!窘馕觥扛鶕?jù)輸出函數(shù)printf中對輸出數(shù)值格式的要求,第一個數(shù)和第二數(shù)之間沒有空格或分隔號,因而此題答案為選項A。

13.BB。【解析】本題考查模板函數(shù)的應用,表達式int(1.1)和int(4.2)用于將1.1和4.2強制轉換為整型。

14.A解析:本題考查的知識點是:類的定義。類中缺省的訪問權限是私有的(private),所以選項B)不正確:類的數(shù)據(jù)成員和函數(shù)成員的訪問控制權限均可被聲明為公有(public)、私有(priate)和保護(protected)中的任意一種,所以選項C)不正確;成員函數(shù)的實現(xiàn)即可以在類體內定義,也可以在類體外定義,所以選項D)不正確。故本題應該選擇A。

15.A解析:本題考查的知識點是:類的定義。類中缺省的訪問權限是私有的(private),所以選項B)不正確:類的數(shù)據(jù)成員和函數(shù)成員的訪問控制權限均可被聲明為公有(public)、私有(priate)和保護(protected)中的任意一種,所以選項C)不正確;成員函數(shù)的實現(xiàn)即可以在類體內定義,也可以在類體外定義,所以選項D)不正確。故本題應該選擇A。

16.AA。【解析】軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。軟件測試要嚴格執(zhí)行測試計劃,排除測試中的隨意性。程序凋試通常也稱Debug,對被調試的程序進行“錯誤”定位是程序調試的必要步驟。

17.C解析:在類定義時沒有定義任何構造函數(shù)時,則編譯器自動生成一個不帶參數(shù)的缺省構造函數(shù),其格式如下:

<類名>::<缺省構造函數(shù)名>()

按構造函數(shù)的規(guī)定,缺省構造函數(shù)名同類名。缺省構造函數(shù)的這種格式也可由程序員定義在類體中。在程序中定義一個對象而沒有指明初始化時,則編譯器便按缺省構造函數(shù)來初始化該對象。用缺省構造函數(shù)對對象初始化時,則將對象的所有數(shù)據(jù)成員都初始化為零或空。

18.C在滿二叉樹中每層的結點數(shù)都達到最大值,而且葉子結點全部出現(xiàn)在最底層。第l層(根結點所在的層)有20個結點,第2層有21個結點,……第n層有2n-1個結點。在深度為7的滿二叉樹中,第7層有27-l=64個結點(全部是葉子結點)、在深度為7的滿二叉樹中,共有27—1=127個結點、因此本題的正確答案是C

19.BB?!窘馕觥勘绢}考核運算符的重載。題中語句為運算符一這是一個二元運算符,且是作為常成員函數(shù)來重載的,所以它不能更新對象的數(shù)據(jù)成員,也不能調用該類中沒有用const修飾的成員函數(shù)。

20.B解析:本題考核繼承與派生。當類的繼承方式為公有繼承時,基類的公有成員和保護成員分別作為派生類的公有成員和保護成員,派生類的其他成員可以直接訪問它們。其他外部使用者只能通過派生類的對象訪問繼承來的公有成員。在本題中,數(shù)據(jù)成員z和函數(shù)setx都是基類A的公有成員,它們經過公有繼承以后,在派生類B中還是公有成員,而派生類B中的函數(shù)setvalue和display都是公有成員,可以通過對象對它們進行訪問。所以程序中對各成員的訪問是正確的。本程序的功能是輸出已設置的各成員的值。

21.D各種排序方法中最壞情況下需要比較的次數(shù)分別為:冒泡排序n(n-1)/2、快速排序n(n-1)/2、簡單插入排序n(n-1)/2、希爾排序0(n1.5)、簡單選擇排序n(n-1)/2、堆排序O(nlog2n)

22.B本題考查在類外定義類的成員函數(shù),需要使用作用域限定符“::”,屬于基礎知識,本題答案為8。

23.CC?!窘馕觥吭诔绦蛑凶雍瘮?shù)fun(int*k)的作用是給靜態(tài)全局變量加上形參*k的值。在主函數(shù)中進行第一次for循環(huán)執(zhí)行時,fun(&a[2])的返回值為5,所以5+5=10,\r\n因而輸出結果為10,第二次for循環(huán)執(zhí)行時,fun(&a[3])的返回值為14,所以14+14=28。

24.A或者friendA或者friend解析:友元的定義。

25.真真解析:本題考查的是對于邏輯運算符號的理解,“||”運算符的任何一邊取值為真,則整個運算結果為真。

26.6060解析:本題考察繼承中子類對父類的繼承方式,注意子類的add成員函數(shù),它直接使用了父類的成員函數(shù)進行運算。

27.軟件工具軟件工具解析:軟件開發(fā)環(huán)境或稱軟件工程環(huán)境是全而支持軟件開發(fā)全過程的軟件工具集合。這些軟件工具按照一定的方法或模式組合起來,支持軟件生命周期內的各個階段和各項任務的完成。

28.x+yx+y解析:本題考查的是運算符函數(shù)的調用,可以像一般函數(shù)那樣用函數(shù)名進行調用,也可通過運算符構成表達式的形式進行調用。

29.隱藏性、封裝性隱藏性、封裝性

30.73.47,3.4解析:函數(shù)的功能是求出數(shù)組中指定范圍的元素中的最大值。所以在a數(shù)組中前四個數(shù)據(jù)中最大值為7,數(shù)組b中前3個元素中最大值為3.4。

31.參照完整性參照完整性

32.x=2y=3x!=y

33.真真解析:本題考核C++運算符運算優(yōu)先級和結合性。執(zhí)行語句“x&&y||z;”后,x的值變?yōu)閒alse。執(zhí)行“x||y&&z”后,y的值變?yōu)閒alse,執(zhí)行“!(x!=y)||y==z);”后,z的值變?yōu)閠rue

34.非線性結構非線性結構

35.xyyxxyyx解析:由程序main主函數(shù)入手,首先調用fun1函數(shù),輸出結果。然后調用fun2函數(shù),輸出結果。在函數(shù)fun1聲明中出現(xiàn)的參數(shù)為形參,調用結束后,形參單元被釋放,實參單元仍維持原值。也就是fun1函數(shù)中的“c=a;a=b;b=c;”交換結果并不能改變主函數(shù)中a,b實參的值,“a='x';b='y';”輸出為xy。函數(shù)voidfun2(char&a,char&b)聲明中的為實參的地址.所以在函數(shù)中調用交換語句后,實參值改變,即輸出為yx。

36.(1)應改為“TC::TC”。

\n(2)應改為“voidTC::display”。

\n(3)應改為“TC::~TC”。

\n【解析】在類的外部定義成員函數(shù)時,必須在成員函數(shù)前面加上類名和作用域運算符“::”,作用域運算符用采表示某個成員屬于哪個類,使用格式為“(類名)::<成員函數(shù)>((參數(shù)函數(shù))),因此第1處應改為“TC::TC”,默認構造函數(shù)沒有參數(shù)。由第2處“TC::display”后的語句看,這是在類外實現(xiàn)TC函數(shù),因此也有作用域運算符使用錯誤問題,display函數(shù)返回值為void,因此第2處的語句應改為“voidTC::display”。由第3處的語句“TC::TC”可知,顯然這里是在類外實現(xiàn)析構函數(shù),析構函數(shù)是一個特殊的函數(shù),它的名稱和類名相同,并在前面加“~”字符,用采與構造函數(shù)加以區(qū)別,因此第3處的語句應改為“TC::~TC”。

37.(1)應改為“TC::TC”。(2)應改為“voidTC::display”。(3)應改為“TC::~TC”?!窘馕觥吭陬惖耐獠慷x成員函數(shù)時,必須在成員函數(shù)前面加上類名和作用域運算符“::”,作用域運算符用采表示某個成員屬于哪個類,使用格式為“(類名)::<成員函數(shù)>((參數(shù)函數(shù))),因此第1處應改為“TC::TC”,默認構造函數(shù)沒有參數(shù)。由第2處“TC::display”后的語句看,這是在類外實現(xiàn)TC函數(shù),因此也有作用域運算符使用錯誤問題,display函數(shù)返回值為void,因此第2處的語句應改為“voidTC::display”。由第3處的語句“TC::TC”可知,顯然這里是在類外實現(xiàn)析構函數(shù),析構函數(shù)是一個特殊的函數(shù),它的名稱和類名相同,并在前面加“~”字符,用采與構造函數(shù)加以區(qū)別,因此第3處的語句應改為“TC::~TC”。

38.(1)應改為“TCobjl(1);”。(2)應改為“0bj1.SetNumber(10);”。(3)應改為“0bj2.SelNumber(100);”?!窘馕觥勘绢}第1處的“TCobjl;”語句是聲明TC類的對象0bj1,根據(jù)TC類構造函數(shù)的定義TC(inti),存在整型參數(shù),并且題目要求第一個輸出結果兩1,所以補全參數(shù)1,即第1處的“TCobjl(1);”。第2處處的“objl.number=10;”應該是調用成員函數(shù)SetNumber賦值。在C++中成員函數(shù)的使用形式應該是:對象名.成員函數(shù),所以修改為“obj1.SetNumber(10);”。類是對象的抽象,而對象是類的具體實例。第3處“TC.SetNumber(100);”語句中的TC為類,并不是對象,這里應該使用定義的對象,即obj2,所以將語句修改為“obj2.SetNumber(100);”。

39.(1)應改為“usingnamespacestd;”。(2)應改為“outl.open("1.txt",ios::binary|ios::app);”。(3)應改為“out1.put(s[i]);”。【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,對于C++中引入標準命名空間的格式,缺少namespace,所以第1處的語句修改為“usingnamespacestd;”。第2處,調用成員函數(shù)open中,輸入、輸出方式是在ios類中定義的,所以“out1.open("1.txt",binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open("1.txt",ios::binary|ios::app);”。第3個標識應該用流成員函數(shù)put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

40.(1)應改為“assert(sizeof(s1)==4);”。

\n(2)應改為“assert(sizeof(s2)==1O);”。

\n(3)應改為“assert(sizeof(s3)==1);”。

\n【解析】assert函數(shù)如果為假,則會產生一個中斷異常。所以要讓它正常執(zhí)行輸出結果,那么assert函數(shù)只有為真,才不會產生中斷異常。“assert(sizeof(s1)==3);”語句中“sizeof(s1)==3”為假,這會使程序產生異常,不能正常執(zhí)行。因為str1的值為abc,但是它還有一個尾符,它的長度應該是4,而不是3,所以在第1處修改為“assert(sizeof(s1)==4);”。str2[10]說明,str2的空間為10,在第2處修改為“assert(sizeof(s2)==10);”。charstr3=23;語句說明23是字符,所占存儲空間為1,所以修改為“assert(sizeof(s3)==1);”。

41.(1)應改為“usingnamespacestd;”。

\n(2)應改為“outl.open('1.txt',ios::binary|ios::app);”。

\n(3)應改為“out1.put(s[i]);”。

\n【解析】本題第1處的“usingstd;”是在程序中引入標準命名空間std,對于C++中引入標準命名空間的格式,缺少namespace,所以第1處的語句修改為“usingnamespacestd;”。第2處,調用成員函數(shù)open中,輸入、輸出方式是在ios類中定義的,所以“out1.open('1.txt',binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open('1.txt',ios::binary|ios::app);”。第3個標識應該用流成員函數(shù)put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

42.(1)應改為“TCobjl(1);”。

\n(2)應改為“0bj1.SetNumber(10);”。

\n(3)應改為“0bj2.SelNumber(100);”。

\n【解析】本題第1處的“TCobjl;”語句是聲明TC類的對象0bj1,根據(jù)TC類構造函數(shù)的定義TC(inti),存在整型參數(shù),并且題目要求第一個輸出結果兩1,所以補全參數(shù)1,即第1處的“TCobjl(1);”。第2處處的“objl.number=10;”應該是調用成員函數(shù)SetNumber賦值。在C++中成員函數(shù)的使用形式應該是:對象名.成員函數(shù),所以修改為“obj1.SetNumber(10);”。類是對象的抽象,而對象是類的具體實例。第3處“TC.SetNumber(100);”語句中的TC為類,并不是對象,這里應該使用定義的對象,即obj2,所以將語句修改為“obj2.SetNumber(100);”。

43.(1)“staticintn=O”應改為“staticintn;”。(2)“intCO::n;”應改為“intCO::n=0;”。(3)“cout<<c.n<<endl;”應改為“cout<<c->n<<endl;”?!窘馕觥勘绢}要在屏幕上輸出兩個字符,首先要靜態(tài)變量初始化,第1處應改為“staticintn;”,第2處要給n賦值,第3處輸出時引用c的對象,應改為“cout<<c->n<<endl;”。

44.(1)應改為“ein.getline(str,120,?);”。

\n(2)應改為“while(str[i])”。

\n(3)應改為“if(str[i]>=a&&str[i]<=2)”。

\n【解析】本題中要求以輸入字符“?”為結束符,用于字符輸入的流成員函數(shù)getline函數(shù)讀入一行字符,格式為“cin.getline(字符數(shù)組,字符個數(shù),終止標志字符)”,所以第1處改為“cin.getline(str,120,?);”。第2處的“while(str)”語句應該是判斷字符串str中的每一個字符是否為結束符,若不是結束符,在循環(huán)中判斷每一個字符是否為小寫,若為小寫,則轉換。所以應該修改為“while(str[i])”。第3處的“if(str[i]>=a)”語句是判斷字符str[i]是否為小寫字符,而現(xiàn)有的語句只是判斷字符是否大于a,但是小寫字符應該是a到2,所以修改為“if(str[i]>=a

溫馨提示

  • 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

提交評論