糯米文學吧

位置:首頁 > 計算機 > C語言

2017年計算機二級《C語言》考前押題密卷

C語言7.44K

以下是應屆畢業生考試網整理的2017年計算機二級《C語言》考前押題密卷,供考生參考,更多計算機等級考試相關信息請繼續關注應屆畢業生計算機等級考試網。

2017年計算機二級《C語言》考前押題密卷

一、選擇題

1下列選項中非法的字符常量是(  )。

A.' 'B.'39'C.','D.' '

參考答案:B

參考解析:水平製表符中,’ '表示的是橫向跳若干格;選項B中,’39’錯誤,’39’是八進制形式表的字符,最大數為7,但其中出現'9',’,’是字符逗號;選項D中,7 ’表示的是換行。

2下列函數的類型是( )。

fun(double x)

{float y;

y=3*x-4;

return y;

}

.不確定t

參考答案:A

參考解析:本題考查函數值的類型。在函數調用時,儘管y的類型是float,x的類型是double,但是因為函數定義時沒有指定類型説明,系統默認函數值的類型為int型,所以計算後Y的類型是int型。

3軟件生命週期是指(  )。

A.軟件產品從提出、實現、使用維護到停止使用退役的過程

B.軟件從需求分析、設計、實現到測試完成的過程

C.軟件的開發過程

D.軟件的運行維護過程

參考答案:A

參考解析:軟件生命週期(SystemsDevelopmenlLifeCyele,SDlC)是軟件的產生直到報廢的生命週期,週期內有問題定義、可行性分析、總體描述、系統設計、編碼、調試和測試、驗收與運行、維護升級到廢棄等階段

4有如下程序:

main()

f int x=23:

do

{printf(”%d”,x——);}

while(!x);

}

該程序的執行結果是(  )。

A.321B.22C.不輸出任何內容D.陷入死循環

參考答案:B

參考解析:本題考查d0-while語句,當X一23時,執行d0後的語句,x一一的表達式值為x=x-1,此時X的值為22,而!X為0,因此while循環不成立,退出,故選擇B選項。

5已有定義:char C;,程序前面已在命令行中包含ctype.h文件,不能用於判斷e中的字符是否為大寫字母的表達式是(  )。

per(c)

B.'A'<一c<='Z'

C.'A'<一c&&c<='Z'

D.c<=('z'-32)&&('a'—32)<=c

參考答案:B

參考解析:選項B先計算關係表達式“『A7<一c”的值是0還是l,再比較該值與字符'z'之間的大小關係,不能實現題目所要求的功能。

6下列敍述中不正確的是(  )。

A.在C語言中調用函數時,只能把實參的值傳送給形參,形參的值不能傳送給實參

B.在c的函數中,最好使用全局變量

C.外部變量可以在函數之間傳遞數據

D.自動變量實質上是一個函數內部的局部變量

參考答案:B

參考解析:在程序運行中局部變量所在的函數被調用時,編譯系統根據需要臨時分配內存,調用結束空間解放;全局變量一經定義,編譯系統為其分配固定的內存單元,在程序運行的自始至終都佔用固定的單元。在考慮內存未知的情況下,最好不要使用全局變量。

7定義下列結構體(聯合)數組:

struet St

{char name[15];

int age;

)a[10]={”ZHA()”,14,”WANG”,15,”LIU”,16,”

ZHANG”,17);

執行語句printf(”%d,%c”,a[2],*(a[3]+2))的輸出結果為(  )。

A.15,AB.16,HC.16,AD.17,H

參考答案:C

參考解析:本題考查結構體數組。a[2]為結構體a[2]的age成員,即a[3],name為指向結構體a[3]的flame成員的第一個元素的指針,即指向“2”,(a[3]+2)將指針後移兩位指向第三個元素“A”,*(a[3]+2)是取指針所指向地址的內容。

8若變量已正確定義為float型,要通過輸入語句:scanf(”%f%f%f”,&a,&b,&c);給a賦值11.0,b賦值22.0,e賦值33.0,不正確的輸入形式是(  )。

A.11 22 33

B.11.0,22.0,33.0

C.11.0 22.0 33.0

D.1122

參考答案:B

參考解析:B選項中不應該加“,”號。

9以下敍述中正確的是(  )。

A.在C程序中無論是整數還是實數,只要在允許的範圍內都能準確無誤地表示

B.C程序由主函數組成

C.C程序由若干函數組成

D.C程序中只允許包含一個函數

參考答案:C

