2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)_第1頁
2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)_第2頁
2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)_第3頁
2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)_第4頁
2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)_第5頁
已閱讀5頁,還剩23頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

2022年內蒙古自治區鄂爾多斯市全國計算機等級考試C++語言程序設計測試卷(含答案)學校:________班級:________姓名:________考號:________

一、1.選擇題(10題)1.下列關于對列的敘述中正確的是()。

A.在隊列中只能刪除數據B.在隊列中只能插入數據C.隊列是先進后出的線性表D.隊列是先進先出的線性表

2.運算符重載是對已有的運算符賦予多重的含義,所以()。

A.能夠對基本類型數據(如double),重新定義"+"運算符的含義

B.只能重載C++中己經有的運算符,不能重新定義新運算符

C.能夠改變一個已有運算符的優先級和操作數個數

D.C++中現有的所有運算符都可以重載

3.單個用戶使用的數據視圖的描述稱為______。

A.外模式B.概念模式C.內模式D.存儲模式

4.在數據庫管理系統提供的數據功能中,負責數據的完整性、安全性的定義功能的是()。

A.數據定義語言B.數據轉換語言C.數據操縱語言D.數據控制語言

5.在計算機中,算法是指()

A.加工方法B.解題方案的準確而完整的描述C.排序方法D.查詢方法

6.C++語言本身沒有定義I/O操作,但I/O操作包含在C++實現中。C++標準庫iostream提供了基本的I/O類。I/O操作分別由兩個類istream和()提供。

A.fstreamB.iostreamC.ostreamD.cin

7.將7個數據進行插入排序,在最壞情況下需要比較的次數是

A.42B.6C.7D.21

8.下列關于析構函數的描述中,錯誤的是()。

A.類中有且僅有一個析構函數B.析構函數可以有形參C.析構函數沒有函數類型D.析構函數對象消失時被自動執行

9.一個在基類中說明的虛函數,它在該基類中沒有定義,但要求任何派生類都必須定義自己的版本,此虛函數又稱為

A.虛析構函數B.虛構造函數C.純虛函數D.靜態成員函數

10.有如下程序:#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidPrint()const{cout<<"const:val="<<val<<'\t';}voidPrint(){cout<<"val="<<val<<'t';}private:intval;};intmain()constMyClassobj1(10);MyClassobi2(20);obj1.Print();obj2.Print();return0;}程序的輸出結果是()。

A.val=10const:val=20

B.const:val=10const:val=20

C.const:val=10val=20

D.val=10val=20

二、單選題(13題)11.c++語言類體系中,不能被派生類繼承的有()。

A.轉換函數B.構造函數C.虛函數D.靜態成員函數

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

A.templateclassA;

B.templateclassA;

C.templateclassA;

D.templateclassA;

13.計算斐波那契數列第n項的函數定義如下:intfib(intn){if.(n==0)return1;elseif(n==1)return2:elsereturnfib(n-1)+fib(n-2);}若執行函數調用表達式fib(2),函數fib被調用的次數是()。A.1B.2C.3D.4

14.對于類定義classA{public:voidfunc2{}};classB:publicA{public:w)idfuncl|cout<<"classBfuncl”<<endl:}virtualvoiIlfimc2{cout<<"classBfunc2"<<endl:}};下面正確的敘述是()。A.A::rune2和B::funcl都是虛函數

B.A::func2和B::funel都不是虛函數

C.B::funcl是虛函數,而A::func2不是虛函數

D.B::funcl不是虛函數,而A::func2是虛函數

15.下列有關繼承和派生的敘述中,正確的是A.派生類不能訪問基類的保護成員

B.作為虛基類的類不能被實例化

C.派生類應當向基類的構造函數傳遞參數

D.虛函數必須在派生類中重新實現

16.如果類A被說明成類B的友元,則()。

A.類A的成員即類B的成員B.類B的成員即類A的成員C.類A的成員函數不得訪問類B的成員D.類B不一定是類A的友元

17.有下列程序:

#include<stdi0.h>

voidmain()

{intx=1,y=2,z=3;

if(x>y)

if(y<z)print{("%d",++z);

elseprintf("%d",++y);

printf(”%d\n”,x++);

}

程序的運行結果是()。

A.A.331B.41C.2D.1

18.靜態成員函數沒有()。

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

19.下列描述中正確的是()。

A.程序就是軟件

B.軟件開發不受計算機系統的限制

C.軟件既是邏輯實體,又是物理實體

D.軟件是程序、數據與相關文檔的集合

20.已知函數f的原型是“voidf(int*x,int&y);”,變量v1、v2的定義是“intv1,v2;”,下列調用語句中,正確的是()。

A.f(v1,v2)B.t(v1,&v2)C.f(&v1,v2)D.f(&v1,&v2);

21.下面描述中體現了抽象類特性的語句是

A.可以說明虛函數B.可以進行構造函數重載C.可以定義友元函數D.不能定義對象

22.一個關系中屬性個數為1時,稱此關系為()。

A.對應關系B.單一關系C.一元關系D.二元關系

23.關于靜態數據成員的描述中正確的是()。

A.類的靜態數據成員不是類的所有對象共享的數據

B.類的靜態數據成員不能被類的成員函數調用

C.類的靜態數據成員不能被類的構造函數調用

D.類的靜態數據成員必須進行初始化

三、2.填空題(12題)24.以下程序的執行結果是_____。

#include<iostream.h>

#include<iomanip.h>

voidmain()

{

cout.fill('*');

cout.width(10);

cout<<setiosflags(ios::left)<<"123.45"<<endl;

cout.width(8);

cout<<"123.45"<<endl:

cout.width(4);

cout<<"123.

25.在C++中,給一變量取別名,可以通過【】方式。

26.若有以下程序:

#include〈iostream〉

usingnamespacestd;

classBase

{

public:

Base()

{

x=0;

}

intx;

};

classDerived1:virtualpublicBase

{

public:

Derived1()

{

x=10;

}

};

classDerived2:virtualpublicBase

{

public:

Derived2()

{

x=20;

}

};

classDerived:publicDerived1,protectedDerived2

{};

intmain()

{

Derivedobj;

cout〈〈obj.x〈〈end1;

return0;

}

該程序運行后的輸出結果是【】。

27.數據流圖有兩種典型的結構形式,它們分別是變換型和【】。

28.以/*開始,*/結束,在/*和*/之間的部分即為【】。

29.下列程序的輸出結果是______。

#include<iostream.h>

#include<cstring.h>

usingnamespacestd;

voidfun(constchar*s,char&C){c=s[strlen(s)/2];}

intmain{)

{

charstr[]="ABCDE";

charch=str[1];

fun(str,sh);

cout<<Ch;

return0;

}

30.下列程序在輸入m后,求滿足條件“n!<=m<=(n+1)!”的值n,請將程序補充完整。

#include<iostream>

usingnamespacestd;

intmain()

{

intn,m,jc=1;

cin>>m;

for(n=2;jc<=m;n++)

jc=jc*n;

cout<<"n="<<【】<<end1;

return0;

}

31.在數據庫的概念結構設計中,常用的描述工具是【】。

32.在類中聲明的靜態浮點數的默認初始化值是【】。

33.從一個或多個基本表導出的表是一個【】,它是一個虛表。

34.有以下程序:

#include<iostream>

#include<fstream>

usingnamespacestd;

intmain()

{

fstreamfile;

file.open("abc.txt",ios::in);

if(!file)

{

cout<<"Cannotopenabc.txt"<<end1;

abort();

}

charbuf[80];

inti=0;

while(!file.eof())

{

file.getline(buf,80);

i++;

}

cout<<"Lines:"<<i<<end1;

file.close();

return0;

}

程序實現的功能是【】。

35.算法的復雜度主要包括時間復雜度和______復雜度。

四、程序改錯題(10題)36.使用VC++6.0打開考生文件夾下的源程序文件

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

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

//******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;

}

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

}

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

}

39.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正程序中的錯誤。本程序要求實現的功能為從鍵盤輸入一個字符串,并將結果保存到文件1.txt中。注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******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,該程序運行時有錯誤,請改正程序中的錯誤,使得程序輸出:

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;

}

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

}

42.使用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;}43.使用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;}44.使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執行的任何異常。

程序異常,輸出信息為

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;

}45.使用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;}五、綜合應用題(2題)46.請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中包含了類IntegerSet和主函數main的定義。一個IntegerSet對象就是一個整數的集合,其中包含0個或多個無重復的整數;為了便于進行集合操作,這些整數按升序存放在成員數組elem的前若干單元中。成員函數add的作用是將一個元素添加到集合中(如果集合中不存在該元素),成員函數remove從集合中刪除指定的元素(如果集合中存在該元素)。請編寫成員函數remove。在main函數中給出了一組測試數據,此時程序的正確輸出結果應為:234527283166752345627283156752345619272831667534561927283166753456192728316675要求:補充編制的內容寫在“//***********333***********”與“//***********666***********”之間,不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為obj文件,并且在本程序中調用。//IntegorSet.h#ifndefINTEGERSET#defineINTEGERSET#include<iostream>usingnamespacestd;constintMAXELEMENTS=100;//集合最多可擁有的元素個數classIntegerSet{intelem[MAXELEMENTS];//用于存放集合元素的數組intcounter;//用于記錄集合中元素個數的計數器puhlic:IntegerSet:counter(0){}//創建一個空集合IntegerSet(intdata[],intsize);//利用數組提供的數據創建一個整數集合voidadd(intelement);//添加一個元素到集合中voidremeve(intelement);//刪除集合中指定的元素intgetCountconst{returncounter;}//返回集合中元素的個數intgetElement(inti)const{retumelem[i];}//返回集合中指定的元素voidshowconst;};voidWriteToFile(char*);#endif//main.cpp#include”IntegerSet.h”#include<inmanip>IntegerSet::IntegerSet(intdata[],intsize):counter(0){for(inti=0;i<size;i++)add(data[i]);}}voidIntegerSet::add(intelement){intj;//從后往前尋找第一個小于等于element的元素for(j=counter;j>0;j-)if(element>=elem[j一1])break;//如果找到的是等于element的元素,說明要添加的元素已經存在,直接返回if(j>0)if(element==elem[j-1])return;//如果找到的是小于element的元素,j就是要添加的位置//該元素及其后面的元素依次后移,騰出插入位置for(intk=counter;k>j;k一)elem[k]=elem[k一1];elem[j]=element;//將element插入到該位置counter++;//計數器加l}voidIntegerSet::remove(intelement){//***************333***************//***************666***************voidIntegerSet::showconst{for(inti=0;i<getCount;i++)cout<<setw(4)<<getElement(i);cout<<endl:}intmain{intd[]={5,28,2,4,5,3,2,75,27,66,31};IntegerSetS(d,11);S.show;S.add(6);s.show;S.add(19);S.show;S.remove(2);s.show;S.add(4);S.show;writeToFile(””);return0;}47.使用VC++6.0打開考生文件夾下的源程序文件3.cpp,其中定義了用于表示矩形的CRect類,但類CRect的定義并不完整。請按要求完成下列操作,將類CRect的定義補充完整。(1)定義私有數據成員leftPoint、topPoint、rightPoint、bottomPoint,分別用于表示矩形左上角及右下角的點的坐標,它們都是double型的數據。請在注釋1之后添加適當的語句。(2)完成默認構造函數CRect的定義,指定默認實參為0,它們都是double型的數據。請在注釋2之后添加適當的語句。(3)定義函數體為空的析構函數。請在注釋3之后添加適當的語句。(4)在main函數中定義GReet類的實例rect2,并把re-ct1的值賦給rect2。請在注釋4之后添加適當的語句。注意:除在指定位置添加語句之外,不要改動程序中的其他內容。試題程序:#include<iostream.h>classCRect{private://********1********public://********2********//********3********voidSetPoints(double,double,double,double);voidSetLeftPoint(doublem){leftPoint=m;}voidSetRightPoint(doublem){rightPoint=m;}voidSetTopPoint(doublem){topPoint=m;}voidSetBottomPoint(doublem){bottomPoint=m;}voidDisplay();};CReet::CRect(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::Setpoints(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=n;bottomPoint=b;}voidCRect::Display(){cout<<"left-toppointis("<<leftPoint<<","<<top-Point<<")"<<\n;cout<<"right-bottompointis("<<rightPoint<<","<<bottomPoint<<")"<<\n;}voidmain(){CRectrect0;rect0.Display();rect0.SetPoints(20,20.6,30,40);rect0.Display();CRectrectl(0,0,150,150);rect1.SetTopPoint(10.5);rect1.SetLeftPoint(10.5);//********4********rect2.Display();}六、3.綜合應用題(2題)48.使用VC6打開考生文件夾下的工程test26_3。此工程包含一個test26_3.cpp,其中定義了類queue,但該類的定義并不完

整。請按要求完成下列操作,將程序補充完整。

(1)完成類queue的無參數的構造函數的定義,要求把數據成員bl和el都初始化為0,同時輸出queueinitialized。請在注釋“//**1**”之后添加適當的語句。

(2)完成類queue的成員函數qput(intj)的定義,它的功能是把新的元素加入隊列,過程是先依據bl的值判斷數組是否已經滿了,如果是就輸出queueisfull,否則bl自加一,并且把參數j的值存入bl指向的數組元素中,請在注釋“//**2**”之后添加適當的語句。

(3)完成類queue的成員函數qget()的定義,它的功能是把隊列開頭的元素提取出隊列,并返回該值,過程是先比較el和bl的值判斷隊列是否已空,如果是就輸出queueisempty,否則el自加一,并且把el指向的數組元素返回,請在注釋“//**3**”之后添加適當的語句。

程序輸出結果如下:

queueinitialized

queueinitialized

3311

4422

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

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

#include<iostream.h>

classqueue

{

intq[100];

intbl,el;

public:

queue();

voidqput(intj);

intqget();

};

queue::queue()

{

//**1**

}

voidqueue::qput(intj)

{

//**2**

{

cout<<"queueisfull\n";

return;

}

bl++;

q[bl]=j;

}

intqueue::qget()

{

//**3**

{

cout<<"queueisempty\n";

return0;

}

el++;

returnq[el];

}

voidmain()

{

queueaa,bb;

aa.qput(11);

bb.qput(22);

aa.qput(33);

bb.qput(44);

cout<<aa.qget()<<""<<aa.qget()<<"\n";

cout<<bb.qget()<<""<<bb.qget()<<"\n";

}

49.使用VC6打開考生文件夾下的工程MyProj12。此工程包含一個源程序文件MyMain12.cpp。程序中定義了兩個類Base和Derived,但類的定義并不完整。

請按要求完成下列操作,將類的定義補充完成:

①類Derived是基類Base公有派生來的。請在注釋“//**1**”之后添加適當的語句。

②完成構造函數Derived(intx)定義,采用初始化列表的方式使基類Base私有成員a初始化為x,類Derived的私有成員b初始化為x+1。請在注釋“//**2**”之后添加適當的語句。

③完成類Derived的成員函數show()的類體外的定義。函數show()中要輸出基類數據成員a的值,然后要輸出私有成員b的值。請在注釋“//**3**之后添加適當的語句。

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

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

//MyMain12.cpp

#include<iostream>

usingnamespacestd;

classBase

{

public:

inta;

Base(inti)

{

a=i;

}

};

//***1***

{

private:

intb;

public:

//***2***

voidshow();

};

voidDerived::show()

{

//***3***

}

intmain()

{

Derivedd(1);

d.show();

return0;

}

參考答案

1.D解析:隊列是允許在一端進行插入而在另一端進行刪除的線性表。在隊列中,最先插入的元素將最先能夠被刪除,反之,最后插入的元素將最后才能被刪除。因此,隊列又稱為“先進先出”或“后進后出”的線性表。

2.B解析:C++在重載運算符時,必須符合以下的條件:

①不可以重載內置的C++數據類型(如int,double等類型)運算符的含義;

②不可以定義C++中沒有的運算符;

⑨不可以改變重載運算符的優先級與操作數的個數;

④有些運算符不能被重載,例如域運算符(::),條件運算符(?:)等,具體哪些運算符不能被重載與編譯器有關。

3.A解析:選項A)正確,外模式是用戶的數據視圖,也就是用戶所見到的數據模式;選項B)不正確,全局數據視圖的描述稱為概念模式,即數據庫中全部數據的整體邏輯結構的描述;選項C)不正確,物理存儲數據視圖的描述稱為內模式,即數據庫在物理存儲方面的描述;選項D)不正確,存儲模式即為內模式。

4.A

5.B在計算機中,算法被定義為對一個問題求解步驟的一種描述,是求解問題的方法,它是指令的有限序列,其中每條指令表示一個或者多個操作。算法具有有窮性、確定性、可行性、輸入和輸出五大特點。

在本題中,選項A、C、D的說法明顯偏離了算法的定義,因此正確答案選B。

6.C解析:本題考查的是C++標準庫iostream提供的基本I/O類。istream提供了向流中插入數據的有關操作:ostream提供了從流中提取數據的操作。

