2015年計算機二級考試《C語言》提高練習題匯總三份(3)
1[填空題]下列給定程序中,函數fun的功能是:求ss所指字符串數組中長度最短的字符串所在的行下標,作為函數值返回,并把其串長放在形參n所指的變量中。ss所指字符串數組中共有M個字符串,且串長小于N。
請在程序的下畫線處填入正確的內容并將下畫線刪除,使程序得出正確的結果。
注意:部分源程序給出如下。
不得增行或刪行,也不得更改程序的結構!
試題程序:
參考解析:
【參考答案】
(1)M (2)< (3)k
【考點分析】
本題考查:for循環語句的循環條件;if語句條件表達式;return語句完成函數值的返回。
【解題思路】
填空l:題目指出88所指字符串數組中共有M個字符串,所以for循環語句的循環條件是i
填空2:要求求長度最短的字符串,*n中存放的是已知字符串中長度最短的字符串的長度,將當前字符串長度與+n比較,若小于*n,則將該長度值賦給*n,因此if語句的條件表達式為len<*n。
填空3:將最短字符串的行下標作為函數值返回,變量k存儲行下標的值。
2[單選題] 若有定義語句:int m[][3]={1,2,3,4,5,6,7};,則與該語句等價的是
A.int m[][3j={{1,2,3},{4,5,6},{i 7}};
B.int m[][3]={{1,2},{3,4},{5,6,7}};
C.int m[][3]={{1,2,3},{4,5},{6,7}};
D.int nl[][3]={{1},{2,3,4},{5,6,7}};
參考答案:A
參考解析:二維數組的初始化有兩種方式,一種是分行初始化,方式為:數據類型數組名[行下標表達式][列下標表達式]={{第0行初值},{第1行初值表},…{最后l行初值表}};,如果初值表只對部分元素賦初值,沒有被賦初值的元素將被自動賦值為0。另一種是按二維數組在內存中的排列順序給各元素賦初值,這種方式就是不分行將所有數據依次列在一個花括號里,方式為:數據類型數組名[行下標表達式][列下標表達式]={初值表};,這種方式的賦值就是將初值表的數據依次賦予數組的每個元素,其中賦值是按照數組元素在內存中的位置進行的。題目中的初始化語句是第二種方法,如果用第一種方法應該是int m[][3]={{1,2,3},{4,5,6{,{7{};,這里應該保證除了最后一行,每一行都滿列有3個元素,A選項正確。
3[單選題] 若有以下說明,則( )不是對strcpy庫函數正確的調用。
A.strcpy(str2,str1)B.
B.strcpy(str3,str1)
C.strcpy(str1,str2)
D.strcpy(str5,str1)
參考解析:strcpy(s1,s2)函數的功能是將字符串s2復制到字符串s1中。要保證sl存儲區能容納下s2字符串。
4[單選題]下列關于棧的描述中錯誤的是( )。
A.棧是先進后出的線性表
B.棧只能順序存儲
C.棧具有記憶作用
D.對棧的插入刪除操作中,不需要改變棧底指針
參考答案:B
參考解析:棧是線性表的一種,它的特點是先進后出,并且只能在表的一端進行插入和刪除操作的線性表,入棧和出棧都在棧頂進行,因此具有記憶作用。棧可以采用順序存儲,也可以采用鏈式存儲。
5[單選題]下列敘述中正確的是( )。
A.線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的
B.線性表的鏈式存儲結構所需要的存儲空間一般要多于順序存儲結構
C.線性表的鏈式存儲結構所需要的存儲空間一般要少于順序存儲結構
D.線性表的鏈式存儲結構與順序存儲結構在存儲空間的需求上沒有可比性
參考答案:B
參考解析:線性鏈式存儲結構中每個結點都由數據域與指針域兩部分組成,增加了存儲空間,所以一般要多于順序存儲結構。
6[單選題] 以下程序段完全正確的是( )。
A.int * p;scanf(”%d”,&p);
B.int*p;scanf(”%d”,P);
C.int k,* P:&k;scanf(’’%d”,P);
D.int k,*p;*P=&k;scanf(”%d”,P);
參考解析:A選項中錯在沒有對指針進行初始化,是無效指針,并且在scanf(”%d”,&p)中無需再進行取地址操作;B選項中沒有對指針進行初始化,是無效指針;D選項中語句+P=&k;的左端t pt是指針所指內存空間的值,&k是地址,應為P=&k。因此C選項正確。
7[單選題] 有以下程序:
程序運行后的輸出結果是( )。
A.AfternoonB.ftemoonC.MorningD.oming
參考答案:A
參考解析:本題主函數中定義了一個指針數組a,可以將它看成一個以字符指針為元素的一維數組。和一般的一維數組名能賦給同類型指針變量一樣,該字符指針數組也可以賦給指向字符指針的指針,所以數組名a可以用做函數fun()的實參。在fun()函數中,++P操作使形參P往后移動一個字符指針的位置,即指針a[1]的位置。故最后通過礎nd()函數輸出的字符串為“Afternoon”。因此A選項正確。
8[單選題] 有以下程序:
當執行程序時從鍵盤上輸入Hello Beijing<回車>,則程序運行后的輸出結果是( )。
A.hello bajiIlg
B.Hello Beijing
C.HELLO BEIJING
D.hELLO Beijing
參考解析:主程序讀取整個字符串存于s中,調用fun函數。字符指針c指向數組S。函數fun的功能是把指針C所指向的字符數組中的所有小寫字符轉換為大寫。囂cts函數可以把空格作為字符串的一部分輸入,以回車作為輸入結束。如果·c為小寫字符,則}C={C一32(轉大寫)。因此C選項正確。
9[單選題] 有以下程序段:
當執行上述程序段,并從鍵盤輸入:nalne=Lili nLim=1001<回車>后,name的值為( )。
A.name:=Lili num=1001B.nfll'ne=LiliC.Uli.h.um=D.Lili
參考答案:D
參考解析:在輸入格式控制“name=%s num=%d”中,普通字符“ns.111e=num=”在輸入時要原樣輸入,而格式控制符%s和%d對應各自的輸入項,將輸入的數據賦給相應的輸入項。本題中輸入“name=Lift hum=1001<回車>”后,將字符串Ijli賦給字符數組llalne,整數1001賦給變量num。因此D選項正確。
10[單選題] 有以下函數:
以下關于aaa函數功能敘述正確的是( )。
A.將串s復制到串t
B.比較兩個串的大小
C.求字符串s的長度
D.求字符串s所占字節數
參考解析:本題重點考察的知識點while循環語句的應用。一()函數中,首先定義了一個字符指針t指向形參s,然后通過一個while循環讓指針t不斷遞增,直到t指向字符串結束標識處。當t指向結束標識處時,由于后綴++運算符的原因,它還會被再遞增1,所以接下來的t一一;語句讓它回到結束標識處。最后返回t—s,s還是指向字符串第l個字符處,而t指向了字符串結尾,故返回值為字符串的長度值。因此C選項正確。