參考解析:整型是沒有問題的.實型在存諸的時候,是用科學記數法存的,沒有辦法得到準確值的,是有一定誤差的。C程序是由若干的函數組成,不只有主函數,函數是c程序的基本組成部分。但是C程序中必須有一個而且只能有一個以main(主函數)開頭的函數,因為c程序的執行是從main函數開始的,所以正確選項為C。

10C語言中運算對象必須是整型的運算符是(  )。

A.%B./C.!D.**

參考答案:A

參考解析:%既然求餘數,運算對象必須是整數。

11下列關於定點數與浮點數的敍述中錯誤的是(  )。

A.在實數的浮點表示中,階碼是一個整數

B.整數是實數的特例,也可以用浮點數表示

C.實數的補碼是其對應的反碼在最後一位加1

D.相同長度的浮點數和定點數,前者可表示數的範圍要大於後者

參考答案:C

參考解析:正整數的補碼與其原碼一致;負整數的褂 碼是其對應的反碼在最後一位加l。

12表達式'5'-'1'的值是(  )。

A.整數4B.字符4C.表達式不合法D.字符6

參考答案:A

參考解析:在C語言中,字符都是變為其對應的ASCIl碼值來參加算術運算的,但字符間的相對位置關係還是不變的,字符5和字符1的ASCIl碼值相差仍是4。

13有以下程序:

#include

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10),*p=a;

printf(”%a ”,*(p+2));

)

程序的輸出結果是(  )。

A.3B.4C.1D.2

參考答案:A

參考解析:*p—a;P指向首地址,*(p+2))往後移

動兩個元素,指向3,所以正確答案為A。

14在C語言中,函數返回值的類型最終取決於(  )。

A.函數定義時在函數首部所説明的函數類型

rn語句中表達式值的類型

C.調用函數時主調函數所傳遞的實參類型

D.函數定義時形參的類型

參考答案:A

參考解析:在C語言中,函數返回的類型最終取決於函數定義時在函數首部所説明的函數類型,與調用函數時主調函數所傳遞的實參類型和函數定義時形參的類型無關,而retllrn語句表達式的值將強制轉換為函數定義時在函數首部所説明的函數類型返回。

15下列程序的運行結果是(  )。

#included

void main()

