一、選擇題(1)~(10)每小題2分,(11)-(50)每小題1分,共60分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
(1)在下列選項中,_________不是一個算法一般應(yīng)該具有的基本特征。
A)確定性 B)可行性 C)無窮性 D)擁有足夠的情報
答案:C
評析:一個算法,一般應(yīng)具有以下幾個基本特征。①可行性②確定性③有窮性④擁有足夠的情報
(2)希爾排序法屬于_________類型的排序法。
A)交換類排序法 B)插入類排序法
C)選擇類排序法 D)建堆排序法
答案:B
評析:希爾排序法的基本思想是:將整個無序序列分割成若干小的子序列分別進行插入排序。所以希爾排序法屬于插入類排序,但它對簡單插入排序做了很大的改進。
(3)下列關(guān)于隊列的敘述中正確的是_________。
A)在隊列中只能插入數(shù)據(jù) B)在隊列中只能刪除數(shù)據(jù)
C)隊列是先進先出的線性表 D)隊列是先進后出的線性表
答案:C
評析:隊列是指允許在一端進行插入、而在另一端進行刪除的線性表。它又稱為"先進先出"或"后進后出"的線性表,體現(xiàn)了"先來先服務(wù)"的原則。
(4)對長度為N的線性表進行順序查找,在最壞情況下所需要的比較次數(shù)為_________。
A)N+I B)N C)(N+I)/2 D)N/2
答案:B
評析:在進行順序查找過程中,如果被查的元素是線性表中的最后一個,或者被查元素根本不在線性表中,則為了查找這個元素需要與線性表中所有元素進行比較,這是順序查找最壞的情況。
(5)信息隱蔽的概念與下述_________概念直接相關(guān)。
A)軟件結(jié)構(gòu)定義 B)模塊獨立性
C)模塊類型劃分 D)模擬耦合度
答案:B
評析:信息隱蔽是指在一個模塊內(nèi)包含的信息(過程或數(shù)據(jù)),對于不需要這些信息的其他模塊來說是不能訪問的。模塊獨立性是指每個模塊只完成系統(tǒng)要求的獨立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。衡量軟件的模塊獨立性的度量標(biāo)準(zhǔn)是耦合性和內(nèi)聚性。一個模塊的內(nèi)聚性越強,則該模塊的模塊獨立性越強。而內(nèi)聚性是信息隱蔽和局部化概念的自然擴長。
(6)面向?qū)ο蟮脑O(shè)計方法與傳統(tǒng)的面向過程的方法有本質(zhì)不同,它的基本原理是_________。
A)模擬現(xiàn)實世界中不同事物之間的聯(lián)系
B)強調(diào)模擬現(xiàn)實世界中的算法而不強調(diào)概念
C)使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題
D)鼓勵開發(fā)者在軟件開發(fā)的絕大部分中都用實際領(lǐng)域的概念去思考
答案:C
評析:面向?qū)ο蟮脑O(shè)計方法基本原理:使用現(xiàn)實世界的概念抽象地思考問題從而自然地解決問題。強調(diào)模擬現(xiàn)實世界中的概念而不強調(diào)算法,鼓勵開發(fā)者在軟件開發(fā)的絕大部分中都用應(yīng)用領(lǐng)域的概念去思考。
(7)在結(jié)構(gòu)化方法中,軟件功能分解屬于軟件開發(fā)中的_________階段。
A)詳細設(shè)計 B)需求分析 C)總體設(shè)計 D)編程調(diào)試
答案:C
評析:總體設(shè)計過程通常由兩個主要階段組成:系統(tǒng)設(shè)計,確定系統(tǒng)的具體實現(xiàn)方案;結(jié)構(gòu)設(shè)計,確定軟件結(jié)構(gòu)。為確定軟件結(jié)構(gòu),首先需要從實現(xiàn)角度把復(fù)雜的功能進一步分解。
(8)軟件調(diào)試的目的是_________。
A)發(fā)現(xiàn)錯誤 B)改正錯誤
C)改善軟件的性能 D)挖掘軟件的潛能
答案:B
評析:由程序調(diào)試的概念可知:程序調(diào)試活動由兩部分組成,其一是根據(jù)錯誤的跡象確定程序中錯誤的確切性質(zhì)、原因和位置。其二,對程序進行修改,排除這個錯誤。所以程序調(diào)試的目的就是診斷和改正程序中的錯誤。
(9)按條件f對關(guān)系R進行選擇,其關(guān)系代數(shù)表達式為_________。
RooR
A)RooR B) f C)6f(R) D)兀f(R)
答案:C
評析:選擇運算是一個一元運算,關(guān)系R通過選擇運算(并由該運算給出所選擇的邏輯條件)后仍為一個關(guān)系。這個關(guān)系是由R中那些滿足邏輯條件的元組所組成。如果關(guān)系的邏輯條件為C則R滿足f的選擇運算可以寫成:6f(R)。
(10)數(shù)據(jù)庫的物理設(shè)計是為一個給定的邏輯結(jié)構(gòu)選取一個適合應(yīng)用環(huán)境的_______的過程, 包括確定數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)和存取方法。
A)邏輯結(jié)構(gòu) B)物理結(jié)構(gòu) C)概念結(jié)構(gòu) D)層次結(jié)構(gòu)
答案:B
評析:根據(jù)數(shù)據(jù)庫物理設(shè)計的概念可知:為一個給定的邏輯數(shù)據(jù)模型選取一個最合適應(yīng)用要求的物理結(jié)構(gòu)的過程,就是數(shù)據(jù)庫的物理設(shè)計。數(shù)據(jù)庫的物理結(jié)構(gòu)就是指數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)與存取方法。
(11)下列敘述中正確的是_______。
A)C語言編譯時不檢查語法
B)C語言的子程序有過程和函數(shù)兩種
C)C語言的函數(shù)可以嵌套定義
D)C語言中,根據(jù)函數(shù)能否被其它源文件調(diào)用,被區(qū)分為內(nèi)部函數(shù)和外部函數(shù)
答案:D
評析:選項A的錯誤在于編譯過程中是檢查語法的,若發(fā)現(xiàn)源程序有語法錯誤,則系統(tǒng)會提示出錯信息;選項B的錯誤在于c語言中,子程序的作用是由函數(shù)來完成的,無過程的概念;選項c的錯誤在于函數(shù)不可以嵌套定義,但可以嵌套調(diào)用。
(12)有以下程序:
main()
{
int a:
char c=10;
float f=100.0;double x;
a=f/=c*=(x=6.5);
printf("%d%d%3.1f%3.1f\n",a,c,f,x);
}
程序運行后的輸出結(jié)果是_______。
A)1 65 1 6.5 B)1 65 1.5 6.5 C)l 65 1.0 6.5 D)2 65 1.5 6.5
答案:B
評析:本題求解步驟如下:先進行"c*=(x=6.5)"的運算,由于x=6.5,表達式相當(dāng)于c=c*6.5=10*6.5=65.再進行"f/=65"的運算,相當(dāng)于f=-f/65=100.0/65,由于f為單精度實型變量,因此f的值約為1.538462.然后進行"a=f"的運算,由于a為整型變量,因此a=1.最后將各個變量的值按照printf中的格式要求輸出到屏幕,注意變量f,x按照"%3.1f"格式輸出,,即只輸出一位小數(shù)。
(13)以下變量x、y、z均為double類型且已正確賦值,不能正確表示數(shù)學(xué)式子x/(y*z)的C語言表達式是_______。
A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z
答案:A
評析:按照自左向右的運算邏輯,選項A是先做x/y,然后再乘以x,顯然與題意不符。
(14)若a為int類型,且其值為3,則執(zhí)行完表達式a+=a-=a*a后,a的值是_______。
A)-3 B)9 C)-12 D)6
答案:C
評析:c語言中對賦值運算的運算順序是自右向左。本題中,計算a*a之后,a的值依然為3,表達式a*a的值為9;a-=9,a=3-9=-6;a+=-6,a=-6+-6=-12。
(15)以下程序段中與語句k=a>b?(b>c?1:0):0;功能等價的是_______。
A)if((a>b)&&(b>C))k=l;else k=0;
B)if((a>b)‖(b>C))k=l;else k=O;
C)if(a<=b)k=0;else if(b<=C)k=1;
D)if(a>b)k=1,else if(b>C)k=l;else k=0;
答案:A
評析:"a>b?(b>c?1:0):0"的求解順序是:先判斷a>b是否為真,如果為真,則執(zhí)行b>c?1:0:如果b>c為真,則(b>c?l:0)的值為1,從而整個表達式返回1,否則整個表達式返回0;如果a<=b,則表達式返回0。因此功能等價的語句應(yīng)為if((a>b)&&(b>C))k=l;else k=0;。
(16)設(shè)x、y、t均為int型變量,則執(zhí)行語句:x=y=3;t=++x‖++y;后,y的值為_______。
A)不定值 B)4 C)3 D)1
答案:C
評析:e語言中在做邏輯或運算時,自左向右判斷各個參加或運算的表達式,一旦運算到某式的值為非零時,表明整個表達式一定為真,余下的語句則不再進行運算。本題中,++x的值為真,則++y并沒有進行運算,所以y值不變。
(17)假設(shè)a和b為int型變量,則執(zhí)行以下語句后,b的值為_______。
a=l:b=10:
do
{ b-=a: a++:
} while(b一<0):
A)9 B)-2 C)-l D)8
答案:D
評析:本題程序第一輪循環(huán)后b的值為9,在進行循環(huán)條件測試時,先取b的現(xiàn)值9與O比較,然后再將b減l。由于9<0不成立,因此循環(huán)結(jié)束,這時b的值已變成8,本題正確答案為D。
(18)若執(zhí)行以下程序時從鍵盤上輸入9,則輸出結(jié)果是_________。
main()
{
int n:
scanf("%d:",&n);
if(n++<10)printf("%d\n",n);
else printf("%d\n",n--);
}
A)ll B)lO C)9 D)8
答案:B
評析:n++是在語句結(jié)束后再加l,因此,if語句中相當(dāng)于判斷的是9<10,當(dāng)然是執(zhí)行if語句后面的lorintf語句,而這時,因為if語句被執(zhí)行,n的值也被加1,所以在打印時,n值為10,而n--是在printf語句執(zhí)行完畢后再減1的。
(19)有以下程序段
int k=O:
while(k=l)k++;
while循環(huán)執(zhí)行的次數(shù)是_________。
A)無限次 B)有語法錯,不能執(zhí)行
C)一次也不執(zhí)行 D)執(zhí)行1次
答案:A
評析:c語言里關(guān)系表達式的等于應(yīng)該是"=="。一個等于號表示賦值,即這里面重復(fù)的把1賦給k,自然表達式k=l的值總為1,while后面的表達式恒為真,當(dāng)然會進入死循環(huán)。
(20)有以下程序:
void sum(int*a)
{a[O]=a[1];}
main()
{
Int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=1;i>O;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
)
程序運行后的輸出結(jié)果是_________。
A)4 B)3 C)2 D)1
答案:D
評析:c語言規(guī)定,實參變量對形參變量的數(shù)據(jù)傳遞是"值傳遞",只由實參傳給形參,而不能由形參傳回來給實參。函數(shù)調(diào)用結(jié)束后,形參單元被釋放,實參單元仍保留并維持原值。本題要求輸出aa[0]的值,結(jié)果應(yīng)為1。
(21)以下程序執(zhí)行后sum的值是_________。
main()
{
int I,sum;
for(i=1;i<6;i++)sum+=i;
printf("%d\n",sum);
}
A)15 B)14 C)不確定 D)0
答案:C
評析:變量sum在使用時未賦初值,所以無法確定sum最終的值。
(22)有以下程序:
main()
{
int x[8]={8,7,6,5,0,0},*s;
s=x+3:
printf("%d\n",s[2]);
}
程序運行后的輸出結(jié)果是________。
A)隨機值 B)0 C)5 D)6
答案:B
評析:本題定義了數(shù)組x[8]和指針變量s,由c語言規(guī)定,指針加1的含義是使指針指向數(shù)組的下一個元素,而不是指針值簡單的加l,因此通過s=x+3;使s指向數(shù)組元素x[3]。由于指向數(shù)據(jù)的指針變量可以帶下標(biāo)表示,如s[i]與*(s+i)等價。因此題目要求輸出s[2]的值,即+(s+2)的值,也就是x[51的值,為0。
(23)有以下程序段
int x=3:
do
{
printf("%d",x-=2);
}
while(!(--x));
其輸出結(jié)果是_______。
A)l B)3 0 C)1 -2 D)死循環(huán)
答案:C
評析:本題中循環(huán)執(zhí)行了兩次,第一次,執(zhí)行完printf語句后,x=l,而--X是先自減后執(zhí)行語句,所以(!(--X))的值為非零,所以又執(zhí)行了一次。第二次x的值為-2,--x的值為-3,求非后,值為0,跳出循環(huán)。
(24)若變量c為char類型,能正確判斷出c為小寫字母的表達式是_______。
A)'a'<=c<='z' B)(c>='a')‖(c<='z')
C)('a'<=C)and('z'>=C) D)(c>='a')&&(c<='z')
答案:D
評析:(c>='a')和(c<='z')的關(guān)系應(yīng)該是"與"的關(guān)系。
(25)下列不合法的main函數(shù)命令行參數(shù)的表示形式是_______。
A)main(n a,char*c[]); B)main(ac,av)int arc;char**av;
C)main(C,V)int c,char*v[]; D)main(argc,argv)int argc;char argv[];
答案:D
評析:main函數(shù)的參數(shù)通常有兩個,前者為整型,后者為字符型指針數(shù)組。參數(shù)的名字可以是任意合法的標(biāo)識符。而且,形如**av與*av[]等價,所以選項A、B、c均正確,選項D是錯誤的。
(26)以下所列的各函數(shù)首部中,正確的是_______。
A)void play(var a:Integer,var b:Integer)
B)void play(int a,b)
C)void play(int a,int b)
D)Sub play(a as integer,b as integer)
答案:C
評析:除選項c項外,其它各項都沒有按照c語言中的函數(shù)定義規(guī)則定義函數(shù)。
(27)在c語言中,引用數(shù)組元素時,其數(shù)組下標(biāo)的數(shù)據(jù)類型允許是_______。
A)整型常量 B)整型表達式
C)整型常量或整型表達式 D)任何類型的表達式
答案:C
評析:c語言規(guī)定只能逐個引用數(shù)組元素而不能一次引用整個數(shù)組,數(shù)據(jù)元素的表示形式為數(shù)組名[下標(biāo)],下標(biāo)可以是整型常量或整型表達式。