標籤:const lse arch 定義 statement 正確答案 case == def
嵌入式軟體測試題(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、null 指標; 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