{int s=0,k;

for(k=7;k>1;k--)

{switch(k)

{case 1:

case 4:

case 7:

s++:

break;

case 2:

case 3:

case 6:break;

case 0:

case 5:

s+=2:

break;

))

print[(”S=%d”,s);

}

A.S=3B.s=4C.s=5D.無輸出結果

參考答案:B

參考解析:運行程序,當k一7時switch(7)執行case:7,s+十後S一1,break跳出。k一一,k=7繼續循環switch(6),執行case6;直接跳出循環,k一一變成5,繼續循環switch(5),執行case5後面的語句s+=2,也相當於s—s+2,此時S為3,break跳出,k變為4,繼續循環,執行ease4為空,繼續執行case7;s++為4跳出循環,k一一變為3,繼續循環,執行case3,空語句往下執行case6,跳出,k一一為2,繼續循環,執行case2;空語句往下執行ease3,空語句再執行case7,跳出循環,k一一為1不符合循環,退出,此時s=4。

16設x為int型變量,則執行以下語句後,X的值為(  )。

x=10;x=x-=x-x:

A.10B.20C.40D.30

參考答案:A

參考解析:執行x—X--=X--x語句可寫成x=x一(x—x),可看出結果為10,故A選項正確。

17有以下程序:

#include

void WriteStr(char**str)

{FILE*fp

fp=fopen(fn,”w”);fputs(str,fp);fclose(fp);)

main()

{ WriteStr(””,”start”);

WriteStr(””,”end”);)

程序運行後,文件中的內容是(  )。

te t

參考答案:B

參考解析:用”w”方式打開文件,意思是如果文件名相同則覆蓋原來的文件,所以當再次輸入時覆蓋了第一次的內容,B選項正確。

18若程序中有宏定義行:#define N 100,則以下敍述中正確的是(  )。

A.宏定義行中定義了標識符N的值為整數100

B.在編譯程序對C源程序進行預處理時用100替換標識符N

C.對C源程序進行編譯時用100替換標識符N

D.在運行時用100替換標識符N

參考答案:B

參考解析:C語言中,凡是以“#”號開頭的行,都稱為“編譯預處理”。對c源程序進行編譯前,由編譯預處理程序對這些編譯預處理命令進行處理。

19合法的八進制數是(  )。

A.0B.028C.-077D.01.0

參考答案:A

參考解析:八進制數裏沒有8,7完了就要進位的,並且八進制裏沒有小數位的。因此選項A是正確的。

20以下選項中不合法的用户標識符是(  )。

A._tfC.A$

參考答案:C

參考解析:c語言規定標識符只能由字母、數字、下劃線組成,並且只能由字母或下劃線開頭,不能以數字開頭。c項中包含$特殊符號,所以c項不合法。

21若有以下程序:

#include

void fun(float*a,float*b)

( float w;

*a=*a+*a;w= *a;*a= *b;*b=W;

}

main()

{ float x=2..0,y=3.0,*px=&x,*py=&y;

fun(px,py);printf(”%,%2.0fkn”,X,y);

)

程序的輸出結果是( )。

A.4,3B.2,3C.3,4D.3,2

參考答案:C

參考解析:include

voidfun(float*a,float*b)//a即指向px的指針,b即指向py的指針,則*a指向x,*b指向y

{

floatW;

*a-*a+*a;//將x地址存放的數據自加,x變為4

W=*a:*a=*b:*b=w;//將x和Y地址裏面的數據互換,則x變

為3,Y變為4)

main(){

floatx=2.0,y=3.0,*px=&x,*py=&-y;//px和py分別是指向X和Y地址的指針

fun(px,PY);

printf(”%,% ”,x,y);//%2.0f表示結果前面有2個空格,小數點後有0位,即保留到個位}

22下列程序的運行結果是(  )。

#include

#define ADD(x)X+X

main()

{ int m=1,n=2,k=3:

int s=ADD(m十n)*k;

printf(”s=%d”,s):

}

====25

參考答案:B

參考解析:本題考查帶參數的宏的定義:“#defineADD(x)X+x”中x代表m+n,故s寫成s=m+n+m+r*k=l+2十1+2*3=l0。

23若有以下説明,則(  )不是對strcpy庫函數正確的調用。

strcpy庫函數用於複製一個字符串:char*str1==”abed”,str1[10],*str3="hijklmn",*str4[-2],*str5=”aaaa”;

py(str2,str1)

py(str3,str1)

py(str1,str2)

py(str5,str1)

參考答案:C

參考解析:strcpy(s1,s2)函數的功能是將字符串s2複製到字符串s1中。要保證s1存儲區能容納下s2字符串。

24C語言中,字符(char)型數據在微機內存中的存儲形式是(  )。

A.反碼B.補碼IC碼l碼

參考答案:D

參考解析:其他3個是用來進行數值處理的。

25有以下程序:

#include

main()

{int a[J一{1,2,3,4,5,6,7,8,9,10,11,12),*P=a

+5;

*q=NULL;+q=*(p+5);

printf(”%d%d ”,*q,*q);

}

程序運行後的輸出結果是(  )。

A.運後後報錯B.6 6C.6 11D.5 10

參考答案:A

參考解析:本題中首先定義了一個一維數組。並初始化,由於定義該數組的時候省了長度,因此該數組的長度為初始化時候賦初值的個數即為12。數組名a代表數組的首地址,所以*p-a+5語句使得P指向數組的第6個元素,而在程序中定義了一個指針q並讓它指向空,實際上程序並沒有在內存中為指針q開闢存儲空間,這樣給q賦值不允許的,故該程序運行後報錯。第25題 筆記記錄我的筆記(0) | 精選筆記(11)選擇筆記標籤:試題內容(11)答案解析(0)

26有以下程序:

#include

main()

{int i,X[3][3]={1,2,3,4,5,6,7,8,9};

for(i=0;i<3;i++)printf(”%d,”,x[i][2-i]);

{

程序的輸出結果是(  )。

A.1,5,9,B.1,4,7,C.3,5,7,D.3,6,9,

參考答案:C

參考解析:即輸出xE03[2]x[1][1]x[2][o]分別為357。

27有以下程序:

main()

{int a=0,b=10,c=0,d=0;

if(a=1)b=1;c=2;

else d=3:

printf(”%d,%d,%d,%d ”,a,b,c,d);

}

程序輸出(  )。

A.0,1,2,0B.0,0,0,3C.1,1,2,0D.編譯有錯

參考答案:D

參考解析:語法錯誤。else與if之間不應再用其他語句,如果滿足if條件,則繼續執行if後面的語句;不滿足就執行else語句。

28下列程序輸出結果是(  )。

#include%stdio.h>

main()

{char aE3一{'a','b','c','d','e','f','o');

int i,j;

A.7,7B.7,6C.6,6D.6.7

參考答案:B

參考解析:本題要注意sizeof()和strlen()的區別,sizeof()函數的功能是返回字符串所佔的字節數,strlen()函數的功能是返回字符串長度,'o'是一個轉義符,它佔存儲空間,但不計入串的長度。

29有以下程序

#include

int a=1:

int f(int c)

{ static int a=2;

c=c+1.

return(a++)+c;

}

main()

{ int i,k=0;

for(i=0;i<2;i++){int a=3;k+=f(a);)

k+=a;

printf(”%d ”,k);

程序運行結果是(  )。

A.14B.15C.16D.17

參考答案:A

參考解析:在主函數中,k的初值為0,首先調用函數f(3),返回值為6,k的值變為6,而函數intfun(intc)中的局部靜態變量a等於3。第二次調用函數f(3)時,返回值為7,所以k-6+7—13。退出循環語句,k再加上全局變量a的值1,其最終的值為14。

30按照“先進後出”原則組織數據的結構是(  )。

A.隊列B.棧C.雙向鏈表D.二叉樹

參考答案:B

參考解析:棧是線性表的一種,其插入和刪除運算都只在表的一端進行。進行插入、刪除的一端稱為棧頂,封閉的一端稱為棧底。棧頂元素按先進後出的原則組織數據,它是最後插入的.元素,不是最後被刪除的元素。

31若整型變量a、b、c、d中的值依次為2、2、3、4,則條件表達式a

A.1B.2C.3D.4

參考答案:C

32若有定義:“int*P,x=0,*P,P=&x;”,則語句“printf(”%d ”,*p);”的輸出結果是(  )。

A.隨機值B.0C.x的地址D.P的地址

參考答案:B

參考解析:*P的意思是取其指向地址的內容,P是指向x地址的指針,因此輸出*P也就是輸出X的內容,即0,故選擇B選項。

33下列程序中C的二進制值是( )。

char a=2,b=4,c;

c=a^b>>2;

A.00000011B.00010100C.00011100D.00011000

參考答案:A

參考解析:本題主要考查右移運算和按位異或。把b化為二進制數為00000100,右移兩位後為00000001,a的二進制為00000010,兩者異或為00000011。

34有下列程序:

main()

{char*p[]={¨3697”.”2584”);

int i,j;long ntlm=0;

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

{ j=0;

while(p[i][j]!='')

{if((p[i][j]-'')%2)num=10*num+p

[j][j]-'0';

j+=2;

}

}

print[(“%d ”,num);

程序執行後的輸出結果是(  )。

A.35B.37C.39D.3975

參考答案:D

參考解析:執行第一次for循環時,用表達式p[i][j]!=’o=來判斷字符串數組指針P是否到達字符串的結尾,如果沒有到達,繼續執行while中的語句。if語句表示(p[i][i]-o’)除2的餘數不為0時,即字符串所有奇數執行後面的語句。所以退出第l次for的循環體時,輸出為397,執行第2次循環體。對字符串“2584”進行處理,輸出結果為5,因而最後輸出結果為3975。

37若有定義:“int a[2][3];”,則對a數組的第i行第j列元素的正確引用為(  )。

A.*(*(a+i)+j)B.(a+i)[j]C.*(a+j+j)D.*(a+i)+j

參考答案:A

參考解析:通過地址來引用數組元素的方法有下列5種:①a[i][j];②*(a[i]+J);③*(*(a+i)+j);④*(aEiJEj]);⑤(&a[o]EoJ+3*i十j)。故A正確。

38設有以下語句:

int a=1,b=2,c;

c=a^(b<<2);

執行後,c的值為( )。

A.6B.7C.8D.9

參考答案:D

參考解析:本題考查兩個知識點,按位異或左移把b左移2位化成二進制c=a^(b<<2)=a^(oooolo<<2)=a^o01000=0000001^001000=9,故選擇D。

39若二維數組a有m列,則在a[i][j]前的元素個數為(  )。

A.i*m+j-1B.i*m+jC.j*m+iD.i*m+j+1

參考答案:B

參考解析:二維數組的元素可以看成是按矩陣形式存放的,數組第一維的下標是i,説明它前面還有i行,有i*m個元素,數組第二維的下標是j,説明它前面還有j列,有j個元素,所以共有i*m+j個元素。

40已知大寫字母A的ASCIl碼是65,小寫字母a的ACSII碼是97。下列能將變量C中的大寫字母轉換為對應小寫字母的語句是(  )。

A.c=(c-'A')%26+'A'

B.C=c+32

C.c=c-'A'+'A'

D.c=('A'+C)%26—'a'

參考答案:B

參考解析:根據ASCIl碼選項可知大寫字符A與小寫字符a的ASCIl碼相差32,而選項D中應該是加上'a’,選項A和C左側的表達式都是大寫字符c與大寫字符A的差與…a的ASCIl代碼的和就是小寫字符c的ASCIl代碼。