國家二級C++機試(選擇題)模擬試卷8(共234題)_第1頁
國家二級C++機試(選擇題)模擬試卷8(共234題)_第2頁
國家二級C++機試(選擇題)模擬試卷8(共234題)_第3頁
國家二級C++機試(選擇題)模擬試卷8(共234題)_第4頁
國家二級C++機試(選擇題)模擬試卷8(共234題)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

國家二級C++機試(選擇題)模擬試卷8(共9套)(共234題)國家二級C++機試(選擇題)模擬試卷第1套一、選擇題(本題共25題,每題1.0分,共25分。)1、有如下函數模板:ternplateTcast(Uu){returnu;}其功能是將U類型數據轉換為T類型數據。已知i為int型變量,下列對模板函數cast的調用中正確的是()。A、cast(i);B、cast<>(i);C、cast(i);D、cast(i);標準答案:D知識點解析:本題考查函數模板的基本運用,屬于基礎知識。函數模板實際上是建立一個通用函數,其函數類型和形參類型不具體指定,用一個虛擬的類型代表,這個通用函數就是函數模板。函數模板可以設定默認參數,這樣在調用模板函數時就可以省略實參,函數模板的實例就是一個函數的定義。所以本題答案為D。2、一間宿舍可住多個學生,則實體宿舍和學生之間的聯系是()。A、一對一B、一對多C、多對一D、多對多標準答案:B知識點解析:因為一一間宿舍可以住多個學生即多個學生住在一個宿舍中,但一個學生只能住一間宿舍,所以實體宿舍和學生之間是一對多的關系。3、有如下程序:#includeusingnamespacestd;intmain(){inta[6]==23,15,64,33,40,58);intsl,s2;sl=s2=a[0];for(int*p=a+l;p<a+6;p++){if(sl>*p)sl=*p;if(s2<*p)s2=*p;)cout<<s1+s2<<endl;retum0:)運行時的輸出結果是()。A、23B、58C、64D、79標準答案:D知識點解析:變量s1和s2的初值都等于23,那么在執行第一次for循環時,*p的值等于15,它小于23,所以把15賦給變量sl;執行第二次for循環時,*p的值等于64,它大于23,所以把64賦給變量s2;而數組a中a[2]后面的元素的值都大于15,小于64,因而變量sl,s2的值不會再發生變化,最終值為15+64=79。4、某二叉樹共有12個結點,其中葉子結點只有1個。則該二叉樹的深度為(根結點在第1層)A、3B、6C、8D、12標準答案:D知識點解析:根據二叉樹的性質,度為0的結點(即葉子結點)總是比度為2的結點多一個。題目中的二叉樹的葉子結點為1,因此度為2的結點的數目為0,故該二叉樹為12層,每層只有一個結點。5、有以下程序段:#include<iostream.h>#defineMAX(x,y)(x)>(y)?(x):(y)voidmain(){inti,j,k;i=10;j=15;k=MAX(i,j)*10;cout<<k<<end1;}程序執行后的輸出結果是()。A、15B、100C、150D、10標準答案:C知識點解析:題目程序中的MAX函數是利用條件運算符為?:求最大值。即(x>y)?(x):(y)是當x大于y時取x,否則取y。當i=10,j=15時,“MAX(i,i)”的值為15,所以“k=MAX(i,j)*10;”答案為:150。6、有如下程序:#includeusingnamespacestd;classPair{intm,n;public:Pair(intj,intk):m(j),n(k){}intget(){retumm;}intget()const{retumm+n;}};intmain(){Paira(3,5);constPairb(3,5);cout<A、33B、38C、83D、88標準答案:B知識點解析:在主函數中定義了類Pair的一個實例變量a,并分別對實例變量a的數據成員m,n賦初值3,5。所以調用a.get()成員函數時,輸出3。又定義類Pair的一個常實例變量b,并分別對實例變量b的數據成員m,n賦初值3,5。所以調用成員函數b.get()時,輸出8。7、算法的空間復雜度是指()。A、算法在執行過程中所需要的計算機存儲空間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執行過程中所需要的臨時工作單元數標準答案:A知識點解析:算法的空間復雜度是指算法在執行過程中所需要的內存空間。所以選擇A。8、執行下列語句段后,輸出字符“*”的個數是()。for(inti=50;i>1;i-=2)cout<<’*’;A、24B、25C、26D、50標準答案:B知識點解析:本題考查for循環語句,題目中每執行完循環體后,i都會減2,那么只有50到2之間的偶數才能輸出“*”,所以總共輸出25次。9、有如下程序:#includeusingnamespacestd;classPart{public:Part(intx=0):va1(x){cout<A、123321B、213312C、213D、123123標準答案:B知識點解析:此題考查的是類的構造與析構。建立類的對象時,構造函數的執行順序如下:執行基類的構造函數,調用順序按照各個基類被繼承時聲明的順序(自左向右)接著執行成員對象的構造函數,調用順序按照各個成員對象在類中聲明的順序,最后執行自身的構造函數。析構順序與之相反。本題中,Whole類中有兩個Part類的成員p1和p2,根據它們定義的順序,先構造pl再構造p2。所以,首先被構造的是p1(y),輸出2;第二個被構造的是p2(x),輸出1:最后調用析構函數,輸出va1的值3;析構函數調用順序與構造函數相反。故最后輸出213312。10、軟件生命周期可分為定義階段、開發階段和維護階段,下面屬于定義階段任務的是A、軟件設計B、軟件測試C、可行性研究D、數據庫設計標準答案:C知識點解析:定義階段包括:問題定義、可行性研究和需求分析。問題定義:要求系統分析員與用戶進行交流,弄清“用戶需要計算機解決什么問題”然后提出關于“系統目標與范圍的說明”,提交用戶審查和確認;可行性研究:一方面在于把待開發的系統的目標以明確的語言描述出來,另一方面從經濟、技術、法律等多方面進行可行性分析;需求分析:弄清用戶對軟件系統的全部需求,編寫需求規格說明書和初步的用戶手冊,提交評審。11、若有定義語句“inti=2,j=3;”,則表達式i/j的結果是()。A、0B、0.7C、0.66667D、0.66666667標準答案:A知識點解析:由于變量i、j都是整型變量,所以兩者相除所得的商也是整型數據。12、下列語句中,與語句“1n=(a>b?(1)>c?1:0):0);”的功能等價的是()。A、if(a<=b)n=0;B、if((a>b)Il(b>c))n=1;elsen=0;C、if(a>b)if(b>c)n=1:elsen=0;elsen=0;D、if(a>b)n=1;elseif(<=c)n=1;elseif(b>c)n=1;elsen=0;標準答案:C知識點解析:條件表達式(a>b?(b>c?1:0):0)的含義是,如果a>b成立,則此表達式的值等于條件表達式(b>c?1:0)的值,否則其值等于0。而條件表達式(b>c?1:0)的含義是,如果b>c成立,其值等于1,否則其值等于0。13、在對函數進行原型聲明時,下列語法成分中,不需要的是()。A、函數返回類型B、函數參數列表C、函數名D、函數體標準答案:D知識點解析:在C++中函數在使用之前要預先聲明,這種聲明在標準C++中稱為函數原型。函數給出了函數名、返回類型以及在調用函數時必須指明參數個數和類型。14、有如下程序:#include<iostream>usingnarnespacestd;voidfl(int&x){x++;}voidf2(intx){++x;}intmain(){intx=10,y=12;f1(x);f2(y);cout<<x+y<<end1;return0;}運行這個程序的輸出結果是()。A、22B、23C、24D、25標準答案:B知識點解析:在函數f1(int&x){x++;}中,是對變量x的引用,所以當在main函數中執行“f1(x);”語句后,變量x的值等于ll,而在函數voidf2(intx){++x;}中,對變量x的傳遞調用,在main函數中執行“f2(y);”語句后,變量y的值仍然等于12,所以輸出x+y的值等于23。15、下列有關函數重載的敘述中,錯誤的是()。A、函數重載就是用相同的函數名定義多個函數B、重載函數的參數列表必須不同C、重載函數的返回值類型必須不同D、重載函數的參數可以帶有默認值標準答案:C知識點解析:此題考查的是函數重載的概念。在C++語言中,允許定義一系列函數名相同,但形參的個數和類型不完全相同的函數,即函數的重載。重載函數對返回值類型不做要求,返回值類型也不參與區分函數的重載形式。故選項C錯誤。16、下列關于賦值運算符“=”重載的敘述中,正確的是()。A、賦值運算符只能作為類的成員函數重載B、默認的賦值運算符實現了“深層復制”功能C、重載的賦值運算符函數有兩個本類對象作為形參D、如果已經定義了復制(拷貝)構造函數,就不能重載賦值運算符標準答案:A知識點解析:賦值運算符“=”只能作為成員函數重載。17、為了提高函數調用的實際運行速度,可以將較簡單的函數定義為()。A、內聯函數B、重載函數C、遞歸函數D、函數模板標準答案:A知識點解析:C++引入內聯函數的原因是用它來取代C中的預處理宏函數。兩者的區別在于,宏函數是由預處理器對宏進行替換,而內聯函數是通過編譯器來實現的。內聯函數在調用時像宏函數一樣展開,所以它沒有一股函數的參數壓棧和退棧操作,減少了調用開銷,因此,內聯函數比普通函數有更高的執行效率。18、下列語句中錯誤的是()。A、constinta;B、constinta=10;C、eonstint*point=0;D、constint*point=newint(10);標準答案:A知識點解析:由關鍵字const聲明符號常量的同時必須為其賦初值。19、在下列函數原型中,可以作為類從構造函數的是()。A、voidAA(int);B、intAA0;C、AA(int)const;D、AA(int);標準答案:D知識點解析:此題考查的是構造函數的概念。構造函數是類的一個特殊成員函數,它與類同名,并且沒有返回值。選項A、B不符合要求。選項C中函數AA,會更新對象的數據成員。20、執行下列語句段后,輸出字符“*”的個數是()。for(inti=50;i>1;I-=2)cout<<’*’;A、24B、25C、26D、50標準答案:B知識點解析:此題考查的是for循環語句。執行循環語句,變量i從50遞減,每次減2,所以循環會執行25次,輸出25個’*’。21、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assTest{public:TestO{n+=2;}~Test0{n—=3;}staticintgetNum0{returnn;}private:staticintn;};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<Test::getNumO<<end1;retum0;}執行后的輸出結果是()。A、n=0B、n=1C、n=2D、n=3標準答案:A知識點解析:此題考查的是靜態數據成員和靜態成員函數。靜態數據成員是類中所有對象共享的成員,而不是某個對象的成員。題目中的靜態數據成員n的運算具有疊加性,執行“n+—2”和“n——3”后n的值為0。22、下列有關繼承和派生的敘述中,正確的是()。A、派生類不能訪問基類的保護成員B、作為虛基類的類不能被實例化C、派生類應當向基類的構造函數傳遞參數D、虛函,數必須在派生類中重新實現標準答案:C知識點解析:此題考查的是繼承和派生。無論使用哪種繼承方式,派生類中的成員都不能訪問基類中的私有成員,而可以訪問基類中的公有成員和保護成員,所以選項A錯誤:C++中只有抽象類不能被實例化,而虛基類不一定非得是抽象類,所以選項B錯誤;在派生類中可以重新定義從基類繼承下來的虛函數,也可以不重新定義,故選項D錯誤。23、下列選項中,與實現運行時多態性無關的是()。A、重載函數B、虛函數C、指針D、引用標準答案:A知識點解析:在C++中,多態性可以分為兩類:編譯時的多態性和運行時的多態性。編譯時的多態性是通過函數重載和模版體現的,運行時的多態性是通過虛函數體現的。24、有如下程序:#inc1ude<iostream>usingnamespacestd;intmain(){cout.fill(’*’);cout.width(6);cout.fill(’#’);cout<<123<<end1;retum0;}執行后的輸出結果是()。A、##123B、123##C、***123D、123***標準答案:A知識點解析:此題考查的是I/O格式化輸出。函數width(intn)設置輸入輸出寬度,當實際數據寬度小于制定的寬度時,多余的位置用填充字符填滿;當實際數據寬度大于設置的寬度時,仍按實際寬度輸出;函數fill(charc)用來設置填充字符。25、有如下類模板定義:template<typenameT>classBigNumber{longn:public:BigNumber(Ti):n(i){}BigNumberoperator+(BigNumberb){returnBigNtmaber(n+b.n);}}已知b1、b2是,BigNumber的兩個對象,則下列表達式中錯誤的是()。A、b1+b2B、b1+3C、3+b1D、3+3標準答案:C知識點解析:C++運算符的重載有兩個方式,一種是做為成員函數,另一種是做為友元函數。前種C++默認省略第一個參數(事實上是對象本身),而后一種是所有的參數都要寫全。比如對加法的重載:成員方式為Coperatoroperator+(Coperator&op);,在調用的過程中我們可以理解為result=operator+(op);友元方式為friendCoperatoroperator.(Coperator&op1,Coperator&op2);,在調用的過程中我們可以理解為result=operator-(op1,op2);。對于本題題來說,整數3與b1相加時,3是誠型,b1是BigNumber<T>型,int型不能和別的型做運算。國家二級C++機試(選擇題)模擬試卷第2套一、選擇題(本題共32題,每題1.0分,共32分。)1、下面關于算法的敘述中,正確的是()。A、算法的執行效率與數據的存儲結構無關B、算法的有窮性是指算法必須能在執行有限個步驟之后終止C、算法的空間復雜度是指算法程序中指令(或語句)的條數D、以上三種描述都正確標準答案:B知識點解析:算法在運行過程中需輔助存儲空間的大小稱為算法的空間復雜度。算法的有窮性是指一個算法必須在執行有限的步驟后結束。2、如果進棧序列為A,B,C,D,則可能的出棧序列是()。A、C,A,D,BB、B,D,C,AC、C,D,A,BD、任意順序標準答案:B知識點解析:棧的操作原則為后進先出。選項B中出棧順序可按“A進,B進,B出,C進,D進,D出,C出,A出”實現。3、下列各選項中,不屬乎序言性注釋的是()。A、程序標題B、程序設計者C、主要算法D、數據狀態標準答案:D知識點解析:注釋一般為序言性注釋和功能性注釋。序言性注釋常位于程序開頭部分,它包括程序標題、程序功能說明、主要算法、接口說明、程序位置、開發簡歷、程序設計者、復審者、復審日期及修改日期等。功能性注釋一般嵌在源程序體之中,用于描述其后的語句或程序的主要功能。4、下列模式中,能夠給出數據庫物理存儲結構與物理存取方法的是()。A、內模式B、外模式C、概念模式D、邏輯模式標準答案:A知識點解析:數據庫管理系統的三級模式結構由外模式、模式和內模式組成。外模式,或子模式,或用戶模式,是指數據庫用戶所看到的數據結構,是用戶看到的數據視圖。模式,或邏輯模式,是數據庫中對全體數據的邏輯結構和特性的描述,是所有用戶所見到的數據視圖的總和。外模式是模式的一部分。內模式,或存儲模式,或物理模式,是指數據在數據庫系統內的存儲介質上的表示,即對數據的物理結構和存取方式的描述。5、下列敘述中,不屬于軟件需求規格說明書的作用的是()。A、便于用戶,開發人員進行理解和交流B、反映出用戶問題的結構,可以作為軟件開發工作的基礎和依據C、作為確認測試和驗收的依據D、便于開發人員進行需求分析標準答案:D知識點解析:軟件需求規格說明書有以下幾個方面的作用:①便于用戶、開發人員進行理解和交流;②反映出用戶問題的結構,可以作為軟件開發工作的基礎和依據;③作為確認測試和驗收的依據。6、下列不屬于軟件工程3個要素的是()。A、工具B、過程C、方法D、環境標準答案:D知識點解析:軟件工程包括3個要素,即方法、工具和過程。方法是完成軟件工程項目的技術手段;工具支持軟件的開發、管理、文檔生成;過程支持軟件開發的各個環節的控制、管理。7、數據庫系統在其內部具有3級模式,用來描述數據庫中全體數據的全局邏輯結構和特性的是()。A、外模式B、概念模式C、內模式D、存儲模式標準答案:B知識點解析:概念模式,也稱邏輯模式,是對數據庫系統中全局數據邏輯結構的描述,是全體用戶應用公共數據視圖。它不涉及具體的硬件環境與平臺,與具體的軟件環境也無關。8、下列語句中,錯誤的是()。A、constintbuffer=-256;B、constanttemp;C、constdouble*point;D、constdouble*it=newdouble(5.5);標準答案:B知識點解析:符號常量聲明語句的語法格式是:const類型名符號常量=初值表達式,選項B中未給常變量賦初值,故錯誤;而選項C中定義的是一個指向浮點型常量的指針,而不是定義一個浮點型常量,所以可以不賦初值。9、在進行任何C++流的操作后,都可以用C++流的有關成員函數檢測流的狀態;其中只能用于檢測輸入流狀態的操作函數名稱是()。A、failB、eofC、badD、good標準答案:B知識點解析:可以用文件流對象的成員函數來判別文件流當前的狀態:fail,剛進行的操作失敗時返回true,否則返回false;eof,進行輸入操作時,若文件到達文件尾返回true,否則返回false;bad,如果講行了非法操作扳回true,否則返回false:good,剛進行的操作成功時返回true,否則返回false。10、對于語句cout<<endl<<x;中的各個組成部分,下列敘述中錯誤的是()。A、“cout”是一個輸出流對象B、“end1”的作用是輸出回車換行C、“x”是一個變量D、“<<”稱作提取運算符標準答案:D知識點解析:語句cout<<end1<<x;作用是輸出回車和變量x的值。所以題目中選項A、B、C的敘述均正確,只有選項D敘述錯誤,“<<”是插入運算符。11、以下程序的輸出結果是()。#include<iostream.h>main(){intm=5;if(m++>5)cout<<m;elsecout<<m--;}A、7B、6C、5D、4標準答案:B知識點解析:此題中,因為m++>5成立(此時m的值變為6),所以執行語句cout<<m;輸出結果為6。12、閱讀下面的程序:#include<iostream.h>voidmain(){intx;cin>>x;if(x++>5)cout<<x<<end1;elsecout<<x--<<end1;}如果兩次執行上述程序,且鍵盤輸入分別為4和6,則輸出結果分別是()。A、4,6B、3,6C、4,7D、5,7標準答案:D知識點解析:此題首先讀入數值4賦給變量x,因為x++>5不成立,因為“++”后綴,之后x的值變為5,執行語句cout<<x-<<end1;輸出:5,之后x的值變為4。當讀入的數值是6時,因為x++>》5成立,所以執行語句cout<<x<<end1;輸出7。13、關于this指針的說法不正確的是()。A、不能在程序中修改this指針B、this指針可以給其他指針賦值,但不能修改this指針C、靜態成員函數中沒有this指針D、this指針可以被賦值標準答案:D知識點解析:this指針不能在程序中修改,不能被幅值;靜態成員沒有this指針,因為類中只有一個靜態成員函數實例,使用this指針無意義。14、有如下程序:#include<iostream>usingnamespacestd;inti=1;classFun{public:staticinti;intvalue(){returni-1;}intvalue()const{returni+1;}};intFun::i=2;intmain(){inti=3;Funfun1;constFunfun2;_______return0:}若程序的輸出結果是:123則程序中橫線處的語句是()。A、cout<<fun1.value()<<Fun:i<<fun2.value();B、cout<<Fun::i<<fun1.value()<<fun2.value();C、cout<<fun1.value()<<fun2.value()<<Fun::i;D、cout<<fun2.value()<<Fun::i<<fun1.value();標準答案:A知識點解析:此題因為定義的變量i是static類型的(main()函數內部的i只是一個局部變量),所以,選項A中fun1.value()的返回值是1,Fun::i引用的是外部變量會輸出2;fun2.value();會調用常成員函數intvalue()const{returni+l;}使得外部靜態變量i的值增加為3,故輸出3。15、下列對重載函數的描述中,()是錯誤的。A、重載函數中不允許使用默認參數B、重載函數中編譯是根據參數表進行選擇C、不要使用重載函數來描述毫不相干的函數D、構造函數重載將會給初始化帶來多種方式標準答案:A知識點解析:選項A中,重載函數中是允許使用默認參數的;為了使重載函數有意義,不要使用重載函數來描述毫無相干的函數;重載函數中編譯是根據參數表進行選擇,包括參數的個數和類型。16、下列關于對象概念的描述中,正確的是()。A、對象就是C語言中的結構變量B、對象代表著正在創建的系統中的一個實體C、對象是一個狀態和操作(或方法)的封裝體D、對象之間的信息傳遞是通過消息進行的標準答案:D知識點解析:對象之間的信息傳遞是通過消息進行的。對象:方法(函數)+屬性(數據),而C語言的結構體其實就是不同類型數據的組合。并沒有處理數據的方法。17、在下列double型常量表示中,錯誤的是()。A、E15B、.35C、3E5D、3E-5標準答案:A知識點解析:在C++中,科學計數法表示小數的方法:E(e)左右必須有數,且E(e)的右側只能為整數。18、下列給字符數組進行初始化中,正確的是()。A、chars1[]=’’12345abcd’’;B、chars2[3]=’’xyz’’;C、chars3[][3]={’a’,’x’,’y’};D、chars4[2][3]={’’xyz’’,’’mnp’’};標準答案:C知識點解析:在C++中定義二維數組時并賦值,則數組的行數可以省略不寫。選項A、B、D均是字符字符串初始化。19、對于int*pa[5];的描述,正確的是()。A、pa是一個指向數組的指針,所指向的數組是5個int型元素B、pa是一個指向某個數組中第5個元素的指針,該元素是int型變量C、pa[5]表示某個數組的第5個元素的值D、pa是一個具有5個元素的指針數組,每個元素是一個int型指針標準答案:A知識點解析:語句“int*p[5]”表示一個數組p,它的大小是5,里面存放的數據類型是int*,也就是整型指針。稱之為指針數組(從右向左解析這個表示)。20、執行后的輸出結果是()。#include<iostream.h>voidmain(){inti(0);while(++i){if(i==10)break;if(i%3!=1)continue;cout<<i<<end1;}A、147B、247C、432D、731標準答案:A知識點解析:從if(i==10)break;語句了解本循環只到10,輸出i的條件是只要1-10之間的數對3取余為1的輸出,所以輸出的147。21、有如下程序:#include<iostream>usingnarnespacestd;classA{public:AO{cout<<’’A’’;}};classB{public:B(){cout<<’’B’’;}};classC:publicA{Bb:public:C(){cout<<’’C’’;}};intmain(){Cobj;return0:}執行后的輸出結果是()。A、CBAB、BACC、ACBD、ABC標準答案:D知識點解析:此題中,語句Cobj對象初始化首先調用基類的構造函數A(),輸出“A”,其次是C類中對象的構造函數的調用,即調用BO,輸出“B”;最后是調用自身的構造函數C(),輸出“C”。22、有如下程序:#include<iostream.h>voidmain(){charstr[2][5]={’’1234’’,’’5678’’},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=str[i];for(i=0;i<2;i++)for(j=0;p[i][j]>’\0’;j+=2)s=10*s+p[i][j]-’0’;cout<<s;}該程序的輸出結果是()。A、1357B、2468C、3556D、23678標準答案:A知識點解析:程序中的“for(i=0;i<2;i++)p[i]=str[i];”語句將str中的值賦值給指針數組p。在接下來的二重for循環中,跳取“j+=2”,p指針指向的值即“1”,“3”,“5”,“7”。在分別對字符到整型的轉換,即減去字符’0’,然后依次轉換為千位,百位,十位,個位“10*s”操作輸出整型s,即“1357”。23、以下程序的輸出結果是()。#include<iostream>usingnamespacestd;voidfun(char**q){++q;cout<<*q<<end1;}main(){staticchar*s[]={’’HI","HELLO’’,’’TEST’’};char**p;p=s;fun(p);system(’’PAUSE’’);return0;}A、為空B、HIC、HELLOD、TEST標準答案:C知識點解析:由程序main主函數入手,調用fun函數,在fun函數中執行“cout<<*q<<end1;”語句實現程序輸出。主函數中變量char*s[]為指針數組,char**p表示p指向的字符指針數據。*p就代表p指向的字符指針。語句“p=s;"表明p指向字符指針s,而**p則是s[]中的第一個字符串“HI”。主函數將變量p傳值給函數fun(char**q)中的q,在函數體內部首先執行“++q”語句,就是將q的指針指向s中的下一個字符串,即“HEILO”,所以輸出語句“cout<<*q<<end1:”輸出該字符串值。24、下列程序用來判斷數組中特定元素的位置所在,則輸出結果為()。#include<conio.h>#include<iostream.h>intfun(int*p,intn,int*j){inti;*j=0;for(i=0;i<n;i++)if(p[*j]<p[i])*j=i;returnp[*j];}voidmain(){inta[10]={1,3,9,O,8,7,6,5,4,2};intj;fun(a,10,&j);cout<<j<<’,’<<a[j];}A、2,9B、3C、9D、3,9標準答案:A知識點解析:由程序中的主函數main入手,調用fun函數。其中第一個實參為數組a的名字,數組名作為實參,傳遞的是數組的起始地址。所以在fun函數中指針p指向了數組的第一個元素a[0]。另外實參整型j傳遞的是引用,也就是j的地址。在fun函數中在for循環中,依次將當前元素p[i]與j指針值為標識的p[*j]進行比較,取較大的。最后循環后的結果就是p[*j]存放數組中的最大值,并且指針j為該值的標識位。可以看出數組的最大值是9標識位為2。25、以下程序的正確運行結果是()。#include<iostream.h>intfun(int);voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<fun(a)<<end1;cout<<end1;}intfun(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}A、4,5,6B、6,7,9C、7,8,9D、7,7,7標準答案:C知識點解析:主函數中在for循環中依次調用fun函數。其中c為靜態變量,到程序結束有效。第一次循環中2+1+4=7,第二次循環20+1+5=8,第三次循環2+1+6=9。即答案為789。26、靜態數據成員在()進行初始化。A、成員函數列表B、類體外C、構造函數D、成員函數標準答案:B知識點解析:靜態數據成員不能在參數初始化表對靜態數據成員初始化,只能在類體外進行初始化。27、有如下類說明:classTestClass{hatx;public:TestClass(intn){x=n;}};classTestClass1:publicTestClass{inty;public:TestClass1(inta,intb);};在構造函數TestClass1的下列定義中,正確的是()。A、TestClass1::TestClass1(inta,intb):x(a),y(b){}B、TestClass1::TestClass1(inta,intb):TestClass(a),y(b){}C、TestClass1::TestClass1(inta,intb):x(a),TestClass1(b){}D、TestClass1::TestClass1(inta,intb):TestClass(a),TestClass1(b){}標準答案:B知識點解析:題目中程序TestClass為基類,TestClass1為派生類,派生類構造函數的一般形式為:派生類構造函數名(總參數類表):基類構造函數名(參數列表){派生類中新增數據成員初始化語句}。派生類TestClass1的基類函數名為TestClass,總參數為inta,intb,所以選擇B)。28、在聲明派生類時,如果不顯示地給出繼承方式,缺省的類繼承方式是私有繼承private。已知有如下類定義:classTestClass{protected:voidfun(){}};classTestClass1:TestClass{};則TestClass類中的成員函數fun(),TestClass1類中的訪問權限是()。A、publicB、privateC、protectedD、virtual標準答案:B知識點解析:程序中的TestClass1為TestClass的派生類,如果不寫繼承方式,則默認為private,所以TestClass1私有繼承TestClass,對于基類中的保護成員,繼承類的訪問權限為private。所以選擇B。29、下面敘述錯誤的是()。A、對基類成員的訪問能力在private派生類中和public派生類中是相同的B、基類的private成員在public派生類中不可訪問C、基類中的public成員在protected派生類中是protected的D、基類中的public成員在protected派生類中仍然是public的標準答案:D知識點解析:基類的公有成員和保護成員在保護派生類中都成了保護成員,其私有成員仍為基類私有。30、在C++中,實現封裝性需借助于()。A、枚舉B、類C、數組D、函數標準答案:B知識點解析:此題考查的是C++語言中對象概念的理解。所謂封裝性是指將數據和算法捆綁成一個整體,這個整體就是對象。C++語言通過建立用戶定義類型“類”來支持封裝性和信息隱藏。31、下列關于類和對象的敘述中,錯誤的是()。A、一個類只能有一個對象B、對象是類的具體實例C、類是對某一類對象的抽象D、類和對象的關系是一種數據類型與變量的關系標準答案:A知識點解析:此題考查的是類和對象的概念。類是用戶定義的一種數據類型,可以使用這個類型來說明一個或多個變量,即對象。32、下列關于C++函數的說明中,正確的是()。A、內聯函數就是定義在另一個函數體內部的函數B、函數體的最后一條語句必須是return語句C、標準C++要求在調用一個函數之前,必須先聲明其原型D、編譯器會根據函數的返回值類型和參數表來區分函數的不同重載形式標準答案:C知識點解析:此題考查的是有關函數的概念。內聯函數是在函數定義之前加關鍵字inline來聲明的函數,而不是定義在另一個函數體內部的函數,故選項A錯誤;無返回值的函數在執行完最后一條語句后,會自動返回而不必加入return語句,故選項B錯誤;如果函數只是返回值類型不同,而其他完全相同,則不能作為函數重載來使用。國家二級C++機試(選擇題)模擬試卷第3套一、選擇題(本題共22題,每題1.0分,共22分。)1、下列關于棧敘述正確的是A、棧頂元素能最先被刪除B、棧頂元素最后才能被刪除C、棧底元素永遠不能被刪除D、以上三種說法都不對標準答案:A知識點解析:棧是先進后出的線性表,棧頂的元素最先被刪除,棧底的元素最后被刪除。2、下列敘述中正確的是()。A、棧是一種先進先出的線性表B、隊列是一種后進先出的線性表C、棧與隊列都是非線性結構D、棧與隊列都是線性結構標準答案:D知識點解析:棧是先進后出,隊列是先進先出。棧和隊列都是一種線性表,屬于線性結構。3、下列敘述中正確的是()。A、線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的B、線性表的鏈式存儲結構所需要的存儲空間一般要多于順序存儲結構C、線性表的鏈式存儲結構所需要的存儲空間一般要少于順序存儲結構D、以上都不正確標準答案:B知識點解析:線性表的存儲分為順序存儲和鏈式存儲。在順序存儲中,所有元素所占的存儲空間是連續的。而在鏈式存儲的方式中,將存儲空間的每一個存儲結點分為兩部分,一部分用于存儲數據元素的值,稱為數據域;另一部分用于存儲下一個元素的存儲序號,稱為指針域。所以線性表的鏈式存儲方式比順序存儲方式的存儲空間要大一些。4、有如下類定義:classMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intgetJ()const{returnj;}};編譯時發現有一處語法錯誤,對這個錯誤最準確的描述是()。A、函數getK試圖訪問基類的私有成員變量kB、在類MyDerived的定義中,基類名MyBase前缺少關鍵字public、protected或privateC、類MyDerived缺少一個無參的構造函數D、類MyDerived的構造函數沒有對基類數據成員k進行初始化標準答案:A知識點解析:默認繼承方式為私有繼承,私有繼承將基類的公用成員和保護成員都變為了私有成員,基類的私有成員依然屬于基類私有,派生類不能訪問基類的私有成員。所以A選項正確。5、結構化程序設計的基本原則不包括()。A、多元性B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:結構化程序設計方法的主要原則可以概括為:自頂向下,逐步求精,模塊化和限制使用GOTO語句,其中不包括多態性。6、軟件需求規格說明書的作用不包括()。A、軟件驗收的依據B、用戶與開發人員對軟件要做什么的共同理解C、軟件設計的依據D、軟件可行性研究的依據標準答案:D知識點解析:軟件規格說明書主要有三個作用:①用戶和軟件開發人員之間的合同;②開發人員進行設計和編程的依據;③軟件工程項目驗收的依據。7、程序流程圖中帶有箭頭的線段表示的是()。A、圖元關系B、數據流C、控制流D、調用關系標準答案:C知識點解析:程序流程圖是一種傳統的、應用廣泛的軟件過程設計工具,通常也稱為程序框圖。其中,用帶箭頭的線段表示控制流,用柜形表示加工步驟,用菱形表示邏輯條件。8、下列關于this指針的敘述中,正確的是()。A、任何與類相關的函數都有this指針B、類的成員函數都有this指針C、類的友元函數都有this指針D、類的非靜態成員函數才有this指針標準答案:D知識點解析:此題考查的是this指針的使用。類的每一個成員函數都有一個隱含的常量指針,即this指針。類的靜態成員函數不能含有this指針,因為this指針是一個指向本對象的指針。9、在關系數據庫中,用來表示實體間聯系的是()。A、屬性B、二維表C、網狀結構D、樹狀結構標準答案:B知識點解析:在關系數據庫中,實體間的聯系由一個二維表來表示。10、負責數據庫中查詢操作的數據庫語言是()。A、數據定義語言B、數據管理語言C、數據操縱語言D、數據控制語言標準答案:C知識點解析:負責數據庫中查詢操作的數據庫語言是數據操縱語言。11、已知類IMS中兩個成員函數的聲明為“voidlisten()const;”與“voidspeak();”,另有兩個對象的定義為“IMSobjl;”與“constIMSobj2;”,則下列語句中,產生編譯錯誤的是()。A、objl.1isten();B、objl.speak();C、obj2.1isten();D、obj2.speak();標準答案:D知識點解析:函數:listen(、)作為類IMS的常成員函數,一般對象obi和常對象obj2都可以調用它,而函數speak()作為IMS的一般成員函數,則只有一般對象objl可以調用,而常對象obi2調用會產生編譯錯誤。12、有如下程序:#includeusingnamespacestd;classSample{friendlongfun(Samples);Sample(10nga){x=a;}private:longx;);longfun(SampleS){if(s.x<2)returnl:returns.x*fun(Sample(s.X-1)):)intmain(){intsum=0;for(inti=0;i<6;i++){sum+=fun(Sample(i));)return0:}運行時輸出的結果是()。A、16B、154C、34標準答案:C知識點解析:此題考查的是友元函數和遞歸函數。因為fun函數是Sample類的友元函數,所以fun函數可以直接訪問Sample類對象的私有成員x。主函數調用fun函數,構造參數為0~5。當n小于2時,fun函數返回l,其余返回值為n*fun(n-1)。n取0~5的值時fun(n)依次為1,l,2,6,24,120,累加結果為154。13、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、交C、投影D、并標準答案:A知識點解析:選擇是單目運算,其運算對象是一個表。該運算按給定的條件,從表中選出滿足條件的行形成一個新表作為運算結果。投影也是單目運算,該運算從表中選出指定的屬性值組成一個新表。自然連接是一種特殊的等價連接,它將表中有相同名稱的列自動進行記錄匹配。自然連接不必指定任何同等連接條件。14、類MyClass的定義如下:classMyClass{public:MyClass(){value=0;}SetVariable(inti){value=i;}private;intvalue;);則對下列語句序列正確的描述是()。MyClass*P,my;p=&my;A、語句p=&my;是把對象my賦值給指針變量PB、語句Myaass*p,my;會調用兩次類MyClass的構造函數C、對語句*p.SetVariable(5)的調用是正確的D、語句p->SetVariable(5)與語句my.SetVariable(5)等價標準答案:D知識點解析:選項A),語句p=&my;是把對象my的地址值賦值給指針變量p;選項B),語句MyClass*p,my;,由于p只是一個指向對象的指針,因此定義指針p不調用構造函數,所以此語句只調用一次構造函數;對成員函數的引用可以通過兩種形式:指針->成員函數(形參表)或者對象名.成語函數名(形參表),故選項C)錯誤,選項D)正確。15、下列字符串中不能作為C++標識符使用的是()。A、WHILEB、userC、_lvarD、9stars標準答案:D知識點解析:在C++中變量名的命名必須遵循一定的原則,其中之一即是第一個字符必須是字母或者F劃線。16、執行下列語句段后,輸出字符“*”的個數是()。for(inti=50;i>1:--i)cout<<’*’;A、48B、49C、50D、51標準答案:B知識點解析:此題考查的是for循環語句。For循環中i從50開始逐漸遞減,直到i=1時退出,而此時沒有機會執行到循環體,因此一共執行了49次循環體,所以最終輸出的是49個字符‘*’。17、己知類MyClass聲明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列數組定義中正確的是()。A、MyClassx1[2];B、MyClassx2[2]={newMyClass(1),newMyClass(2)};C、MyClass*x3[2];D、MyClass*x4[2]={MyClass(1),MyClass(2)};標準答案:C知識點解析:考查的是對象數組。選項A中在建立對象數組時也同樣需要調用構造函數:選項B和D的類型不匹配,B中不能將指針傳給非指針,D中是將非指針傳給指針。18、下列有關抽象類和純虛函數的敘述中,錯誤的是()。A、擁有純虛函數的類是抽象類,不能用來定義對象B、抽象類的派生類若不實現純虛函數,它也是抽象類C、純虛函數的聲明以“=0;”結束D、純虛函數都不能有函數體標準答案:D知識點解析:此題考查的是抽象類和純虛函數的概念。純虛函數可以有函數體,它的實現由派生類給出。19、下列關于基類和派生類關系的敘述中,正確的是()。A、每個類最多只能有一個直接基類B、派生類中的成員可以訪問基類中的任何成員C、基類的構造函數必須在派生類的構造函數體中調用D、派生類除了繼承基類的成員,還可以定義新的成員標準答案:D知識點解析:繼承分為單繼承和多繼承,一個類只有一個直接基類時,稱為單繼承;而一個類同時有多個直接基類時,則稱為多繼承。派生類的數據成員由所有基類的的數據成員與派生類新增的數據成員共同組成。20、有類定義如下:classType{public:Type(inti=0);Typeoperator一(int);friendTypeoperator+(Type,Type);private:intval,};若有對象定義Typec1;則下列語句序列中,錯誤的是()。A、Type(3)+c1;B、c1+Type(3);C、3一c1;D、c1一3;標準答案:C知識點解析:由于在類Type中對“.”進行了重載,所以根據“.”重載的形式定義,cl一3是正確的,而3一cl是錯誤的表達式。21、下列運算符不能重載為友元函數的是()。A、=()[]->B、+-++--C、><>=<=D、+=-=*=/=標準答案:A知識點解析:此題考查的是運算符重載的概念。c1++語言規定,=、[]、()、->以及所有的類型轉換運算符只能作為成員函數重載,如果要重載為友元函數就必須重載為非成員函數。22、有如下程序:#include#includeusingnamespacestd;intmain(){cout<A、***123***456B、***123456***C、***123456D、123456標準答案:C知識點解析:在主函數中第一次輸出時調用函數setfill(’*’)設置填充字符為‘*’,調用函數setw(6)設置每次輸出的寬度為6,所以第一次輸出123時,多余的三個空位用‘*’填充,即結果為***123,第二次從輸出流中輸出456。國家二級C++機試(選擇題)模擬試卷第4套一、選擇題(本題共20題,每題1.0分,共20分。)1、下列敘述中正確的是()。A、棧是一種先進先出的線性表B、隊列是一種后進先出的線性表C、棧與隊列都是非線性結構D、棧與隊列都是線性結構標準答案:D知識點解析:棧是先進后出,隊列是先進先出。棧和隊列都是一種線性表,屬于線性結構。2、已知遞歸函數fun的定義如下:intfun(intn){if(n<=1)return1;//遞歸結束情況elsereturnn*fun(n-2);//遞歸}則函數調用語句fun(5)的返回值是()。A、5B、12C、15D、30標準答案:C知識點解析:遞歸函數fun被定義為含有參數intn,返回整型。其中fun函數遞歸調用本身,當n=1時,fun返回1,如果大于1那么執行n*fun(n-2)。所以,當n等于5時,執行5*fun(3);當3時繼續調用fun,3*fun(1),即fun(5)=5*(3*fun(1)),答案為15。3、在下列原型所示的C++函數中,按“傳值”方式傳遞參數的是()。A、voidfl(intx);B、voidf2(int*x);C、‘voidt3(eonstint*x);D、voidf4(int&x);標準答案:A知識點解析:函數參數的3種傳遞方式:①將變量名作為形參和實參,即傳值方式;②傳遞變量指針;③引用形參。其中B、C選項都是傳遞變量指針,D選項為引用形參,所以本題答案為A。4、下列描述中正確的是()。A、軟件交付使用后還需要再進行維護B、軟件工具交付使用就不需要再進行維護C、軟件交付使用后其生命周期就結束D、軟件維護是指修復程序中被破壞的指令標準答案:A知識點解析:通常將軟件產品從提出、實現、使用維護到停止使用退役的過程稱為軟件生命周期。軟件生命周期分為軟件定義、軟件開發及軟件運行維護三個階段。已交付的軟件投入運行后,應在運行使用中不斷地維護,根據新提出的需要進行必要而且可能的擴充和刪改。5、下面屬于白盒測試方法的是()。A、等價類劃分法B、邏輯覆蓋C、邊界值分析法D、錯誤推測法標準答案:B知識點解析:白盒測試的主要方法有邏輯覆蓋、基本路徑測試等。6、數據庫系統的三級模式不包括()。A、概念模式B、內模式C、外模式D、數據模式標準答案:D知識點解析:數據庫系統的三級模式包括概念模式、外模式和內模式(物理模式)。7、軟件生命周期可分為定義階段、開發階段和維護階段,下面不屬于開發階段任務的是A、測試B、設計C、編碼D、需求分析標準答案:D知識點解析:發階段由三個階段組成:設計、實現和測試。需求分析屬于定義階段。8、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、交C、投影D、并標準答案:A知識點解析:選擇是單目運算,其運算對象是一個表。該運算按給定的條件,從表中選出滿足條件的行形成一個新表作為運算結果。投影也是單目運算,該運算從表中選出指定的屬性值組成一個新表。自然連接是一種特殊的等價連接,它將表中有相同名稱的列自動進行記錄匹配。自然連接不必指定任何同等連接條件。9、有如下程序:#inc1ude<iostream>voidfun(int&x,inty){intt=x;x=y;y=t;}intmain(){inta[2]={23,42};return0,}執行后的輸出結果是()。A、42,42B、23,23C、23,42D、42,23標準答案:B知識點解析:此題考查是是函數的調用以及參數值的傳遞。函數fun中的第一個參數是引用傳值方式,是雙向的;第二個參數是按值傳遞,是單向的。10、已知枚舉類型聲明語句為:enumCOLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};則下列說法中錯誤的是()。A、枚舉常量YELLOW的值為1B、枚舉常量RED的值為6C、枚舉常量BLACK的值為10D、枚舉常量WHITE的值為1標準答案:D知識點解析:此題考查的是枚舉類型的聲明。聲明枚舉類型的語法形式為:enum類型名{枚舉值表}。需注意的是:當n個枚舉值全部未賦常量值時,它們自左至右分別與整數0、l、2、3…n-1對應:若第i個枚舉值賦常量值為m,則其未賦常量值的后續枚舉值分別與整數m+1、m+2…對應,直到下一個賦了值的枚舉值或結束。11、執行下列語句段后,輸出字符“*”的個數是()。for(inti=50;i>1:--i)cout<<’*’;A、48B、49C、50D、51標準答案:B知識點解析:此題考查的是for循環語句。For循環中i從50開始逐漸遞減,直到i=1時退出,而此時沒有機會執行到循環體,因此一共執行了49次循環體,所以最終輸出的是49個字符‘*’。12、有如下程序:#include#includeusingnamespacestd;intmain(){ints[]={123,234};cout<A、123234B、***123234C、***123***234D、***123234***標準答案:B知識點解析:在輸出語句中定義了輸出的格式是字符寬度為6,并且向右對齊,不足的位用‘*’補齊。在c++中,輸出格式的設置只對第一次輸出有效,在完成了一個數據的輸出后,寬度設置自動恢復為0(表示按數據實際寬度輸出)。所以對于本題來說,在循環語句中輸出數組s[O]中的元素時,按照規定的格式輸出,其結果為***123,當輸出s[1]時,輸出格式已經恢復到按數據實際寬度輸出,所以此時輸出為234。13、下列有關類繼承的敘述中,錯誤的是()。A、繼承可以實現軟件復用B、虛基類可以解決由多繼承產生的二義性問題C、派生類構造函數要負責調用基類的構造函數D、派生類沒有繼承基類的私有成員.標準答案:D知識點解析:此題考查的是類繼承。派生類繼承了基類的(全部數據成員,私有成員),只是基類的私有成員在派生類中是隱藏的,只能在基類內部訪問,故選項D錯誤。14、有如下類定義:c1assMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{retumk;}};c1assMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intgeU()const{retumj;}};編譯時發現有一處語法錯誤,對這個錯誤最準確的描述是()。A、函數getK試圖訪問基類的私有成員變量kB、在類MyDerived的定義中,基類名MyBase前缺少關鍵字public、protected或privateC、類MyDerived缺少一個無參的構造函數D、類MyDerived的構造函數沒有對基類數據成員k進行初始化標準答案:A知識點解析:此題考查的是派生類對基類成員的訪問。因為類中缺省的訪問權限是私有,所以本題中MyBase類中定義的成員k是私有成員。派生類中的成員只能訪問基類中的公有成員和保護成員,不能訪問基類中的私有成員。所以派生類中函數getK()中的語句returnk;是非法的。15、有如下類定義:classPoint{intx_,y_;public:Point():x_(0),y_(0){}Point(intx,inty=0):x_(x),y_(y){}};若執行語句Pointa(2)b[3],*c[4];則Point類的構造函數被調用的次數是()。A、2次B、3次C、4次D、5次標準答案:C知識點解析:此題考查的是類的構造函數。構造函數在對象創建的時候由系統自動調用。在Pointa(2),b[3],*c[4]語句中:a(2)是定義一個對象并傳入構造函數2,所以此時會調用以此構造函數;b[3]是定義一個包含3個對象的數組,所以構造函數會被調用3次;*c[4]定義的是4個:Point類對象指針的數組,它并沒有創建任何Point對象,所以不調用構造函數。16、已知基類Employee只有一個構造函數,其定義如下:Employee::Employee(intn):id(n){}Manager是Employee的派生類,則下列對Manager的構造函數的定義中,正確的是()。A、Manager::Manager(intn):id(n){}B、Manager::Manager(intn){id=n;}C、Manager::Manager(intn):Employee(n){}D、Manager::Manager(intn){Employee(n);}標準答案:C知識點解析:基類的構造函數是帶有參數的,派生類從基類派生,這就需要在派生類的構造函數名后面顯示的調用基類的構造函數。17、有如下程序#inc1ude<iostream>usingnamespacestd;classA{public:virtualvoidfunc1(){cout<"A1";}voidfunc2(){cout<<"A2";}};classB:publicA{public:voidfunc1(){cout<"B1";}voidfunc2(){cout<"’B2";}};intmain(){A*p=newB;p一>func1();p一>func2();return0:}運行此程序,屏幕上將顯示輸出()。A、BIB2B、AIA2C、BIA2D、AIB2標準答案:C知識點解析:此題考查的是虛函數的概念。此題中,funcl是虛函數,func2是一般成員函數,而且在派生類與基類中都存在兩個這樣的函數。在主函數中,語句A*p=newB;定義了一個基類的指針p,并讓它指向一個派生類對象。所以通過該指針調用funcl時,運行的是派生類的版本,而通過該指針調用func2運行的是基類的版本。所以程序運行的最后輸出是:B1A2。18、若需要為XV類重載乘法運算符,運算結果為XV類型,在將其聲明為類的成員函數時,下列原型聲明正確的是()。A、XVoperator*(XV,XV);B、XV*(XV);C、operator*(XV);D、XVoperator*(XV);標準答案:D知識點解析:“*”是一個二元運算符,在作為成員函數重載時參數表中只有一個參數,對應于第二個操作數,而第一個操作數就是對象本身,僅以this指針的形式隱藏在參數表中。19、下列選項中,與實現運行時多態性無關的是()。A、重載函數B、虛函數C、指針D、引用標準答案:A知識點解析:在C++中,多態性可以分為兩類:編譯時的多態性和運行時的多態性。編譯時的多態性是通過函數重載和模版體現的,運行時的多態性是通過虛函數體現的。20、下列關于C++流的說明中,正確的是()。A、與鍵盤、屏幕、打印機和通信端口的交互都可以通過流類來實現B、從流中獲取數據的操作稱為插入操作,向流中添加數據的操作稱為提取操作C、cin是一個預定義的輸入流類D、輸出流有一個名為open的成員函數,其作用是生成一個新的流對象標準答案:A知識點解析:此題考查的是C++流的概念。從輸入流中提取數據稱為提取操作,把表達式插入到輸出流中的操作稱為插入操作,故選項B錯誤;cin是一個預定義的輸入流對象而不是流類,故選項C錯誤;輸入輸出流中沒有open成員函數,故選項D錯誤。國家二級C++機試(選擇題)模擬試卷第5套一、選擇題(本題共33題,每題1.0分,共33分。)1、算法的時間復雜度是指A、算法的執行時間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執行過程中所需要的基本運算次數標準答案:D知識點解析:算法的時間復雜度,是指執行算法所需要的計算工作量。算法的工作量可以用算法在執行過程中所需基本運算的執行次數來度量。2、下列關于棧的敘述中,正確的是A、棧底元素一定是最后入棧的元素B、棧頂元素一定是最先入棧的元素C、棧操作遵循先進后出的原則D、以上三種說法都不對標準答案:C知識點解析:棧是限定只能在表的一端進行插入和刪除操作的線性表,必須按“后進先出”的規則操作元素。3、對下列二叉樹進行前序遍歷的結果是()。A、DYBEAFCZXB、YDEBFZXCAC、ABDYECFXZD、ABCDEFXYZ標準答案:C知識點解析:二叉樹前序遍歷的簡單描述:若二叉樹為空,則結束返回;否則:①訪問根結點;②前序遍歷左子樹;③前序遍歷右子樹。可見,前序遍歷二叉樹的過程是一個遞歸的過程。根據題目中給出的二叉樹的結構可知前序遍歷的結果是ABDYECFXZ。4、對長度為n的線性表進行順序查找,在最壞情況下所需要的比較次數為A、log2nB、n/2C、nD、n+1標準答案:C知識點解析:在進行順序查找過程中,如果被查的元素是線性表中的最后一個元素,或者被查元素根本不在線性表中,則為了查找這個元素需要與線性表中的所有元素進行比較,這是順序查找的最壞情況,需要比較的次數為n次。5、下列選項中不符合良好程序設計風格的是()。A、源程序要文檔化B、數據說明的次序要規范化C、避免濫用goto語句D、模塊設計要保證高耦合、高內聚標準答案:D知識點解析:一般來講,程序設計風格是指編寫程序時所表現出的特點、習慣和邏輯思路。程序設計風格總體而言應該強調簡單和清晰,程序必須是可以理解的??梢哉J為,著名的“清晰第一、效率第二”的論點已成為當今主導的程序設計風格。良好的程序設計風格主要應注重和考慮下列幾個因素:①源程序文檔化,包括下列三個方面:A)符號的命名應具有一定的含義;B)正確的注釋能夠幫助讀者理解程序;C)視覺組織,可以在程序中利用空格、空行、縮進等技巧使程序層次清晰。②數據說明的方法,包括下列三個方面:A)數據說明的次序規范化;B)說明語句中變量安排有序化;C)使用注釋來說明復雜數據的結構。③語句的結構應該簡單直接,不應該為提高效率而把語句復雜化。④輸入和輸出方式和風格應盡可能方便用戶的使用。6、有如下類定義:classSample{public;Sample(intx):ref(x){}∥①private:Sample():ref(0){}∥②staticintval=5;∥③constintref;∥④};上述程序段中,錯誤的語句是()。A、①B、②C、③D、④標準答案:C知識點解析:靜態整型數據不能定義為類的數據成員。7、執行下列語句段后,輸出字符“*”的個數是()。for(inti=50;i>1;i-=2)cout<<’*’;A、24B、25C、26D、50標準答案:B知識點解析:本題考查for循環語句,題目中每執行完循環體后,i都會減2,那么只有50到2之間的偶數才能輸出“*”,所以總共輸出25次。8、有如下程序:#includeusingnamespacestd;className{charname[20];public:Name(){strcpy(name,"");cout<<’?’;}Name(char*fname){strcpy(name,fname);cout<<’?’;}};intmain(){Namenames[3]={Name("張三"),Name("李四")};return0;}運行此程序輸出符號?的個數是()。A、0B、1C、2D、3標準答案:D知識點解析:類Name有兩個構造函數,在默認構造函數中,給字符數組name賦空值,并輸出一個?;在帶有字符指針的構造函數中,把字符指針fname所指的字符串賦給字符數組name,并輸出一個?。所以在主函數中,定義了Name的三個對象,name[0]、name[1]、name[2],在創建這三個對象時,會調用構造帶參數的函數對前兩個對象賦值,調用默認的構造函數把name[2]的值賦為空值。這時會輸出三個“?”符號。9、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、交C、除D、并標準答案:C知識點解析:從關系R、S和T的結構可以得出關系T是由關系R、S經過除運算后得到的。10、在類聲明中,緊跟在“public:”后聲明的成員的訪問權限是()。A、私有B、公有C、保護D、默認標準答案:B知識點解析:類【{1提供了3種訪問控制的權限:公有,私有和保護。其中公有類型定義了類的外部接口,任何一個外部的訪問都必須通過外部接口進行。私有類型的成員只允許本類的成員函數訪問,來自類外部的任何訪問都是非法的,保護類型介于公有類型和私有類型之間,在繼承和派生時可以體現出其特點。11、下列字符串中不能作為C++標識符使用的是()。A、WHILEB、userC、_lvarD、9stars標準答案:D知識點解析:在C++中變量名的命名必須遵循一定的原則,其中之一即是第一個字符必須是字母或者下劃線。12、下列枚舉類型的定義中,包含枚舉值3的是()。A、enumtest{RED,YELLOW,BLUE,BLACK};B、enumtest{RED,YELLOW=4,BLUE,BLACK};C、enumtest{RED=—1,YELLOW,BLUE,BLACK};D、enumtest{RED,YELLOW=6,BLUE,BLACK};標準答案:A知識點解析:聲明枚舉類型的語法格式為:enum<類型名>{<枚舉值表>};<枚舉值表>包含多個枚舉值,它們用逗號隔開,每個枚舉值就是一個枚舉常量。枚舉值有兩種定義形式:一是<值名>;二是<值名>=<整型常量>。關于枚舉類型有以下4點說明:①一個enum類型實際上是int類型的一個子集,其每一個枚舉值代表一個整數。②n個枚舉值全部未賦常量值時,它們自左至右分別與整數0,1,…n—1對應。③若第i個枚舉值賦常量值為m.則其未賦常量值的后續枚舉值分別與整數m+1,m+2…對應,直到下一個賦了值的枚舉值或結束。因此,為枚舉值賦的整型常量值應從左到右遞增。④枚舉類型的聲明也可作為組聲明若干整型符號常量的方法。也就是說,把每個要聲明的符號常量作為一個枚舉值,將各個枚舉值合在一起定義成一個枚舉類型。對于本題來說,在選項A)中,對4個枚舉值沒有賦常量值,所以它們從左到右與整數0,1,2,3相對應。因而選項A)為正確選項。13、有如下程序:#includeusingnamespacestd;classInstrument{public:virtualvoidDisplay()=0;};classPiano:publicInstrument{public:voidDisplay(){/*函數體程序略*/}};intmain(){Instruments;I

溫馨提示

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

評論

0/150

提交評論