欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

C語言筆試題及答案

時間:2025-05-13 09:44:26 C語言 我要投稿
  • 相關(guān)推薦

C語言筆試題及答案

  引導(dǎo)語:筆試是面試程序員的必過一關(guān),以下是百分網(wǎng)小編分享給大家的C語言筆試題及答案,歡迎測試!更多精彩內(nèi)容請持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

C語言筆試題及答案

  一、選擇題(1)~(10)每小題2分, (11)~(50)每小題1分,共60分)

  下列各題A)、B)、C)、D)四個選項(xiàng)中,只有一個選項(xiàng)是正確的,請將正確的選項(xiàng)涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。

  (1)在數(shù)據(jù)結(jié)構(gòu)中,從邏輯上可以把數(shù)據(jù)結(jié)構(gòu)分為_______。

  A)動態(tài)結(jié)構(gòu)和靜態(tài)結(jié)構(gòu) B)緊湊結(jié)構(gòu)和非緊湊結(jié)構(gòu)

  C)線性結(jié)構(gòu)和非線性結(jié)構(gòu) D)內(nèi)部結(jié)構(gòu)和外部結(jié)構(gòu)

  答案:C

  評析:邏輯結(jié)構(gòu)反映數(shù)據(jù)元素之間的邏輯關(guān)系,線性結(jié)構(gòu)表示數(shù)據(jù)元素之間一對一的關(guān)系,非線性結(jié)構(gòu)表示數(shù)據(jù)元素之間一對多或多對一的關(guān)系。

  (2)若進(jìn)棧序列為l,2,3,4,進(jìn)棧過程中可以出棧,則下列不可能的一個出棧序列是_______。

  A)1,4,3,2 B)2,3,4,l

  C)3,1,4,2 D)3,4, 2,1

  答案:C

  評析:棧是一種后進(jìn)先出表,選項(xiàng)c中,先出棧的是3,說明此時棧內(nèi)必然有1,2,由于l先于2進(jìn)棧,所以l不可能在2之前出棧,故選項(xiàng)C這種出棧序列是不可能的。

  (3)排序方法中,將整個無序序列分割成若干小的子序列并分別進(jìn)行插入排序的方法,稱為_______。

  A)希爾排序 B)冒泡排序 C)插入排序 D)選擇排序

  答案:A

  評析:希爾排序法的基本思想是:將整個無序序列分割成若干小的子序列分別進(jìn)行插入排序。

  (4)在順序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找關(guān)鍵碼值11,所需的關(guān)鍵碼比較次數(shù)為_______。

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

  答案:C

  評析:二分法查找是用關(guān)鍵碼與線性表的中間元素比較,然后根據(jù)比較結(jié)果來判斷是結(jié)束查找,還是在左邊或者右邊子表按相同的方法繼續(xù)查找。本題中,與ll比較的關(guān)鍵碼分別為15,8,10,12四個。

  (5)對于n個結(jié)點(diǎn)的單向鏈表(無表頭結(jié)點(diǎn)),需要指針單元的個數(shù)至少為_______。

  A)n-1 B)n C)n+l D)2n

  答案:C

  評析:在n個結(jié)點(diǎn)的單向鏈表(無表頭結(jié)點(diǎn))中,每個結(jié)點(diǎn)都有一個指針單元(即指針域),加上頭指針,至少需要n+1個指針單元。

  (6)在軟件開發(fā)過程中,軟件結(jié)構(gòu)設(shè)計是描述_______。

  A)數(shù)據(jù)存儲結(jié)構(gòu) B)軟件體系結(jié)構(gòu) C)軟件結(jié)構(gòu)測試 D)軟件控制過程

  答案:B

  評析:從工程管理角度來看,軟件設(shè)計分兩步完成:概要設(shè)計和詳細(xì)設(shè)計。概要設(shè)計(又稱結(jié)構(gòu)設(shè)計)將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu)、確定系統(tǒng)級接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫模式。

  (7)模塊本身的內(nèi)聚是模塊獨(dú)立性的重要性度量因素之一。在7類內(nèi)聚中,具有最強(qiáng)內(nèi)聚 的一類是_______。

  A)順序性內(nèi)聚 B)過程性內(nèi)聚 C)邏輯性內(nèi)聚 D)功能性內(nèi)聚

  答案:D

  評析:內(nèi)聚性是一個模塊內(nèi)部各元素間彼此結(jié)合的緊密程度的度量。內(nèi)聚共有7類,它們之間的內(nèi)聚性由弱到強(qiáng)排列順序?yàn)椋号既粌?nèi)聚、邏輯內(nèi)聚、時間內(nèi)聚、過程內(nèi)聚、通信內(nèi)聚、順序內(nèi)聚和功能內(nèi)聚。

  (8)數(shù)據(jù)存儲和數(shù)據(jù)流都是_______,僅僅是所處的狀態(tài)不同。

  A)分析結(jié)果 B)事件 C)動作 D)數(shù)據(jù)

  答案:D

  評析:數(shù)據(jù)流圖有4種成分:源點(diǎn)或終點(diǎn)、處理、數(shù)據(jù)存儲和數(shù)據(jù)流。數(shù)據(jù)存儲是處于靜止?fàn)顟B(tài)的數(shù)據(jù),數(shù)據(jù)流是處于運(yùn)動中的數(shù)據(jù)。

  (9)數(shù)據(jù)的完整性是指數(shù)據(jù)的正確性、有效性和_______。

  A)可維護(hù)性 B)獨(dú)立性 C)安全性 D)相容性

  答案:D

  評析:數(shù)據(jù)模型的完整性規(guī)則是給定的數(shù)據(jù)模型中數(shù)據(jù)及其聯(lián)系所具有的制約和依存規(guī)則,用以限定符合數(shù)據(jù)模型的數(shù)據(jù)庫狀態(tài)及其狀態(tài)的變化,以保證數(shù)據(jù)的正確性、有效性和相容性。

  (10)關(guān)系代數(shù)運(yùn)算是以_______為基礎(chǔ)的運(yùn)算。

  A)關(guān)系運(yùn)算 B)謂詞運(yùn)算 C)集合運(yùn)算 D)代數(shù)運(yùn)算

  答案:C

  評析:關(guān)系代數(shù)運(yùn)算是以關(guān)系代數(shù)作為運(yùn)算對象的一組高級運(yùn)算的集合。它的基本操作是并、交、差、笛卡爾積,另外還包垂直分割(投影)、水平分割(選擇)、關(guān)系的結(jié)合(連接)等。

  (11)能將高級語言程序轉(zhuǎn)換成目標(biāo)語言程序的是_______。

  A)調(diào)試程序 B)解釋程序 C)編譯程序 D)編輯程序

  答案:C

  評析:用高級語言編寫的程序稱為“源程序”,而計算機(jī)只能識別和執(zhí)行由0和l組成的二進(jìn)制指令,所以高級語言必須先用一種稱為“編譯程序”的軟件,把源程序翻譯成二進(jìn)制形式的“目標(biāo)程序”。

  (12) _______是構(gòu)成c語言程序的基本單位。

  A)函數(shù) B)過程 C)子程序 D)子例程

  答案:A

  評析:c程序是由函數(shù)構(gòu)成的。一個c源程序至少包含一個main函數(shù),也可以包含一個main函數(shù)和若干個其他函數(shù),因此,函數(shù)是c程序的基本單位。

  (13)可以在C語言中用做用戶標(biāo)識符的是_______。

  A)void B)as_b3 C)for D)2c

  define _123 -abc Do

  WORD If cas SIG

  答案:B

  評析:c語言規(guī)定,標(biāo)識符只能由字母、數(shù)字和下劃線三種符號組成,而且第一個字符必須是字母或下劃線。另外還需要注意的是關(guān)鍵字不能作標(biāo)識符。選項(xiàng)A中void,C中for都為關(guān)鍵字,D中2c以字母開頭。

  (14)若有以下類型說明語句:

  char w;int x;float y,z;

  則表達(dá)式w*x+z-y的結(jié)果為________類型。

  A)float B)char C)int D)double

  答案:A

  評析:在進(jìn)行運(yùn)算時,不同類型的數(shù)據(jù)參加運(yùn)算,需要先將其轉(zhuǎn)換成同一類型的數(shù)據(jù),然后再進(jìn)行運(yùn)算。轉(zhuǎn)換的順序由低到高為:char,short→int→unsigned→long→double→float,故結(jié)果為float型。

  (15)main(()

  { float x=123A56;

  printf(“%-5.2f\n”,x);

  }

  以上程序輸出的結(jié)果是________。

  A)123.4 B)123.5 C)123.45 D)123.46

  答案:D

  評析:f格式符,用來輸出實(shí)數(shù),以小數(shù)形式輸出。“%-m.nf”的含義是:輸出數(shù)據(jù)共占m列,其中n位小數(shù),如果輸出位數(shù)小于m。則右端補(bǔ)空格。如果總長度大于列數(shù),則按實(shí)際情況四舍五入輸出。

  (16)下面語句的輸出結(jié)果是________。

  Printf(“%d\n”,strlen(“\t\”\065\xff\n”));

  A)14 B)8

  C)5 D)輸出項(xiàng)不合法,無正常輸出

  答案:C

  評析:在c語言中,以“\”開頭的字符均為轉(zhuǎn)義字符,其中“\”后可跟l~3位八進(jìn)制數(shù)或在“\”后跟字母x及l(fā)~2位十六進(jìn)制數(shù),以此來代表一個特定的字符。

  (17)下列程序的輸出結(jié)果是________。

  main()

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

  if(++a>0lI++b>0)++c;

  printf(“\na=%d,b=%d,c=%d”,a,b,C);

  }

  A)a=0,b=0,c=0 B)a=l,b=l,c=1

  C)a=l,b=O, c=I D)a=0, b=1.c=1

  答案:C

  評析:

  “︱︱”是或運(yùn)算,它有個“短路”的特點(diǎn)需特別注意,當(dāng)“︱︱”運(yùn)算符左邊的表達(dá)式的值為真時,則程序就不再對“︱︱”右邊的表達(dá)式的值進(jìn)行運(yùn)算,而是使得整個表達(dá)式的值直接為真。

  (18)下列程序的輸出結(jié)果是_________。

  Main()

  { int i;

  for(i=1;i+l;i++)

  { if(i>4){printlf(”%d”,i++);break;}

  }

  printf(“%d”,i++);

  }

  A)55 B)56

  C)程序錯誤,沒有輸出 D)循環(huán)條件永遠(yuǎn)為真,死循環(huán)

  答案:B

  評析:本程序中有個for循環(huán),但注意到for循環(huán)的條件是“i+l”,也就是只要i+l的值為真(非零值均為真),就執(zhí)行循環(huán)。當(dāng)i=l的時,i+l的值為真,判斷if條件不成立,執(zhí)行i++,輸出i的值為5。

  (19)下列程序的輸出結(jié)果是_________。

  #define A 100

  main()

  { int i=O,sum=O;

  do{ if(I==(i/2)*2)continue;

  sum+=i;

  }while(++i

  printf(“%d\n”,sum);

  }

  A)2500 B)2050 C)4 D)O

  答案:A

  評析:本題程序的功能是求1到_99之問(包括1和99)所有奇數(shù)之和。程序中的while循環(huán)的終止條件為++i=100,在while循環(huán)體內(nèi),如果i是偶數(shù),則執(zhí)行continue,跳過這一次循環(huán),執(zhí)行下一次循環(huán),否則求和。最后輸出的值是1到99之間(包括l和99)所有奇數(shù)之和(1+99)*50/2=2500。

  (20)下列程序的輸出結(jié)果是_________。

  main()

  { int I=3;

  switch(i)

  { case 1:

  case 2:printf(”%d”,i);

  case 3:

  case 4:break;

  default:printf(”OK”);

  }

  }

  A)0 B)3 C)OK D)沒有任何輸出

  答案:D

  評析:在題中,i的值為3,由于“case 3:”后面沒有break語句,所以繼續(xù)向下執(zhí)行“case 4:”后面的語句,由于“case 4:”后面的語句為break強(qiáng)行退出switch語句,所以,本題沒有任何輸出。

  (21)下列程序執(zhí)行后的輸出結(jié)果是________。

  main()

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

  int i,k=2:

  for(I=0;i<3;i++)

  {printf(”%d”,m[k][i]);}

  }

  A)456 B)258 C)369 D)789

  答案:C

  評析:根據(jù)二維數(shù)組的定義得出:m[O][O]=1,m[O][1]=4,m[O][2]=7,m[1][0]=2,rail][1]=5,m[1][2]=8,m[2][0]=3,m[2][l]=6,m[2][2]=9,所以本題的輸出是第3行的值m[2][0],m[2][1],m[2][2],即369。

  (22)設(shè)已定義洱口k為int類型變量,則以下for循環(huán)語句_________。

  for(i=0;k=-1,k=1;i++,k++)

  printf(”****\n”);

  A)判斷循環(huán)結(jié)束的條件不合法 B)是無限循環(huán)

  C)循環(huán)一次也不執(zhí)行 D)循環(huán)只執(zhí)行一次

  答案:B

  評析:本題定義了一個for循環(huán),循環(huán)變量是i,但由于本題并沒有設(shè)置循環(huán)條件,所以循環(huán)的條件永遠(yuǎn)默認(rèn)為真,即無限次執(zhí)行循環(huán)。

  (23)下面程序的輸出結(jié)果是___________。

  unsigned fun(unsigned num)

  { unsigned k=1;

  do{

  k*=num%lO;

  num/=lO;

  }while(num);

  return(k);

  }

  main()

  { unsigned n。26;

  printf(”%d\n”,fun(n));

  }

  A)0 B)4 C)12 D)無限次循環(huán)

  答案:C

  評析:本題定義了一個fun函數(shù),用于num求和,具體執(zhí)行過程如下:

  num=26:k=k*(num%10)=1*(26%10),所以k=6,num=num/10=2;

  num=2:k=k*(num%10)=6*(2%10),所以k=12,num=num/lO=O;

  num=O:while條件不成立,所以返回k的值12.

  (24)已知字母A的ASCII碼值是65,字母a的ASCII碼值是97,以下程序_______。

  main()

  { char a=‘A’;

  int b=20;

  printf(“%d,%o”,(a=a+a,a+b,b),a+‘a’-‘A’,b);

  }

  A)表達(dá)式非法,輸出零或不確定值

  B)因輸出項(xiàng)過多,無輸出或輸出不確定值

  C)輸出結(jié)果為20,141

  D)輸出結(jié)果為20,141,20

  答案:C

  評析:本題中首先輸出逗號表達(dá)式“a=a+a,a+b,b”的值,即20。然后以八進(jìn)制的形式輸出a+‘a’-‘A’的值為97對應(yīng)的八進(jìn)制數(shù)141,由于最后一個表達(dá)式b沒有對應(yīng)輸出格式的輸出項(xiàng)表列就不會輸出。

  (25)C語言函數(shù)返回值的類型是由__________決定的。

  A)return語句中的表達(dá)式類型 B)調(diào)用函數(shù)的主調(diào)函數(shù)類型

  C)調(diào)用函數(shù)時臨時 D)定義函數(shù)時所指定的函數(shù)類型

  答案:D

  評析:函數(shù)值的類型應(yīng)當(dāng)是在定義函數(shù)時指定的。在定義函數(shù)時對函數(shù)值說明的類型一般應(yīng)該和return語句中的表達(dá)式類型一致,如果不_致,則以函數(shù)類型為準(zhǔn),即函數(shù)類型決定返回值的類型。

  (26)下列程序執(zhí)行后輸出的結(jié)果是___________。

  int d=l:

  fun(int p)

  { int d。5;

  d+=p++;

  printf(”%d,”,d);

  }

  main()

  { int a=3;

  fun(a);

  d+=a++:

  printf(”%d\n”,d);

  }

  A)8,12 B)9,13 C)8,4 D)9,5

  答案:C

  評析:本題執(zhí)行過程如下:首先調(diào)用fun函數(shù),使得實(shí)參a的值3傳遞給形參p,得到局部變量d=8,打印出局部變量d的值8;返回主函數(shù)執(zhí)行“d+=a++”,此處的d為全局變量,所以d=1+3=4(由于本題是值傳遞,所以在函數(shù)fun中對p值的改變并不能引起a的改變),故本題的輸出是8,4。

  (27)已知下面的程序段,正確的判斷是_________。

  #define A 3

  #define B(A)((_A+1)‘a)

  int a=3:

  ……

  X=3*(A+B(7));

  A)程序錯誤,不允許嵌套定義 B)X=93

  C)X=8l D)程序錯誤,宏定義不允許有參數(shù)

  答案:C

  評析:本題的宏定義是合法的,宏定義展開為3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。

  (28)定義int*swap()指的是_______。

  A)一個返回整型值的函數(shù)swap()

  B)一個返回指向整型值指針的函數(shù)swap()

  C)一個指向函數(shù)swap()的指針,函數(shù)返回一個整型值

  D)以上說法均錯

  答案:B

  評析:一個函數(shù)可以帶回一個整型值、字符值、實(shí)型值等,但也可以帶回指針型數(shù)據(jù),即地址。本題的定義中,包括括號和·號,由于f)優(yōu)先級高于t。故它是一個返回整型指針的函數(shù)。

  (29)以下程序段的輸出結(jié)果是__________。

  main()

  { char s1[10],s2[10],s3[10];

  scanf(”%s”,s1);gets(s2);gets(s3);

  puts(s 1);puts(s2);puts(s3);

  }

  輸入數(shù)據(jù)如下: (此處代表回車符)

  aaa

  bbb

  A)aaa B)aaa C)aaa\0bbb\0 D)aaabbb

  bbb

  bbb

  答案:B

  評析:scanf是標(biāo)準(zhǔn)輸入函數(shù),在輸入字符串a(chǎn)aa時,實(shí)際的內(nèi)容為“aaa\0”,“\0”是由系統(tǒng)自動加入的;gets的功能是從終端讀入一行字符,即一直讀到換行符為止,并由系統(tǒng)自動以“\0”代替換行符。

  (30)下述函數(shù)功能是________。

  Int fun(char*x)

  { char*y=x;

  while(*y++);

  return y-x-l;

  }

  A)求字符串的長度 B)求字符串存放的位置

  C)比較兩個字符串的大小 D)將字符串x連接到字符串y后面

  答案:A

  評析:在函數(shù)體內(nèi)定義一字符型指針并指向形參,然后遍歷其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的長度。

  (31)以下程序的輸出結(jié)果是_________。

  main()

  { char str[12]={‘s’,‘t’,‘r’,‘i’,‘n’,‘ g’};

  printf(”%d\n”,strlen(str));

  }

  A)6 B)7 C)ll D)12

  答案:A

  評析:在c語言中,字符串的長度是其首字符到NULL(不含)字符的總字符個數(shù)。本題定義字符數(shù)組str的同時,對第7個元素,由系統(tǒng)自動添加上“\0”,故字符串的長度為6。

  (32)請讀程序段:

  char str[]=”ABCD”,*p=str;

  printf(”%d\n”,*(p+4));

  程序段的輸出結(jié)果是_________。

  A)68 B)0

  C)字符‘D’的地址 D)不確定的值

  答案:B

  評析:在對字符數(shù)組賦字符串值時,系統(tǒng)會自動在字符串的末尾加上一個字符串結(jié)束標(biāo)志“\0”,故指向字符數(shù)組的指針p的+(p+4)的值為“\0”。由于“\0”的編碼值就是0,所以本題輸出為0。

  (33)若有定義:int a[4][10];,則以下選項(xiàng)中對數(shù)組元素a[i][j]引用錯誤的是________。

  (0<=i<4,0<=j<10)

  A)*(&a[O][O]+10*i+j) B)*(a+i)+j

  C)*(*(a+i)+j) D)*(a[i]+j)

  答案:B

  評析:本題中選項(xiàng)B是錯誤的引用,*(a+i)+j只代表了a[i][i]的地址。

  (34)設(shè)有以下語句:

  char strl[]=”string”,str2[8],。str3,。str4=”strin∥;

  則__________不是對庫函數(shù)的正確調(diào)用。

  A)strcpy(strl,”HELLOl”); B)strcpy(str2,”HELL02”);

  C)strcpy(str3,”HELL03”); D)strcpy(str4,”HELL04”);

  答案:C

  評析:c語言中:sgcpy(stl,st2);,其兩個參數(shù)均為字符指針或字符數(shù)組,選項(xiàng)c中的目的串指針str3沒有指向具體有效的存儲單元,故是錯誤的調(diào)用。

  (35)請讀程序:

  #include

  #include

  main()

  { char*sl=”AbCdEf”,*s2=”aB”;

  s1++;s2++;

  printf(”%d\n”,strcmp(s 1,s2));

  }

  上面程序的輸出結(jié)果是___________。

  A)正數(shù) B)負(fù)數(shù) C)零 D)不確定的值

  答案:A

  評析:函數(shù)strcmp的功能是比較字符串s1和s2,如果sl>s2,則返回個正數(shù);如果sls2,所以函數(shù)的值為正數(shù)。

  (36)下面程序的輸出是_________。

  char s[]=”ABcD”;

  main()

  { char*p;

  for(p=s;p

  printf(”%s\n”,p);

  }

  A)ABCD B)A C)D D)ABCD

  BCD B C ABC

  CD C B AB

  D D A A

  答案:A

  評析:在第一次執(zhí)行for循環(huán)時,字符數(shù)組的首地址賦給了指針變量p,使得指針變量p指向了s的首地址,輸出p所指向的字符串;第二次執(zhí)行for循環(huán)時,p值增加1,p指向了s的第二個元素輸出BCD;第三次輸出CD;第四次輸出D;直到p指向字符串的結(jié)束字符“\0”,for循環(huán)終止執(zhí)行。

  (37)以下程序輸出的結(jié)果為__________。

  main()

  { char* alpha[6]={“ABCD”,EFGH”,”IJKL”,”MNOP”,”QRST”,”UVwX”};

  char**p;

  int i:

  p=alpha;

  for(I=0;i<4;i++)

  printf(”%s”,p[I]);

  }

  A)ABCDEFGHIJKL B)ABCD

  C)ABCDEFGHIJKLMNOP D)AEIM

  答案:C

  評析:alpha[O]指向“ABCD”的首地址;alpha[1]指向“EFGH”的首地址;alpha[2]指向“IJKL”的首地址,依此類推。當(dāng)執(zhí)行p=alpha后,p指向指針數(shù)組alpha的首地址。for循環(huán)中輸出了4個字符串。

  (38)下面程序的輸出結(jié)果是_________。

  #include

  main()

  { char*p[]={”B00L”,”0PK”,”H”,”SP”};

  int i:

  for(i=3;i>=0;i–,i–)

  printf(“%c”,*p[i]);

  printf(”\n”);

  }

  A)SO B)SP C)SPOPK D)SHOB

  答案:A

  評析:p[0]存放的是“BOOL\0”的首地址;p[1]存放的是“OPK\0”的首址等。

  在printf語句中輸出的+p[I]表示p[i]字符串的第一個字符。在for循環(huán)中,i的初值為3,那么輸出的第一個字符為“s”,接著兩次i–,則輸出的值為+p[1],即字符“0”,所以本題的輸出為SO。

  (39)以下程序的輸出結(jié)果是_________。

  #include

  void prt(int*x,int*y,int*z)

  { printf(”%d,%d,%d\n”,++*x,++*y*(z++));}

  int a=10,b=40,c=20;

  main()

  { prt(&a,&b&C);

  prt(&a,&b,&C);

  }

  A)ll,42,3l B)ll,41,20 C)1l,21,40 D)11,41,2l

  12,22,41 12,42,20 11,2l,41 12,42,22

  答案:B

  評析:由于實(shí)參傳送的是變量的地址,所以對形參指針?biāo)赶虻膯卧獌?nèi)容的改變,即對實(shí)參內(nèi)容的改變。

  (40)若一個外部變量的定義形式為static int x;,那么,其中static的作用應(yīng)該是_______。

  A)將變量存儲在靜態(tài)存儲區(qū)

  B)使變量x可以由系統(tǒng)自動初始化

  C)使x只能在本文件內(nèi)引用

  D)使x的值可以永久保留

  答案:C

  評析:事實(shí)上,無論有無static修飾,外部變量都具有A、B和c三種特性。作為一種修飾,static僅是限制此類型外部變量的引用范圍:只能在定義它的文件范圍內(nèi)使用。

  (41)以下程序的輸出結(jié)果是________。

  #include

  #define SQR(x)x*x

  main()

  { int a,k=3;

  a=++SQR(k+1);

  printf(”%d\n”,a);

  }

  A)8 B)9 C)17 D)20

  答案:B

  評析:本題宏替換中遇到形參x以實(shí)參k+l代替,其它字符不變。sQR(k+1)展開后應(yīng)為字符串k+l*k+l。

  (42)下面是對宏定義的描述,不正確的是_______。

  A)宏不存在類型問題,宏名無類型,它的參數(shù)也無類型

  B)宏替換不占用運(yùn)行時間

  C)宏替換時先求出實(shí)參表達(dá)式的值,然后代入形參運(yùn)算求值

  D)宏替換只不過是字符替代而已

  答案:C

  評析:宏替換實(shí)質(zhì)上就是字符替代,它不可能進(jìn)行計算,故c錯誤。帶參數(shù)的宏與函數(shù)相比,宏在程序編譯之前已經(jīng)將代碼替換到程序內(nèi),執(zhí)行時不會產(chǎn)生類似于函數(shù)調(diào)用的問題,可以說不占用運(yùn)行時間。

  (43)以下程序(程序左邊的數(shù)字為附加的行號)________。

  1#include

  2#include

  3main()

  4{char s[]=”string”;

  5 puts(s);

  6 strcpy(s,”hello”);

  7 printf(”%3s\n”,s);}

  A)沒有錯 B)第l行有錯 C)第6行有錯 D)第7行有錯

  答案:B

  評析:字符串復(fù)制函數(shù)strcpy包含在頭文件string.h中,因此,程序中的第l行文件包含命令是錯誤的。

  (44)若有如下說明,則__________的敘述是正確的。

  struct st

  { int a;

  int b[2l;

  }a;

  A)結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名,定義是非法的

  B)程序只在執(zhí)行到該定義時才為結(jié)構(gòu)體st分配存儲單元

  C)程序運(yùn)行時為結(jié)構(gòu)體st分配6個字節(jié)存儲單元

  D)類型名struct st可以通過extern關(guān)鍵字提前引用(即引用在前,說明在后)

  答案:D

  評析:結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名是合法的定義,引用成員a的方法是a.a,變量a處于不同的“層次”上,系統(tǒng)完全能夠分清。st是一個結(jié)構(gòu)體名,不會為結(jié)構(gòu)體名分配存儲空間,應(yīng)該是在運(yùn)行時為結(jié)構(gòu)體變量a分配6個字節(jié)的存儲單元,故選項(xiàng)B和選項(xiàng)C錯誤。

  (45)若有以下結(jié)構(gòu)體定義,則________是正確的引用或定義。

  struct example

  { int x;

  int y;

  }v1;

  A)example.x=10 B)example v2.x=10

  C)struct v2;v2.x=lO D)struct example v2={10};

  答案:D

  評析:在定義結(jié)構(gòu)體變量時,不能只用結(jié)構(gòu)體名example或關(guān)鍵字strum進(jìn)行定義,必需要用結(jié)構(gòu)體類型名struct example定義,在引用結(jié)構(gòu)體成員變量時,需要用結(jié)構(gòu)體變量名進(jìn)行引用,所以選D。

  (46)下列程序的執(zhí)行結(jié)果是_________。

  #include

  union un

  { int i;

  char c[21;

  };

  void main()

  { union un x;

  x.c[0]=10:

  x.c[1]=1:

  printf(“\n%d”,x.i);

  }

  A)266 B)ll C)265 D)138

  答案:A

  評析:由于本題定義的是共用體,所以成員表列中的整型變量x與字符數(shù)組c共占用同一個存儲單元,且此存儲單元為2個字節(jié),通常c[O]位于低字節(jié),c[1]位于高字節(jié),所以x.i的值為266。

  (47)已知形成鏈表的存儲結(jié)構(gòu)如下圖所示,則下述類型描述中的空白處應(yīng)填_______。

  struct link

  Datanext{ char data;

  ___________

  }node;

  A)struct link next B)link*next

  C)struct next link D)struct link*next

  答案:D

  評析:在單向鏈表中,由于每個結(jié)點(diǎn)需要存儲下一個結(jié)點(diǎn)的地址,且下一個結(jié)點(diǎn)的數(shù)據(jù)類型與前一個結(jié)點(diǎn)的數(shù)據(jù)類型完全相同,故應(yīng)為struct link*next。

  (48)已知小寫字母a的ASCII碼為97,大寫字母A的ASCII.碼為65,以下程序的結(jié)果是__________。

  main()

  { unsigned int a=32,b=66;

  printf(“%c\n”,atb);

  }

  A)66 B)98 C)b D)B

  答案:C

  評析:位運(yùn)算符“l”的作用是按位或,即兩個二進(jìn)制數(shù)的相應(yīng)位中只要有一個為1,該位的結(jié)果值為l。最后以字符型輸出, 98對應(yīng)的字符“b”。

  (49)C語言庫函數(shù)龜ets(str,n,fp)的功能是_________。

  A)從fp指向的文件中讀取長度n的字符串存入str指向的內(nèi)存

  B)從fp指向的文件中讀取長度不超過n-l的字符串存入str指向的內(nèi)存

  C)從fp指向的文件中讀取n個字符串存/Xstr指向的內(nèi)存

  D)從str讀取至多n個字符到文件fp

  答案:B

  評析:fgets函數(shù)的作用是從指定的文件讀入一個字符串。fgets(str,n,fp);中的n為要求得到的字符的個數(shù),但只從fb指向的文件輸入n-1個字符,然后在最后加一個‘\O’字符,因此得到的字符串共有n個字符。

  (50)下述程序向文件輸出的結(jié)果是__________。

  #include

  void main()

  { FILE*fp=fopen(“TEST”,”wb”);

  fprintf(fp,”%d%5.0f%c%d”,58,76273.0,’-',2278);

  fclose(fp);

  }

  A)58 76273-2278 B)5876273。.000000-2278

  C)5876273-2278 D)因文件為二進(jìn)制文件而不可讀

  答案:C

  評析:fprintf函數(shù)工作時,多個數(shù)據(jù)間不會自動加分隔符,選項(xiàng)A錯誤;浮點(diǎn)數(shù)的輸出格式是“%5.0f”表明其小數(shù)部分輸出O位,即沒有輸出,所以選項(xiàng)B也是錯誤的。

  二、填空題(每空2分,共40分)

  請將每空的正確答案寫在【l】至【20】序號的橫線上,答在試卷上不得分。

  (1)對于長度為n的順序存儲的線性表,當(dāng)隨機(jī)插入和刪除一個元素時,需平均移動元素 的個數(shù)為 【l】 。

  答案:【1】n/2

  評析:刪除一個元素,平均移動的元素個數(shù)為(n-l+n-2+……+0)n=(n-1)/2;插入一個元素,平均移動元素個數(shù)為(n+n-l+n-2+……+1)n=(n+1)/2;所以總體平均移動元素個數(shù)為n/2。

  (2)注釋說明了程序的功能,它分為 【2】 注釋和功能性注釋。

  答案:【2】序言性

  評析:注釋一般分為序言性注釋和功能性注釋。

  (3)軟件測試中路徑覆蓋測試是整個測試的基礎(chǔ),它是對軟件 【3】 進(jìn)行測試。

  答案:【3】結(jié)構(gòu)

  評析:路徑測試是白盒測試方法中的一種,它要求對程序中的每條路徑最少檢查一次,目的是對軟件的結(jié)構(gòu)進(jìn)行測試。

  (4)數(shù)據(jù)庫技術(shù)的主要特點(diǎn)為數(shù)據(jù)的集成性、數(shù)據(jù)的高 【4】 和低冗余性、數(shù)據(jù)獨(dú)立性和數(shù)據(jù)統(tǒng)一管理與控制。

  答案:【4】共享性

  評析:數(shù)據(jù)庫技術(shù)的主要特點(diǎn)有以下幾個方面:數(shù)據(jù)的集成性,數(shù)據(jù)的高共享性與低冗余性,數(shù)據(jù)韻獨(dú)立性,數(shù)據(jù)統(tǒng)一管理與控制。

  (5)數(shù)據(jù)元素之間 【5】 的整體稱為邏輯結(jié)構(gòu)。

  答案:【5】邏輯關(guān)系

  評析:數(shù)據(jù)元素之間邏輯關(guān)系的整體稱為邏輯結(jié)構(gòu)。數(shù)據(jù)的邏輯結(jié)構(gòu)就是數(shù)據(jù)的組織形式。

  (6)若有定義int m=5,y=2,則執(zhí)行表達(dá)式y(tǒng)+=y-=m*=y后,y的值為 【6】 。

  答案:【6】.16

  評析:將賦值運(yùn)算符右側(cè)的“表達(dá)式”的值賦給左側(cè)的變量,并且賦值運(yùn)算符按照“白右而左”的結(jié)合順序,本題表達(dá)式應(yīng)先算m的值為10,再運(yùn)算y的值為8,最后計算y=y+(-8)=-8+(-8)=-16。

  (7)若x和y都是double型變量,]ix的初值為3.0,y的初值為2.0,則表達(dá)式pow(y,fabs(x))的值為 【7】 。

  答案:【7】8.000000

  評析: fabs函數(shù)功能是求x的絕對值,計算結(jié)果為double型。pow功能是計算x的y次方的值,計算結(jié)果同樣為double型。所以本題表達(dá)式相當(dāng)于2.0的3.0次方,結(jié)果為8.000000。

  (8)設(shè)有char a,b;,若要通過a&b運(yùn)算屏蔽掉a中的其它位,只保留第2位和第8位(右起為第1位),則b的二進(jìn)制是 【8】 。

  答案:【8】10000010

  評析:運(yùn)算“&”的規(guī)則是只有當(dāng)兩個相應(yīng)的二進(jìn)制位都為1時,該位的結(jié)果才為1。要保留第2、8位,只要將其與二進(jìn)制數(shù)10000010相與。

  (9)下列程序執(zhí)行后輸出的結(jié)果是 【9】 。

  f(int a)

  { static c=0;

  C=a+C++:

  return(C);

  }

  main()

  { int a=2,i,k;

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

  k=f(a++);

  printf(”%d\n”,k);

  }

  答案:【9】7

  評析:在程序執(zhí)行時,static變量僅初始化一次,下次使用時將使用上次保存的值。

  (10)下面程序執(zhí)行后輸出的結(jié)果是 【10】 。

  int m=13:

  int fun(int x,int y)

  { int m=3;

  return(x*y-m);

  }

  main()

  { int a=7,b=5;

  printf(”%d\n”,fun(a,b)/m);

  }

  答案:【10】2

  評析:本題變量m既是外部變量(值是13),又是fun函數(shù)的局部變量(值為3)。函數(shù)fun(x*y-m)的值為7*5-3=32,在main函數(shù)中,ftm(a,b)/m中的m應(yīng)取外部變量的值13,因此輸出2。

  (11)下列程序執(zhí)行后輸出的結(jié)果是 【11】 。

  main()

  { nt arr[10],i,k=0;

  for(I=0;i

  for(I=1;i<4;i++)k+=arr[i]+i;

  printf(”%d\n”,k);

  }

  答案:【11】12

  評析:本題的第一個fur循環(huán)用于給數(shù)組arr賦初值,第二個for循環(huán)用于求和運(yùn)算。由于第二個fur循環(huán)初始值為1,而循環(huán)條件為i<4,所以求的是art[1]到arr[3]及i的和,所以輸出結(jié)果為12。

  (12)下列程序執(zhí)行后輸出的結(jié)果是 【12】 。

  struct s

  {int x,y;}data[2]={10,100,20,200};

  main()

  {

  struct s*p=data;

  printf(”%d\n”,++(p->x));

  }

  答案:【12】11

  評析:程序中結(jié)構(gòu)體數(shù)組data首地址(即&data[0])賦值給結(jié)構(gòu)體指針變量p,++(p->x)表示先將p所指向的結(jié)構(gòu)體變量的成員x值加1,然后將此x(即data[01.x]輸出。

  (13)下面程序有兩個printf語句,如果第一個printf語句輸出的是194,則第二個print語句的輸出結(jié)果是 【13】 。

  main()

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

  p=a;

  printf(”%X\n”,p);

  printf(”%x\n”,p+9);

  }

  答案:【13】la6

  評析:對于指針變量的運(yùn)算,就是對地址的運(yùn)算。本題中由于指針指向的是整型變量,所以,使指針變量移動9個位置也就是移動18個字節(jié)。注意,本題是以16進(jìn)制輸出的。

  (14)以下函數(shù)的功能是計算s=l+l/2!+l/3!+…+l/n!,請?zhí)羁?

  double fun(int n)

  { double s=O.O,fac=1.O;

  int i,k=1;

  for(i=l;i<=n;i++)

  { 【14】 ;

  fat=fat/k;

  s=s+fac;

  }

  }

  答案:【14】k=k*i

  評析:本題中通過for循環(huán)求s表達(dá)式中每一項(xiàng)的和,表達(dá)式“fac=fac/k;”求的是每一項(xiàng)的值,所以k的值應(yīng)為n!,在求n!的時候,可以用上次循環(huán)階乘的值乘i,就可以直接得此次n!,故本題填k=k*i。

  (15)下面程序的運(yùn)行結(jié)果是 【15】 。

  main()

  { unsigned a=0112,x;

  x=a>>3:

  printf(”x=%o”,x);

  }

  答案:【15】x=11

  評析:在對無符號數(shù)的右移是高位補(bǔ)0。

  (16)函數(shù)delete(s,i,n)是作用是從字符串s中刪除從第i個字符開始的n個字符,請?zhí)羁铡?/p>

  void delete(char s[],int i,int n)

  { int j,k,length=O;

  while(s[1ength])

  【16】 ;

  –i:

  j=i;

  }

  if( 【17】 )

  { k=i+n;

  if(i+n<=length)

  while(k

  s[j++]=s[k++];

  s[j]=‘\0’;

  }

  答案:【16】length++

  【17】i

  評析:第一個循環(huán)極有可能是計算串的長度,在i<=length時字符才被刪除,被刪除的是從第i個到第i+n或最后一個間的所有字符。刪除前,應(yīng)判斷i<=length。由于已經(jīng)進(jìn)行了一i運(yùn)算,故實(shí)際應(yīng)填入i

  (17)下述函數(shù)統(tǒng)計一個字符串中的單詞個數(shù),單詞是指處在空格之間的字符序列,請?zhí)羁铡?/p>

  int word(char*s)

  { int num=O,flag=O;

  while(*s)

  { if( 【18】 ==”)flag=O;

  else if( 【19】 ){flag=1;num++}

  }

  return 【20】 ;

  }

  答案:【18】*s++

  【19】flag==O或*(s-1)==”

  【20】num

  評析:在統(tǒng)計字符串單詞個數(shù)的算法中,本題的flag是為了記錄一個單詞是否結(jié)束。第18空應(yīng)填*s++;如果某個字符不是空格,則必需判斷它是否是單詞,如是,則使得flag的標(biāo)志為1,num的值加1。本題判斷方法是:先判斷s所指向的字符是否為空格,如果是則使得flag=O,否則判斷前一個字符是否是空格,如果是則說明這個字符是一個單詞的開始,將flag標(biāo)志為1,num的值加1,如果不是,則不必記錄。故第19空應(yīng)flag==O或*(s-1)==”;最后一個空格需填寫的是返回的單詞的個數(shù),即num。

【C語言筆試題及答案】相關(guān)文章:

C語言試題及答案07-26

C語言模擬試題及答案09-19

C語言模擬試題及答案06-17

C語言測試試題及答案08-02

C語言筆試試題及答案08-03

C語言測試題及答案07-03

C語言考前練習(xí)試題及答案09-16

C語言測試題及答案解析11-04

常用C語言測試題及答案09-12