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