點擊查看:2018年3月計算機二級C++過關練習題及答案匯總
點擊查看:2015年計算機二級考試C++過關練習題及答案匯總
1[判斷題]常數據成員在常成員函數中的值是不允許改變的,而在非常成員函數中是允許改變的。
參考答案:錯
2[單選題]有如下程序:
該程序段的輸出結果是 ( )。
A.987B.876C.8765D.9876
參考答案:B
參考解析:注意到n--的運算順序,知道第一次輸出的應是8,據此就可以很快排除A和D。然后判斷循環幾次結束,由于當n-6時,while的條件判斷已經不成立了,直接跳過循環體結束程序了。故當n=9,8,7時執行了循環體,故答案為B。
3[單選題]
參考答案:A
4[單選題] 在公有派生情況下,有關派生類對象和基類對象的關系,下列敘述不正確的是( )。
A.派生類的對象可以賦給基類的對象
B.派生類的對象可以初始化基類的引用
C.派生類的對象可以直接訪問基類中的成員
D.派生類的對象的地址可以賦給指向基類的指針
參考答案:C
參考解析:公有繼承的派生類和基類是子類型的關系,所謂子類型是類型間一般和特殊的關系,即派生類是基類的子類型或者說基類的操作可以被用于操作派生類的對象。
5[單選題]
A.
B.
C.
D.
參考答案:B
6[單選題]下列關于線性鏈表的描述中,正確的是( )。
Ⅰ、只含有一個指針域來存放下一個元素地址
Ⅱ、指針域中的指針用于指向該結點的前一個或后一個結點(即前件或后件l
Ⅲ、結點由兩部分組成:數據域和指針域。
A.僅Ⅰ、ⅡB.僅Ⅰ、ⅢC.僅Ⅱ、ⅢD.全部
參考答案:D
參考解析:在定義的鏈表中,若只含有一個指針域來存放下一個元素地址,稱這樣的鏈表為單鏈表或線性鏈表。
在鏈式存儲方式中,要求每個結點由兩部分組成:一部分用于存放數據元素值,稱為數據域;另一部分用于存放指針,稱為指針域。其中指針用于指向該結點的前一個或后一個結點(即前件或后件)。
7[單選題] 下列關于類和對象的敘述中,錯誤的是( )。
A.一個類只能有一個對象
B.對象是類的具體實例
C.類是對某一類對象的抽象
D.類和對象的關系是一種數據類型與變量的關系
參考答案:A
參考解析:本題考查類和對象的概念。類是用戶定義的一種類型,程序員可以使用這個類型來說明多個變量,即對象。
8[單選題] 下列有關類繼承的敘述中,錯誤的是( )。
A.繼承可以實現軟件復用
B.虛基類可以解決由多繼承產生的二義性問題
C.派生類構造函數要負責調用基類的構造函數
D.派生類沒有繼承基類的私有成員
參考答案:D
參考解析:本題考查類繼承。派生類繼承了基類的全部數據成員和私有成員,只是基類的私有成員在派生類中是隱藏的,只能在基類內部訪問。
9[簡答題](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子句中沒有指定異常信息的類型,那么就用刪節號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。
參考解析:使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯誤,請改正錯誤,使程序正常運行,并且要求最后一個catch必須拋出執行的任何異常。
程序異常,輸出信息為
error
O
ERROR
注意:不要改動main函數,不能增加或刪除行,也不能更改程序的結構,錯誤的語句在//******error******的下面。
試題程序:
#include
intmain()
{
try
{
throw("error");
}
//********error********
catch(chars)
{
cout<
}
try
{
throw((int)0);
}
//********error********
catch()
{
cout<
}
try
{
throw(O);
throw("error");
}
//********error********
catch()
{
cout<<"ERROR"<
}
return0;
}
10[簡答題]使用VC++6.0打開考生文件夾下的源程序文件2.cpp。請完成以下兩個函數。
(1)funl(intn)求出n的階乘,必須使用遞歸調用。
(2)fun2(intn)求出n的階乘,不能使用遞歸調用。如果n小于1則返回0。
注意:不能修改函數的其他部分。
試題程序:
#include
//必須使用遞歸
intfunl(intn)
{
}
//不能使用遞歸
intfun2(intn)
{
}
voidmain()
{
inti;
cout<<"請輸入一個整數:"<
cin>>i;
cout<<"輸入數字的階乘是:"<
cout<<"輸入數字的階乘是:"<
return;
}%
參考解析:
//必須使用遞歸
jntfunl(intn)
{
if(n<=0)
return0;
if(n==1)
return1;
returnn*funl(n-1);
};
//不能使用遞歸
intfun2(intn)
{
if(n<=0)
retturn0;
intres=1:
for(inti=1;i<=n;i++)
{
res*=i;
}
returnres;
}
【解析】本題考查的是遞歸函數和階乘算法。遞歸的階乘算法可以通過判斷傳入參數,如果大于1,則返回n*funl(n-1),意思是返回n乘以n-1的階乘;如果等于1,則返回1。這樣遞歸下去就能最終得出n的階乘。非遞歸算法可以先建立一個累乘變量,并初始化為1,然后循環遍歷1~n,將遍歷的數累乘到變量中即可。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關推薦: