1. 程式人生 > >嵌入式軟件測試題(C語言)V1.0

嵌入式軟件測試題(C語言)V1.0

數據完整性 for循環 為什麽 內部 amp 訪問 頭部 分法 nio

嵌入式軟件測試題(C語言)V1.0

以下50個選擇題,每題都可能存在一個或多個正確答案,請找出所有正確答案填在每題對應的括號中。多選、錯選、漏選或不選,均不得分。每題2分。總計100分。

為了縮短篇幅和節約大家的時間,試題中的代碼可能不是完整的代碼,答題時請不用考慮代碼是否具有可編譯和可執行性,僅分析代碼本身即可。

1、定義一個數組int a[2] = {1,3},那麽a的值是( D )

A、0; B、1; C、3; D、不能確定;

2、有如下代碼:

float a = 123.45678;

if(123.45678 == a)

{

printf(“a = 123.45678”);

}

else if(123.45678 > a)

{

printf(“a > 123.45678”);

}

else if(123.45678 < a)

{

printf(“a < 123.45678”);

}

else

{

printf(“不能確定”);

}

請問上述代碼輸出的結果有可能是( ABC )

A、a = 123.45678; B、a > 123.45678; C、a < 123.45678; D、不能確定;

3、在一臺32位的PC上運行下述代碼,結果可能是( C )

int *a = NULL;

char b[8] = {0};

printf(“sizeof(a) = %d,sizeof(b) = %d”, sizeof(a),sizeof(b));

A、sizeof(a) = 2,sizeof(b) = 2; B、sizeof(a) = 4,sizeof(b) = 4;

C、sizeof(a) = 4,sizeof(b) = 8; D、sizeof(a) = 8,sizeof(b) = 8;

4、下述代碼運行後,哪些值可以是變量X的值( AC )

X = Y ^ 0x80;

X = X & 0xF0;

A、0xF0; B、0x0F; C、160; D、112

5、下述代碼運行後,哪些值可以是變量R的值( BCD )

int a;

…… /*此處忽略若幹代碼*/

R = (a+1) % 0xABCD;

A、0xABCD; B、0; C、256; D、1024;

6、代碼“const int a[2] ={5, 2};”中const的作用是( BD )

A、修飾a; B、修飾{5, 2};

C、說明a是只讀的; D、說明數組a中存儲的內容是只讀的;

7、關鍵字“NULL”的含義是( C )

A、未初始化的指針; B、未定義的指針;

C、空指針; D、整型的“0”;

8、下述代碼可能的作用是( C )

int a,b;

…… /*此處忽略若幹代碼*/

a = a ^ b;

b = a ^ b;

a = a ^ b;

A、求a、b的和; B、判斷a、b的大小關系;

C、交換a、b的值; D、加密a、b的值;

9、如果在一個大字節序(大端)的32位系統中定義變量:“unsigned long testCpuArchitecture = 0x12345678;”,那麽“*(unsigned char*)&testCpuArchitecture”的值應該是( A )

A、0x12; B、0x34; C、0x56; D、0x78

10、在一個32位的系統中有下述代碼,則sizeof(A_BIT_T)和sizeof(bitMap)的值分別是( B )

typedef unsigned char uint8;

typedef struct{

uint8 bit : 1;

}A_BIT_T;

A_BIT_T bitMap[16] = {0};

A、1,2; B、1,16; C、4,2; D、4,16;

11、一個指針的定義為:“char *ptr = NULL;”,則下列表述正確的有( AB )

A、指針所指向的內容可以被修改;

B、指針本身的值是可以被修改的;

C、指針本身所在的地址可以被修改;

D、指針只能指向一個存放了字符的存儲位置;

12、一個函數如果沒有“return”語句,那麽這個函數將( D )

A、一直無限循環運行; B、可能在任意一句語句處退出;

C、隨時可能崩潰; D、運行完成後退出;

13、宏定義的特點有( ABD )

A、可以被多個函數調用; B、可能存在副作用;

C、運行效率比定義函數高; D、多次調用後占用的代碼存儲空間比函數多;

14、在一個“while”循環中,允許使用“break”和“continue”的數量是( D )

A、兩者只能使用一個,每個只能使用一次;

B、break可以使用多次,continue只能一次;

C、break只能使用一次,continue可以多次;

D、兩者均不限次數;

15、以下是static關鍵字的作用的有( ABC )

A、修飾局部變量,表示此變量只能在當前函數內部被訪問,其存儲在堆和棧之外;

B、修飾函數,表示此函數只能在當前文件內部被訪問;

C、修飾全局變量,表示此變量只能在當前文件內部被訪問;

D、修飾函數的入參,表示此入參是只讀的,不可被修改;

16、下列代碼運行結束後,i的值是( B )

int i = 1;

switch(i)

{

case 0:

i++;

break;

case 1:

++i;

case 3:

i++;

break;

case 4:

i++;

default:

++i;

}

A、2 B、3 C、4 D、5

17、在一個32位的系統中有如下定義,則sizeof(U)的值是( C )

union {

char c;

char *p;

}U;

A、1 B、2 C、4 D、8

18、“野指針”是( BD )

A、未定義的指針; B、沒有被賦值的指針;

C、指向的地址確定,但其中的內容是未知的; D、指向的地址是不確定的指針;

19、頭文件中的ifndef…define…endif的作用是( B )

A、說明這是一個頭文件;

B、防止被重復包含;

C、優化頭文件,使其占用更少的存儲空間;

D、定義頭文件的名稱,以便被引用;

20、下列代碼,哪幾行是編譯時有錯誤或運行時會發生異常的( C )

1:char a;

2:char *str=&a;

3:strcpy(str,"hello");

4:printf(str);

A、第1行; B、第2行; C、第3行; D、第4行;

21、為什麽將結構體數據傳遞到函數內部時,建議函數的入參使用結構體指針而不是結構體( BD )

A、節省堆; B、節省棧; C、節省代碼量; D、運行效率更高;

22、在32位的系統中有一個雙向鏈表,每個鏈表成員存放三個字符信息,則一個鏈表成員至少需要占用幾個字節的存儲空間( C )

A、3; B、9; C、12; D、18

23、可用於實現循環隊列的數據結構可以是( BC )

A、平衡二叉樹; B、數組; C、雙向鏈表; D、無沖突HASH表

24、在數據成員個數較多且數據內容較隨機的情況下,查找一個成員的平均效率最高的數據結構是( D )

A、平衡二叉樹; B、數組; C、雙向鏈表; D、無沖突HASH表

25、最後進入棧的數據存放在棧的( A )

A、頂部; B、中部; C、底部; D、可以是任意位置;

26、假設a = 100,b = 1000,則下面兩個for循環,哪個效率更高( A )

甲:

for(i=0; i<a; i++)

{

for(k=0; k<b; k++)

{

printf(“i=%d, k=%d\n”, i, k);

}

}

乙:

for(i=0; i<b; i++)

{

for(k=0; k<a; k++)

{

printf(“i=%d, k=%d\n”, i, k);

}

}

A、甲; B、乙; C、一樣; D、無法確定;

27、FIFO的特點有( B )

A、FIFO滿的時候,會導致成員數據錯亂;

B、最先進入的成員最先出來;

C、FIFO空的時候,其內部所有存儲單元的值都是0;

D、它和棧是等效的;

28、常見的排序算法有( AB )

A、冒泡法; B、插入法; C、遍歷法; D、倒序法;

29、在一個有1000個成員的整型數組中,其成員都是按從小到大排列的,則平均來看查找是否存在某一個值的最快算法是( C )

A、遍歷法; B、隨機法; C、二分法; D、倒序法;

30、如果一個事件需要在同時滿足5個條件的情況下才會運行,則在使用形如:

if(a && b && c && d && e)

{

…….//待執行語句;

}

的語句時,應該將這5個條件按照什麽順序放置。( A )

A、發生概率從低到高排列; B、發生概率從高到低排列;

C、隨機放置; D、發生概率中等的放在最前面;

31、以下屬於枚舉特點的是( AB )

A、可以定義成一種數據類型; B、枚舉值必須是整數;

C、枚舉值必須是連續的; D、枚舉和宏定義是一樣的;

32、如果一段正常的代碼中出現了一個多余的分號,形如:

jar = QUART;

printf("%d,", jar);

jar = jar + PINT;

;

printf("%d\n", jar);

則這段代碼會( D )

A、無法編譯通過; B、能編譯通過,但不能運行;

C、能編譯通過,但運行時可能程序會崩潰; D、無任何影響;

33、有如下一段代碼,即在if語句的後面多了一個分號,那麽( CD )

if(a && b) ;

{

printf(“hello word!\n”);

}

