軟件設計師考前模擬試題及答案解析六
101. 廉價磁盤冗余陣列(RAID)是利用一臺磁盤陣列控制器來管理和控制一組磁盤驅動器,組成一個高度可靠的、快速的大容量磁盤系統。以下關于RAID的敘述中,不正確的是 (106) 。
(106) A.RAID采用交叉存取技術,提高了訪問速度
B.RAID0使用磁盤鏡像技術,提高了可靠性
C.RAID3利用一個奇偶校驗盤完成容錯功能,減少了冗余磁盤數量
D.RAID6設置了一個專用的、可快速訪問的異步校驗盤
參考答案:(106)B。
解析:廉價磁盤冗余陣列(RAID)級別是指磁盤陣列中硬盤的組合方式,不同級別的RAID為用戶提供的磁盤陣列在性能上和安全性的表現上也有不同,詳見表6。
表6 幾種RAID級別的對比表
級 別 |
描 述 |
優 點 |
缺 點 |
RAID0 |
沒有容錯設計的條帶磁盤陣列,僅提供并行交叉存取功能 |
有效地提高磁盤I/O速度 |
磁盤系統的可靠性不好 |
RAID1 |
具有磁盤鏡像和磁盤雙工功能 |
可利用并行讀/寫特性,將數據塊同時寫入主盤和鏡像盤,故比傳統的鏡像盤速度快 |
磁盤利用率只有50% |
RAID2 |
增加了漢明碼校驗與糾錯(Hamming Code ECC)功能 |
是早期為了進行即時數據校驗而研制的一種技術,針對當時對數據安全敏感的領域,如金融服務等 |
由于花費太大,成本昂貴,目前己不用 |
RAID3 |
具有并行傳輸和校驗功能 |
利用一臺奇偶校驗盤來完成容錯功能。比起磁盤鏡像,減少了所需的冗余磁盤數 |
|
RAID4 |
具有獨立的數據硬盤與共享的校驗硬盤 |
與RAID 3相比,RAID 4是一種相對獨立的形式 |
|
RAID5 |
具有獨立的數據磁盤和分布式校驗塊的磁盤陣列 |
每個驅動器都有獨立的數據通路,獨立地進行讀/寫,無專門的校驗盤。用于糾錯的校驗信息以螺旋方式散布在所有的數據盤上。RAB5常用于I/O較頻繁的事務處理上 |
|
RAID6 |
具有獨立的數據硬盤與兩個獨立的分布式校驗方案 |
設置了一個專用的、可快速訪問的異步校驗盤。該盤具有獨立的數據訪問通路 |
其性能改進有限,價格卻很昂貴 |
RAID7 |
具有***化的異步高I/O速率和高數據傳輸率的磁盤陣列 |
是對RAID 6級的改進。在這種陣列中的所有磁盤,都具有較高的傳輸速度,有著優異的性能,是目前***檔次的磁盤陣列 |
|
RAID10 | 建立在RAID 0和RAID 1基礎上的高可靠性與高性能的組合 | 利用了RAID 0極高的讀寫效率和RAID 1較高的數據保護和恢復能力,使RAID 10成為了一種性價比較高的等級,目前幾乎所有的RAID控制卡都支持該等級 |
102. Because Web Servers are platform and application (107) they can send or request data from legacy or external applications including databases. All replies, once converted into (108) mark-up language, can then be transmitted to a (109) .Used in this way, Intranets can (120) lower desktop support costs, easy links with legacy applications and databases and, (121) all, ease of use.
【供選擇的答案】
(107) A.related B.dependent C.coupled D.independent
(108) A.supertextB.plaintextC.hypertextD.ciphertext
(109) A.client B.browserC.server D.router
(120) A.get B.ignoreC.requireD.offer
(121) A.above B.aroundC.aboutD.abort
參考答案:(68)~(72)D、C、B、D、A。
參考譯文:由于Web服務是基于獨立的平臺和應用程序,因此它能夠從包含數據庫的現有的(或外部的)應用軟件發送和接收數據。所有返回的結果一旦轉換成超文本標記語言,就能傳送給瀏覽器。使用這種方式,企業內部網(Intranet)可以提供更低的桌面支持成本,容易將現有的應用軟件和數據庫簡單地連接起來,此外,它更容易使用。
103.設函數的功能是交換X和y的值,且通過正確調用返回交換結果。不能正確執行此功能的函數是(122)
(122)A. funa(int*x,int*y)
{int*p;
*p=*x;*x=*y;*y=*p;
}
B. funb(intx,inty)
{intt;
t=x;x=y;y=t;
}
C. func(int*x,int*y)
{intp;
p=*x;*x=*y;*y=p;
}
D. fund(int*x,int*y)
{
*x=*x+*y;*y=*x-*y;*x=*x-*y;
}
參考答案:(122)A,B。
解析:設計實現交換兩個變量值的函數。希望函數調用能改變調用環境中的變量,方法之一是讓函數設置指針類型的形參,實參傳送給形參的是希望交換值的兩個變量的指針。函數的兩個形參得到這兩個變量的指針后,函數就能通過形參間接引用要交換值的變量,或引用它們的值,或改變它們的值。從而實現從函數傳回信息存于調用環境的變量中。以上所述是設計交換變量值函數的一般原則,具體編寫函數時還需注意對上述原則的正確應用。
對于函數funa,該函數的定義滿足設置指針形參,并通過指針形參間接引用環境變量的要求。但是在函數體中定義了指針變量p,并在p宋明確設定它所指向的變量下,代碼*p=*x企圖將值存入它所指的變量中,這是初學者經常出現的一種嚴重的錯誤。該函數因有錯,不能實現交換變量值的功能。
對于函數funb,該函數不定義指針形參,函數體也沒有可用的指針間接引用調用環境中的變量,所以該函數也不能實現交換變量值的功能。
對于函數func,該函數正確定義了指針形參,函數體也正確通過指針形參間接引用環境中的變量,并正確定義了自己的局部變量。該函數能實現交換變量值的功能。
對于函數fund,該函數也正確定義指針形參和函數體通過形參間接引用環境變量。特別要指出的是,該函數是利用*x和*y的;日值與新值之間的關系實現問題要求的。其中***個賦值使。x存有原來未交換之前的*x與*y之和;第二個賦值從這個和中減去原來的*y,并將差賦給*y,使*y的值是交換之前的*x的值;第三個賦值再次從和中減去新的*y,即減去交換之前的*x,這個差就是交換之前的*y,并將差賦給*x。經以上三個賦值,實現兩變量之間的值交換。所以不能正確執行交換變量值的函數是funa和funb,即正確選擇是A,B。
104.設有定義“chara[10]={"abcd"},*p=a;",則*(p+4)的值是(123)
(123) A. "abCd"
B. ’d’
C. ’\0’
D. 不能確定
參考答案:(123)C。
解析:若有chara[10]="abcd",*p=a,則指針變量p指向a[0]。在表達式*(p+4)中,p+4指向a[4],*(p+4)就是a[4]。由于用字符"abcd"給字符數組a賦初值,a[4]的值是字符串結束標記符’\0’。所以解答是C。
105.設有代碼"int(*ptr)[10];”,其中的ptr是(124)
(124)A. 10個指向整型變量的指針
B. 指向10個整型變量的函數指針
C. 一個指向具有10個元素的一維數組的指針
D.具有10個指針元素的一維數組
參考答案:(124)C。
解析:代碼“int(*ptr)[10];”的分析過程是,因圓括號,括號內的ptr先與字符*結合,字符*修飾標識符ptr是一種指針;接著與后面的一對方括號結合,表示是這樣的一種指針,是指向一維數組的;再有方括號中的10,說明這種數組有10個元素。至此,ptr是指向含10個元素的
一維數組的指針。***,是最前面的int,表示數組元素是int類型的。所以,ptr是一個指向具有10個int型元素的一維數組的指針。所以解答是C。另外,要是A,10個指向整型變量的指針,就是一個指針數組,上述代碼應寫成“int*ptr[10];”,即ptr是一個有10個指向整型變量的數組。要是B,返回值是指向10個整型變量的函數的指針,上述代碼應寫成“int(*(*ptr)())[10];”,即ptr是指針,指向一種函數,函數的返回值又是一種指針,指向10個元素的數組,數組的元素是整型的。下面的代碼是這樣的函數指針和函數的例子:
#include
inta[][10]={{1,2,3,4,5,6,7,8,9,0},{0,1,2,3,4,5,6,7,8,9}};
int(*(*ptr)(int))[10];
int(*f(intn))[10]
{returna+n;
}
voidmain()
{int(*p)[10],*q;
ptr=f;/*讓ptr指向函數f*/
P=(*ptr)(0);
q=*p;
printf("%d ",*p);
P=(*ptr)(l);
q=*p;
printf("%d ",*q);
}
在上述代碼中,函數有一個int型的形參。要是D,其意義與A相同,上述代碼應寫成“int*ptr[10];”,即ptr是一個有10個元素的數組,數組元素是指向整型變量的指針。
106.若有以下定義,則數值為4的表達式是(125)
intw[3][4]={{0,1},{2,4},{5,8}},(*p)[4]=W;
(12***. *w[1]+l
B. p++,*(p+1)
C. w[2][2]
D. p[1][1]
參考答案:(125)D。
解析:二維數組定義有多種賦初值的辦法,問題給出的代碼是按行給數組的部分元素賦初值。它們分別是w[0][0]=0.w[0][1]=1、w[1][1]=2.w[1][1]=4,w[2][0]=5,w[2][1]=8。根據約定,未指定初值的元素自動置全0值。指針變量p是一個指向具有四個int型元素的一維數組的指針,定義時的初值使它指向數組W的***行。A的代碼,*w[1]+1中的W[l]是指向w[l][0]的指針,*w[1]就是w[1][0],其值是2,*w[1]+l的值是3。B的代碼是逗號表達式,“p++,*(p+1)”先使p指向數組w的第二行,*(p+l)中的p+l是指向數組w的第三行,*(p+1)是指針值,指向數組w的第三行的***個元素,即&w[2][0].C的代碼w[2][2]引用數組W第三行的第三列元素,其值是0。D的代碼p[1][l]引用數組W第二行的第二列元素w[1][1],其值是4。所以解答是D。
107. 若有下面的程序片段,則對數組元素的錯誤的引用是(126)
inta[12]={0},*p[3],**pp,i;
for(i=0;i<3;i++)p[i]=&a[i+4];
pp=P;
(126)A. pp[0][1]
B. a[10]
C. p[3][l]
D. *(*(p+2)+2)
參考答案:(126)C。
解析:上述代碼定義變量a是有12個整型元素的數組,它的初值全是0。p是有三個元素的指針數組,每個指針能指向整型變量。哪是指針的指針,它能指向一個指向整型變量的指針,i是一個整型變量。執行代碼for(i=0;i<3;i++)P[i]=&a[i+4]使指針數組p的元素p[0]指向a[4],p[l]指向a[5],p[2]指向a[6]。代碼pp=p使指針變量pp指向p[0]。A代碼pp[0][l]用指針表達可等價地寫成*(*pp+l)。其中*pp就是p[0],p[0]的值是&a[4],*pp+1的值是&a[4]+1=&a[5],*(*pp+1)就是a[5]。B代碼a[l0]當然是引用數組a的元素。C代碼p[3][1]數組p只有三個元素,沒有p[3],所以是錯誤的。D代碼*(*(p+2)+2)中的(p+2)是&p[2],*(p+2)是p[2],其值是&a[6],*(p+2)+2的值是&a[8],*(*(p+2)+2)引用的是a[8]。所以解答是C。
108.若有如下定義和語句,則輸出結果是(127)
int**pp,*p,a=10,b=20;
PP=&p;P=&a;P=&b;printf("%d%d ",*p,**PP);
(127)A.10,20
B. 10,10
C. 20,10
D. 20,20
參考答案:(127)D。
解析:上述代碼定義變量pp是指針的指針,它能指向一個指向整型變量的指針。定義變量p是指針,它能指向一個整型變量。a是一個整型變量,它有初值10。b也是一個整型變量,它有初值20。代碼pp=&p使pp指向p,p=&a使p指向a,p=&b又使p指向b,不再指向a。所以。p是引用b,其值為20。**pp是通過pp間接引用p,再通過p間接引用b,所以也是20。所以解答是D。
109.若有以下定義和語句,則對w數組元素的非法引用是(128)
intw[2][3],(*pw)[3];pw=w;
(128)A. *(w[0]+2)
B. *pw[2]
C. pw[0][0]
D. *(pw[l]+2)
參考答案:(128)B。
解析:上述代碼定義2行3列的二維數組w,定義能指向有3個整型元素一維數組的指針pw,并讓pw指向數組w的***行。A代碼*(w[0]+2)中的w[0]是&w[0][0],w[0]+2是&w[0][2],所以*(w[0]+2)就是w[0][2]。B代碼*pw[2]中的pw[2]是&w[2][0],該數組w只有2行,沒有w[2][0],所以代碼*pw[2]是對數組W元素的非法引用。C代碼pw[0][0]就是w[0][0]。D代碼*(pw[l]+2)中的pw[1]就是*(pw+l),即&w[l][0],pw[l]+2就是&w[l][2],所以*(pw[1]+2)就是w[1][2]。所以解答是B。
110. 若有下列說明,則數值為4的表達式是(129)
inta[12]={l,2,3,4,5,6,7,8,9,10,11,12};
charc=‘a’,d,g;
(129)A. a[g-c]
B. a[4]
C. a[’d’-’c’]
D. a[’d’-c]
參考答案:(129)D。
解析:數組元素的下標自0開始順序編號,值為4的元素是a[3]。所以只有下標表達式的值為3的才是正確的。下標表達式g-C中的的變量g和c的值是還未被設定的,其值不確定。a[4]的值為5,下標為4是不對的。’d’-’c’的值為1,a[l]的值是2,所以也是不對的。變量c的值為’a’,’d’-c=3,所以正確解答是D。
111.設有定義:"chars[12]={"string"};"則printf("%d ",strlen(s));的輸出是(130)
(130)A. 6
B. 7
C. 11
D. 12
參考答案:(130)A。
解析:在C語言中,字符串是指在有效字符之后有字符率結束標記符的字符列,并約定字符串的長度是指字符率中有效字符個數,不包括字符串的結束標記符。存放于字符數組s中的字符串是“string”,該字符串的長度為6,所以輸出該字符串的長度應是6。正確的解答是A。
112.下列語句中,正確的是(131)
(131)A. chara[3][]={’abc",’1’};
B. chara[][3]={’abc’,’l’};
C. chara[3][]={’a’,"1"};
D. Vchara[][3]={"a","1"};
參考答案:(131)D。
解析:如定義數組時有初始化,其***維的長度可以省缺,由系統根據初始化時的初值個數確定,而其它維的長度是不可以缺省的。對二維字符數組的初始化,可以按行用字符串對其初始化,也可以按二維數組元素的存儲順序逐一用字符對其元素初始化。在供選擇解答A和C中,有不是***維的長度被缺省,所以是錯誤的。在供選擇解答A和B中,還將字符串常量寫作’abc’,這也是錯誤的。只有D,用字符率按行給二維字符數組初始化,這才是正確的。正確構解答是D。
113.合法的數組定義是(132)
(132)A. inta[]={"string"}
B. inta[5]={0,1,2,3,4,5};
C. chara={"string"}
D. chara[]={0,1,2,3,4,5};
參考答案:(132)D。
解析:A錯誤的原因是整數數組不可以用字符串對其初始化。B錯誤的原因是,數組初始化時,初始化指定的值的個數多于數組的元素個數。C錯誤的原因是,能用字符串初始化的只;有字符指針變量,或字符數組。字符率不能對其它類型的變量初始化,包括字符變量。D是正確的,因為字符數組可以用小整數(作為字符的ASCII代碼值)對其元素初始化。
114.語句"printf("%d "strlen("ats ol2\1\\"));"的輸出結果是(133)
(133)A. 11
B. 10
C. 9
D. 8
參考答案:(133)C。
解析:字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符開頭的轉義字符。在字符串"abs o12\11\\"中,有三個轉義字符,它們是、\1、\\,所以該字符串的有效字符個數是9。所以正確的回答是C。
115.函數調用“strcat(strcpy(strl,str2),str3)”的功能是(134)
(134)A. 將字符串strl復制到字符串str2中后再連接到字符串str3之后
B. 將字符串strl連接到字符串str2中后再復制到字符率str3之后
C. 將字符串str2復制到字符串strl中后再將字符串str3連接到字符串strl之后
D. 將字符串str2連接到字符率strl之后再將字符串strl復制到字符串str3中
參考答案:(134)C。
解析:函數調用strcat(s1,s2)是將s2字符串復制連接到s1字符串之后,使s1字符串變得更長。函數調用strcpy(s1,s2)是將s2字符串復制到s1,使s1字符串的內容與s2字符串的內容相同。函數調用strcat(strcpy(strl,str2),str3)是先執行strcpy(strl,str2),然后再執行strcat(strl,str3),所以其功能是將字符串str2復制到字符串strl中,然后再將字符串str3復制連接到字符串strl之后。正確的選擇是C。
116.設有如下定義,則正確的敘述為(135)
charx[]={"abcdefg"};
chary[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
(13***. 數組x和數組y等價
B. 數組x和數組y長度相同
C. 數組X的長度大于數組y的長度
D. 數組X的長度小于數組y的長度
參考答案:(134)C。
解析:不指定數組長度的字符數組定義,其所需要的字節數可由初始化中給出的值的個數確定。字符數組可以用字符串初始化,也可用字符逐個給字符數組的元素初始化。但用字符初始化時,盡管給出了字符串中的全部字符,還是不會自動有字符率結束字符。但字符串初始化自動會含有字符串的結束標記符,字符串初始化所需要的字節個數會比用同樣多的字符初始化多1個字節。所以只有C才是正確的。
117.設a=3,b=4執廳‘printf(”%d,%d’,(a,b),(b,a));”的輸出是(135)
(13***. 3,4
B. 4,3
C. 3,3
D. 4,4
參考答案:(135)C。
解析:在調用格式輸出函數的語句中,其中每個格式符對應一個輸出項,格式符d要求輸出項內容以十進制整數形式輸出。***個輸出項(a,b)是一個逗號表達式,該表達式的值是b的值,輸出4。接著輸出字符逗號。第二個輸出項(b,a)的值是a的值,輸出3。所以語句執行將輸出4,3。正解的選擇是C。
118.使用“Scanf("X=%f,y=%f",&x,&y)”,要使X,y均為1.25,正確的輸入是(136)
(136)A. 1.25,1.25
B. 1.251.25
C. x=1.25,y=1.25
D. X=1.25y=1.25
參考答案:(136)C。
解析:格式輸入函數的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉換說明。其中空格類字符用來跳過一個空格類字符序列,直至下一個非空格類字符。普通字符要求輸入字符與其完全相同。格式轉換說明對輸入字符列按格式轉換說明進行轉換,得到內部值存儲到對應輸入項所指定的存儲位置中。函數調用scanf(“x=%f,y=%f,&x,&y)以普通字符X=開頭,輸入時也要先輸入X=。接著是一個浮點數輸入格式,所有能構成一個浮點數1.25的字符序列都能滿足要求。接著是普通字符列“,y=”,在輸入的浮點數之后也要有字符列“,y=”。***又是浮點數輸入格式,同樣所有能構成一個浮點數1.25的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y=1.25是能滿足上述要求的。所以正確選擇是C。
119.設有inti=010,j=10;則執行“printf("%d,%d\n",++i,j--);”的輸出是(137)
(137)A. ll,10
B. 9,10
C. 010,9
D. 10,9
參考答案:(137)B。
解析:變量i和j的初值分別為八進制數010和十進制數10,函數調用Printf(“%d,%d\n”,++i,j--)中,++i的值是變量i增1后的值,原來值是八進制數010,等于十進制數8,輸出9。j--的值是變量j減1之前的值,輸出10。格式字符申中的逗號是普通字符照原樣輸出。所以問題給出的格式輸出函數調用將輸出9,10。正確的解答是B。
120.設a,b為字符型變量,執行"scanf("a=%c,b=%c",&a,&b)"后使a為’A’,b為’B’,從鍵盤上的正確輸入是(138)
(138)A. ’A”B’
B. ’A’,’B’
C. A=A,B=B
D. a=Ab=B
參考答案:(138)D。
解析:函數調用scanf("c=%c,b=%c",&c,&b)中,普通字符必須按格式字符串要求照原樣輸入,c格式對緊接的任何字符都輸入。所以實現問題的要求,輸入字符列應為“a=A,b=B”。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號。但用字符格式輸入字符時,在要輸入字符前后不必另鍵人單引號。若鍵人單引號,則這個單引號也將作為字符被輸入。正確的解答是D。
【編輯推薦】