計算機下半年有兩次考試,為幫助考生備考9月計算機等級考試,今天本站小編就給大家分享一些計算機二級考試的模擬試題,供大家參考:
一、選擇題
1演算法的空間複雜度是指( )。
A.演算法在執行過程中所需要的計算機儲存空間
B.演算法所處理的資料量
C.演算法程式中的語句或指令條數
D.演算法在執行過程中所需要的臨時工作單元數
參考答案:A
參考解析:一個演算法的空間複雜度,一般是指執行這個演算法所需要的記憶體空間。
2每個C++程式中都必須有且僅有一個( )。
A.類B.預處理命令C.主函式D.語句
參考答案:C
參考解析:每個C++程式中都要有且僅有一個主函式,該函式是程式的入口,而語句、預處理命令和函式及類在程式中都可以有多個。
3對長度為n的線性表排序,在最壞情況下,比較次數不是n(n-1)/2的排序方法是( )。
A.快速排序B.氣泡排序C.直接插入排序D.堆排序
參考答案:D
參考解析:首先知道有哪些排序的方法及各種排序方法在最壞情況下需要比較的次數,氣泡排序n(n-1)/2、希爾排序0(n1.5)、簡單選擇排序n(n-1)/2、堆排序O(nl0g2n)。
4資料庫系統的三級模式不包括( )。
A.概念模式B.內模式C.外模式D.資料模式
參考答案:D
參考解析:資料庫三級模式包括:概念模式、內模式、外模式。
5SQL語言又稱為( )。
A.結構化定義語言
B.結構化控制語言
C.結構化查詢語苦
D.結構化操縱語言
參考答案:C
參考解析:SQL語言的全稱為StructuredQueryLanguage,它是一種介於關係代數與關係演算之間的結構化查詢語言,是一種面向資料庫的通用資料處理語言規範。它包含資料查詢語言、資料操縱語言、資料定義語言和資料控制語言四個部分。
6資料處理的最小單位是( )。
A.資料B.資料元素C.資料項D.資料結構
參考答案:C
7假定MyClass為一個類,那麼下列的函式說明中,( )為該類的解構函式。
~MyClass();B.~MyC|ass(intn);ass();D.~MyClass();
參考答案:D
參考解析:C++語言中解構函式為符號“~”加類名,且解構函式沒有返回值和引數,故前不加void關鍵字。所以正確的形式應該是~MyClass()。第7題 筆記記錄我的筆記(0) | 精選筆記(1)選擇筆記標籤:試題內容(1)答案解析(0)
8有以下結構體說明和變數的定義,且指標P指向變數a,指標q指向變數b。則不能把結點b連線到結點a之後的語句是( )。
structnode
{chardata;
structnode*next;
}a,b,*p=&a,*q=&b;
=q;=&b;C.p->next=&b;D.(*p)=q;
參考答案:B
9若有表示式“(w)?(--x):(++y)”,則其中與w等價的表示式是( )。
A.w==1B.w==0C.W!=1D.W!=0
參考答案:D
參考解析:本題考查三目運算等。條件表示式的格式為a?b;c。它的含義是,當a為真時,取b的值,否則取c的值。在C語言程式中“為真”即“不等於零”,“為假”即等於0。所以和w等價的表示式是w非零。
10有如下函式模板宣告:
template
TMax(Ta,Tb){return(a>b)?a:b;}
下列對函式模板Max( )的呼叫中錯誤的是( )。
(3.5,4.5)(3.5,4)(35,4.5)(3.5,4)
參考答案:B
參考解析:本題考查函式模板的引用。引用模板函式和引用一般函式在語法形式上基本相同。需要注意的是,說明一個函式模板後,當編譯系統發現有一個對應的函式呼叫時,將根據實參中的型別來確認是否呼叫函式模板中的對應形參。本題選項B中,編譯系統從第一個引數“3.5”獲得資訊“double型資料”和從第二個引數獲得資訊“int型資料”,兩者矛盾。
11C++語言中關於建構函式的說法正確的是( )。
A.建構函式的函式名不必和類名相同
B.建構函式只能有一個
C.每個類必定有建構函式
D.建構函式必有返回值
參考答案:C
參考解析:本題考查建構函式的概念。建構函式可以被過載,函式名必須和類名相同;建構函式可以有一個,也可以有多個;建構函式沒有返回值。
12下列描述中,錯誤的是( )。
A.公有繼承時基類中的公有成員在派生類中仍是公有成員
B.公有繼承時基類中的保護成員在派生類中仍是保護成員
C.保護繼承時基類中的公有成員在派生類中仍是公有成員
D.保護繼承時基類中的保護成員在派生類中仍是保護成員
參考答案:C
參考解析:保護繼承時,類成員的訪問級別只能降低為保護模式,因此即使是基類的公有成員也被縮小為保護模式。
13結構化程式所要求的基本結構不包括( )。
A.順序結構跳轉C.選擇(分支)結構D.重複(迴圈)結構
參考答案:B
參考解析:結構化程式設計的三種結構是順序、分支和迴圈,不包括goto跳轉,它只是分支結構的一種,也是一個關鍵字。
14在E—R圖中,用來表示實體聯絡的圖形是( )。
A.橢圓圖B.矩形C.菱形D.三角形
參考答案:C
參考解析:E—R圖中用矩形表示實體(等同於表),用橢圓形表示實體的屬性(等同於表中欄位),用菱形表示實體關係(等同於外來鍵)。
15下列資料結構中,屬於非線性結構的是( )。
A.迴圈佇列B.帶鏈佇列C.二元樹D.帶鏈棧
參考答案:C
參考解析:佇列是一種允許在一端進行插入,而在另一端進行刪除的線性表。棧也是一種特殊的線性表,其插入與刪除只能在線性表的一端進行。
16對長度為n的線性表進行順序查詢,在最壞情況下所需要的比較次數為( )。
2nB.n/.n+1
參考答案:C
參考解析:對線性表進行順序查詢,最壞情況下,如果從表頭進行查詢,要查詢到表尾才能得出結果,因此需要比較n次。
17下面程式的執行結果為( )。#include
voidswap(int&a,intb)
{
inttemp;
temp=a++;
a=b:
b=temp:
}
voidmain()
{
inta=2,b=3;
swap(a,b);
cout<
}
A.2,3B.3,2C.2,2D.3,3
參考答案:D
參考解析:本題考查引用呼叫,因為函式swap引用呼叫引數a,所以在swap函式中a的變化會改變主函式中a的值,即a自加1。但b的值並未改變。
18若有以下程式:
#include
usingnamespacestd;
classBase
{public:
Base()
{x=0;}
intx;};
classDerivedl:virtualpublicBase
{public:
Derivedl()
{x=10;}};
classDerived2:virtua11publicBase
{public:
Derived2()
{x=20;}};
classDerived:publicDerivedl,protectedDerived2{};intmain()
{Derivedobj;
cout<
return0;}
該程式執行後的輸出結果是( )。
A.20B.30C.10D.0
參考答案:A
參考解析:本題考查虛基類的應用。雖然Derivedl和Derived2都是由共同的基類x派生而來的,但由於引入了虛基類,使得它們分別對應基類的不同副本。這時資料成員x只存在一份副本,不論在類Derivedl中修改,還是在Derived2中修改,都是直接對這唯一副本進行操作。本題程式執行語句“Derivedobj;”時.就會先調虛基類Base的建構函式,使得X=0,然後執行類Derivedl的建構函式使得x=10,再執行類Derived2的建構函式,使得x=20。最後輸出x的值為20。
19下列選項中不合法的識別符號是( )。
.&aD.-00
參考答案:C
參考解析:識別符號的概念只能由數字、字母和下畫線組成,並且只能以字母和下畫線開頭,所以選項C不正確。
20考慮函式原型voidtest(inta,intb=7,charz='*'),下面的函式呼叫中,屬於不合法呼叫的是( )。
(5);(5,8);(6,'#');(0,0,'*');
參考答案:C
參考解析:題中函式宣告帶有預設引數,那麼在C選項的呼叫中,將會把字元型實參#賦值給整型形參b,這不符合引數傳遞規則。
21當需要將一個函式boolisnunlber(charc)宣告為行內函數時,此行內函數的函式原型為( )。
boolisnumber(charc);
neboolisnumber(charc);
neboolisnumber(charc);
mboolisnumber(charc);
參考答案:C
參考解析:本題考查行內函數的相關知識點。函式原型應指出函式名、返回值型別以及在呼叫函式時提供的引數的個數和型別,因為要宣告為行內函數,故應加inline關鍵字。
22有如下程式:
#include
usingnamespacestd;
intmain( ){
inta[6]={23,l5,64,33,40,58};
ints1,s2;
s1=s2=a[0];
for(int*p=a+1;p
if(sl>*p)s1=*P;
if(s2<*p)s2=*p;
}
cout<
return0;
}
執行時的輸出結果是( )。
A.23B.58C.64D.79
參考答案:D
參考解析:根據題意,找出陣列a中最大值sl和最小值s2並計算二者的和。
23以下程式中呼叫cin函式給變數a輸入數值的方法是錯誤的,其錯誤的原因是( )。
#include(iostream.h)
voidmain( )
{int*P,*q,a,b;
p=&a;
cout<<"inputa:";
cin>>P;
}
A.*P表示的是指標變數P的地址
B.P表示的是變數a的地址,而不是變數a的值
C.*P表示的是指標變數p的值
D.*P只能用來說明P是一個指標變數
參考答案:B
參考解析:p表示的`是變數a的地址,定義後*P表示的是變數a的值。
24有以下程式:
classDate
{
public:
Date(inty,intm,intd);
{
year=Y:
month=m;
day=d;
}
Date(inty=2000)
{
year=y;
month=10;
day=1;
}
Date(Date&d)
{
year=;
month=h;
day=;
}
voidprint( )
{
cout<
}
private:
intyear,month,day;
};
Datefun(Dated)
{
Datetemp;
temp=d;
returntemp;
}
intmain( )
{
Datedatel(2000,1,1),date2(0,0,0);
Datedate3(datel);
date2=fun(date3);
return0;
}
程式執行時,Date類的拷貝建構函式被呼叫的次數是( )。
A.2B.3C.4D.5
參考答案:B
參考解析:本題考核拷貝建構函式。上述程式中,拷貝建構函式一共被呼叫了3次:第1次是在執行語句Datedate3(date1)時,用已經建立的物件date1對正在建立的物件date3進行初始化;第2次是在呼叫fun函式時,由於是傳值呼叫,因此實參物件date3要對形參物件d進行初始化;第3次是在執行fun函式中的返回語句returntemp;時,系統初始化一個匿名物件時使用了拷貝建構函式。
25下面程式的輸出結果是( )。
#include
Usingnamespacestd;
ClassBase{
public:
Base(intx=O){count<
}
};
ClassDerived:publicBase{
public:Derved(intx=0{count<
}
private;
Baseval;
};
intmina(){
Derivedd(1);
retrun0;
}
A.0B.1C.01D.001
參考答案:D
26軟體設計中劃分模組的一個準則是( )。
A.低內聚低耦合B.高內聚低耦合C.低內聚高耦合D.高內聚高耦合
參考答案:B
參考解析:耦合性與內聚性是模組獨立性的兩個定性標準,耦合與內聚是相互關聯的。在程式結構中,各個模組的內聚性越強,則耦合性越弱。一般較優秀的軟體設計,應儘量做到高內聚、低耦合,即減弱模組之間的耦合性和提高模組內的內聚性,有利於提高模組的獨立性。
27下列程式的執行結果是( )。
#include
intx=5;
intfun(inta)
{
intc:
c=X*a:
returnC;
}
voidmain()
{
intx=3,a=4;
x=x+fun(a);
cout<<"x="<
}
A.x=15B.x=17C.x=23D.x=25
參考答案:C
參考解析:由主函式main入手,首先x被賦值為3,a被賦值為4,然後呼叫fun函式,引數為4,所以在fun函式中的a=4。而主程式中的x作用域是由它定義開始到cout輸出,在fun函式中無效。而在fun函式定義前的變數X作用域是整個程式,所以fun函式中的x值為5,這樣C的值就為20。在主函式中的x+fun(a)中的x為靠近這條語句的x定義,即3,所以最後x的值為20+3=23。第27題 筆記記錄我的筆記(0) | 精選筆記(0)選擇筆記標籤:試題內容(0)答案解析(0)
28資料庫DB、資料庫系統DBS、資料庫管理系統DBMS之間的關係是( )。
包含DBS和包含DB和包含DB和DBMSD.沒有任何關係
參考答案:C
參考解析:資料庫系統(DBS)是指在計算機系統中引入資料庫後的系統,一般有資料庫(DB)、資料庫管理系統(DBMS)、應用系統、資料庫管理員和使用者構成。
29在軟體開發中,需求分析階段產生的主要文件是( )。
A.軟體整合測試計劃B.軟體詳細設計說明書C.使用者手冊D.軟體需求規格說明書
參考答案:D
參考解析:需求分析階段只能產生需求分析規格說明書,A測試說明書是軟體測試階段生成的,B軟體詳細設計說明數是設計階段生產,C使用者手冊是軟體釋出時隨軟體一同交付給使用者的。
30有如下程式:
#include
usingnamespacestd;
classXA{
inta;
public:
staticintb;
XA(intaa):a(aa){b++;}
~XA( ){}
intget( ){returna;}
};
intXA::b=0
intmain( ){
XAd1(1),d2(3);
cout<
return0;
}
執行時的輸出結果是( )。
A.5B.6C.7D.8
參考答案:C
參考解析:每呼叫一次get函式時,對新的類A物件進行一次例項化,呼叫一次建構函式,類A的靜態成員變數b便加1。
31是( )。
A.2*a*b/c/dB.a*b/c/d*2C.a/c/d*b*2D.2*a*b/c*d
參考答案:D
參考解析:本題考查運算子的優先順序書寫及運算。*、/運算優先順序相同,據此判斷,選項D表示的是2abd/c,而不是2ab/(cd)。
32對於模板定義關鍵字class和typename說法不正確的是( )。
A.程式中的class並不能都替換為typename
s和typename都可互相替換
C.程式中的typename都能替換為class
D.程式中的部分class可以替換為typename
參考答案:B
參考解析:在C++程式中的typename是都可以替換為class的,但class不能都替換為typename。
33下面程式的執行結果為( )。
#include
ClassA
{
public:A( ){cout<<"1";}
~A( ){cout<<"2";}
};
ClassB:public:A
{
public:
B( ){cout<<"3";}
~B( ){cout<<"4";}
};
Voidmain( )
{
Bb;
}
A.1234B.1324C.1342D.3142
參考答案:C
參考解析:本題考查在繼承中建構函式和解構函式的呼叫順序,應該是先呼叫基類的建構函式,再呼叫派生類的建構函式,呼叫解構函式時的順序是先呼叫派生類的解構函式,後呼叫基類的解構函式。
34有如下程式:
#include
usingnamespacestd;
classPublication{//出版物類
charname[30];
public:
Publication(char*name=”未知名稱”){
~strcpy(this一>name,name);
}
constchar*getName( )const{returnname;}
virtualconstchar*getType( )const{return”未知型別”;}
};
classBook:publicPublication{//書類
public:
Book(char*name):Publication(name){}
virtualconstchar*getType( )const{return"書";}
};
voidshowPublication(Publication&p){
cout<
endl;
}
intmain( ){
Bookbook(”精彩人生”);
showPublication(book);
return0;
}
執行時的輸出結果是( )。
A.未知型別:未知名稱
B.未知型別:精彩人生
C.書:未知名稱
D.書:精彩人生
參考答案:D
參考解析:因為getType是虛擬函式,所以ype()執行繼承類的getType函式,輸出“書”;ame()執行基類的getName函式,輸出“精彩人生”。總共輸出“書:精彩人生”,故選D。
35若有以下程式:
#include
usillgnamespacestd;
classA
{private:
inta;
public:
A(inti)
{a=i;}
voiddisp()
{cout<
classB
{private:
intb;
public:
B(intj)
{b=j;}
voiddisp()
{COUt<
classC:publicB,publicA
{private:
intC;
public:
C(intk):A(k-2),B(k+2)
(c=k;)
voiddisp()
{A::disp();
B::disp();
cout<
intmain()
{Cobj(10);
();
return0;}
程式執行後的輸出結果是( )。
A.10,10,10B.10,12,14C.8,10,12D.8,12,10
參考答案:D
參考解析:本題考查派生類建構函式的使用。派生類C具有多重繼承關係,所以在派生類C的建構函式中應該包含基類A和B的成員初始化列表。
36若AA為一個類,a為該類的非靜態資料成員,在該類的一個成員函式定義中訪問a時,其書寫格式為( )。
.a{}::a{}
參考答案:A
參考解析:a是類AA的非靜態資料成員,在類AA的成員函式中可以直接訪問。B是訪問靜態資料成員的方式,C和D都是訪問函式的方式。
37靜態成員函式沒有( )。
A.返回值指標C.指標引數D.返回型別
參考答案:B
參考解析:this指標是系統隱含的用於指向當前物件的指標。由於靜態函式是同類中所有物件都共享的函式,在記憶體中只存在一份,不屬於某個物件所有,所以靜態函式沒有this指標。
38下列程式的執行結果是( )。
#include
intx=5:
intfun(inta)
{
intC;
C=X*a:
returnC;
}
voidmain( )
{
intx=3,a=4;
x=x+fun(a);
cout<<"x="<
}
A.x=15B.x=17C.x=23D.x=25
參考答案:C
參考解析:由主函式main入手,首先X被賦值為3,a被賦值為4,然後呼叫fun函式,引數為4,所以在fun函式中的a=4。而主程式中的X作用域是由它定義開始到cout輸出,在fun函式中無效。而在fun函式定義前的變數X作用域是整個程式,所以fun函式中的x值為5,這樣c的值就為20。在主函式中的x+fun(a)中的X為靠近這條語句的x定義,即3,所以最後x的值為20+3=23。
39物件導向的沒計方法與傳統的面向過程的方法有本質不同,它的基本原理是( )。
A.模擬現實世界中不同事物之間的聯絡
B.強調模擬現實世界中的演算法而不強調概念
C.使用現實世界的概念抽象地思考問題從而自然地解決問題
D.鼓勵開發者在軟體開發的絕大部分中都用實際領域的概念去思考
參考答案:C
參考解析:物件導向設計通過對人類認識客觀世界及事物發展過程的抽象,建立了規範化的分析設計方法,由此帶來軟體模組化特色突出、可讀性好、易維護等一系列優點。
40負責資料庫中查詢操作的資料庫語言是( )。
A.資料定義語言B.資料管理語言C.資料操縱語言D.資料控制語言
參考答案:C
參考解析:資料庫操縱語言專門負責查詢、增加、刪除等資料操作。
二、程式改錯題
41使用VC++6.0開啟考生資料夾下的源程式檔案,該程式執行時有錯。請改正程式中的錯誤,使程式輸出的結果為
100
37
32
注意:錯誤的語句在//******error******的下面,修改該語句即可。
試題程式:
#include
//******error******
voidmain
{
//******error******
intm=0142:
//******error******
intn=0X27:
intq=32;
cout<
cout<
cout<
return;
}
參考解析:
(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;”。
三、簡單應用題
42使用VC++6.0開啟考生資料夾下的源程式檔案。請完成函式fun(intn),使其實現以下功能:當i等於3時,則列印如下內容。
A
AA
AAA
注意:不能修改程式的其他部分,只能修改fun函式。
試題程式:
#include
voidfun(intn)
{
}
voidmain()
{
intn;
cout<<"請輸入列印的行數:"<
cin>>n;
if(n<1)
{
cout<<"輸入的行數必須大於0"<
return;
}
fun(n);
return;
}
參考解析:
inti;
for(i=0;i
{
intj;
for(j=0;j(n-i-1;j++)//迴圈列印空格
{
cout<<'';
}
for(;j
{
cout<<"A":
}
cout<
}
【解析】本題利用外層迴圈列印每一行。內層迴圈分為
列印空格和列印A。列印空格由第一個位置到第n-i-1。列印A,是由列印完空格開始一直到行結束。在外迴圈中列印每一行的結束符。
四、綜合應用題
43使用VC++6.0開啟考生資料夾下的源程式檔案。請完成以下部分,實現在螢幕上輸出為
C3
C2
這個程式需要修改的部分,請按照以下部分實現。
(1)類C0不能被例項化,請定義一個純虛擬函式print,在註釋1後新增適當的語句。
(2)類C1私有虛繼承類C0,請在註釋2後新增適當的語句。
(3)類C2公有繼承於C0,請在註釋3後新增適當的語句。
(4)類c3公有繼承於C2與C1,請在註釋4後新增適當的語句。
注意:增加程式碼或者修改程式碼的位置已經用符號表示出來。請不要修改其他的程式程式碼。
試題程式:
#include(iostream.h)
classCO
{
//********1********
};
//********2********
classC1:
{
public:
voidprint()
{
cout<"”C1"<
}
};
//********3********
classC2:
{
public:
voidprint()
{
cout<<"C2"<
}
};
//********4***x****
classC3:
{
public:
voidprint()
{
cout<<"C3"<
}
};
voidmain()
{
C30bj3;
C20bj2;
t();
t();
return;
}
參考解析:
(1)應新增“virtualvoidprint()=0,”。
(2)“classC1:”應改為“classC1:virtualprivateC0”。
(3)“classC2:”應改為“classC2:publicC0”。
(4)“classC3:”應改為“classC3:publicC2,publicC1”。
【解析】本題考查了類的繼承。根據題意,第1處應該新增“virtualvoidprint()=0;”。第2處根據題意,在冒號後面應新增“virtualprivateCO”。第3處根據題意,冒號後應新增“publicCO”。第4處根據題意,冒號後應新增“publicC2,publicC1”。