計算機二級選擇題題庫
選擇題題庫
1。下列資料結構中,屬於非線性結構的是()。
A) 迴圈佇列
B) 帶鏈佇列
C) 二叉樹
D) 帶鏈棧
1、參考答案:C
【解析】樹是簡單的非線性結構,所以二叉樹作為樹的一種也是一種非線性結構。
2。下列資料結構中,能夠按照“先進後出”原則存取資料的是()。
A) 迴圈佇列
B) 棧
C) 佇列
D) 二叉樹
2、參考答案:B
【解析】棧是按先進後出的原則組織資料的。佇列是先進先出的原則組織資料
3。對於迴圈佇列,下列敘述中正確的是()。
A) 隊頭指標是固定不變的
B) 隊頭指標一定大於隊尾指標
C) 隊頭指標一定小於隊尾指標
D) 隊頭指標可以大於隊尾指標,也可以小於隊尾指標
3、參考答案:D
【解析】迴圈佇列的隊頭指標與隊尾指標都不是固定的,隨著入隊與出隊操作要進行變化。因為是迴圈利用的佇列結構所以對頭指標有時可能大於隊尾指標有時也可能小於隊尾指標。
4。演算法的空間複雜度是指()。
A) 演算法在執行過程中所需要的計算機儲存空間
B) 演算法所處理的資料量
C) 演算法程式中的語句或指令條數
D) 演算法在執行過程中所需要的臨時工作單元數
4、參考答案:A
【解析】演算法的空間複雜度是指演算法在執行過程中所需要的記憶體空間。所以選擇A)。
5。軟體設計中劃分模組的一個準則是()。
A) 低內聚低耦合
B) 高內聚低耦合
C) 低內聚高耦合
D) 高內聚高耦合
5、參考答案:B
【解析】一般較優秀的軟體設計,應儘量做到高內聚,低耦合,即減弱模組之間的耦合性和提高模組內的內聚性,有利於提高模組的獨立性。
6。下列選項中不屬於結構化程式設計原則的是()。
A) 可封裝
B) 自頂向下
C) 模組化
D) 逐步求精
6、參考答案:A
【解析】結構化程式設計的思想包括:自頂向下、逐步求精、模組化、限制使用goto語句,所以選擇A)。
7。軟體詳細設計生產的圖如下:
該圖是()
A) N-S圖
B) PAD圖
C) 程式流程圖
D) E-R圖
7、參考答案:C
【解析】N-S圖提出了用方框圖來代替傳統的程式流程圖,所以A)不對。PAD圖是問題分析圖,它是繼承程式流程圖和方框圖之後提出的又一種主要用於描述軟體詳細設計的圖形表示工具,所以B)不對。E-R圖是資料庫中的用於表示E-R模型的圖示工具,所以D)不對。根據圖中所示表示方法是進行軟體詳細設計時使用的程式流程圖。
8。資料庫管理系統是()。
A) 作業系統的一部分
B) 在作業系統支援下的系統軟體
C) 一種編譯系統
D) 一種作業系統
8、參考答案:B
【解析】資料庫管理系統是資料庫的機構,它是一種系統軟體,負責資料庫中資料組織、資料操縱、資料維護、控制及保護和資料服務等。是一種在作業系統之上的系統軟體。
9。在E-R圖中,用來表示實體聯絡的圖形是()。
A) 橢圓形
B) 矩形
C) 菱形
D) 三角形
9、參考答案:C
【解析】在E-R圖中實體集用矩形,屬性用橢圓,聯絡用菱形。
10。有三個關係R、S和T如下:則關係T是由關係R和S透過某種操作得到,該操作為()。
A) 選擇
B) 投影
C) 交
D) 並
10、參考答案:D
【解析】在關係T 中包含了關係R與S中的所有元組,所以進行的是並的運算。
11。計算機高階語言程式的執行方法有編譯執行和解釋執行兩種,以下敘述中正確的是()。
A) C語言程式僅可以編譯執行
B) C語言程式僅可以解釋執行
C) C語言程式既可以編譯執行又可以解釋執行
D) 以上說法都不對
11、參考答案:A
【解析】解釋程式是將源程式(如
BASIC
)作為輸入,解釋一句後就提交計算機執行一句,並不形成目標程式。編譯程式是把高階語言(如
FORTRAN
、
COBOL
、
Pascal
、
C
等)源程式作為輸入,進行翻譯轉換,產生出機器語言的目標程式,然後再讓計算機執行這個目標程式,得到計算結果。
12。以下敘述中錯誤的是()。
A) 使用者所定義的識別符號允許使用關鍵字
B) 使用者所定義的識別符號應儘量做到“見名識意”
C) 使用者所定義的識別符號中,大、小寫字母代表不同標識
D) 使用者所定義的識別符號必須以字母或下劃線開頭
12、參考答案:A
【解析】
C
語言規定識別符號只能由字母、數字和下劃線3種字元組成,且第一個字元必須為字母或下劃線,排除
D
);使用者定義識別符號中大小寫字母之間是有區別的並且應儘量做到“見名識意”,排除選項
B
)和
C
);
C
語言中還規定識別符號不能為
C
語言的關鍵字,故選項
A
)敘述錯誤,正確答案是選項
A
)。
13。若有說明語句:char c=‘\72’;則變數c()。
A) 包含1個字元
B) 包含2個字元
C) 包含3個字元
D) 說明不合法,c的值不確定
13、參考答案:A
【解析】
C
語言的字元型常量中,允許用一種特殊形式的字元常量,就是以一個“”開頭的字元。其中,“\
ddd
”表示用
ASCII
碼(八進位制數)表示一個字元,本題中的
char
c
=‘\2’即表示佔一個字元的變數
c
的
ASCII
碼值。
14。現有定義int a;double b;float c;char k;,則表示式a/b+c-k值的型別為()。
A) int
B) double
C) float
D) char
14、參考答案:B
【解析】雙目運算中兩邊運算量型別轉換規律:
15。以下定義語句中正確的是( )。
A) int a=b=0;
B) char A=65+1,b=′b′;
C) float a=1,*b=&a,*c=&b;
D) double a=0。0;b=1。1
15、參考答案:B
【解析】本題考查變數的定義方法。如果要一次進行多個變數的定義,則在它們之間要用逗號隔開。因此選項
A
)和
D
)錯誤;在選項
C
)中,變數
c
是一個浮點型指標,它只能指向一個浮點型資料,不能指向指標變數
b
;所以正確答案為
B
)。
16。若在定義語句int a,b,c,*p=&c;之後,接著執行以下選項中的語句,則能正確執行的語句是()。
A) scanf(“%d”,a,b,c);
B) scanf(“%d%d%d”,a,b,c);
C) scanf(“%d”, &p);
D) scanf(“%d”, p);
16、參考答案:D
【解析】
scanf
函式中的輸入項必須是指標,只有選項
D
)符合這個要求。
17。以下程式的執行結果是()。
int k=0;
void fun(int m)
{ m+=k;k+=m;printf(“m=%d k=%d ”,m,k++);}
main()
{ int i=4;
fun(i++); printf(“i=%d k=%d\n”,i,k);
}
A) m=4 k=5 i=5 k=5
B) m=4 k=4 i=5 k=5
C) m=4 k=4 i=4 k=5
D) m=4 k=5 i=4 k=5
17、參考答案:B
【解析】由於在
main
()函式中,變數
i
=4,所以就呼叫
fun
(4),則輸出“
m
=4
k
=4”。然後變數
k
增1等於5,變數
i
增1等於5,所以
main
()函式的“
printf
(”
i
=%
d
k
=%
d
\
n
“,
i
,
k
);”語句輸出“
i
=5
k
=5”。
18。在執行下述程式時,若從鍵盤輸入6和8,則結果為()。
main()
{ int a,b,s;
scanf(“%d%d”,&a,&b);
s=a ;
if(a
s=b;
s*=s;
printf(“%d”,s); }
A) 36
B) 64
C) 48
D) 以上都不對
18、參考答案:B
【解析】本題中
a
的值為6,
b
的值為8,最後
s
的值為8,
s
*=
s
等價於
s
=
s
*
s
。
19。有以下程式:
main()
{ int k=5,n=0;
while(k>0) { switch(k) {
default : break;
case 1 : n+=k;
case 2 :
case 3 : n+=k;
}
k--;
}
printf(“%d\n”,n);
}
程式執行後的輸出結果是()。
A) 0
B) 4
C) 6
D) 7
19、參考答案:D
【解析】本題考查的是
switch
語句。在
switch
語句中,表示式的值與某一個
case
後面的常量表達式的值相等時,就執行此
case
後面的語句,若所有的
case
中的常量表達式的值都沒有與表示式的值匹配的,就執行
default
後面的語句,各個
case
和
default
的出現次序不影響執行結果。所以在本題中,當
k
=5和
k
=4的時候,
case
都沒有與其匹配的值,所以執行了
default
語句;當
k
=3時,執行“
case
3 :
n
+=
k
;”得
n
=3,然後執行
default
;當
k
=2時,執行“
case
2 :
case
3 :
n
+=
k
;”得
n
=5,然後執行
default
;當
k
=1時,執行“
case
1 :
n
+=
k
;
case
2 :
case
3 :
n
+=
k
;”使得
n
加兩次
k
,得到
n
=7。
20。有以下程式:
#include
main() { int x;
scanf(“%d”,& x);
if(x<=3); else
if(x!=10) printf(“%d\n”,x);
}
程式執行時,輸入的值在哪個範圍才會有輸出結果()。
A) 不等於10的整數
B) 大於3且不等10的整數
C) 大於3或等於10的整數
D) 小於3的整數
20、參考答案:B
【解析】
if
…
else
控制結構中,
else
總是與最近的未配對的
if
匹配。本題的執行過程為:如果輸入整數小於3則不進行任何操作,否則判斷是否不等於10,若為真則進行輸出。因此程式輸出的資料為大於3且不等於10的整數。
21。有以下程式:
#include
main(){ int a=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b)}
程式執行後的輸出結果是()。
A) 0,0
B) 1,0
C) 3,2
D) 1,2
22。有以下程式:
main(){ int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;
for(i=0;i<4;i++) { for(j=0;j<=i;j++)printf(“%4c”, ‘ ’);
for(j= ;j<4;j++)printf(“%4d”,num[i][j]);
printf(“\n”);
}
}
若要按以下形式輸出陣列右上半三角
1 2 3 4
6 7 8
11 12
16
則在程式下劃線處應填入的語句是()。
A) i-1
B) i+1
C) i
D) 4-i
22、參考答案:C
【解析】此題中嵌套了兩個
for
語句,第一個用來輸出空格,第二個用來輸出數字。如此型別的輸出某種格式的考題,一般是採用多重迴圈來解決,需要考生找出輸出資料的特點,並用相對應的數學公式表達出來。
23。以下程式段中,與語句:k=a>b?(b>c?1:0):0;功能相同的是( )。
A) if((a>b)&&(b>c))k=1;
else k=0;
B) if((a>b)‖(b>c))k=1;
else k=0;
C) if(a<=b)k=0;
else if(b<=c)k=1;
D) if(a>b)k=1;
else if(b>c) k=1;
else k=0;
23、參考答案:A
【解析】表示式
k
=
a
>
b
?(
b
>
c
?1∶0)∶0表示:如果(
a
>
b
)條件為真,則
k
取值(
b
>
c
?1∶0),否則
k
取值0;當
a
>
b
的情況下,如果
b
>
c
,則
k
值為1,否則為0。所以該表示式與選項
A
)功能相同。
24。有以下程式:
void ss(char *s,char t)
{ while(*s)
{ if(*s==t)*s=t-a+A;
s++; } }
main()
{ char str1[100]=“abcddfefdbd”,c=d;
ss(str1,c); printf(“%s\n”,str1);}
程式執行後的輸出結果是()。
A) ABCDDEFEDBD
B) abcDDfefDbD
C) abcAAfefAbA
D) Abcddfefdbd
24、參考答案:B
【解析】在記憶體中,字元資料以
ASCII
碼儲存,它的儲存形式與整數的儲存形式類似。
C
語言中,字元型資料和整型資料之間可以通用,也可以對字元型資料進行算術運算,此時相當於對它們的
ASCII
碼進行算術運算,在本題中,
s
++相當於
s
=
s
+1,即讓
s
指向陣列中的下一個元素。
25。現有如下程式段:
#include “stdio。h”
main()
{ int k[30]={12,324,45,6,768,98,21,34,453,456};
int count=0,i=0;
while(k[i])
{ if(k[i]%2==0||k[i]%5==0)count++;
i++; }
printf(“%d,%d\n”,count,i);}
則程式段的輸出結果為()。
A) 7,8
B) 8,8
C) 7,10
D) 8,10
25、參考答案:D
【解析】在
C
語言中,定義一維陣列的語句一般形式如下:
型別名陣列名[常量表達式];
一維陣列的引用形式為:陣列名[下標表達式]。
count
表示能被2整除或被5整除的個數,
i
則計算有多少個數組元素。
26。以下程式執行後的輸出結果是()。
#include
void f(char *s,char *t){ char k;
k=*s;
*s=*t;
*t=k;
s++;t--;
if(*s)f(s,t);
}
main(){ char str[10]=“welcome”,*p;
p=str+strlen(str)/2+1;
f(p,p-2);
printf(“%s\n”,str);
}
A) eelcomw
B) weoclme
C) welcome
D) emoclew
26、參考答案:D
【解析】該程式中
f
函式的功能是交換兩個位置字元的值,
f
函式共呼叫3次,依次更改了字串中
l
和
o
、
e
和
m
、
w
和
e
的值,因此更改後的字串的值是
emoclew
。
27。設有如下程式段:
int x=2004,y=2008;
printf(“%d\n”,(x,y));
則以下敘述中正確的是
A) 輸出值為2004
B) 輸出值為2008
C) 執行時產生出錯資訊
D) 輸出語句中格式說明符的個數少於輸出項的個數,不能正確輸出
27、參考答案:B
【解析】(
x
,
y
)考查逗號表示式,逗號運算子的結合性為從左到右,因此,最後一個表示式的值就是此逗號表示式的值,因此選項
B
)正確。
28。有以下程式:
#include
void fun(char*c,int d){ *c=*c+1;d=d+1;
printf(“%c,%c,”,*c,d);
}
main(){ char b=a,a=A;
fun(&b,a); printf(“%c,%c\n”,b,a);
}
程式執行後的輸出結果是()。
A) b,B,b,A
B) b,B,B,A
C) a,B,B,a
D) a,B,a,B
28、參考答案:A
【解析】函式
fun
的第一個引數傳指標,可以將更改後的值傳回呼叫函式,第二個引數傳值,不能將更改後的值傳回呼叫函式,故選
A
)。
29。有以下程式:
#include
#include
main(){ char a[10]=“abcd”;
printf(“%d,%d\n”,strlen(a),sizeof(a));
}
程式執行後的輸出結果是()。
A) 7,4
B) 4,10
C) 8,8
D) 10,10
29、參考答案:B
【解析】
strlen
()用來返回字串的長度,而
sizeof
()返回的是一個物件或者型別所佔的記憶體位元組數,即陣列所佔的記憶體。
30。若有定義int a[2][3];,則對a陣列的第i行第j列(假設i,j已正確說明並賦值)元素值的正確引用為()。
A) *(*(a+i)+j)
B) (a+i)[j]
C) *(a+i+j)
D) *(a+i)+j
30、參考答案:A
【解析】本題考查了二維陣列元素的引用方法。選項
A
)中
a
+
i
指向了陣列
a
的第
i
+1行,*(
a
+
i
)則是第
i
+1行第0列的地址值,*(
a
+
i
)+
j
指向了陣列
a
第
i
+1行,
j
+1列,*(*(
a
+
i
)+
j
)取到的是陣列
a
的
a
[
i
][
j
]元素。
31。有以下程式:
#include
main()
{ char c1,c2,c3,c4,c5,c6;
scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1);putchar(c2);
printf(“%c%c\n”,c5,c6);
}
程式執行後,若從鍵盤輸入(從第1列開始)
123<回車>
45678<回車>
則輸出結果是()
A) 1267
B) 1256
C) 1278
D) 1245
31、參考答案:D
【解析】
putchar
(
c
1)輸出1,
putchar
(
c
2)輸出2,
printf
(“%
c
%
c
\
n
”,
c
5,
c
6)輸出45。
32。以下程式的執行結果是()。
#include
int a=1;
int f(int c){ static int a=2;
c=c+1;
return(a++)+c;}
main(){ int i,k=0;
for(i=0;i<2;i++){int a=3;k+=f(a);}
k+=a;
printf(“%d\n”,k);
}
A) 17
B) 16
C) 15
D) 14
32、參考答案:D
【解析】
fun
函式語句
return
(
a
++)+
c
;中訪問的
a
,是其內部定義的靜態區域性變數,
main
函式中語句
k
+=
f
(
a
)訪問的
a
是其區域性變數,所以兩次呼叫實際上都是呼叫
f
(3)。第一次呼叫時,
fun
函式中
c
=4,表示式(
a
++)+
c
的值為6,
a
遞增為3,
k
=6。第二次呼叫時,
fun
函式中
c
=4,表示式(
a
++)+
c
的值為7,
a
遞增為4,
k
=6+7=13。語句
k
+=
a
中的
a
是全域性變數,所以
k
=13+1=14。
33。設有定義:int n1=0,n2,*p=&n2,*q=&n1;,以下賦值語句中與n2=n1;語句等價的是( )。
A) *p=*q;
B) p=q;
C) *p=&n1;
D) p=*q;
33、參考答案:A
【解析】本題考查的是指標變數的賦值。題目中各變數定義後,指標變數
p
指向了變數
n
2所在的儲存單元,指標變數
q
指向了變數
n
1所在的儲存單元,要使得
n
1的值賦給
n
2,可用指標變數
q
所指向的儲存單元的值賦給指標變數
p
所指向的儲存單元,即*
p
=*
q
。
34。設有如下說明:
typedef struct ST
{ long a;
int b;
char c[2];
}NEW;
以下說法正確的是()。
A) NEW是一個結構體變數
B) NEW是一個結構體型別
C) ST是一個結構體型別
D) 以上說明形式非法
34、參考答案:B
【解析】以上形式定義
NEW
表示
ST
的結構型別,然後可以用
NEW
來說明結構體變數。因此選項
B
)正確
35。有以下程式:
#include
#include
typedef struct{ char name[9]; char sex; float score[2]; }STU;
void f(STU a)
{ STU b={“Zhao”,‘m’,85。0,90。0}; int i;
strcpy(a。name,b。name);
a。sex=b。sex;
for(i=0;i<2;i++) a。score[i]=b。score[i];
}
main()
{ STU c={“Qian”,‘ f ’,95。0,92。0};
f(c);
printf(“%s,%c,%2。0f,%2。0f\n”,c。name,c。sex,c。score[0],c。score[1]);
}
程式的執行結果是()。
A) Qian,f,95,92
B) Qian,m,85,90
C) Zhao,f,95,92
D) Zhao,m,85,90
35、參考答案:A
【解析】本題考查的是函式呼叫時的引數傳遞以及結構體變數的引用的問題。程式在呼叫函式
f
時,傳給函式
f
的引數只是結構變數
c
在棧中的一個複製,函式
f
的所有操作只是針對這個資料複製進行的修改,這些都不會影響變數
c
的值。
36。有以下程式:
#include
#define N 4
void fun(int a[][N],int b[]){ int i;
for(i=0;i } main(){ int x[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i; fun(x,y); for(i=0;i printf(“\n”); } 程式的執行結果是( )。 A) 1,2,3,4, B) 1,0,7,0, C) 1,4,5,9, D) 3,4,8,10, 36、參考答案:B 【解析】該題目中 fun 函式的功能是將二維陣列 a 中符合條件的值賦給一維陣列的符合條件的元素。主函式的功能是將符合條件的一維陣列的元素進行輸出。 37。有以下程式: #include int fun(int x,int y){ if(x!=y)return((x+y)/2); else return(x); } main(){ int a=4,b=5,c=6; printf(“%d\n”,fun(2*a,fun(b,c))); } 程式執行後的輸出結果是()。 A) 3 B) 6 C) 8 D) 12 37、參考答案:B 【解析】本題中對函式 fun ()進行了巢狀的呼叫。首先呼叫 fun (5,6),返回值為5,2*a的值為8,然後呼叫fun(8,5),最終輸出值為6。 38。若x是int型變數,且有下面的程式片段: for(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\n”),x); 上面程式片段的輸出結果是()。 A) **3 ##4 **5 B) ##3 **4 ##5 C) ##3 **4##5 D) **3##4 **5 38、參考答案:B 【解析】& 按位與,如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0。| 按位或,兩個相應的二進位制位中只要有一個為1,該位的結果值為1。2的二進位制為00000010,4的二進位制為00000100,所以做或運算結果為00000110,該數與5即00000101做與操作結果為00000100,即4。 39。有以下程式: #include #define N 5 #define M N+1 #define f(x)(x*M) main() { int i1,i2; i1=f(2); i2=f(1+1); printf(“%d %d\n”,i1,i2); } 程式的執行結果是()。 A) 12 12 B) 11 7 C) 11 11 D) 12 7 40。有以下程式: #include main(){ unsigned char a=8,c; c=a>>3; printf(“%d\n”,c); } 程式執行後的輸出結果是()。 A) 32 B) 16 C) 1 D) 0 40、參考答案:C 【解析】本題中將8賦值給字元變數 a ,則 a 的二進位制為“00001000”, a >>3的位運算是把 a 向右移動三位,結果為“00000001”,輸出其十進位制的值1。