2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)_第1頁
2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)_第2頁
2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)_第3頁
2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)_第4頁
2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022年江蘇省常州市全國計算機等級考試C++語言程序設計模擬考試(含答案)學校:________班級:________姓名:________考號:________

一、1.選擇題(10題)1.設有程序段intk=10;while(k=0)k=k-1;則下面描述中正確的是

A.循環(huán)執(zhí)行10次B.無限循環(huán)C.循環(huán)體語句一次也不執(zhí)行D.循環(huán)體語句執(zhí)行一次

2.結構化分析方法SA、結構化設計方法SD,和JACKSON方法,是在軟件開發(fā)過程中常用的方法,人們使用SD方法時可以得到______。

A.程序流程圖B.具體的語言程序C.模塊結構圖及模塊的功能說明書D.分層數據流圖

3.非成員函數只有在聲明為(),才能訪問這個類的所有private成員。

A.內聯函數B.純虛函數C.重載函數D.友元函數

4.下列各類函數中,不是類的成員函數的是()。A.構造函數B.析構函數C.友元函數D.拷貝構造函數

5.采用面向對象技術開發(fā)的應用系統的特點是()。

A.重用性更強B.運行速度更快C.占用存儲量小D.維護更復雜

6.控制格式輸入/輸出的操作中,設置域寬的函數是()。

A.WSB.octC.setfilt(int)D.setw(int)

7.下列各種函數中,______不是類的成員函數。

A.構造函數B.析構函數C.友元函數D.拷貝構造函數

8.靜態(tài)成員函數沒有()。

A.返回值B.this指針C.指針參數D.返回類型

9.人們已經提出了許多種類型的數據依賴,其中最重要的是函數依賴和()。

A.數據依賴B.多值依賴C.單值依賴D.數值依賴

10.設變量a是int型,f是double型,i是float型,則表達式10+'a'+i*f值的數據類型是

A.intB.floatC.doubleD.不確定

二、單選題(13題)11.考慮函數原型voidtest(inta,intb=7,charz=*),下面的函數調用中,屬于不合法調用的是()。

A.test(5);B.test(5,8);C.test(6,#);D.test(0,0,*);

12.有以下程序段

intk=0;

while(k=1)k++;

while循環(huán)執(zhí)行的次數是

A.無限次B.有語法錯,不能執(zhí)行C.一次也不執(zhí)行D.執(zhí)行1次

13.以下關鍵字不能用來聲明類的訪問權限的是()。

A.publiCB.statiCC..proteCtedD.private

14.派生類的成員函數不能訪問基類的()。

A.公有成員和保護成員B.公有成員C.私有成員D.保護成員

15.有如下模板聲明:templateclassA;下列聲明中,與上述聲明不等價的是()。

A.templateclassA;

B.templateclassA;

C.templateclassA;

D.templateclassA;

16.設R是一個2元關系,S是一個3元關系,則下列運算中正確的是()。

A.R-SB.R×SC.R∩SD.R∪S

17.在c++語言中,數據封裝要解決的問題是()。

A.數據的規(guī)范化B.便于數據轉換C.避免數據丟失D.防止不同模塊之間數據的非法訪問

18.下列敘述中正確的是()。

A.程序執(zhí)行的效率與數據的存儲結構密切相關

B.程序執(zhí)行的效率只取決于程序的控制結構

C.程序執(zhí)行的效率只取決于所處理的數據量

D.以上三種說法都不對

19.若有以下定義:inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};charc='a',d,g;則下列表達式中,結果為4的是()。

A.a[g-c]B.a[4]C.a['d'-'c']D.a['d'-c]

20.對于長度為n的線性表,在最壞情況下,下列各排序法所對應的比較次數中正確的是

A.冒泡排序為n/2B.冒泡排序為nC.快速排序為nD.快速排序為n(n·1)/2

21.下列數據結構中,屬于非線性結構的是

A.循環(huán)隊列B.循環(huán)隊列C.二叉樹D.帶鏈棧

22.下面關于虛函數的表述中正確的是()。

A.虛函數不能聲明為另一個類的友元函數

B.派生類必須重新定義基類的虛函數

C.如果在重定義虛函數時使用了保留字virtual,那么該重定義函數仍是虛函數

D.虛函數不能夠聲明為靜態(tài)函數

23.已知語句intm=10;則下列表示引用的表示中正確的是

A.int&x=m;

B.int&y=10;