A、不論a、b是何值,都不會打印出“helloword!”; B、無法編譯通過;

C、不論a、b是何值,都會打印出“helloword!”; D、能編譯通過;

34、下面的代碼存在的問題是( BC )

char a = 0;

char *p;

while(a < = 255)

{

p = malloc(100);

……

a++;

}

free(p);

p = NULL;

A、存在野指針; B、存在內存泄漏; C、存在死循環; D、沒有任何問題;

35、有如下代碼:

enum Liquid {OUNCE = 1,CUP = 2,PINT = 16,QUART = 32, GALLON = 128};

enum Liquid jar;

jar = QUART;

printf("%d,", jar);

jar = jar + PINT;

printf("%d\n", jar);

則打印出來的內容將會是( C )

A、32, 0; B、0, 0; C、32, 48; D、32, 隨機值;

36、下列代碼存在的問題有( C )

typedef struct DATA_MEMBER_S{

struct DATA_MEMBER_S *p_nest;

int a;

int b;

char c[4];

}DATA_MEMBER_T;

int main()

{

DATA_MEMBER_T d = {.p_nest = NULL, .a = 1, .b = 2, .c = "abcd"};

printf("%d, %d, %s\n",d.a, d.b, d.c);

}

A、結構體定義不正確; B、結構體初始化有誤;

C、打印語句可能會出錯; D、沒有任何問題;

37、一個函數( CD )

A、必須有入參; B、必須有返回值;

C、可以調用自己; D、返回值可以是另一個函數;

38、do{…}while()和while(){…}語句的特點有( ACD )

A、前者至少會執行一次{…}中的語句;

B、後者有可能會死循環,而前者不會;

C、兩個都可以使用break跳出;

D、兩者都可以使用continue語句;

39、以下是

for(statement1;statement2;statement3)

{

…/*循環主體*/

}

語句的特點的是( D )

A、statement1、statement2、statement3三個表達式不能同時為空;

B、for的運行效率比while高;

C、for循環主體不能使用break語句;

D、for循環主體可以使用continue語句;

40、以下說法正確的是( AB )

A、if…else…語句和switch…case…語句可以相互嵌套使用;

B、能使用switch語句的場景都可以用if…else…類的語句實現;

C、能使用if…else…類語句的場景都可以用switch語句實現;

D、在switch…case…語句主體中使用continue語句會跳轉到switch頭部重新開始執行;

41、在有N個進程的系統中,長時間平均來看每個進程的執行時間是( D )

A、1/N; B、1/2N; C、1/N2; D、不確定的

42、操作系統中進程“時間片輪轉”的作用是( C )

A、系統進程與應用進程輪流運行;

B、高優先級進程與低優先級進程輪流運行;

C、同優先級進程間輪流運行;

D、進程與中斷輪流運行;

43、跨進程全局資源共享時,可以用哪些方式進行保護( ABCD )

A、二進制信號量; B、計數制信號量;

C、關閉進程調度; D、關閉所有中斷;

44、創建一個進程時,必不可少的參數有( ABC )

A、進程可用的棧深度; B、進程優先級;

C、進程入口函數; D、進程的終止時間;

45、使用無“優先級繼承”機制的內核對象(比如普通二進制信號量)對全局資源進行保護時,可能會導致( B ),應該使用互斥鎖(mutex)。

A、不能有效保護數據完整性; B、進程優先級翻轉;

C、進程掛起; D、內核崩潰;

46、兩個進程間交互信息的方式可以有( ABC )

A、全局變量; B、信號量;

C、隊列或管道; D、中斷;

47、被掛起(suspend)的進程什麽時候才能恢復運行( B )

A、超時時間到了; B、被另一個進程或中斷喚起;

C、自動隨時喚起; D、等到其它進程都不運行的時候;

48、一個進程的棧空間溢出後可能會導致( A )

A、系統崩潰; B、進程掛起; C、進程被刪除; D、進程被重新啟動;

49、如果一個高優先級的進程進入了“死循環”,始終占據CPU不釋放,可能會導致( AB )

A、CPU使用率高; B、低優先級進程得不到運行;

C、中斷得不到執行; D、進程調度器會崩潰;

50、如果一個進程頻繁申請動態內存(比如使用malloc)而不釋放,可能會導致( ABD )

A、其它進程申請不到動態內存; B、本進程申請不到動態內存;

C、進程無法切換; D、動態內存耗盡;

嵌入式軟件測試題(C語言)V1.0