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