C.int&z;

D.float&t=&m;

三、2.填空題(12題)24.cerr與cout的差別在于:cerr是______重定向的,cerr不能被緩沖,它的輸出直接傳達到標準輸出設備上。

25.在下面橫線上填上適當的語句,完成程序。

#include<iostream>

usingnamespacestd;

classBase

{

intx;

public:

Base(inti){x=i;}

~Base(){}

};

classDerived:publicBase

{

public:

____________//完成類Derive構造函數的定義

}

26.下圖所示的二叉樹的先序遍歷序列是【】。

27.一棵二叉樹第六層(根結點為第一層)的結點數最多為【】。

28.在下面橫線上填上適當的語句,完成程序。

#include<iostream>

usingnamespacestd;

classBase

{

intx;

public:

Base(inti){x=i;}

~Base(){}

};

classDerived:publicBase

{

public:

___________//完成類Derive構造函數的定義

};

intmain()

{

DerivedObj;

return0;

}

在橫線處應填入的語句是【】。

29.可以把具有相同屬性的一些不同對象歸類,稱為______。

30.如下程序的輸出結果是______。

#include<iostream>

usingnamespacestd;

classpumpkin{

public:

pumpkin(){++count;}

~pumpkin(){--eount;}

staticvoidtotal_count(){cout<<count<<"pumpkin(s)"<<endl;}

private:

staticintcount;

};

intpumpkin::count=0;

intmain(){

pumpkinpl[10];

pumpkin::total_count();

return0;

}

31.數據庫系統中實現各種數據管理功能的核心軟件稱為【】。

32.根據注釋內容在空白處填寫適當內容。

classLocation

{

private:

intX,Y;

public:

voidinit(intinitX,intinitY);

intGetX();

intGetY();

};

voidLocation::init(intinitX,intinitY)

{

X=initX;

Y=initY;

}

intLocation::GetX()

{

reutrnX;

}

intLocation::GetY()

{

reutrnY;

}

#include<iostream.h>

voidmain()

{

LocationA1;

A1.init(20,90);

______//定義一個指向A1的引用rA1

cout<<rAl.GetX()<<":"<<rAl.GetY()<<endl;

}

33.從工程管理的角度來看,軟件設計分兩步來完成。首先是概要設計,然后是【】。

34.在聲明派生類時,如果不顯式地給出繼承方式,缺省的類繼承方式是私有繼承private。

已知有如下類定義:

classBase{

protected:

voidfun(){}

};

classDerived:Base{};

則Base類中的成員函數fun(),在Derived類中的訪問權限是【】(注意:要求填寫private、protected或public中的一項)。

35.數據庫的設計通常可以分為這樣4個步驟:需求分析、概念設計、【】和物理設計。

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

number=1

number=10

number=100

注意:不要改動main函數,不能增加或刪除行。也不能更改程序的結構,錯誤的語句在//******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;

}

37.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,但該程序運行有問題,請改正main函數中的錯誤,使該程序的輸出結果正確。程序輸出: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;}38.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執(zhí)行的任何異常。

程序異常,輸出信息為

error

O

ERROR

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

試題程序:

#include<iostream.h)

intmain

{

try

{

throw("error");

}

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

catch(chars)

{

cout<<s<<endl;

}

try

{

throw((int)0);

}

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

catch

{

cout<<i<<endl;

}

try

{

throw(O);

throw("error");

}

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

catch

{

cout<<"ERROR"<<endl;

}

return0;

}39.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行有問題,請改正main函數中的錯誤,使程序的輸出結果為:number=1number=10number=100注意:不要改動main函數,不能增加或刪除行。也不能更改程序的結構,錯誤的語句在//******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;}

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

注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******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;

}

41.使用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;

}

42.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執(zhí)行的任何異常。程序異常,輸出信息為errorOERROR注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。試題程序:#include<iostream.h)intmain{try{throw("error");}//********error********catch(chars){cout<<s<<endl;}try{throw((int)0);}//********error********catch{cout<<i<<endl;}try{throw(O);throw("error");}//********error********catch{cout<<"ERROR"<<endl;}return0;}

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

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=1

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

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

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

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

試題程序:

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

}

44.使用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;}

45.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正程序中的錯誤,使得程序輸出:

9,8,7,6,5

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

試題程序:

#include(iostream.h>

classTC

{

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

TC(inti)

{

m_i=i;

}

voidprint

{

cout<<--m_i<<,;

}

public:

intm_i;

};

intmain

{

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

inti;

TC04(10);

while(i>5)

{

/********errOr********/

i++:

04.print;

}

cout<<endl;

return0;

}

五、綜合應用題(2題)46.使用VC++6.0打開考生文件夾下的源程序文件3.cpp。類People包括姓名和年齡兩個字段。函數fun獲得年齡比較大的人的姓名,然后輸出這個姓名到屏幕。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)完成類的構造函數功能,請在注釋1后添加適當的語句。(2)完成構造函數對姓名的賦值,請在注釋2后添加適當的語句。(3)定義類的友元函數fun,請在注釋3后添加適當的語句。(4)補充函數fun的年齡比較功能,請在注釋4后添加適當的語句。注意:增加或者修改代碼的位置已經用符號表示出來,請不要修改其他的程序代碼。試題程序:#include<iostream.h>classPeople{public://********1********{inti;for(i=0;sUserName[i]!=0;i++){m_UserName[i]=sUserName[i];}//********2********m_Old=nOld;}private:charm_UserName[32];intm_Old;//********3********};voidfun(char*s,People&personl,People&person2{//********4********if{for(inti=0;personl.m_UserName[i]!=0;i++){s[i]=personl.m_UserName[i];s[i+1]=0;}}else{for(inti=0;person2.m_UserName[i]!=0;i++){s[i]=person2.m_UserName[i];s[i+1]=0;}}}voidmain{chars[32];Peoplepl("abc",20);Peoplep2("def",30):fun(S,p1,p2);cout<<s<<endl:return;}47.使用VC++6.0打開考生文件夾下的源程序文件3.cpp。其中定義的類不完整,按要求完成下列操作,將類的定義補充完整。每賣出一個水果,則計算水果的重量,還要計算所有賣出水果的總重量以及總個數,同時允許退貨,請按照以下的操作,把類補充完整。(1)定義類TCFruit的私有靜態(tài)數據成員float型變量AllWeight和int型變量AllN0,請在注釋1后添加適當的語句。(2)完成類TCFruit的帶一個float型變量w的構造函數,并把這個w加到AllWeight中,并且AllNo自加。請在注釋2后添加適當的語句。(3)在析構函數中,在AllWeight中減去weight,然后AllNo自減,請在注釋3后添加適當的語句。(4)完成靜態(tài)成員變量的初始化為0,請在注釋4后添加適當的語句。注意:增加或者修改代碼的位置已經用符號表示出來,請不要修改其他的程序代碼。試題程序:#include(iostream.h>classTCFruit{private:floatWeight;//********1********staticintAllNo;public:TCFruit(floatw){//********2********AllWeight+=w:AllNo++:}~TCFruit{//********3********AllWeight-=Weight:}voiddisplay{cout<<"SellaFruitwith"<<Weight<<"k9"<<endl;cout<<”Allsellnumber:"<<AllNo<<endl;cout<<"Allsellweight:"<<AllWeight<<"k9"<<endl<<endl;}};//********4********floatTCFruit::AllWeight=0.0;intmain{TCFruitFruitl(1.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;return0;}六、3.綜合應用題(2題)48.使用VC6打開考生文件夾下的工程test22_3,此工程包含一個源程序文件test22_3.cpp,其中定義了用于表示考生的類CStudent和它的派生類CGraduateStudent,但它們的定義并不完整。請按要求完成下列操作,將程序補充完整。

(1)定義CStudent的構造函數,函數含參數nm,它是char型的指針數據,請使用字符串函數將類數據成員name初始化。請在注釋“//**1**”之后添加適當的語句。

(2)完成類CStudent的成員函數voidaddscore(doublesc)的定義,將類數據成員score加上參數sc,請在注釋“//**2**”之后添加適當的語句。

(3)添加類CGraduateStudent的成員函數voidaddpaper(intd)的定義,將int型的參數d的值加到類的數據成員paper上,請在注釋“//**3**”之后添加適當的語句。

(4)調用對象sdt的成員函數addpaper使得該考生的論文數量變?yōu)?0,將請在注釋“//**4**”之后添加適當的語句。

輸出結果如下:

StudentHanson

(Advisor:MichaelPhong)

Totalpaperis10

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

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

#include<iostream.h>

#include<string.h>

classCStudent

{

private:

charname[30];

intcode;

doublescore;

public:

CStudent(char*nm)

{

//**1**

}

CStudent(){}

voidputname(char*nm){strcpy(name,nm);}

voidputcode(intd){code=d;}

voidputscore(doublesc){score=sc;}

voidgetname(char*nm){strcpy(nm,name);}

doublegetcode(){returncode;)

doublegetscore(){returnscore;}

voidaddscore(doublesc)

{

//**2**

}

};

classCGraduateStudent:publicCStudent

{

private:

charadvisor[30];

intpaper;

public:

voidputadvisor(char*nm){strcpy(advisor,nm);}

voidgetadvisor(char*nm){strcpy(nm,advisor);}

voidputpaper(intd){paper=d;}

//**3**

intgetpaper(){returnpaper;}

};

voidmain()

{

CGraduateStudentsdt;

sdt.putname("Hanson");

sdt.putadvisor("MichaelPhong");

sdt.putpaper(8);

//**4**

charcsname[30];

sdt.getname(csname);

charcaname[30];

sdt.getadvisor(caname);

cout<<"Student"<<csname<<endl;

cout<<"(Advisor:"<<caname<<")"<<endl;

cout<<"Totalpaperis"<<sdt.getpaper()<<endl;

}

49.使用VC6打開考生文件夾下的工程test28_3。此工程包含一個test28_3.cpp,其中定義了類Person,但該類的定義并不完整。請按要求完成下列操作,將程序補充完整。

(1)定義類Person的私有數據成員forename、surname和money,forename和surname都是char型的指針數據,money是double型的數據。請在注釋“//**1**”之后添加適當的語句。

(2)完成類Person的帶三個參數的構造函數Person(char*f,char*s,doublem),分別為forename和surname申請新的空間來存儲參數f和s指針指向的內容,注意空間的大小,最后把參數m的值賦給money,請在注釋“//**2**”之后添加適當的語句。

(3)完成類Person的析構函數的定義,把forename和surname指向的空間釋放,請在注釋“//**3**”之后添加適當的語句。

(4)完成類Person的成員函數display的定義,使其以格式“fornamesurnamehasmoney”的形式輸出內容,請在注釋“//**4*?!敝筇砑舆m當的語句。

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

輸出結果如下:

RichardBerkhas1000.56

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

#include<iostream.h>

#include<string.h>

classPerson

{

private:

//**1**

doublemoney;

public:

Person(char*f,char*s,doublem);

~Person();

voiddisplay();

};

Person::Person(char*f,char*s,doublem)

{

//**2**

strcpy(forename,f);

surname=newchar[strlen(s)+1];

strcpy(surname,s);

money=m;

}

Person::-Person()

{

//**3**

}

voidPerson::display()

{

//**4**

}

voidmain()

{

Personp("Richard","Berk",1000.56);

p.display();

}

參考答案

1.C解析:本題中,首先將0賦給k,表達式變?yōu)?,跳出循環(huán),沒有執(zhí)行循環(huán)體語句。解答本題的關鍵是掌握while語句。

2.C

3.D解析:此屬考查的是非成員函數對類的成員的訪問權限,非成員函數只有在聲明為類的友元函數才能訪問這個類的所有private成員,否則是不能訪問類的私有成員的。

4.C構造函數包括默認構造函數和拷貝構造函數等,析構函數和構造函數~樣屬于類的特殊的成員函數。而友元函數則是為了增加類的訪問靈活行而允許其他類的成員函數或全局函數訪問類的內部變量或成員函數的一種機制,其缺點是破壞了類的封裝性。

5.A解析:使用面向對象方法開發(fā)的應用系統,強調封裝和復用。封裝隱藏信息,使得被封裝的模塊與外界的耦合度更低,更容易重用。軟件復用是將已有的軟件成分用于構造新的軟件系統??梢员粡陀玫能浖煞忠话惴Q作可復用構件,無論對可復用構件原封不動地使用還是作適當的修改后再使用,只要是用來構造新軟件,則都可稱作復用。面向對象方法之所以特別有利于軟件復用,是由于它的主要概念及原則與軟件復用的要求十分吻合。面向對象方法從面向對象的編程發(fā)展到面向對象的分析與設計,使這種方法支持軟件復用的固有特征能夠從軟件生命周期的前期階段開始發(fā)揮作用,從而使OO方法對軟件復用的支持達到了較高的級別。與其他軟件工程方法相比,面向對象方法的一個重要優(yōu)點是,它可以在整個軟件生命周期達到概念、原則、術語及表示法的高度一致。這種一致性使得各個系統成分盡管在不同的開發(fā)與演化階段有不同的形態(tài),但可具有貫穿整個軟件生命周期的良好映射。這一優(yōu)點使OO方法不但能在各個級別支持軟件復用,而且能對各個級別的復用形成統一的、高效的支持,達到良好的全局效果。綜上所述,選項A為本題正確答案。

