第 1 頁:沖刺試題 |
第 3 頁:參考答案 |
一、選擇題
1.C。【解析】計算機算法是指解題方案的準確而完整的描述,它的基本特征分別是:可行性、確定性、有窮性和擁有足夠的情報。
2.C。【解析】軟件測試的目標是在精心控制的環境下執行程序,以發現程序中的錯誤,給出程序可靠性的鑒定。軟件測試有三個重要特征:測試的挑剔性、完全測試的不可能性及測試的經濟性。沒有測試的可靠性這一說法。
3.C。【解析】數據處理的最小單位是數據項。
4.B。【解析】根據二分法查找法需要兩次:(1)首先將90與表中間的元素50進行比較,由于90大于50,所以在線性表的后半部分查找。(2)第二次比較的元素是后半部分的中間元素,即90,這時兩者相等,即查找成功。
5.C。【解析】軟件測試是為了盡可能多地發現程序中的錯誤,尤其是發現至今尚未發現的錯誤。
6.A。【解析】作為一個算法,一般應該具有下列四個特征:①可行性,即考慮到實際的條件能夠達到一個滿意的結果;②確定性,算法中的每一個步驟都必須是有明確定義的;③有窮性,一個算法必須在有限的時間內完成;④擁有足夠的情報。
7.D。【解析】可復用屬于面向對象程序設計方法,其他選項屬于結構化程序設計方法。
8.C。【解析】軟件工程的基本目標是:付出較低的開發成本;達到要求的軟件功能;取得較好的軟件性能;開發的軟件易于移值;需要較低的維護費用;能按時完成開發,及時交付使用。
9.C。【解析】以概念模式為框深所組成的數據稱為概念數據庫;以外模式為框架所組成的數據庫稱為用戶數據庫;以內模式為框架所組成的數據庫稱為物理數據庫。這三種數據庫只有物理數據庫是真實存在于計算機外存中。
10.C。【解析】數據庫系統(DBS)由數據庫(DBS)、數據庫管理系統(DBMS)、數據庫管理員、硬件平臺和軟件平臺五個部分組成,可見DB和DBMS都是DBS的組成部分。
11.A。【解析】本題考查的是標識符。標識符由數字、字母以及下畫線構成。其第一個字符必須是字母或下畫線,中間不能有空格;標識符的長度是任意的,但由于編譯系統的限制一般不超過31個字符;標識符中的大小寫字母是不同的;定義標識符時不能采用系統的保留字。
12.A。【解析】類模板就是把畿中的數據分離出來,作為一個類的描述。C++編譯器根據類模板和特定的數據類型來產生一個類,類模板就是一個抽象的類。
13.D。【解析】本題考查類繼承。派生類繼承了基類的全部數據成員和私有成員,只是基類的私有成員在派生類中是隱藏的,只能在基類內部訪問。
14.D。【解析】字符在進行數學運算時取其ASCⅡ碼值,其中’b’的ASCⅡ碼值為98,‘d’的ASCⅡ碼值為100,字符’2’的ASCⅡ碼值為50。可知D選項中表達式c2-0的值為50。
15.A。【解析】C++的引用是一種賦值、發送和返回復雜數據結構的方法,建立引用的格式為:類型-引用名=已定義的變量名。所以只有A選項是符合要求的。
16.D。【解析】數組元素的下標是從0到<數組長度>-1,所以數組data的首元素是data[0],尾元素是data[9]。其他選項的描述都是正確的。
17.D。【解析】std是對象數組。里面有30個對象,每個對象都有自己的私有數據成員,由于成員函數是公有的,在內存中存在一份即可,各個對象都可以使用。
18.D。【解析】本題考查函數的調用方式。函數的形參和實參具有以下特點:①形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放分配的內存單元,因此,形參只有在函數內部有效,函數調用結束返回主調函數后則不能再使用該形參變量;②實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須具有確定的值,以便把這些值傳送給形參,因此應通過預先用賦值、輸入等辦法使實參獲得確定值;③實參和形參在數量上、類型上、順序上應嚴格一致,否則會發生“類型不匹配”的錯誤;④函數調用中發生的數據傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
19.B。【解析】非成員函數的重載運算符函數的格式為operator+(),是運算符+重載函數。
20.D。【解析】本題考查C++語言中操作符重載的概念。運算符重載的關鍵字是operator。運算符重載的規則是重載時不能改變運算符的操作數個數,不能改變運算符的優先級,不能改變運算符的結合性,不能改變對預定義類型數據的操作方式。
21.B。【解析】本題考查關于C++語言繼承問題中派生類對基類的訪問。C++語言中通常有三種繼承修飾符,即public、protected、private,限制依次嚴格,另外對類中的數據和函數也由這三種修飾符進行限制,有三種成員是不能繼承的:公有繼承基類的私有成員,私有繼承基類的私有成員,保護繼承基類的私有成員。
22.C。【解析】程序中B為A的派生類,由主函數入手,主函數中定義了類A的指針P指向類B。根據基類中的“virtualvoidfuncl()”知道A中的funcl為虛函數,執行“P->fund();”語句,通過指針變量調用此虛函數,此時調用的就是指針變量指向的同名函數,即派生類的fund函數,輸出B1。而fun2不是虛函數,所以執行“p->func2();”輸出為A2。
23.A。【解析】C++流的輸入運算符“>>”和輸出運算符“<<”只能作為非成員函數重載。重載輸入流運算符“>>”須使用的原型是istream&operator>>(istream&,<類名>&);。
24.A。【解析】本題首先執行語句do{k+=5;cout<<’$’;}while(k<19);,循環執行4次;全了4個“$”,k的值變為20;然后執行語句while(k-->0)cout<<’*’;,所以會輸出20個“*”。
25.D。【解析】在C++中規定如果一個類被聲明為類模板,那么其中的所有成員函數就都成為了模板函數。
26.D。【解析】本題中,派生類C具有多重繼承關系,所以在派生類C的構造函數中應該包含基類A和類B的成員初始化列表。
27.D。【解析】本題考查循環的嵌套、for和switch語句的應用、C++中各種條件判斷,循環語句的用法。只要注意在C++語言中,系統在字符指針的最后位置會增加一個字符串結束符’\0’,執行8次for循環,再根據switch語句中的條件易知答案。
28.D。【解析】本題考查文件對象的創建方法。可以直接定義文件對象,也可以用new來動態生成。很明顯,選項D中使用new的方式是錯誤的。
29.D。【解析】本題考查關于C++語言類的定義方法。在C++語言中類定義中的構造函數是私有的,但是卻調用了其中的公有變量,在實例化時會斟現錯誤。
30.A。【解析】TestClass為基類,TestClass1是TestClass的派生類。基類中的funl和fun2被定義為虛函數,C++規定,當一個成員函數被聲明為虛函數后,其派生類中的同名函數都自動成為虛函數,所以派生類中的funl和fun2也是虛函數。本題從main主函數入手,首先定義了TestClass類型的
對象obil和指針P,然后又定義了TestClassl的對象obj2。指針指向對象obj2,然后調用其成員函數fun1(),即輸出“funlTestClassl”。
31.A。【解析】本題中FestClass為基類,TestClass1為派生類。在主函數中定義TestClassl對象obj(’x’),“TestClassl(charn):TestClass(n+1),c(n){}”,所以輸出x,然后調用基類構造函數,’x’+1=’y’,所以輸出y,即答案為xy。
32.A。【解析】本題考查類的繼承和派生。派生類執行構造函數的一般次序為:首先調用基類構造函數;然后調用成員對象的構造函數;最后是派生類構造函數中的內容。題目中定義派生類對象d時,先調用基類Base的構造函數,輸出BBBf,然后調用派生類Derived的構造函數,輸出DD。
33.A。【解析】本題考查C++語言的數據類型。第一個枚舉常量的值為0;允許程序顯示的定義中指定部分或全部枚舉常量的值,枚舉常量默認時。在前一枚舉常量值的基礎上以此增1。
34.D。【解析】本題考查派生類的定義和使用。當對象被刪除時,派生類的析構函數就被執行。由于析構函數不能被繼承,因此在執行派生類的析構函數時,基類的析構函數也將被調用。執行順序是先執行派生類的析構函數,再執行基類的析構函數,其順序與執行構造函數的順序正好相反。所以當main函數結束時,派生類DERIVED的對象X將被刪除,那么派生類DERIVED的析構函數先被調用,輸出DERIVED,然后調用基類的析構函數輸出BASE。
35.A。【解析】本題考查靜態數據成員和靜態成員函數。靜態數據成員是類中所有對象共事的成員,而不是某個對象的成員。題目中的靜態數據成員n的運算具有疊加性,執行“n+=2”和“n-=3”后n的值為0。
36.C。【解析】純虛函數是在聲明虛函數時被“初始化”為0的虛函數。不定義對象而只作為一種基本類型作為繼承的類,稱為抽象類。凡是包含純虛函數的類都是抽象類。抽象類的作用是作為一個類族的共同基類。
37.A。【解析】題中fun函數進行了遞歸調用,第1次調用對:fun(3)n=3,S=3-fun(2),第二次調用時:fun(2)n=2,s=2,返回第一次調用后,s=3-2=1。
38.B。【解析】在C++程序中,typename是可以替換為class的,但class不能都替換為typename。
39.C。【解析】Eonc1定義c1對象,調用Con的無參數構造函數,輸出1,ID值變為A,執行show(c1)時會調用復制構造函數,將c1對象的值復制給show函數的形參,此時輸出3,然后在show()中輸出c1的ID值A,Conc2(’B’)定義c2對象,調用Con(charID)構造函數,輸出2,c2的ID值為B,show(c2)執行時先調用復制構造函數輸出3,然后輸出B。因此程序輸出結果為“13A238”。
40.C。【解析】基類中說明的虛函數,在派生類中自然就是虛函數,所以類B中funcl()是虛函數;而類A中的func2()沒有被關鍵字virtual修飾;所以不是虛函數。
二、程序改錯題
(1)“n=-n;”。
(2)“p=!p;”。
(3)“q=-q;”。
【解析】由題目要求的運行結果可知,第1個標識和第3處的語句是對變量n和q取反,求一個正數的相反數可以通過算數運算符“-”得到,第1處和第3處的語句應分別改為“n=-n;”和“q=-q;”,即只需要通過負號運算就可以實現。從題目要求輸出的結果來分析,第2處的語句是對邏輯變量P取反,對一個邏輯變量求反,應該用取反運算符“!”,第2處的語句應改為“p=!P;”。
三、簡單應用題
return(n==1)?1:n+sum(n-1);
【解析】本題主要考查三目運算符?:的使用和遞歸函數的編制。程序功能是計算前n個自然數的和,n為參數。程序的運算過程如下,不是一般性,假設n為3,首先執行sum(3),因為3不等于1,所以return語句返回的值為3+sum(3-1),然后執行sum(3-1)即sum(2),2不等于1,所以return語句返回的值為2+sum(2-1),然后執行sum(2-1)即sum(1),因為1等于1,所以return語句返回的值為1,即問號后的值,所以最終結果為3+2+1=6,而題中n為100,所以結果為5050。
四、綜合應用題
(1)應添加“doubleleftPoint,topPoint,rightPoint,hot-tomPoint;”。
(2)應添加“CReet(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=O);”。
(3)應添加“~CReet(){}”。
(4)應添加“CReetrect2(rect1);”。
【解析】本題在第1處完成私有數據成員leftPoint、top-Point、rightPoint、bottomPoint的定義,均為double型的變量,故第1處應添加“doubleleftPoint,topPoint,rightPoint,bottomPoint;”。構造函數完成成員變量的初始化,類CRect的默認構造函數初始化double型私有數據成員leftPoint、topPoint、rightPoint、bottomPoint為0。故第2處應添加“CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。析構函數名和類名一致,并在前面加“~”以和構造函數區別,該析構幽數體為空,故第3處應添加“~CRect(){}”,雖然該函數體為空,但“{}”必須保留。主函數中類CRect的對象rect2是通過復制構造函數將rect1的值賦值給它實現初始化的.而reet1的初始化直接調用自定義構造函數,第4處應添加“CReetrect2(rect1);”。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關推薦: