(21)B
解析: 按位與運(yùn)算符"&"是雙目運(yùn)算符。其功能是參與運(yùn)算的兩數(shù)各對應(yīng)的二進(jìn)位相與。只有對應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1 ,否則為0。參與運(yùn)算的數(shù)以補(bǔ)碼方式出現(xiàn)。邏輯與運(yùn)算符"&&"需要兩邊的結(jié)果都為1時(shí),其結(jié)果才為1。
(22)D
解析: C++的this指針是系統(tǒng)默認(rèn)產(chǎn)生的一個(gè)指針,它是const的,所以是不能夠被改變,不能夠被賦值的。
(23)B
解析: 類D繼承了類C和類B,所以在構(gòu)造的時(shí)候分別構(gòu)造類B和類C。
(24)D
解析: 虛函數(shù)一定不能定義為靜態(tài)的。虛函數(shù)可以聲明為友元,子類也不是必須重定義父類的虛函數(shù),若在重定義虛函數(shù)時(shí)使用了virtual,則該重定義函數(shù)不一定還是虛函數(shù)。
(25)A
解析: C++中用成員函數(shù)重載++x為:x. operator++(),用友元函數(shù)重載++x為:operator++(x),用成員函數(shù)重載x/y為:x. operator/(y),用友元函數(shù)重載x/y為:operator/(x,y)。
(26)C
解析: C++語言中默認(rèn)小數(shù)的輸出位一共是6位,fixed的意義是在小數(shù)點(diǎn)后保留6位。
(27)D
解析: 選項(xiàng)D)第一層括號(hào)中為數(shù)組a中第i項(xiàng)元素的值,外面再加指針運(yùn)算符沒有意義。
(28)B
解析: 本題的運(yùn)算過程是fun((int)fun(a+c,b),a-c),fun((int)fun(10,5),2-8),fun((int)15.000000,-6),fun(15,-6)=9。
(29)A
解析: 本題中有成員函數(shù)和它的重載函數(shù),要注意它們的不同,在本題中先調(diào)用了init函數(shù),初始化了X,Y,都為0,valueX(5);又將X變?yōu)?,所以輸出5和0,然后初始化init(6,2),接著又valueY(4);將X,Y設(shè)為6和4,所以輸出6和4。
(30)B
解析: C++基本的性質(zhì)就是它的封裝性,而封裝性主要是靠類來實(shí)現(xiàn)的。
(31)A
解析: 左移運(yùn)算符"<<"是雙目運(yùn)算符。其功能把"<<"左邊的運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由"<<"右邊的數(shù)指定移動(dòng)的位數(shù),高位丟棄,低位補(bǔ)0。左移1位,相當(dāng)于該數(shù)乘以2。
(32)B
解析: 這是一種簡單的情況:不帶參數(shù)的宏。關(guān)鍵要注意在對2*M+1進(jìn)行宏替換時(shí),要將宏名M原樣替換,得到NUM的形式為2*N+1+1(千萬不要隨意把給N+1加上小括號(hào),使NUM變?yōu)?*(N+1)+1,這就是宏名和變量名之間的區(qū)別)。
(33)B
解析: 在函數(shù)體語句中的b+=*a;的*是指針運(yùn)算符(也稱間接訪問運(yùn)算符),*a就是main函數(shù)中a的值。
(34)B
解析: C++語言函數(shù)中定義的變量都是屬于這個(gè)函數(shù)的局部變量。
(35)B
解析: fib(3)=fib(2)+ fib(1),而fib(2)的返回值為2,fib(1)的返回值也為2,故輸出的fib(3)的值為4。
二、填空題
(1)0
解析: 根據(jù)冒泡排序算法思想可知,若待排序的初始序列為"正序"序列,則只需進(jìn)行一趟排序,在排序過程中進(jìn)行n-1次關(guān)鍵字間的比較,且不移動(dòng)和交換記錄,這種情況是冒泡排序的最好情況,故冒泡排序算法在最好的情況下的元素交換次數(shù)為0。
(2)O(nlog2n)
解析: 在最壞情況下,冒泡排序所需要的比較次數(shù)為n(n-1)/2;簡單插入排序所需要的比較次數(shù)為n(n-1)/2;希爾排序所需要的比較次數(shù)為O(n15);堆排序所需要的比較次數(shù)為O(nlog2n)。
(3)46
解析: 串s中共有9個(gè)字符,由于串中字符各不相同,則其子串中有0個(gè)字符的1個(gè)(空串),1個(gè)字符的9個(gè),2個(gè)字符的8個(gè),3個(gè)字符的7個(gè),4個(gè)字符的6個(gè),5個(gè)字符的5個(gè),6個(gè)字符的4個(gè),7個(gè)字符的3個(gè),8個(gè)字符的2個(gè),9個(gè)字符的1個(gè),共有1+2+3+4+5+6+7+8+9+1=46。
(4)軟件工具
(5)謂詞演算
解析: 關(guān)系數(shù)據(jù)庫中的關(guān)系演算包括元組關(guān)系演算和域關(guān)系演算。二者都是由原子公式組成的公式。而這些關(guān)系演算都是以數(shù)理邏輯中的謂詞演算為基礎(chǔ)的。
(6)sizeof
解析: C++語言中關(guān)鍵字運(yùn)算符有3個(gè)分別new,delete和sizeof。new 是申請內(nèi)存,delete是釋放內(nèi)存,sizeof是求字節(jié)數(shù)。
(7)max=(a>b)?a:b;
解析: 條件運(yùn)算符要求有三個(gè)操作對象,稱三目(元)運(yùn)算符,它是C++語言中惟一的一個(gè)三目運(yùn)算符。條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3。所以我們可以寫成(a>b)?a:b,它是一個(gè)"條件表達(dá)式"。執(zhí)行順序是如果(a>b)條件為真,則條件表達(dá)式取值a作為整個(gè)表達(dá)式的值,否則取值b作為整個(gè)表達(dá)式的值。
(8)defg
解析: 本題中,給數(shù)組s中的第5個(gè)元素s[4]賦以′\0′,則s數(shù)組中只有前4個(gè)元素有效,輸出結(jié)果為defg。
(9)j+=2~a[i]>=a[j]`a[i]>a[j]
解析: strlen函數(shù)是測試字符串長度的函數(shù),函數(shù)的值為字符串中的實(shí)際長度,不包括′\0′在內(nèi)。
(10)靜態(tài)~非靜態(tài)
解析: 靜態(tài)成員函數(shù)可以直接訪問該類中的靜態(tài)數(shù)據(jù)成員,而不能訪問該類中的非靜態(tài)數(shù)據(jù)成員。
(11)virtual int A()= 0;
解析: C++語言中的純虛函數(shù)是一種特殊的函數(shù),它沒有自己的定義,只有聲明,純虛函數(shù)與虛函數(shù)聲明的不同就在于在函數(shù)后面加上了"=0"。
(12)x+y++`x+(y++)
解析: 因?yàn)閥.operator++(0)是對成員y重載運(yùn)算符,所以是成員重載,在參數(shù)表中又有一個(gè)參數(shù),是重載后綴++,即是x+(y++)。
(13)fin
解析: 如果程序沒有用close()主動(dòng)關(guān)閉文件,則在文件流對象退出作用域時(shí),被調(diào)用的析構(gòu)函數(shù)會(huì)關(guān)閉對象所聯(lián)系的文件。但應(yīng)及時(shí)關(guān)閉,以便盡早釋放占用的系統(tǒng)資源并將文件置于更安全的狀態(tài)。