6.D解析:本題需要考生記憶一些輸入輸出控制操作子,oct為八進制,setfill為設置填充符,setw為設置域寬。

7.C解析:構造函數、析構函數和拷貝構造函數都是類的成員函數。

8.B

9.B解析:人們已經提出了許多種類型的數據依賴,其中最重要的是函數依賴和多值依賴。

10.C解析:根據混合運算規(guī)則,如果有一個數據是double型,則其他數據類型先轉化為double型,運算的結果最終也是double型。為保證精度的不丟失,表達式的數據類型是變量和常量中精確度最高的變量類型。

11.C解析:本題考核函數的調用。題中函數聲明帶有默認參數,那么在C)選項的調用中,將會把字符型實參#賦值給整型形參b,這不符合參數傳遞規(guī)則。

12.A解析:注意本題有個陷阱,馬虎的考生將紛紛落馬。本來、while中的表達式應為k==1,而本題卻為k=1,是賦值表達式而不是邏輯表達式。因此,編譯器將其值一直認為是1,因此表達式一直為真,陷入無限次的循環(huán)。

13.B解析:本題考查了類的訪問權限。在C++中,類的訪問權限一共有3種,分別是:\u3000public(公有)、protected(保護)和private(私有)。因此,本題應該選擇B。

14.C解析:本題考查的知識點是:派生類對基類成員的訪問。派生類對基類中各成員的訪問能力與繼承方式無關,其成員不能訪問基類中的私有成員,可以訪問基類中的公有成員和保護成員。

15.DD?!窘馕觥磕0逍螀⒂衪ypename<參數名>、class<參數名>、<類型修飾><參數名>3種形式,即typename與class通用。

16.B解析:關系的交(∩)、并(∪)和差(-)運算要求兩個關系是同元的,顯然作為二元的R和三元S只能做笛卡兒積運算。

17.D

18.A本題考查程序效率。程序效率是指程序運行速度和程序占用的存儲空間。影響程序效率的因素是多方面的,包括程序的設計、使用的算法、數據的存儲結構等。在確定數據邏輯結構的基礎上,選擇一種合適的存儲結構,可以使得數據操作所花費的時間少,占用的存儲空間少,即提高程序的效率。因此,本題選項A的說法是正確的。

19.D

20.D解析:假設線性表的長度為n,在最壞情況下,冒泡排序和快速排序需要的比較次數為n(n-1)/2。由此可見,選項D正確。

21.C解析:根據數據結構中各數據元素之間前后關系的復雜程度,一般將數據結構分為兩大類型:線性結構與非線性結構。線性結構表示數據元素之間為一對一的關系,非線性結構表示數據元素之間為一對多或者多對一的關系。根據各種結構的定義可知,二叉樹是一種非線性結構。

22.D

23.A解析:引用比較特殊,即必須指向一個已有的同類型變量。引用是已有變量的別名,故選項\u3000C是錯誤的,選項D中變量類型不同,而選項B中是常數。

24.不能不能

25.Derived(inti):Base(i){}Derived(inti):Base(i){}解析:程序中,類Derived是基類Base的公有派生。在類Derived的構造函數應該包括調用基類構造函數,使基類的數據成員得以初始化。

26.ABDGCEHIFABDGCEHIF解析:二叉樹的遍歷是很重要的知識點,先序、中序、后序三種不同的方式要比較來掌握,注意其中的區(qū)別。此類題一定要先看清題目要求的是哪種遍歷方法,然后根據不同遍歷的特點來計算。本題要求是先序遍歷,其遍歷順序應該為①訪問根節(jié)點:②先序遍歷左子樹;③先序遍歷右子樹。按照定義,先序遍歷序列是ABDGCEHIF。

27.32

28.Derived(inti):Base(i){}Derived(inti):Base(i){}解析:本題考核派生類中構造函數。程序中,類Derived是基類Base的公有派生。在類Derived的構造函數應該包括調用基類構造函數使基類的數據成員得以初始化。

29.對象類對象類

30.10pumpkin(s)10pumpkin(s)解析:在主函數中pumpkinpl[10];定義了一個有10個元素的對象數組,所以調用了10次構造函數,靜態(tài)數據成員court累加了10次,pumpkin::total_count();顯式調用類成員函數,直接調用靜態(tài)成員函數:total_count(),打印pumpkin(s)。

31.數據庫管理系統數據庫管理系統(DBMS)

32.Location&rA1=A1;Location&rA1=A1;解析:本題主要考察引用的定義。根據上下文以及注釋可以獲取所需要的類型及名稱信息。

33.詳細設計詳細設計解析:本題屬于記憶題,從工程管理的角度來看,軟件設計分兩步來完成。首先是概要設計,然后是詳細設計。概要設計,即總體設計。將軟件需求轉化為數據結構和軟件的系統結構。詳細設計,即過程設計。通過對結構表示進行細化,得到軟件的詳細的數據結構和算法。

34.private

35.邏輯設計邏輯設計解析:本題考核數據庫設計的4個主要階段??忌枰斡洈祿煸O計中的這4個階段,并會區(qū)分不同階段的功能。其中需求分析就是分析用戶的要求。概念設計就是將需求分析得到的用戶需求抽象為信息結構及概念模型的過程。邏輯設計是在概念結構設計的基礎上,將與數據庫管理系統無關的ER圖轉換成以數據庫管理系統的邏輯數據模型表示的邏輯模式。物理設計就是為一個給定的邏輯數據模型選取一個最適合應用環(huán)境的物理結構的過程。

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

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

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

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

37.(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;”。38.(1)應改為“catch(char*s)”。(2)應改為“cateh(inti)”。

(3)應改為“catch(…)”。

【解析】本題中第1個標識前的異常拋出語句為“throw("error");”,其中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語句修改為“catch(char*S)”。第2個標識前的異常拋出語句為“throw((int)0);”,其中的類型為int。對應的異常捕捉語句catch中應該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配的catch塊,系統就會調用一個系統函數,使程序終止運行。即第2處的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類型,那么就用刪節(jié)號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。39.(1)應改為“TCobjl(1);”。(2)應改為“0bj1.SetNumber(10);”。(3)應改為“0bj2.SelNumber(100);”?!窘馕觥勘绢}第1處的“TCobjl;”語句是聲明TC類的對象0bj1,根據TC類構造函數的定義TC(inti),存在整型參數,并且題目要求第一個輸出結果兩1,所以補全參數1,即第1處的“TCobjl(1);”。第2處處的“objl.number=10;”應該是調用成員函數SetNumber賦值。在C++中成員函數的使用形式應該是:對象名.成員函數,所以修改為“obj1.SetNumber(10);”。類是對象的抽象,而對象是類的具體實例。第3處“TC.SetNumber(100);”語句中的TC為類,并不是對象,這里應該使用定義的對象,即obj2,所以將語句修改為“obj2.SetNumber(100);”。

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

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

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

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

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

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

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

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

42.(1)應改為“catch(char*s)”。(2)應改為“cateh(inti)”。(3)應改為“catch(…)”?!窘馕觥勘绢}中第1個標識前的異常拋出語句為“throw("error");”,其中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類型,而程序中給出的語句“catch(chars)”是字符型的,所以第1處的語句修改為“catch(char*S)”。第2個標識前的異常拋出語句為“throw((int)0);”,其中的類型為int。對應的異常捕捉語句catch中應該符合這個類型,所以補充catch子句中的類型,否則如果找不到匹配的catch塊,系統就會調用一個系統函數,使程序終止運行。即第2處的語句修改為“catch(inti)”。如果在catch子句中沒有指定異常信息的類型,那么就用刪節(jié)號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。

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

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

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

\n【解析】assert函數如果為假,則會產生一個中斷異常。所以要讓它正常執(zhí)行輸出結果,那么assert函數只有為真,才不會產生中斷異常?!癮ssert(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);”。

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

45.(1)應添加“public:”。

\n(2)“inti”應改為“inti(10);”。

\n(3)“i++;”應改為“i--;”。

\n【解析】本題主要考查的是成員的訪問屬性。成員的訪問屬性有公有、保護和私有3種,而默認的訪問屬性為私有,只有公有成員才能通過類的對象被訪問

溫馨提示

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

評論

0/150

提交評論