一、選擇題(1)~(10)每小題2分,(11)-(50)每小題1分,共60分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
(1)算法分析的目的是________。
A)找出數(shù)據(jù)結(jié)構(gòu)的合理性 B)找出算法中輸入和輸出之間的關(guān)系
C)分析算法的易懂性和可靠性 D)分析算法的效率以求改進(jìn)
答案:D
評析:算法分析是指對一個算法的運行時間和占用空間做定量的分析,一般計算出相應(yīng)的數(shù)掌級,常用時間復(fù)雜度和空間復(fù)雜度表示。分析算法的目的就是要降低算法的時間復(fù)雜度和空間復(fù)雜度,提高算法的執(zhí)行效率。
(2)n個頂點的強連通圖的邊數(shù)至少有________。
A)n-1 B)n(n-1) C)n D)n+l
答案:C
評析:在有向圖中,若任意兩個頂點都連通,則稱該圖是強連通圖,這樣的有向圖的形狀是環(huán)狀,因而至少應(yīng)有n條邊。
(3)已知數(shù)據(jù)表A中每個元素距其最終位置不遠(yuǎn),為節(jié)省時間,應(yīng)采用的算法是________。
A)堆排序 B)直接插入排序 C)快速排序 D)直接選擇排序
答案:B
評析:當(dāng)數(shù)據(jù)表A中每個元素距其最終位置不遠(yuǎn),說明數(shù)據(jù)表A按關(guān)鍵字值基本有序,在待排序序列基本有序的情況.下,采用插入排序所用時間最少,故答案為選項B。
(4)用鏈表表示線性表的優(yōu)點是________。
A)便于插入和刪除操作 B)數(shù)據(jù)元素的物理順序與邏輯順序相同
C)花費的存儲空間較順序存儲少 D)便于隨機存取
答案:A
評析:鏈?zhǔn)酱鎯Y(jié)構(gòu)克服了順序存儲結(jié)構(gòu)的缺點:它的結(jié)點空間可以動態(tài)申請和釋放;它的數(shù)據(jù)元素的邏輯次序靠結(jié)點的指針來指示,不需要移動數(shù)據(jù)元素。故鏈?zhǔn)酱鎯Y(jié)構(gòu)下的線性表便于插入和刪除操作。
(5)下列不屬于結(jié)構(gòu)化分析的常用工具的是________。
A)數(shù)據(jù)流圖 B)數(shù)據(jù)字典 C)判定樹 D)PAD圖
答案:D
評析:結(jié)構(gòu)化分析的常用工具有數(shù)據(jù)流圖、數(shù)據(jù)字典、判定樹和判定表。而PAD圖是常見的過程設(shè)計工具中的圖形設(shè)計。
(6)軟件開發(fā)的結(jié)構(gòu)化生命周期方法將軟件生命周期劃分成________。
A)定義、開發(fā)、運行維護
B)設(shè)計階段、編程階段、測試階段
C)總體設(shè)計、詳細(xì)設(shè)計、編程調(diào)試
D)需求分析、功能定義、系統(tǒng)設(shè)計
答案:A
評析:通常,將軟件產(chǎn)品從提出、實現(xiàn)、使用維護到停止使用退役的過程稱為軟件生命周期。它可以分為軟件定義、軟件開發(fā)及軟件運行維護三個階段。
(7)在軟件工程中,白盒測試法可用于測試程序的內(nèi)部結(jié)構(gòu)。此方法將程序看做是________。
A) 循環(huán)的集合 B)地址的集合 C)路徑的集合 D)目標(biāo)的集合
答案:C
評析:軟件的白盒測試方法是把測試對象看做一個打開的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進(jìn)行測試。
(8)在數(shù)據(jù)管理技術(shù)發(fā)展過程中,文件系統(tǒng)與數(shù)據(jù)庫系統(tǒng)的主要區(qū)別是數(shù)據(jù)庫系統(tǒng)具有________。
A)數(shù)據(jù)無冗余 B)數(shù)據(jù)可共享
C)專門的數(shù)據(jù)管理軟件 D)特定的數(shù)據(jù)模型
答案:D
評析:在文件系統(tǒng)中,相互獨立的記錄其內(nèi)部結(jié)構(gòu)的最簡單形式是等長同格式記錄的集合,易造成存儲空間大量浪費,不方便使用。而在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)是結(jié)構(gòu)化的,這種結(jié)構(gòu)化要求在描述數(shù)據(jù)時不僅描速數(shù)據(jù)本身,還要描述數(shù)據(jù)間的關(guān)系,這正是通過采用特定的數(shù)據(jù)模型來實現(xiàn)的。
(9)分布式數(shù)據(jù)庫系統(tǒng)不具有的特點是________。
A)分布式 B)數(shù)據(jù)冗余
C)數(shù)據(jù)分布性和邏輯整體性 D)位置透明性和復(fù)制透明性
答案:B
評析:分布式數(shù)據(jù)庫系統(tǒng)具有數(shù)據(jù)分布性、邏輯整體性、位置透明性和復(fù)制透明性的特點,其數(shù)據(jù)也是分布的;但分布式數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)經(jīng)常重復(fù)存儲,數(shù)據(jù)也并非必須重復(fù)存儲,主要視數(shù)據(jù)的分配模式而定。若分配模式是一對多,即一個片段分配到多個場地存放,則是冗余的數(shù)據(jù)庫,否則是非冗余的數(shù)據(jù)庫。
(10)下列說法中,不屬于數(shù)據(jù)模型所描述的內(nèi)容的是________。
A)數(shù)據(jù)結(jié)構(gòu) B)數(shù)據(jù)操作 C)數(shù)據(jù)查詢 D)數(shù)據(jù)約束
答案:C
評析:數(shù)據(jù)模型所描述的內(nèi)容有3個部分,它們是數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)約束。數(shù)據(jù)操作主要是描述在相應(yīng)數(shù)據(jù)結(jié)構(gòu)上的操作類型與操作方式;數(shù)據(jù)模型中的數(shù)據(jù)約束主要描述數(shù)據(jù)結(jié)構(gòu)內(nèi)數(shù)據(jù)間的語法、語義聯(lián)系,它們之間的制約與依存關(guān)系,以及數(shù)據(jù)動態(tài)變化的規(guī)則,以保證數(shù)據(jù)的正確、有效與胡容。
(11)在結(jié)構(gòu)化程序設(shè)計中,限制使用goto語句的原因是________。
A)提高程序的執(zhí)行效率
B)提高程序的清晰性和可靠性
C)便于程序的合成
D)該語句對任何結(jié)構(gòu)的程序都不適用
答案:B
評析:在c語言中,限制使用goto語句,其目的是為了提高程序的清晰性與可靠性,一般來說,除了從多重循環(huán)中跳出,一般不使用goto語句。
(12)以下選項中合法的實型常數(shù)是________。
A)5E2.0 B)E-3 C).2E0 D)1.3E
答案:C
評析:以指數(shù)形式表示實數(shù)時,字母e(或E)之前必須有數(shù)字,且e后面指數(shù)必須為整數(shù)。
(13)下列敘述中,正確的是________。
A)C語言中既有邏輯類型也有集合類型
B)c語言中沒有邏輯類型但有集合類型
B)C語言中有邏輯類型但沒有集合類型
B)C語言中沒有邏輯類型也沒有集合類型
答案:B
評析:在c語言中只提供了整型、浮點型、字符型這幾種基本類型,c語言沒有提供邏輯類型,在c中一般用整型來表示邏輯類型。在自定義類型中,c提供了struct,enum及union類型,但沒有提供集合類型,在pascal中提供了集合類型set。
(14)已知大寫字母A的ASCII碼是65,小寫字母a的ASCII碼是97,則用八進(jìn)制表示的字符常量'\10l'是________。
A)字符A B)字符a C)字符e D)非法的常量
答案:A
評析:八進(jìn)制101轉(zhuǎn)換為十進(jìn)制即為65,而字母A的ASCII碼是65,所以用八進(jìn)制表示的字符常量'\101'是A。
(15)設(shè)a和b均為double型常量,且a=5.5、b=2.5,則表達(dá)式(int)a+b/b的值是________。
A)6.500000 B)6 C)5.500000 D)6.000000
答案:D
評析:各類數(shù)值型數(shù)據(jù)在進(jìn)行混合運算時,不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運算。轉(zhuǎn)換的規(guī)則為:總是轉(zhuǎn)換為精度更大的數(shù)據(jù)類型,字符數(shù)據(jù)轉(zhuǎn)換為整數(shù),short型轉(zhuǎn)為int型,float型數(shù)據(jù)在運算時轉(zhuǎn)換成雙精度型,以提高運算精度。
(16)以下四個選項中不能看作一條語句的是________。
A){;} B)a=0,b:0,c=0; C)if(a>0); D)if(b==0)m=l;n=2;
答案:D
評析:選項A為空語句,選項B是一個由逗號運算符表達(dá)式形成的語句,選項c為一個條件語句,選項D有兩個分號,是由兩個語句構(gòu)成,不能看成一條語句。
(17)已知i、j、k為int型變量,若從鍵盤輸入:1,2,3↙,使i的值為l、j的值為2、k的值為3,以下選項中正確的輸入語句是________。
A)scanf("%2d%2d%2 dtt,&i,&j,&k);
B)scanf("%d。。",&i,&j,&k);
C)scanf("%d,%d,%dfI,&i,&j,&k);
D)scanf("i=%d,j=%d,k=%d-t,&i,&j,&k);
答案:C
評析:如果在"格式控制"字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時應(yīng)輸入與這些字符相同的字符。
(18)關(guān)于goto語句的使用,下面正確的是________。
A)goto 2; B)goto g; C)goto g:; D)goto 2;
2:exit(0); g:exit(O); g:exit(O); 2 exit(0);
答案:B
評析:在c中,goto語句后面的標(biāo)號的命名規(guī)則與c語言中標(biāo)識符的命名規(guī)則相同,在goto語句后面的標(biāo)號后不要加":"號,在某一行上添加標(biāo)號時,在標(biāo)號的后面要添加":"號。
(19)若有以下程序:
main()
{int k=2,i=2,m;
m=(k+=I*=k);
printf("%d,%d、n",m,i);
}
執(zhí)行后的輸出結(jié)果是__________。
A)8,6 B)8,3 C)6,4 D) 7,4
答案:C
評析:在賦值符"="之前加上其它運算符,可以構(gòu)成復(fù)合的運算符。此運算為右結(jié)合性,即從右往左計算。I*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后將k的值賦給m。
(20)以下函數(shù)的功能是:通過鍵盤輸入數(shù)據(jù),為數(shù)組中的所有元素賦值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i<N)scanf("%d",_________);
}
在下劃線處應(yīng)填入的是_________。
A)x+i B)&x[i+l] C)x+(i++) D)&x[++I]
答案:C
評析:在c中,對于一維數(shù)組而言,數(shù)組變量表示數(shù)組中首元素的的地址。當(dāng)用scanf函數(shù)向數(shù)組x的第i個元素中輸入整型數(shù)據(jù)時,只要執(zhí)行scanf("%d"x+i):由于要循環(huán)輸入數(shù)組中和各個元素,必須要使其地址值不斷自增。故本題答案為c。
(21)已有定義:int x=3,y=4,z=5;,則表達(dá)式!(x+y)+z-l&&y+z/2的值是_________。
A)6 B)0 C)2 D)1
答案:D
評析:在本題中,運算符的優(yōu)先級分別為:!>/>+,->&&即:!(3+4)+5-1&&4+5/2=0+5-1&&4+2=4&&6=l。
(22)以下選項中,與k=11++完全等價的表達(dá)式是__________。
A)k=n,n=n+1 B)n=n+1,l(=n C)l(=什n D)k+--n+1
答案:A
評析:n++是自增運算,是先使用,然后再使n加1,分開來寫即為:k=n,n=n+l。
(23)以下程序運行后,輸出結(jié)果為__________。
main()
{
int y=18,i=0J,a[8];
do
{a[I]=y%2;i++;y。y/2;
}while(y>。1);
for(j=i一1 0>=00一)
printf("%d"a[j]);
printf("\n");
}
A)10000 B)10010 C)00l 10 D)10100
答案:B
評析:分析程序不難得知該程序的功能實際上就是采用除余取整法實現(xiàn)將10進(jìn)制數(shù)據(jù)轉(zhuǎn)換成二進(jìn)制數(shù)。對于10進(jìn)制數(shù)18,其轉(zhuǎn)化為二進(jìn)制數(shù)后,結(jié)果為10010。
(24)以下程序的功能是:按順序讀入10名學(xué)生4門課程的成績,計算出每位學(xué)生的平均分并輸出,程序如下:
main()
{int n,k;
float score,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{for(k=l;k<=4;k++)
{seal3f("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:%f\n",n,ave);
}
}
上述程序運行后結(jié)果不正確,調(diào)試中發(fā)現(xiàn)有一條語句出現(xiàn)在程序的位置不正確。這條 語句是________。
A)sum=O.O; B)sum+=score;
C)ave=sum/4.0; D)printf("NO%d:%fua",n,ave);
答案:A
評析:題目中要求每位學(xué)生的平均分?jǐn)?shù),首先要求每位學(xué)生的總分,也就是程序中的Sum,所以sum應(yīng)在第一個for循環(huán)體內(nèi)賦初值,如果在循環(huán)體外賦初值就會得到所有學(xué)生的分?jǐn)?shù)總和,不合題意。
(25)下面程序執(zhí)行后的輸出結(jié)果是__________。
main()
{
charx=Oxddff;
printf("%d\n",x);
}
A)-35 B)-1 C)255 D)-8705
答案:B
評析:由于程序中對字符變量x賦值為0xddff,而字符型變量只占一個字節(jié),故實際存入c單元的為該16進(jìn)制的低字節(jié)部分,即ff。對該數(shù)按整型格式輸出,其結(jié)果為-1。
(26)有以下程序
main()
{ int a=15,b=21,m=O;
switch(a%3)
{ case O:m++;break;
case l:m++:
switch(b%2)
{ default:m++;
case O:m++;break;
}
}
printf("%d\n",m);
}
程序運行后的輸出結(jié)果是_________。
A)l B)2 C)3 D)4
答案:A
評析:因為a%3是個常數(shù),所以只執(zhí)行一次就跳出switch結(jié)構(gòu)。即只執(zhí)行m++,此時m為1。
(27)若有說明:int n=2,*p=&n,*q=p;,則以下非法的賦值語句是_________。
A)p=q; B)*p=*q; C)n=*q; D)p*n;
答案:D
評析:指針變量不同于整型變量和其它類型的變量,它是用來存放地址(指針)的,不能將一個整型量(或任何其它非地址類型的數(shù)據(jù))賦給一個指針變量,這樣的賦值是不合法的。