7.D解析:對長度為n的線性表進行插入排序,在最壞情況下需要n(n-1)/2次比較,現線性表的長度為?,在最壞情況下需要比較的次數為7(7-1)/2=21。

8.B

9.C解析:本題考核純虛函數的定義。純虛函數是一種特殊的虛函數,純虛函數是在虛函數的后面加上“=0”,表示該虛函數無函數體,并非賦值運算。純虛函數的一般格式如下:

virtual<類型><函數名>(<參數表>)=0;

在很多情況下,在基類中不能對虛函數給出有意義的實現,而把它說明為純虛函數,它的實現留給該基類的派生類去做。

題目中描述的是純虛函數的特點。

10.C解析:此題考查的是常成員函數的重載。常成員函數是使用const關鍵字說明的函數。COHM關鍵字可用于區分重載函數。此時,常對象調用常成員函數,一般對象調用一般成員函數;題目中的Print()就是通過const重載的兩個成員函數,主函數中聲明的。obj1是常對象,obj2是一般對象。故輸出結果是const::val=10val=20。

11.B解析:派生類對象的數據結構是由基類中說明的數據成員和派生類中說明的數據成員共同構成,所以不能繼承基類的構造函數,必須重新定義。

12.DD。【解析】模板形參有typename<參數名>、class<參數名>、<類型修飾><參數名>3種形式,即typename與class通用。

13.CC。【解析】根據遞歸調用的含義,當n為2時有fib(o),fib(1),fib(2)被調用,且fib(0),fib(1)時調用結束,共3次。

14.C基類中說明的虛函數,在派生類中自然就是虛函數,所以類B中funcl是虛函數;而類A中的func2沒有被關鍵字virtual修飾,所以不是虛函數。

15.C解析:本題考查的知識點是:繼承和派生。無論使用哪種繼承方式,派生類中的成員都不能訪問基類中的私有成員,而可以訪問基類中的公有成員和保護成員,因此選項A)不正確。在C++中,只有抽象類不能被實例化,而虛基類不一定非得是抽象類,所以選項B)不正確。在派生類中可以重新定義從基類繼承下來的虛函數,也可以不重新定義,因此選項D)不正確。故本題應該選擇C。

16.DD。【解析】本題考查的是友元類的定義:類A為類B的友元類,則類A的所有成員函數都是類B的友元函數,但反之則不一定成立。

17.DD。【解析】C語言中規定,else與離它最近的if相匹配。

x=1,y=2,z=3,所以第一個if的條件(x>y)不成立,直接執行printf("%d\n",x+1);語句,輸出x的值1,再把x加1。

18.B

19.D\r\n軟件是與計算機操作相關的計算機程序、規程、規則,以及可能有的文件、文檔及數據;軟件開發要受到計算機系統的限制;軟件是一個邏輯實體,不是物理實體,軟件具有抽象性。因此選項D正確。

20.BB。【解析】voidf(int*X,int&。y);第一個參數需要取值,第二個參數需要取地址,所以為v1為取值,&Lv2為取址。

21.D解析:抽象類指的是類中至少有一個純虛函數,純虛函數是虛函數后有“=0”修飾,表示該函數在本級類中沒有實現,類僅用于派生。抽象類存在的唯一目的就是構造類層次,派生出其他類。抽象類與其他類的最大區別就在于抽象類不能實例化。

22.C解析:在關系模型數據庫中,基本結構是二維表,這種二維表稱為關系。關系的列稱為屬性,一個具有N個屬性的關系稱為N元關系。注意:各種關系查詢語言與過程性語言和非過程性語言的關系,過程性語言的特點。

23.D解析:C++類中的靜態成員變量是該類中所有對象所共有的,它能夠被類中的任何函數調用,所以選項A)、選項B)、選項C)是錯誤的。而類的靜態數據成員是必須要進行初始化才能使用的。

24.123.45****123.45**123.45

25.引用引用解析:引用是給對對象的別名,對引用的操作就是對被引用對象的操作。

26.2020解析:本題中,雖然Derived1和Derived2都是由共同的基類Base派生而來的,但由于引入了虛基類,使得它們分別對應基類的不同副本。這時數據成員x只存在一份拷貝,不論在類Derived1修改,還是在類Derived2中修改,都是直接對這惟一拷貝進行操作。本題程序執行語句“Derivedobj”時,就會先調用虛基類Base的構造函數,使得x=0,然后執行類Derived1的構造函數使得x=10,再執行類Derived2的構造函數,使得x=20。最后輸出x的值為20。

27.事務型事務型解析:數據流圖中有眾多的加工,但必有一個加工是起核心作用的,這樣的加工稱為中心加工。由數據流圖導出結構圖的關鍵是找出中心加工。一般來說,中心加工有兩種存在形態,即數據流圖有兩種典型的結構形式:一種是變換型,另一種是事務型。

28.注釋部分注釋部分解析:使用/*..*/注釋必須要匹配。

29.CC解析:本題考核數組的定義、使用以及函數的調用。fun函數的作用是將字符串str中間的字符賦值給地址傳入的變量ch。所以ch的值將被修改為‘C’。

30.(n-2)(n-2)解析:研究本題中包含的語句“jc<=m;”和“jc=jc*n:”,可發現本題是通過求出“n!”的值jc并檢查該值是否大于m;如果小于等于,繼續循環求出“(n+1)!”直到jc>m。跳出循環后,得到n的值并輸出。題中要填出n的輸出值,但應注意:如果直接填n,是錯誤的。因為在循環語句中先求出jc=jc*n,如果這時的jc>m,循環還沒結束,n的值就比要求的值大1,結束循環后,執行n++后,再判斷jc<=m,所以n的值比所求的大2,故應填入n-2。

31.E-R圖E-R圖

32.OO解析:靜態變量由系統自動初始化為0。

33.視圖視圖解析:視圖是從一個或多個基本表中導出的虛表,它本身不存儲數據。

34.統計文件abc.txt的行數統計文件abc.txt的行數解析:函數getline(char*s,streamsizen)從當前輸入位置開始提取字符存入s所指向的具有n個字節的字符空間中。程序中這種調用方式是以換行符為結束標志輸入字符序列,即輸入一行字符(回車換行前的所有字符序列)。程序中通過while循環來統計abc.txt中行數。

35.空間空間解析:衡量一個算法的復雜度有兩個指標:時間復雜度和空間復雜度。前者用來衡量執行算法時所需要的計算工作量,而后者用來衡量執行算法所需要的存儲空間。

36.(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處,調用成員函數open中,輸入、輸出方式是在ios類中定義的,所以“out1.open('1.txt',binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open('1.txt',ios::binary|ios::app);”。第3個標識應該用流成員函數put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

37.(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中的每一個字符是否為結束符,若不是結束符,在循環中判斷每一個字符是否為小寫,若為小寫,則轉換。所以應該修改為“while(str[i])”。第3處的“if(str[i]>=a)”語句是判斷字符str[i]是否為小寫字符,而現有的語句只是判斷字符是否大于a,但是小寫字符應該是a到2,所以修改為“if(str[i]>=a&&str[i]>=z)”。

38.(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”可知,顯然這里是在類外實現析構函數,析構函數是一個特殊的函數,它的名稱和類名相同,并在前面加“~”字符,用采與構造函數加以區別,因此第3處的語句應改為“TC::~TC”。

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處,調用成員函數open中,輸入、輸出方式是在ios類中定義的,所以“out1.open("1.txt",binary|app);”語句缺少類ios,即第2處的語句修改為“out1.open("1.txt",ios::binary|ios::app);”。第3個標識應該用流成員函數put輸出字符,所以第3處的語句修改為“out1.put(s[i]);”。

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

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

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

\n【解析】本題主要考查的是成員的訪問屬性。成員的訪問屬性有公有、保護和私有3種,而默認的訪問屬性為私有,只有公有成員才能通過類的對象被訪問。故應在構造函數前添加“public:”,否則該類無法被實例化。變量的初始化可以通過“=”號,也可以和初始化對象一樣添加構造參數,題目已要求使用后者。本題要求輸出5個數,while的循環變量i每次減1,在i>5時循環,故i初始化應為10。若循環中i每次增1,則循環永遠不會退出。

41.(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);”。

42.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”。【解析】本題主要考查了主函數定義及冪同進制之間的轉換,包括十進制到八進制,十進制到十六進制。主函數定義的定義形式為“main”,函數名之后必須是一對括號,因此第1處應改為“voidmain”。cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發現變量的初值不正確,十進制的100對應八進制的144,卡進制的37對應十六進制的25,因此2和3應分別改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。43.(1)“stat

溫馨提示

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

評論

0/150

提交評論