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