當前位置:才華齋>計算機>計算機二級>

2016最新計算機二級筆試題及答案

計算機二級 閱讀(2.71W)

本文為大家提供的是計算機二級的考試試題,希望能幫助到大家!

2016最新計算機二級筆試題及答案

1)設a、b和c都是int型變數,且a=3、b=4、c=5,則下面的表示式中,值為0的表示式是_______。

A)‘a’&&‘b’ B)a<=b C)a||+c&&b-c D)!((a

1)D

知識點:幾種運算子的使用

評析:選項A:‘a’&&‘b’是字元a與b的相與,故不為0。

選項B:a<=b,由題中變數賦值可知,結果為l。

選項c:a||+c&&b-c,此表示式先做算術運算b-c,結果為一1.而+c屬於單目運算子,由於c初值為5,經過單目運算子運算後,還是5,下面再進行邏輯與的運算,即5&&-1結果為1(因為C語言中除O代表假外,其他任一個數都代表真),最後a||l,結果為1。

選項D:!((a

2)設有如下程式

#include

main()

{

int **k,*j,i=100;

j=&i; k=&j;

printf("%dn",**k);

}

上述程式的輸出結果是_______。

A)執行錯誤 B)100 c)i的地址 D)j的地址

2)B

知識點:指標變數的引用

評析:j=&i,j的值就是i的地蚍,*j=100,將j的地址賦給k,這時*k=j,那麼,**k=*j,而*j=100,所以**k=100,最後的列印結果應當為100。

3)設有以下語句,其中不是對a陣列元素的正確引用的是:_______(其中0≤i

int a[10]={0,l,2,3,4,5,6,7,8,9,},*p=a;

A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))

3)D

知識點:通過指標引用陣列元素

評析:觀察程式可知.a實際上就是陣列a的首地址,所以“*(a+i)”表示的就是陣列a中的第i個元素的值,進而,我們可以知道*(*(a+i))必然不是對a陣列元素的正確引用。

4)有以下程式:

#include

main(){

char c[6];

int i=0:

for(;i<6;c[i]=getchar(),i++);

for(i=0;i<6;i++)putchar(c[i]);

printf("n");

}

如果從鍵盤上輸入:

ab<回車>

c<回車>

def<回車>

則輸出結果為________。

A)a B)a C)ab D)abcdef

b b c

c c d

d d

e

f

4)C

知識點:字元資料的輸入、輸出

評析:har()

此函式的作用是從終端(或系統隱含指定的輸入裝置)輸入一個字元。請注意:getchar()只能接受一個字元(回車符也算是一個字元)。getchar函式得到的字元可以賦給一個字元變數或整型變數,也可不賦給任何變數,作為表示式的一部分。

har()

此函式的作用是向終端輸出一個字元,也可以輸出控制字元,如回車符•使輸出的當前位置移到下一行的開頭。

本題在輸入字元時,ab和c後面的回車符分別賦給了c[2]和c[4],所以,正確答案為C。

5)下面程式

#include

#include

main()

{ char*p1:"abc",*p2="ABC",str[50]= "xyz";

strcpy(str+2,strcat(p1,p2));

printf("%sn",str);

}

的輸出是_______。

A)xyzabcABC B)zabcABC

C)yzabcABC D)xyabcABC

5)D

知識點:字串的連線和拷貝

評析:strcat(字元陣列l,字元陣列2)的作用是連線兩個字元陣列中的字串,把字串2接到字串l的後面,結果放在字元陣列l中,本題中strcat(p1,p2)函式將*pl和*p2指向的兩個串連線了起來,將字串abcABC放到了*pl所指向的儲存單元中:而strcpy(字元陣列1,字串2)函式將字串2複製到字元陣列1中去,本題將字串abcABC複製到了str+2所指向的儲存單元中,即將原str陣列中的字元z及z向後的所有字元覆蓋,所以在列印輸出時,str的值已經等於“xyabcABC”。

6)下面程式

int aa[3][3]={{2},{4},{6}};

main()

{ int i,*p=&aa[0][0];

for(i=0;i<2;i++){

if(i==0)aa[i][i+1]=*p+l;

else ++p;

printf("%d",*p);

}

}

的輸出是_______。

A)23 B)26 C)33 D)36

6)A

知識點:for迴圈語句

評析:觀察題目,可以發現,*p=&aa[0][O]語句實際是將陣列aa的首地址賦給了指標變數p,將i的值帶入for迴圈中,i=0時,aa[0][1]=3,*p=2;*p輸出的是指標所指向的陣列值,此時p所指向的是aa[0][0],輸出2,而i=l時執行了++p操作,使指標向後移動指向了aa[0][l],所以在輸出*p時應為3。

7)下面程式

main()

{ int x=100,a=10,b=20,okl=5,ok2=0;

if(a

if(b!=15)

if(!okl)x=1;

else if(ok2)x=10;

X=-1;

Ptintf("%dn",x);

}

的輸出是_______。

A)-1 B)0 C)1 D)不確定的值

7)A

知識點:判斷語句的迴圈巢狀

評析:第一個判斷值為真,過渡到下一個判斷,第二個判斷為真,過渡到第三個判斷……如此迴圈,在列印輸出語句的前一行,程式給變數x賦了值,為一l,所以,無論前期如何變化,最後的x值依然為一l。

8)下面程式

main()

{

int x=32:

printf("%dn",x=x<<1);

}

的輸出是_______。

A)100 B)160 C)120 D)64

8)D

知識點:位運算

評析:<<是c語言中規定的左移運算子,例如,a=a<<2,這個語句即是將a的二進位制數左移兩位,左移一位相當於該數乘以2,左移兩位相當於該數乘以2的2次方。所以,x<<1=32*2-64。

9)以下程式的輸出結果是________。

#include

#define FUDGE(y) 2.84+y

#define PR(a) printf("%d",(int))(a))

#define PRINT l(a) PR(a);putchar(‘n’)

main()

{ int x=2;

PRINT l(FUDGE(5)*X);

}

A)1l B)12 C)13 D)15

9)B

知識點:帶引數的巨集定義

評析:在程式中如果有帶實參的巨集,則按#define命令列中指定的字串從左到右進行置換,如果串中包含巨集中的形參,則將程式語句中相應的實參代替形參,如果巨集定義中的字串中的字元不是引數字元,則保留,這樣就形成了置換的字串。

根據以上原則,我們將實參帶入已經定義的巨集中,可以得出答案,最後打印出來的是“12”。

10)以下程式段給陣列所有的元素輸入資料,請選擇正確答案填入:

#include

main()

{

int a[10],i=0;

while(i

:

:

}

A)a+(i++) B)&a[i+l] C]a+i D]&a[++i]

10)A

知識點:格式輸入函式scanf()

評析:因為a實際上就是陣列a的首地址,而a+x則是陣列中第x個元素的地址,所以在四個選項中,選項B和C只能輸入一個數據,選項D不能給a[0]輸入資料,只有選項A可以完成給陣列所有的元素輸入資料的任務。

11)字元(char)型資料在微機記憶體中的儲存形式是________。

A)反碼 B)補碼

C)EBCDIC碼 D)ASCII碼

11)D

知識點:字元資料在記憶體中的儲存形式

評析:將一個字元常量放到一個字元變數中,實際上並不是把該字元本身放到記憶體單元中去,而是將該字元的ASCII碼值放到儲存單元中。

12)下面程式的輸出是________。

typedef union

{ long x[2];

int y[4];

char z[8];

}MYTYPE;

MYTYPE them;

main()

{ printf("%dn",sizeof(them));}

A)32 B)16 C)8 D)24

12)C

知識點:共用體的長度

評析:sizeof(x)是一個標準c函式,它的返回值是x型的資料結構佔用的記憶體位元組數。題目中定義了一個共用體,共用體變數在記憶體中所佔的長度等於最長的成員的.長度,所以共用體MYTYPE需要8個位元組的儲存空間,由它定義的變數的長度當然也是8。

13)不能把字串:“Hello!”賦給陣列b的語句是________。

A)char b[10]={‘H’,‘e’,‘l’,‘l’,‘0’,‘!’};

B)char b[10]={‘h’,‘e’,‘l’,‘l’,‘0’,‘!’};

C)char b[10];strcpy(b,"Hello!");

D)char b[10]="Hello!";

13)B

知識點:給陣列賦值

評析:在c語言中,大寫字母和小寫字母被認為是兩個不同的字元,因此,“hello!”和“Hello!”是兩個不同的字串。

14)下面程式的輸出是________。

main()

{ int x=3,y=6,a=0;

while(x++!=(y—=1))

{ a+=1;

if(y

}

printf("x:%d,y:%d,a=%dn",x,y,a);

}

A)x=4.v=4,a=1 B)x=5,y=5,a=1

C)x=5,y=4,a=3 D)x=5,y=4,a=l

14)D

知識點:運算子

評析:注意在x++中x值的引用時,這裡應當是先引用,後自加,具體執行過程如下:

第一次while迴圈:x=3與y=5比較,條件為真,執行a=a+1=1;此時,x的值己為4,判斷y

第二次while迴圈:x=4與y=4比較,條件為假,此時x的值已為5,退出while迴圈,執行printf。

15)下面程式的輸出是_______。

main()

{char*s:"12134211";

int vl=0,v2=0,V3=0,v4=0,k;

for(k=0;s[k];k++)

switch(s[k])

{ default:V4++;

case‘1’:vl++:

case‘3’:v3++:

case‘2’:v2++:

}

printf("vl=%d,v2=%d,v3=%d,v4=%dn",vl,v2,v3,V4);

}

A)vl=4,v2=2,v3=l,v4=1 B)vl=4,V2=9,V3=3,V4=l

C)vl=5,v2=8,v3=6,v4=1 D)vl=8,V2=8,V3=8,v4=8

15)C

知識點:switch()語句

評析:當switch後面括弧內的表示式的值與某一個case後面的常量的表示式的值相等時,就執行此case後面的語句,若所有的case中的常量表達式的值都沒有與表示式的值匹配的,就執行default後面的語句。本題中,for迴圈的條件是s陣列的陣列元素值,只要將陣列的值一一代入程式逐步求解即可。

16)下面程式的輸出是_______。

main()

{int k=ll;

printf("k=%d,k=%o,k=%xn",k,k,k);

}

A)k=11.k=12,k=ll B)k=ll,k=13,k=13

C)k=ll,k=013,k=0xb D)k=ll,k=13,k=B

16)D

知識點:格式字元

評析:在c語言格式字元的輸出中,“%d”是以帶符號的十進位制形式輸出整數,即k=ll:“%o”是以8進位制無符號形式輸出整數(不輸出前導符0),即k=13:“%x”是以16進位制無符號形式輸出整數(不輸出前導符0x),即k=B。

17)以下敘述中正確的是_______。

A)c語言比其他語言高階

B)C語言可以不用編譯就能被計算機識別執行

c)c語言以接近英語國家的自然語言和數學語言作為語言的表達形式

D)C語言出現的最晚,具有其他語言的一切優點

17)C

知識點:c語言風格

評析:計算機語言分為低階語言、組合語言和高階語言,c語言屬於高階語言,但並不是說c語言比其他語言高階,所以選項A錯誤;除了低階語言外,其他各種語言都必須編譯成能被計算機識別的二進位制數才能執行,選項B錯誤;c語言出現於1972年到1973年問,並不是出現最晚的語言,所以選項D也是錯誤的。

18)下列可用於c語言使用者識別符號的一組是_______。

A)void define WORD B)a3_b3 _123 Car

C)For -abc IFCase D)2a D0 sizeof

18)B

知識點:c語言的識別符號

評析:c語言規定識別符號只能由字母、數字和下劃線3種字元組成,且第一個字元必須為字母或下劃線,所以排除c和D。c語言還規定識別符號不能為c語言的關鍵字,從而選項A是錯誤的,因為void為關鍵字。

19)請選出正確的程式段________。

A)int*p B)int*s,k;

Scanf("%d",p); *s=100;

……

C)int*s,k: D)int*s,k;

Char*p,c; char*p,e;

s=&k; s=&k;

p=&c; p=&c;

*p=‘a’; s=p;

…… *s=l;

……

19)C

知識點:指標變數

評析:本題的A和B犯了一個同樣的錯誤,即指標變數p定義後並沒有指向具體的變數。也就是說,p中沒有確定的地址值,它的值是不可預見的,所指向的單元也是不可預見的,因此不能進行賦值操作。另外,在選項D中,s是int指標變數,p是char型指標變數,所指向的記憶體單元所佔用的位元組數是不同的,因而不能將字元指標變數p的值賦給整型指標變最s。