參考答案及分析
一、選擇題
(1)D
解析: 假設(shè)線性表的長度為n,則在最壞情況下,冒泡排序要經(jīng)過n/2遍的從前往后的掃描和n/2遍的從后往前的掃描,需要的比較次數(shù)為n(n-1)/2。
(2)D
解析: 算法分析是指對一個算法的運行時間和占用空間做定量的分析,一般計算出相應(yīng)的數(shù)量級,常用時間復(fù)雜度和空間復(fù)雜度表示。分析算法的目的就是要降低算法的時間復(fù)雜度和空間復(fù)雜度,提高算法的執(zhí)行效率。
(3)D
解析: 線性表可以為空表;第一個元素沒有直接前件,最后一個元素沒有直接后件;線性表的定義中,元素的排列并沒有規(guī)定大小順序。
(4)A
解析: 頭結(jié)點不僅標識了表中首結(jié)點的位置,而且根據(jù)單鏈表(包含頭結(jié)點)的結(jié)構(gòu),只要掌握了表頭,就能夠訪問整個鏈表,因此增加頭結(jié)點目的是為了便于運算的實現(xiàn)。
(5)C
解析: 軟件工程概念的出現(xiàn)源自于軟件危機。為了消除軟件危機,通過認真研究解決軟件危機的方法,認識到軟件工程是使計算機軟件走向工程科學(xué)的途徑,逐步形成了軟件工程的概念。
(6)D
解析: 軟件測試過程中,輔助資源包括測試用例(測試數(shù)據(jù))、測試計劃、出錯統(tǒng)計和最終分析報告等。
(7)D
解析: 數(shù)據(jù)流相當于一條管道,并有一級數(shù)據(jù)(信息)流經(jīng)它。在數(shù)據(jù)流圖中,用標有名字的箭頭表示數(shù)據(jù)流。數(shù)據(jù)流可以從加工流向加工,也可以從加工流向文件或從文件流向加工,并且可以從外部實體流向系統(tǒng)或從系統(tǒng)流向外部實體。
(8)D
解析: 分布式數(shù)據(jù)庫系統(tǒng)具有數(shù)據(jù)分布性、邏輯整體性、位置透明性和復(fù)制透明性的特點,其數(shù)據(jù)也是分布的;但分布式數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)經(jīng)常重復(fù)存儲,數(shù)據(jù)也并非必須重復(fù)存儲,主要視數(shù)據(jù)的分配模式而定。若分配模式是一對多,即一個片段分配到多個場地存放,則是冗余的數(shù)據(jù)庫,否則是非冗余的數(shù)據(jù)庫。
(9)A
解析: 關(guān)系表中,每一行稱為一個元組,對應(yīng)表中的一條記錄;每一列稱為表中的一個屬性,對應(yīng)表中的一個字段;在二維表中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。
(10)C
解析: 關(guān)系模型較之格式化模型(網(wǎng)狀模型和層次模型)有以下方面的優(yōu)點,即數(shù)據(jù)結(jié)構(gòu)比較簡單、具有很高的數(shù)據(jù)獨立性、可以直接處理多對多的聯(lián)系,以及有堅實的理論基礎(chǔ)。
(11)A
解析: C++語言標識符只能由數(shù)字,字母和下劃線組成,并且只能以字母和下劃線為開頭。
(12)D
解析: C語言是一種面向過程的程序設(shè)計語言,而C++語言是一種面向?qū)ο蟮脑O(shè)計語言,C++語言是C語言的超集,它包含了C語言的所有語言特性,并進行了擴充。
(13)A
解析: 該字符串中包含的字符是′\t′(跳格符)、′\"′(雙引號)、′\065′(ASCII值為八進制065,也即十進制為51的字符)、′\xff′(ASCII值為十六進制ff,也即十進制為255的字符)、′\n′(換行符)。
(14)C
解析: 在C++語言中,實數(shù)有兩種形式表示,即十進制數(shù)形式和指數(shù)形式,在指數(shù)形式中,e3,2.1e3.5,.e3,e等都是不合法的指數(shù)形式。再如123e3或123E3都代表123乘以10的3次方。注意,字母e的前面必須有數(shù)字,且e的后面必須是整數(shù)。
(15)B
解析: do-while 語句的一般格式為do 循環(huán)體語句 while(表達式);,先執(zhí)行循環(huán)體語句一次,再判斷表達式的值,若為真則繼續(xù)執(zhí)行循環(huán),否則終止循環(huán)。本題中,先執(zhí)行x=x-2,即為1。判斷表達式的值,!(--x)為真,x=0,繼續(xù)循環(huán)。再次執(zhí)行循環(huán)體語句后,x=-2,此時表達式的值為0,結(jié)束循環(huán)。
(16)D
解析: 選項A)for循環(huán)可以用于循環(huán)次數(shù)不確定的情況;選項B)for循環(huán)是先判斷表達式,后執(zhí)行循環(huán)體語句;選項C)在for循環(huán)中,可以用break語句跳出循環(huán)體,從而接著執(zhí)行循環(huán)體后面的語句。
(17)B
解析: p表示的是變量a的地址,定義后*p表示的是變量a的值。
(18)D
解析: x數(shù)組共有10個元素,在花括弧內(nèi)只提供3個初值,這表示只給前面的3個成員賦值,后7個元素的值為0,所以,一共有20個字節(jié)。
(19)B
解析: 本題考查函數(shù)中變量的作用范圍,在主函數(shù)中給變量x,y,z賦值,然后將其作為實參傳遞給了函數(shù)fun(),雖然在函數(shù)fun()中改變了這3個變量的值,但只是同名的局部變量,不影響函數(shù)中變量的值,所以在調(diào)用函數(shù)fun()結(jié)束后,主函數(shù)3個變量的值未改變。
(20)D
解析: 在C++語言中,所有的函數(shù)都是平行的,即在定義函數(shù)時是互相獨立的,一個函數(shù)并不從屬于另一個函數(shù),即函數(shù)不能嵌套定義,但可以互相調(diào)用。但是不能調(diào)用main()函數(shù)。
(21)A
解析: const int *p;是只能改變指針地址,int * const p;是只能改變*p的內(nèi)容,const int *const p;是指針的地址和*p的內(nèi)容都不能改變,int *p;是兩者都能改變。
(22)A
解析: 在C++中定義數(shù)組時,數(shù)組的范圍參數(shù)在靜態(tài)定義時必須是一個常數(shù),而在動態(tài)分配內(nèi)存定義時可以是常數(shù),也可以是一個賦了值得參數(shù)。故選項A)是錯誤的定義方法。
(23)C
解析: 類A,類B,中都有showa()函數(shù),類C繼承后再次重寫showa()函數(shù)就解決了繼承的二義性,這時c.showa()函數(shù)顯示的就是類C中的showa()的值。
(24)C
解析: 基類和其繼承類同時出現(xiàn)同名函數(shù),則在繼承類中實現(xiàn)對象中調(diào)用該函數(shù)是使用繼承類中的定義,這種情況下是不會產(chǎn)生二義性的。
(25)A
解析: C++中用成員函數(shù)重載x*y為:x. operator*(y),用友元函數(shù)重載x*y為:operator*(x,y),用成員函數(shù)重載x+y為:x. operator+(y),用友元函數(shù)重載x+y為:operator+(x,y)。
(26)C
解析: 對于template
T add(T x,T y){return x+y;}
調(diào)用時可以省略模板實參的聲明,但是要求x和y的數(shù)據(jù)類型必須是一樣的。
(27)A
解析: C++語言中setfill的意思是在空格的地方填上setfill函數(shù)中的參數(shù)字符,setw的意思是設(shè)置整個輸出字符串的字符個數(shù),本題中用*來代替空格。
(28)B
解析: this指針是C++語言實現(xiàn)封裝的一種機制,它將對象和該對象調(diào)用的成員函數(shù)連接在一起,在外部看來,每一個對象都擁有自己的函數(shù)成員。
(29)D
解析: 語句r=func(func(x,y),z);中,fun(x,y)是一次調(diào)用函數(shù),它的值作為func另一次調(diào)用的實參。注意本題調(diào)用兩次函數(shù)。
(30)A
解析: 在Myclass類中定義了兩個同名函數(shù)show,其中一個是常成員函數(shù)。在main函數(shù)中定義了兩個對象my1,my2,其中對象my2是常對象。這兩個對象調(diào)用成員函數(shù)show時,通過對象my1調(diào)用的是沒有用const修飾的一般成員函數(shù),而通過對象my2調(diào)用的是const修飾的常成員函數(shù)。
(31)D
解析: 帶有純虛函數(shù)的類稱為抽象類,抽象類中的純虛函數(shù)沒有具體的定義,所以不能說明抽象類的對象。
(32)A
解析: C++的I/O系統(tǒng)是通過一種稱為流的機制來實現(xiàn)文件和控制臺的I/O操作。簡單地說,在C++中,輸入輸出操作是通過流來完成的。而文件流以磁盤文件以及其他可按文件方式進行管理的外部設(shè)備為輸入輸出對象。每個文件流都應(yīng)當與一個打開的文件相聯(lián)系;關(guān)閉一個文件就是取消這種聯(lián)系。
(33)B
解析: 函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型。它的作用是將一個變量的地址傳送到另一個函數(shù)中去。在本題解析中,我們試圖將這一問題解釋清楚!
大家可以考慮一下利用下面這函數(shù)可不可以實現(xiàn)a和b的互換。
swap(int x,int y)
{ int t;
t=x;
x=y;
y=t;
}
如果在main函數(shù)中用swap(a,b),會有甚么結(jié)果呢?在函數(shù)調(diào)用開始時,a的值傳送給x,b的值傳遞給y 。執(zhí)行完swap()函數(shù)后,x和y的值是互換了,但main()函數(shù)中的a和b并未互換。也就是說由于"單向傳遞"的"值傳遞"方式,形參值的改變無法傳遞給實參。
為了使在函數(shù)中改變了的變量值能被main()函數(shù)所用,不能采取上述辦法,而應(yīng)該用指針變量做函數(shù)參數(shù)。在函數(shù)執(zhí)行過程中使指針變量所指向的變量值發(fā)生變化,函數(shù)調(diào)用結(jié)束后,這些變量值的變化被保留下來,這樣就實現(xiàn)了調(diào)用函數(shù)改變變量的值,在主調(diào)函數(shù)中使用這些改變了的值的目的。
swap(int *p1,int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
注意交換*p1和*p2的值是如何實現(xiàn)的,如果寫成下面這樣就有問題了!
swap(int *p1,int *p2)
{ int *p;
*p=*p1; /*此語句有問題*/
*p1=*p2;
*p2=*p;
}
*p1就是a,是整型變量。而*p是指針變量p所指向的變量,但p中并無確切地址,用*p可能會造成破壞系統(tǒng)的正常工作狀態(tài)。應(yīng)該將*p1的值賦給一個整型變量,用整型變量作為過渡變量實現(xiàn)*p1和*p2的交換。
(34)C
解析: for語句中的表達式可以部分或全部省略,但兩個";"不能省略,若三個表達式均省略,會因為缺少條件判斷,導(dǎo)致循環(huán)無限執(zhí)行,而形成死循環(huán)。本題中當i的值為5的時候,循環(huán)終止。
(35)D
解析: 字符型數(shù)據(jù)在計算機內(nèi)部是以ASCII碼存儲的,英文大寫字母和小寫字母在ASCII碼表中都是連續(xù)的。大寫字母A~Z是從65~90,小寫字母a~z是從97~122。所以只要變量c大于等于a并且等于小于z就能保證其為小寫字母。
二、填空題
(1)時間復(fù)雜度和空間復(fù)雜度
(2)SQR(x^2+y^2)/(a+b)
(3)軟件工程學(xué)
(4)數(shù)據(jù)模型
解析: 數(shù)據(jù)模型是對客觀事物及聯(lián)系的數(shù)據(jù)描述,它反映了實體內(nèi)部及實體與實體之間的聯(lián)系。因此,數(shù)據(jù)模型是數(shù)據(jù)庫設(shè)計的核心。
(5)關(guān)系
解析: 在關(guān)系模型中,把數(shù)據(jù)看成一個二維表,每一個二維表稱為一個關(guān)系。表中的每一列稱為一個屬性,相當于記錄中的一個數(shù)據(jù)項,對屬性的命名稱為屬性名;表中的一行稱為一個元組,相當于記錄值。
(6)編譯
解析: C++語言程序開發(fā)的基本步驟是編輯、編譯、鏈接、運行和調(diào)試。
(7)1
解析: 計算表達式!a (8)1000~10
解析: 對于define宏定義語句,系統(tǒng)會在編譯前進行替換。本題替換過程如下:
i1=1000/s(N)
i1=1000/s(10)
i1=1000/10*10
i1=1000
i2=1000/f(N)
i2=1000/f(10)
i2=1000/(10*10)
i2=10
(9)友元函數(shù)
解析: C++語言中友元類中的函數(shù)都是另一個類的友元函數(shù)。
(10)靜態(tài)聯(lián)編`靜態(tài)綁定~動態(tài)聯(lián)編`動態(tài)綁定
解析: C++語言編譯時多態(tài)性的機制是靜態(tài)綁定,實現(xiàn)C++語言運行時多態(tài)性的機制是動態(tài)綁定。
(11)++x
解析: C++語言中用成員函數(shù)重載++x為x. operator++()用友元函數(shù)重載++x為:operator++(x)
(12)16
解析: 解答本題的關(guān)鍵是要分析清楚表達式a+=(a=8)中,a的值已經(jīng)被賦為8,而不是0。
(13)ifstream fin("C:\test.dat" ,ios_binary);`ifstream
解析: C++中打開文件有兩種方式① ifstream fin("test.dat");② ifstream fin;fin.open("test.dat");,ios_binary的意義是以二進制文件打開。
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |