第 1 頁:選擇題 |
第 3 頁:程序改錯題 |
第 4 頁:簡單應用題 |
第 5 頁:綜合應用題 |
21在軟件開發中,需求分析階段產生的主要文檔是( )。
A.可行性分析報告
B.軟件需求規格說明書
C.概要設計說明書
D.集成設計計劃
參考答案:B
參考解析:需求分析是對獲取的需求進行分析和綜合最終給出系統的解決方案和目標系統的邏輯模型。需求分析的最終結果是生成軟件需要規格說明書,可以為用戶、分析人員和設計人員之間的交流提供方便,可以直接支持目標確認,又可以作為控制軟件開發進程的依據。
22在軟件開發中,需求分析階段產生的主要文檔是( )。
A.軟件集成測試計劃
B.軟件詳細設計說明書
C.用戶手冊
D.軟件需求規格說明書
參考答案:D
參考解析:
需求分析階段只能產生需求分析規格說明書。A測試說明書是軟件測試階段生成的;B軟件詳細設計說明書是設計階段生成;C用戶手冊是軟件發布時隨軟件一同交付給用戶的。
23生成派生類對象時,派生類構造函數調用基類構造函數的條件是( )。
A.無需任何條件
B.基類中顯式定義了構造函數
C.派生類中顯式定義了構造函數
D.派生類構造函數明確調用了基類構造函數
參考答案:D
參考解析:派生類的構造函數必須通過調用基類的構造函數來初始化基類子對象。所以在定義派生類的構造函數時,除了對自己的類據成員進行初始化外,還必須負責調用基類構造函數,使基類的數據成員得以初始化。
24下列選項中不屬于字符常量的是( )。
A.'C'B."C"C.'\xCC'D.'\072'
參考答案:B
參考解析:字符常量是用一對單引號括起來的,而字符串常量是用雙引號括起來的字符序列,所以選項B不正確;選項C中'\xCC'是十六進制表示的轉義字符;選項D中'\O72'是八進制表示的轉義字符。
25有下列程序:
#include
voidmain( )
{char*s={"ABC");
do
{printf("%d",*s%10);s++;
}while(*s);
}
注意:字母A的ASCIl碼值為65。程序運行后的輸出結果是( )。
A.5670B.656667C.567D.ABC
參考答案:C
參考解析:本題考查d0…while語句,至少執行一次循環體,依次輸出ABC,這三個字母的ASCIl值對10求模的余數,字母A的ASCIl值對10求模的余數為5,字母B的ASCIl值對10求模的余數為6,字母c的ASCIl值對10求模的余數為7。所以正確答案為選項C。
26數據庫管理系統中負責數據模式定義的語有是( )。
A.數據定義語言B.數據管理語言C.數據操縱語言D.數據控制語言
參考答案:A
參考解析:數據模式是由數據定義語言(DataDefini-tionLanguage,DDL)來描述、定義的,體現、反映了數據庫系統的整體觀。
27有如下程序:
#include
usingnamespacestd;
classAA{
public;
AA( ){cOUt<<'1';)
};
classBB:publicAA{
intk;
public:
BB( ):k(0){tout<<'12';}
BB(intn):k(n)(cout<<'3';)
};
intmain( ){
BBb(4),c;
return0;
}
運行時的輸出結果是( ).
A.1312B.132C.32D.1412
參考答案:A
參考解析:當基類的構造函數默認或無參時,派生類可省對基類構造函數的顯示調用,但系統會自動調用該類的缺省構造函數,且先調用基類的構造函數后調用派生類的構造函數。
28下列關于宏的敘述中正確的是( )。
A.宏名必須用大寫字母表示
B.宏定義必須位于源程序中所有語句之前
C.宏替換沒有數據類型限制
D.宏調用比函數調用耗費時間
參考答案:C
參考解析:本題考查宏的相關知識點。宏名沒有大小寫限制;宏定義可以放在程序中的任何位置,其有效范圍是從定義開始到文件結束;宏替換可以代替任何數據類型,不受數據類型的限制;函數影響運行時間,宏調用影響編譯時間。
29下列敘述中正確的是( )。
A.算法就是程序
B.設計算法時只需要考慮數據結構的設計
C.設計算法時只需要考慮結果的可靠性
D.以上三種說法都不對
參考答案:D
參考解析:程序可以實現算法,所以A錯。設計算法除了考慮數據結構外,還需考慮結果的可靠性,以及算法效率,等等。
30若已定義
inta[]={1,2,3,4,5,6,7,8,9,10},p=a,i=5;
則對數組元素不正確的引用是( )。
A.a[p-a]B.*(&a[i])C.p[i]D.*(*(a+i))
參考答案:D
參考解析:數組和指針的關系非常密切,因為數組名稱單獨使用是表示數組的首地址。故可用的表示可能是a[i],p[i],*(P{i),同樣&(a[i])表示地址,因此*(&a[i])等同于a[i]。本題答案為D。
31控制格式輸入/輸出的操作中,設置域寬的函數是( )。
A.WSB.octC.setfill(int)D.setw(int)
參考答案:D
參考解析:本題需要考生記憶一些輸入/輸出控制操作字,oct為八進制,setfill為設置填充符,setw為設置域寬。
32有下列二叉樹,對此二叉樹前序遍歷的結果是( )。
A.ACFXDBEYZB.ABEFXYZCDC.ABCDEFXYZD.ABDYECFXZ
參考答案:D
參考解析:對二叉樹的前序遍歷是指:先訪問根結點,然后訪問左子樹,最后訪問右子樹,并且,在訪問左、右子樹時,先訪問根結點,再依次訪問其虛、右子樹。記住三種遍歷的順序:①前序,訪問根→按前序遍歷左子樹→按前序遍歷右子樹;②中序,按中序遍歷左子樹→訪問根→按中序遍歷右子樹;③后序,按后序遍歷左子樹→按后序遍歷右子樹→訪問根。
33設有宏定義“#definelsDIV(k,n)((k%n==1?1:0)”且變量m已正確定義并賦值,則宏調用“lsDIV(m,5)&&IsDIV(m,7)”為真時所要表達的是( )。
A.判斷m是否能被5或者7整除
B.判斷m是甭能被5和7整除
C.判斷m被5或者7整除是否余1
D.判斷m被5和7整除是否都余l
參考答案:D
參考解析:本題考查宏定義,宏定義IsDIV(k,n)的意思是如果k對n.求模的余數為1,其值等于1,否則其值等于0。本題中宏調用表達式是兩個宏調用之間的邏輯與運算,所以選項D正確。
34以下程序的輸出結果是( )。
#include
longfun(intn)
{longS;
if(n==1‖n==2)s=2;
elses=n-fun(n-1):
returnS;
}
voidmain(){cout<
A.1B.2C.3D.4
參考答案:A
參考解析:題中fun函數進行了遞歸調用,第1次調用對:fun(3)n=3,S=3-fun(2),第二次調用時:fun(2)n=2,s=2,返回第一次調用后,s=3-2=1。
35下列程序的執行結果是( )。
#include
#include
classTestClass
{
public:
intX,y;
TestClass(){x=y=0;}
TestClass(inta,intb)(x=a;y=b;}voiddisp()
{
cout<<"x="<
}
};
voidmain()
{
TestClasss1(2,3);
s1.disp();
}
A.x=2,y=2B.x=2,y=3C.x=3,y=2D.x=3,y=3
參考答案:B
參考解析:由主函數入手,定義了類TestClass的對象s1(2,3),當類對象進入其作用域時調用構造函數,構造函數應該是調用具有參數的“TestClass(inta,intb){x=a;y=b;}”,然后調用成員函數disp(),則輸出為“cout<<"x="<
36有下列程序:
#include
intfun(int(*s)[4],intn,intk)
{intm,i;
m=s[O][k];
for(i=1;im)m=s[i]
[k];
returnm;
}
voidmain( )
{inta[4][4]=({1,2,3,4),{11,12,13,14},{21,
22,23,24},{31,32,33,34)};
printf(”%d\n”,fun(a,4,O));
}
程序的運行結果是( )。
A.4B.34C.31D.32
參考答案:C
參考解析:在程序中fun函數的功能在于求取三維數組S中1至n行中每行第k個元素中的最大者。注意:i=0時為第一行,故fun(a,4,O)在于求取11、21、31中的最大值,顯然為31。
37有如下程序:
#include
voidmain()
{charch[2][5]={"6937","8254"),*p[2];
inti,j,s=0;
for(i=0;i(2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0';j+=2)
s=10*s+p[i][j]-'0';
cout<
該程序的輸出結果是( )。
A.69825B.63825C.6385D.693825
參考答案:C
參考解析:該題需要搞清楚以下幾點:④定義了一個指針數組char*p[2]后,程序中第一個循環“for(i=0;i(2;i++)p[i]=ch[i]”的作用是使指針數組的p[0]元素(它本身是一個指針)指向了二維數組ch的第一行字符串,并使指針數組的p[1]元素指向了二維數組ch的第二行字符串,這樣,就使指針數組P和二維數組ch建立起了一種對應關系,以后對二維數組ch的某個元素的引用就有兩種等價的形式:ch[i][j]或p[i][j]。②對二維數組ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的內容為字符串“8254”。③程序中第二個循環中的循環體“s=s*10+p[i][j]-'0'”的功能是這樣的,每執行一次,將s中的值乘以10(即將s中的數值整體向左移動一位,并在空出來的個位上添一個0),再將當前p[i][i]中的字符量轉換為相應的數字,然后把這個數字加到s的個位上。④注意到內層循環的循環條件p[i][j]>'\0'是指p[i][j]中的字符只要不是字符串結束標志'\0'就繼續循環,語句j+=2;是使下標j每次增加2,即一個隔一個地從p[i]所指向的字符串中取出字符。經過上述解析后,不難看出,該程序首先從p[0]所指向的字符串“6937”中一個隔一個地取出字符,分別是“6”和“3”,然后從p[1]所指向的字符串“8254”中一個隔一個地取出字符,分別是“8”和“5”,同時經過轉換和相加運算后,結果s中的值應該是6385。
38為了提高函數調用的實際運行速度,可以將較簡單的函數定義為( )。
A.內聯函數B.重載函數C.遞歸函數D.函數模板
參考答案:A
參考解析:內聯函數一般是程序代碼少于10行的函數,在編譯過程中,直接在調用點處被展開,不會因函數調用帶來巨大的系統開銷,因此能提高實際運行速度。
39下列選項中屬于面向對象設計方法主要特征的是( )。
A.繼承B.自頂向下C.模塊化D.逐步求精
參考答案:A
40下列程序輸出的結果是( )。
#include
funl(chara,charb){charC;c=a;a=b;b=C;)
fun2(char*a,charb){charC;c=*a;*a=b;b=c;)
fun3(char*a,char*b){charC;C=*a;*a=*b;*b=C;)
voidmain( )
{
chara,b;
a='A';b='B';fun1(a,b);putchar(a);putchar(b);
a='A';b='B';fun2(&a,b);putchar(a);putchar(b);
a='A';b='B';fun3(&a,&b);putchar(a);putchar(b);
putchar('\n');
}
A.BABBABB.ABBBBAC.ABBABAD.ABABBA
參考答案:B
參考解析:由程序中的主函數main入手,分別調用fun1,fun2,fun3函數,得出輸出結果。其中,3個函數都是實現的兩個形參的交換功能,只是值傳遞的方式不同,有的是引用,有的是傳值。第一個函數中參數采用的是值傳遞的方式,形參的變化不影響實參。所以d調用funl后,實參a和b并沒有交換,仍然是AB。第二個調用中,實參a采用的是地址,即傳遞的是地址,所以形參a的改變會影響實參a的值,即BB。同理,調用fun3后為BA。
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |