選擇題題庫
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<b)
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 <stdio.h>
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 <stdio.h>
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<string.h>
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 <stdio.h>
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 <stdio.h>
#include <string.h>
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 <stdio.h>
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(c1)輸出1,putchar(c2)輸出2,printf(“%c%c\n“,c5,c6)輸出45。
32.以下程序的運行結果是( )。
#include <stdio.h>
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指向了變數n2所在的存儲單元,指針變數q指向了變數n1所在的存儲單元,要使得n1的值賦給n2,可用指針變數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 <stdio.h>
#include <string.h>
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 <stdio.h>
#define N 4
void fun(int a[][N],int b[]){ int i;
for(i=0;i<N;i++) b[i]=a[i][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<N;i++)printf(“%d,”,y[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<stdio.h>
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 <stdio.h>
#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<stdio.h>
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。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/252755.html