精品国产一级毛片大全,毛片一级在线,毛片免费观看的视频在线,午夜毛片福利

我要投稿 投訴建議

C語言筆試題目及答案

時(shí)間:2023-03-26 01:46:25 面試試題 我要投稿
  • 相關(guān)推薦

C語言筆試題目及答案

  以下分享的C語言筆試題,是計(jì)算機(jī)專業(yè)求職者應(yīng)聘時(shí),經(jīng)常會(huì)考的題目,中國人才網(wǎng)小編建議各位計(jì)算機(jī)專業(yè)的朋友認(rèn)真了解下,以備以后的求職時(shí)應(yīng)用。

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

C語言筆試題目及答案

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

  (1)算法的空間復(fù)雜度是指________。

  A)算法程序的長度 B)算法程序中的指令條數(shù)

  C)算法程序所占的存儲(chǔ)空間 D)算法執(zhí)行過程中所需要的存儲(chǔ)空間

  答案:D

  評(píng)析:一個(gè)算法的空間復(fù)雜度,一般是指執(zhí)行這個(gè)算法所需的內(nèi)存空間。

  一個(gè)算法所占用的存儲(chǔ)空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲(chǔ)空間以及算法執(zhí)行過程中所需要的額外空間。

  (2)下列關(guān)于棧的敘述中正確的是________。

  A)在棧中只能插入數(shù)據(jù) B)在棧中只能刪除數(shù)據(jù)

  C)棧是先進(jìn)先出的線性表 D)棧是先進(jìn)后出的線性表

  答案:D

  評(píng)析:棧是限定在一端進(jìn)行插入與刪除的線性表。

  棧是按照“先進(jìn)后出”的或“后進(jìn)先出”的原則組織數(shù)據(jù)的,因此,棧也被稱為“先進(jìn)后出”表或“后進(jìn)先出”表。

  (3)在深度為5的滿二叉樹中,葉子結(jié)點(diǎn)的個(gè)數(shù)為________。

  A)32 B)31 C)16 D)15

  答案:C

  評(píng)析:所謂滿二叉樹是指除最后一層外,每層上的所有結(jié)點(diǎn)都有兩個(gè)子結(jié)點(diǎn)。也就是說,在滿二叉樹中,每一層上的結(jié)點(diǎn)數(shù)都達(dá)到最大值,即在滿二叉樹的第K層上有2K-1個(gè)結(jié)點(diǎn),且深度為m的滿二叉樹有2m個(gè)結(jié)點(diǎn)。

  在滿二叉樹中,最后一層的結(jié)點(diǎn)個(gè)數(shù)就是葉子結(jié)點(diǎn)的個(gè)數(shù),本題中深度為5,故葉子結(jié)點(diǎn)數(shù)為25-1=24=16。

  (4)對建立良好的程序設(shè)計(jì)風(fēng)格,下面描述正確的是________。

  A)程序應(yīng)簡單、清晰、可讀性好 B)符號(hào)名的命名要符合語法

  C)充分考慮程序的執(zhí)行效率 D)程序的注釋可有可無

  答案:A

  評(píng)析:要形成良好的程序設(shè)計(jì)風(fēng)格,主要應(yīng)注重和考慮下述一些因素:符號(hào)名的命名應(yīng)具有一定的實(shí)際含義,以便于對程序功能的理解;正確的注釋能夠幫助讀者理解程序;程序編寫應(yīng)優(yōu)先考慮清晰性,除非對效率有特殊要求,程序編寫要做到清晰第一,效率第二。

  (5)下面對對象概念描述錯(cuò)誤的是________。

  A)任何對象都必須有繼承性 B)對象是屬性和方法的封裝體

  C)對象間的通訊靠消息傳遞 D)操作是對象的動(dòng)態(tài)性屬性

  答案:A

  評(píng)析:對象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實(shí)體有直接的對應(yīng)關(guān)系。對象之間通過傳遞消息互相聯(lián)系,以模擬現(xiàn)實(shí)世界中不同事物彼此之間的聯(lián)系。

  (6)下面不屬于軟件工程的3個(gè)要素的是________。

  A)512具 B)過程 C)方法 D)環(huán)境

  答案:D

  評(píng)析:軟件工程包括3個(gè)要素,即方法、工具和過程。

  (7)程序流程圖(PFD)中的箭頭代表的是________。

  A)數(shù)據(jù)流 B)控制流 C)調(diào)用關(guān)系 D)組成關(guān)系

  答案:B

  評(píng)析:程序流程圖(PFD)是一種傳統(tǒng)的、應(yīng)用廣泛的軟件過程設(shè)計(jì)表示工具,通常也稱為程序框圖,其箭頭代表的是控制流。

  (8)在數(shù)據(jù)管理技術(shù)的發(fā)展過程中,經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫系統(tǒng)階 段。其中數(shù)據(jù)獨(dú)立性最高的階段是________。

  A)數(shù)據(jù)庫系統(tǒng) B)文件系統(tǒng) C)人工管理 D)數(shù)據(jù)項(xiàng)管理

  答案:A

  評(píng)析:在數(shù)據(jù)管理技術(shù)的發(fā)展過程中,經(jīng)歷了人工管理階段、文件系統(tǒng)階段和數(shù)據(jù)庫系統(tǒng)階段。其中數(shù)據(jù)獨(dú)立性最高的階段是數(shù)據(jù)庫系統(tǒng)。

  (9)用樹形結(jié)構(gòu)來表示實(shí)體之間聯(lián)系的模型稱為________。

  A)關(guān)系模型 B)層次模型 C)網(wǎng)狀模型 D)數(shù)據(jù)模型

  答案:B

  評(píng)析:層次模型是最早發(fā)展出來的數(shù)據(jù)庫模型。它的基本結(jié)構(gòu)是樹形結(jié)構(gòu),這種結(jié)構(gòu)方式在現(xiàn)實(shí)世界中很普遍,如家族結(jié)構(gòu)、行政組織機(jī)構(gòu),它們自頂向下、層次分明。

  (10)關(guān)系數(shù)據(jù)庫管理系統(tǒng)能實(shí)現(xiàn)的專門關(guān)系運(yùn)算包括________。

  A)排序、索引、統(tǒng)計(jì) B)選擇、投影、連接

  C)關(guān)聯(lián)、更新、排序 D)顯示、打印、制表

  答案:B

  評(píng)析:關(guān)系數(shù)據(jù)庫管理系統(tǒng)能實(shí)現(xiàn)的專門關(guān)系運(yùn)算,包括選擇運(yùn)算、投影運(yùn)算、連接運(yùn)算。

  (11)下列語句中符合C語言語法的賦值語句是________。

  A)a–7+b+c–a+7 B)a=a+7

  C)a=7+b,b++,a+7; D)a=7+b,c=a十7;

  答案:D

  評(píng)析:由于賦值語句是由賦值表達(dá)式加分號(hào)構(gòu)成,所以選項(xiàng)A、B均不是合法的賦值語句;選項(xiàng)c中,存在兩種運(yùn)算符:逗號(hào)運(yùn)算符和賦值運(yùn)算符,其中賦值運(yùn)算符的優(yōu)先級(jí)高,選項(xiàng)c也不是。

  (12)下面程序

  main()

  { int y=9;

  for(;y>O;y–i){

  if (y%3==O)

  { printf(“%d”,–y);

  continuei

  }

  }

  }

  的輸出是________。

  A)741 B)852 C)963 D)875421

  答案:B

  評(píng)析:“%”是求余運(yùn)算符,所以if判斷語句中實(shí)際是指出只有當(dāng)y可以被3整除時(shí)方可以繼續(xù);–y是先進(jìn)行y的自減運(yùn)算,再使用y值。所以,最后的打印結(jié)果應(yīng)當(dāng)為“852”。

  (13)下列四個(gè)敘述中,錯(cuò)誤的是________。

  A)C語言中的關(guān)鍵字必須小寫

  B)c語言中的標(biāo)識(shí)符必須全部由字母組成

  C)c語言不提供輸入輸出語句

  D)C語言中的注釋行可以出現(xiàn)在程序的任何位置

  答案:B

  評(píng)析:c語言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母或下劃線。

  (14)下面程序

  main()

  {

  int a=-l,b=4,k;

  k=(a++<=0)&&(!(b一一<=O));

  printf(“%d%d%d\n”,k,a,b);

  }

  的輸出是________。

  A)0 0 3 B)0 12 C)1 0 3 D)1 1 2

  答案:C

  評(píng)析:a++是先使用a值再將a的值加1,b–是先使用b的值再將b的值減1,所以題中的邏輯運(yùn)算表達(dá)式的值應(yīng)當(dāng)為真,即為1,而經(jīng)過運(yùn)算后,a和b的值已經(jīng)分別變成0和3了。

  (15)以下敘述中正確的是________。

  A)預(yù)處理是指完成宏替換和文件包含中指定文件的調(diào)用

  B)預(yù)處理也是C語句

  C)C源程序中,凡是行首以掙標(biāo)識(shí)的控制行都是預(yù)處理指令

  D)預(yù)處理就是完成c編譯程序?qū)源程序的第一遍掃描,為編譯的詞法分析和語法分析作準(zhǔn)備

  答案:C

  評(píng)析:預(yù)處理功能主要有以下三種:宏定義、文件包含和條件編譯,所以A不正確。預(yù)處理不是c語句,所以B不正確。預(yù)處理命令是由ANSI c統(tǒng)一規(guī)定的,編譯程序不能識(shí)別它們,D也不正確。

  (16)下面的程序片段

  y=-l;

  If(x!=0)

  If(x>0) y=1;else y=0;

  所表示的數(shù)學(xué)函數(shù)關(guān)系是_________.

  -1(x<O) l (x<O)

  A)y= 0 (x=0) B)y= -1(x=0)

  1 (x>0) 0 (x>0)

  0 (x<0) -1 (x<0)

  C)y= -1(x=O) D)y= l (x=O)

  1 (x>O) 0 (x>O)

  答案:C

  評(píng)析:本題的考查點(diǎn)是根據(jù)程序?qū)懗鰯?shù)學(xué)函數(shù)關(guān)系。

  題中的兩個(gè)判斷語句實(shí)際上指出了y取值的條件,即是當(dāng)x大于零時(shí)y取l;當(dāng)x小于零時(shí)y取0;當(dāng)x等于零時(shí)y值不變,為-1。

  (17)下面的程序

  main()

  { int x=3,y=O,z=O;

  if(x=y+z)printf(“* * * *”);

  else printf(”####”);

  }

  _________。

  A)有語法錯(cuò)誤不能通過編譯

  B)輸出* * * *。

  C)可以通過編譯,但是不能通過連接,因而不能運(yùn)行

  D)輸出####

  答案:D

  評(píng)析:本題的考查點(diǎn)是運(yùn)算符在表達(dá)式中的處理原則。

  本題中把y+z的值賦給x,由于y和z都等于0,所以x的值也為0,表達(dá)式值為false,輸出撐撐撐撐。if語句中if后面的表達(dá)式一般為邏輯或關(guān)系表達(dá)式,但也可以是任意的數(shù)值類型。

  (18)在c語言中,合法的長整型常數(shù)是________。

  A)OL B)4962710 C)04312765 D)0xa34b7fe

  答案:A

  評(píng)析:在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是long int型常量。

  (19)下面函數(shù)

  int funl(char*x)

  { char*y=x;

  while(*y++);

  return(y-x-1);

  }

  的功能是__________。

  A)求字符串的長度 B)比較兩個(gè)字符串的大小

  C)將字符串x復(fù)制到字符串y D)將字符串x連接到字符串y后面

  答案:A

  評(píng)折:本題的考查點(diǎn)是while()循環(huán)語句。

  本題首先要注意的是對*y++的運(yùn)算,由于++和*為同一優(yōu)先級(jí)別,且結(jié)合方向?yàn)樽杂蚁蜃,因此它相?dāng)于*(y++)。由于++在y的右側(cè),是“后加”,因此先對y的原值進(jìn)行*運(yùn)算,然后使y的值改變。

  (20)設(shè)int i=2j=l,k=3,則表達(dá)式i&&(i+j)&k︱i+j的值是________。

  A)O B)2 C)l D)3

  答案:C

  評(píng)析:本題表達(dá)式中優(yōu)先級(jí)順序從高到低為括號(hào)、+、&、︱、&&。

  (21)已知字母A的ASCII碼為十進(jìn)制的65,下面程序

  main()

  { char chl,ch2;

  chl=’A’+’5’-’3’:

  ch2=’A’+’6’-’3’:

  printf(”%d,%Cn”,chl,ch2);

  }

  的輸出_________。

  A)67,D B)B,C C)C,D D)不確定的值

  答案:A

  評(píng)析:由于字符“5”和“3”的ASCII碼相差為2,所以ch1過運(yùn)算后的值應(yīng)為65+2=67;同理,ch2經(jīng)過運(yùn)算后的值應(yīng)為65+3=68,即是字符“D”。

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

  #include

  main()

  {

  int a,b,d=24l:

  a=d/l00%9;

  b=(-1)&&(-1);

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

  }

  A)6,1 B)2,1 C)6,0 D)2,0

  答案:B

  評(píng)析:第一個(gè)表達(dá)式中,運(yùn)算的方向是從左至右,所以a的值為2;第二個(gè)表達(dá)式中,等式右邊是一個(gè)邏輯表達(dá)式,由于結(jié)果為真,所以表達(dá)式的值為l,即b為1。

  (23)下列選項(xiàng)中非法的表達(dá)式是________。

  A)0<=x<100 B)I=j==0 C)(char)(65+3) D)x-t-l=x+l

  答案:D

  評(píng)析:值表達(dá)式的左側(cè)不能為常量或表達(dá)式,所以D是非法的表達(dá)式。

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

  #include

  main()

  {

  print刖%~n”,NULL);

  }

  A)不確定的(因變量無定義) B)0

  C)-l D)l

  答案:B

  評(píng)析:NULL在c編譯器中是一個(gè)值為0的常量,它的定義在頭文件“stdio.h”中,本題的程序在一開始就包含了這個(gè)頭文件’,所以,在打印的時(shí)候,將打印出0。

  (25)在下面的語句中,賦值語句錯(cuò)誤的是________。

  A)a=(b=(c=2,d=3)); B)i++:

  C)a–a/b=2; D)a=a<a+1:

  答案:C

  評(píng)析:c語言中的賦值號(hào)“=”是一個(gè)運(yùn)算符;②賦值語句是由賦值表達(dá)式加上一個(gè)分號(hào)構(gòu)成。賦值表達(dá)式的左側(cè)不能為常量或表達(dá)式。

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

  main()

  { int k=4,m=1,p;

  p=func(k,m);printf(“%d,”,p);

  p=func(k,m);printf(”%d\n”,p);

  }

  func(int a,int b)

  { static int m:O,i=2;

  i+=m+l;m=i+a+b;

  return(m);

  }

  A)8,17 B)8,16 C)8,20 D)8.8

  答案:A

  評(píng)析:k和m的值帶入函數(shù)func中,第一次調(diào)用完func()后,其中m和i的值要保留,并在第二次調(diào)用時(shí)使用,這是因?yàn)閮烧叨际蔷植快o態(tài)變量。所以最后的結(jié)果是8和17。

  (27)以下程序調(diào)用findmax函數(shù)求數(shù)組中值最大的元素在數(shù)組中的下標(biāo),請選擇填空:

  #include

  findmax(int*s,int t,int*k)

  { int p;

  for(p=0,*k=p;p<t;p++)

  if(s[p]>s[*k])___________;

  }

  main()

  { int a[10],i,k;

  for(i=0;i<10;i++)scanf(”%d”,&a[I]);

  findmax(a,lO,&k);

  printf(”%d,%d\n”,k,a[k]);

  }

  A)k=p B)*k=p-s C)k=p—s D)*k=p

  答案:D

  評(píng)析:k是一個(gè)指針,它的值是一個(gè)地址,要通過它為主函數(shù)的變量改變數(shù)據(jù),必須使用*p,這樣就可以把一個(gè)下標(biāo)數(shù)賦給p指針指向的那個(gè)內(nèi)存單元,所以橫線處應(yīng)填入*k=p。

  (28)在執(zhí)行以下程序時(shí),為了使輸出結(jié)果為t=4,給a和b輸入的值應(yīng)該滿足的條件是_________。

  main()

  {

  int s,t,a,b;

  scanf(”%d%d”,&a,&b);

  s=l;t=I;

  if(a>O)s=s+1;

  if(a>b)t=s+t;

  else if(a==b)t=5;

  else t=20s:

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

  }

  A)a>b B)aa>b

  答案:C

  評(píng)析:要使輸出結(jié)果為t=4,必須要執(zhí)行else t=2*s;和if(a>b)t=s+t;語句。如果執(zhí)行if(a>b)t=s+t;語句,則條件為a>b,要求s=3,在該語句前面的語句中沒有條件可以滿足s=3;如果執(zhí)行else t=2*s;語句,則條件為aO)s=s+l;語句,所以應(yīng)滿足條件0<a<b。

  (29)以下函數(shù)調(diào)用語句中含有_________個(gè)實(shí)參。

  func((expl,exp2),(exp3,exp4,exp5));

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

  答案:B

  評(píng)析:實(shí)參可以是常量、變量或表達(dá)式,(expl,exp2)是逗號(hào)表達(dá)式,它的值是exp2的值;(exp3,exp4,exp5)是逗號(hào)表達(dá)式,它的值是exp5的值。所以該函數(shù)調(diào)用語句含有的實(shí)參個(gè)數(shù)是2,即:(expl,exp2)和(exp3,exp4,exp5)。

  (30)執(zhí)行以下程序后,輸出的結(jié)果是__________。

  main()

  {

  int y=10;

  do{y–;}while(–y);

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

  }

  A)一l B)l C)8 D)0

  答案:D

  評(píng)析:do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立,當(dāng)循環(huán)條件的值為0時(shí)循環(huán)結(jié)束。當(dāng)y=O時(shí)循環(huán)結(jié)束,printf(“%d\n”,y–);語句是先輸出y再自減,所以輸出結(jié)果為0。

  (31)在C語言中,要求運(yùn)算數(shù)必須是整型的運(yùn)算符是__________。

  A)% B)/ C)< D)!

  答案:A

  評(píng)析:題目的四個(gè)選項(xiàng)中,(B)(C)(D)都不要求運(yùn)算數(shù)必須為整數(shù),參與模運(yùn)算(%)的運(yùn)算數(shù)必須是整型數(shù)據(jù)。

  (32)c語言提供的合法的數(shù)據(jù)類型關(guān)鍵字是__________。

  A)DoubIe B)noat C)integer D)Char

  答案:B

  評(píng)析:選項(xiàng)A和D中第一個(gè)字母大寫,不正確;

  選項(xiàng)c是PASCAL中的整型關(guān)鍵字,不是c語言中的關(guān)鍵字。

  (33)設(shè)有以下定義:

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

  int(*ptr)[3]=a,*p=a[0];

  則下列能夠正確表示數(shù)組元素a[1][2]的表達(dá)式是___________。

  A)*((*ptr+1)[2]) B)*(*(p+5))

  C)(*ptr+1)+2 D)*(*(a+1)+2)

  答案:D

  評(píng)析:+(p+5)所指向的數(shù)組元素是a[1][2],所以B不對;ptr所指向的是一個(gè)含有三個(gè)元素的一維數(shù)組,所以A和C是錯(cuò)誤的。

  (34)若有以下說明:

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

  則值為6的表達(dá)式是__________。

  A)*p+6 B)*(p+6) C)*p+=5 D)p+5

  答案:C

  評(píng)析:選項(xiàng)A,*p+6,其值等于1+6=7;選項(xiàng)B,*(p+6),其值等于a[6]=7;選項(xiàng)c,*p+=5,其值等于*p=*p+5=l+5=6;選項(xiàng)D,p+5是個(gè)地址值。

  (35)下列程序的輸出結(jié)果是__________。

  fun()

  {

  static int x=5:

  if(x++>5)printtf(”%dft,x);

  else printf(”%d.’,)汁+);

  }

  mainO

  {

  fun();fun();

  }

  A)67 B)69 C)68 D)78

  答案:C

  評(píng)析:模塊的代碼開始運(yùn)行后,使用static語句聲明的變量會(huì)一直保持其值,直至該模塊復(fù)位或重新啟動(dòng)。在第1次調(diào)用fun函數(shù)時(shí),x的初值為5,if語句的條件不成立,執(zhí)行else printf(“%d”x++);語句,輸出6,執(zhí)行后x的值變?yōu)?,由于x是靜態(tài)局部變量,在函數(shù)調(diào)用結(jié)束后,它并不釋放,仍保留x=7。在第2次調(diào)用fun函數(shù)時(shí),if語句的條件成立,執(zhí)行print掣%∽x);語句,輸出8。

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

  main()

  {

  int m=Oxa,n=2;

  m+=n:

  printf(“”%x\n””,m);

  }

  A)C B)c C)99 D)2

  答案:A

  評(píng)析:格式控制符x表示數(shù)據(jù)按十六進(jìn)制形式輸出(不輸出前導(dǎo)符0x)。本題在執(zhí)行語句m十一n:后,m的值變?yōu)樽帜竎,又因?yàn)樵谳敵鯽-f時(shí),如果格式控制符用x,則以大寫字母輸出;如果用x,則以小寫字母輸出,故本題答案為A。

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

  #include

  main()

  {char*a=”abcdefghi”;int k;

  fun(a);puts(a);

  }

  fun(char *s)

  { intx,y;char c;

  for(x=O,y=strlen(s)-l;x<y;x++,y–)

  { C=S[y];s[y]=s[x];s[x]=c;}

  }

  A)ihgfedcba B)abcde電hi C)abcdedcba D)ihgfefghi

  答案:A

  評(píng)析:觀察子函數(shù)fun()可知,它是實(shí)現(xiàn)一個(gè)數(shù)組首末元素位置互相依次交換。聯(lián)系主函數(shù),可以看出,是對字符串中的元素依次進(jìn)行首末位置的對調(diào)。

  (38)設(shè)有如下函數(shù)定義,則輸出結(jié)果為_________。

  Char*fun(char*str)

  {

  char*p=str;

  while(*p)

  {if(*p>’d’)continue;

  p++;

  }

  return p;

  }

  main()

  {

  printF%s\n”,fun(”welcome!”));

  }

  A)welcome B)come! C)w D)程序進(jìn)入死循環(huán)

  答案:D

  評(píng)析:continue語句的作用是用于結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。由于‘w’>‘d’執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過p++;語句),還是繼續(xù)比較‘w’>‘d’,程序進(jìn)入死循環(huán)。

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

  main()

  { union{char i[2];

  int k:

  }r;

  r.i[0]=2;r.i[1]=0;

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

  }

  A)2 B)l C)0 D)不確定

  答案:A

  評(píng)析:根據(jù)共用體的定義可知:共用體r的成員k和成員i[2]是共用同一段內(nèi)存空間,所以,當(dāng)程序給r.i[0]賦值后,實(shí)際上,共用體成員k的值也確定了,為2。所以打印輸出的結(jié)果應(yīng)當(dāng)為2。

  (40)設(shè)p1和p2是指向同一個(gè)int型一維數(shù)組的指針變量,k為int型變量,則下列不能正確執(zhí)行的語句是_________。

  A)l(=*pl+*p2; B)p2=k; C)pl=p2; D)k=*pl*(*p2);

  答案:B

  評(píng)析:指針變量中只存放地址(指針),不要將一個(gè)整型量(或任何其他非地址類型的數(shù)據(jù))賦給一個(gè)指針變量,所以B是不正確的。

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

  #define f(x) X*X

  main()

  { int a=6,b=2,c;

  c=f(a)/f(b);

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

  }

  A)9 B)6 C)36 D)18

  答案:C

  評(píng)析:觀察程序段可知,對帶參數(shù)的宏的展開只是將語句中的宏名后面括號(hào)內(nèi)的實(shí)參字符串代替#define命令行中的形參。本題中c=f(a)/f(b)用#define f(x)X*X代替得c=f(6)/f(2),即c=6*6/2*2,結(jié)果為36。

  (42)若有以下定義:

  char s[20]=”programming”,*ps=s;

  則不能代表字符。的表達(dá)式是__________。

  A)ps+2 B)s[2] C)ps[2] D)ps+=2,*ps

  答案:A

  評(píng)析:ps+2就是s[21的地址,即存放字符。的地址、所以A是錯(cuò)誤的。

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

  main()

  { int i;

  for(i=1;i<6;i++)

  { if(i%2){printf(”∥);continue;}

  printf(”引’);

  }

  printf(”\n”);

  }

  A)#*#*# B)##### C)***** D)*#*#*

  答案:A

  評(píng)析:i從1到5循環(huán)5次,i為1時(shí),滿足條件,打印輸出“#”:i為2時(shí),條件為假,打印輸出“*”。也就是說,當(dāng)i為奇數(shù)時(shí),條件為真,程序打印輸出“#”,否則,輸出“*”。

  (44)有如下程序

  main()

  {

  int n=9:

  while(n>6)

  {

  n--;

  printf(”%d|.,n);

  }

  }

  該程序的輸出結(jié)果是__________。

  A)987 B)876 C)8765 D)9876

  答案:B

  評(píng)析:符合n>6的n只有7,8,9;所以循環(huán)次數(shù)為3。選項(xiàng)c、D可以排除。又因n在輸出之前要執(zhí)行n--,所以輸出結(jié)果只能是876。

  (45)下列程序是將一個(gè)十進(jìn)制正整數(shù)轉(zhuǎn)化為一個(gè)八進(jìn)制數(shù),在程序的空白處應(yīng)填入的語句是__________。

  #include

  main()

  {

  int I=9,a,b[10]={0};

  scanf(”%d”,&a);

  sub(a,b);

  for(;i>=O;i–)printf(”%d”,b[I]);

  }

  sub(int c,int d[])

  { int e,i=O;

  while(c!=0)

  {e=c%8;

  d[i]=e;

  __________;

  i++:

  }

  return;

  }

  A)c=e/8 B)C=C%8 C)C=C/8 D)c=e%8

  答案:C

  評(píng)析:本題主要考查了進(jìn)制轉(zhuǎn)換的除余取整法。本算法中,是先對數(shù)c除8取余作為轉(zhuǎn)換后的8進(jìn)制數(shù)的第l位,然后對c整除以8的商作同樣的操作,直到商為0為止,因此本題應(yīng)選c。

  (46)執(zhí)行下面的程序段

  int x=35;

  char z=’A’;

  int B:

  B=((x&15)&&(z<’a’));

  后,B的值為____________。

  A)0 B)1 C)2 D)3

  答案:B

  評(píng)析:從整個(gè)表達(dá)式來看是個(gè)邏輯表達(dá)式,而與運(yùn)算符“&&”的右邊的子表達(dá)式中由于z的值為“A”,而A的ASCII碼的值小于a的ASCII碼值,所以這個(gè)子表達(dá)式的值為真,即l;在與運(yùn)算符“&&”的左邊的子表達(dá)式是個(gè)基于位運(yùn)算的子表達(dá)式,將<的值與15做位與運(yùn)算,表達(dá)式值不為零,所以兩個(gè)子表達(dá)式的與值應(yīng)當(dāng)為1。

  (47)要為讀/寫操作打開一個(gè)字符文件,其正確的打開方式為__________。

  A)wr B)r+ C)rb+ D)rw

  答案:B

  評(píng)析:在c中可以通過fopen函數(shù)來打開一個(gè)文件,在該函數(shù)的第二個(gè)參數(shù)中指定其打開方式。要以讀寫方式打開文件可以用“r++”、“w+”、“a+”來表示,要打開二進(jìn)制文件,可以在打開方式中加上字母b,對于字符文件不要加b。

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

  #include

  main()

  {

  union

  {

  int k:

  chari[2];

  }*s,a;

  s=&a:

  s->i[0]=Ox39;s->I[l]=0×38;

  printf(”%x\n”,s->k);

  }

  A)3839 B)3938 C)380039 D)390038

  答案:A

  評(píng)析:在主函數(shù)定義了一個(gè)共用體變量a,及一個(gè)指向該變量的指針s。執(zhí)行s->i[0]=0×39;s->i[1]=0×38;,將分別共用體的第一字節(jié)及第二字節(jié)存入十六進(jìn)制數(shù)據(jù)0×39及0×38,由于在共用體中,變量共同占用存儲(chǔ)空間,在輸出s->k.時(shí),實(shí)際上就是輸出開始寫入的數(shù)據(jù),而對于PC機(jī),在存放int型數(shù)據(jù)時(shí),低位在前,高位在后,故本題輸出為3839。

  (49)若有以下定義:int t[3][2];能正確表示t數(shù)組元素地址的表達(dá)式是_______。

  A)&t[3][2] B)t[3] C)t[1] D)*t[2]

  答案:C

  評(píng)析:選項(xiàng)A和B兩個(gè)表達(dá)式都越界了;選項(xiàng)D中,*t[2]是目標(biāo)變量,即一個(gè)整型值,而不是地址值。

  (50)以下對結(jié)構(gòu)體類型變量的定義中,不正確的是___________。

  A)typedef struct aa

  {

  int n:

  float m:

  }aa;

  aatdl;

  B)#define aa struct aa

  aa{

  int n:

  float m:

  }tdl;

  C)struct

  {

  int n:

  float m:

  }aa;

  structaatdl;

  D)struct

  {

  int n:

  float m:

  }tdl;

  答案:C

  評(píng)析:在題的考查點(diǎn)是結(jié)構(gòu)體類型變量的定義。

  在選項(xiàng)c中,aa是一個(gè)結(jié)構(gòu)體變量,而不是結(jié)構(gòu)體名,所以struct aatdl;是非法的。

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

  請將每一個(gè)空的正確答案寫在答題卡的【1】至【20】序號(hào)的橫線上,答在試卷上不得分。

  (1)設(shè)一棵完全二叉樹共有500個(gè)結(jié)點(diǎn),則在該二叉樹中有 【1】 個(gè)葉子結(jié)點(diǎn)。

  答案:【l】250

  評(píng)析:所謂完全二叉樹是指除最后一層外,每一層上的結(jié)點(diǎn)數(shù)均達(dá)到最大值;在最后一層上只缺少右邊的若干結(jié)點(diǎn)。

  具有n個(gè)結(jié)點(diǎn)的完全二叉樹,其父結(jié)點(diǎn)數(shù)為int(n/2),而葉子結(jié)點(diǎn)數(shù)等于總結(jié)點(diǎn)數(shù)減去父結(jié)點(diǎn)數(shù)。本題n=500,故父結(jié)點(diǎn)數(shù)等于int(500/2)=250,葉子結(jié)點(diǎn)數(shù)等于500-250=250。

  (2)在最壞情況下,冒泡排序的時(shí)間復(fù)雜度為 【2】 。

  答案:【2】n(n-1)/2或O(n(n-1)/21

  評(píng)析:冒泡排序法是一種最簡單的交換類排序方法,它是通過相鄰數(shù)據(jù)元素的交換逐步將線性表變成有序。

  假設(shè)線性表的長度為n,則在最壞的情況下,冒泡排序需要經(jīng)過n/2遍的從前往后的掃描和n/2遍的從后往前的掃描,需要的比較次數(shù)為n(n-1)/2。

  (3)面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中涉及的對象是系統(tǒng)中用來描述客觀事物的一個(gè) 【3】 。

  答案:【3】實(shí)體

  評(píng)析:面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中涉及的對象是系統(tǒng)中用來描述客觀事物的一個(gè)實(shí)體,是構(gòu)成系統(tǒng)的一個(gè)基本單位,它由一組表示其靜態(tài)特征的屬性和它可執(zhí)行的一組操作組成。

  (4)軟件的需隸分析階段的工作,可以概括為四個(gè)方面: 【4】 、需求分析、編寫需求規(guī)格說明書和需求評(píng)審。

  答案:【4】需求獲取

  評(píng)析:軟件的需求分析階段的工作,可以概括為四個(gè)方面:需求獲取、需求分析、編寫需求規(guī)格說明書和需求評(píng)審。需求獲取的目的是確定對目標(biāo)系統(tǒng)的各方面需求。涉及到的主要任務(wù)是建立獲取用戶需求的方法框架,并支持和監(jiān)控需求獲取的過程。

  (5) 【5】 是數(shù)據(jù)庫應(yīng)用的核心。

  答案:【5】數(shù)據(jù)庫設(shè)計(jì)

  評(píng)析:數(shù)據(jù)庫設(shè)計(jì)是數(shù)據(jù)庫應(yīng)用的核心。在數(shù)據(jù)庫應(yīng)用系統(tǒng)中的一個(gè)核心問題就是設(shè)計(jì)一個(gè)能滿足用戶要求,性能良好的數(shù)據(jù)庫,這就是數(shù)據(jù)庫設(shè)計(jì)。

  (6)若由以下定義,則不移動(dòng)指針p,且通過指針p引用值為98的數(shù)組元素的表達(dá)式是 【6】 。

  int w[10]:{23,54,10,33,47,98,72,80,61},*p=w;

  答案:【6】*(p+5)或p[5]

  評(píng)析:本題的考查點(diǎn)是通過指針引用數(shù)組元素。

  98是數(shù)組w的第5個(gè)元素(最開始的為第0個(gè)),而通過+p=w已經(jīng)將p指向了數(shù)組w,要想不移動(dòng)指針p而引用98,可以有以下兩種方法:p[5]、*(p+5)。

  (7)以下程序的輸出結(jié)果是 【7】 。

  #define MAX(x,y)(x)>(y)?(x):(y)

  main()

  {

  int a=5,b=2,c=3,d=3,t;

  t=MAX(a+b,c+d)*lO;

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

  }

  答案:【7】7

  評(píng)析:宏替換后,表達(dá)式t=MAX(a+b,c+d)*10即變?yōu)椋簍=(a+b)>(c+d)?(a+b):(c+d)*10;

  由于(a+b)>(c+d)為真, 所以t=(a+b),即為7。

  (8)以下程序的輸出結(jié)果是 【8】 。

  main()

  {

  unsigned short a=65536;

  int b:

  primf(”%d\n”,b=a);

  }

  答案:【8】0

  評(píng)析:對于一個(gè)unsigned short來說,它能取的最大值是65535。這里給a賦值.65536,已經(jīng)超出了它的取值范圍,這樣它的高位將被截掉,只把低位賦給它(全零)。所以a的值實(shí)際為0。

  (9)若已經(jīng)定義im a=25,b:14,c=19;,以下三目運(yùn)算符(?:)所構(gòu)成的語句的執(zhí)行結(jié)果是 【9】 。

  a++<=2&&b–<=2&&c++?printf(”***

  a=%d,b=%d,c=%d\n”,a,b,C):printf(”a=%d,b=%d,c=%d\n”,a,b,C);

  答案:【9】a=26,b=14,c=19

  評(píng)析:這種條件表達(dá)式的一般形式為:表達(dá)式17表達(dá)式2:表達(dá)式3,三目運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若非0則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)表達(dá)式的值,若表達(dá)式1的值為0,則求解表達(dá)式3,此時(shí)表達(dá)式3的值就作為整個(gè)表達(dá)式的值。c語言在做一系列表達(dá)式相與時(shí),從左到右分別計(jì)算各表達(dá)式的值,一旦遇到一個(gè)表達(dá)式為false,則剩余的表達(dá)式都不再進(jìn)行運(yùn)算。該題中,a++(=2的值為false,則b–<=2和c++就都不再運(yùn)算。

  (10)下面的if語句與y=(x>=10)?3*x-11:(x<1)?x:2‘x.1;的功能相同,請補(bǔ)充完整。

  If( 【10】 )

  if( 【11】 )y=2*x-1;

  else y=x;

  else y=3*x-11:

  答案:【10】x<10

  【11】x>=1

  評(píng)析:條件表達(dá)式的一般形式為:表達(dá)式l?表達(dá)式2:表達(dá)式3

  條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值;若表達(dá)式1的值為O(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。y。(x>。10)?3。x-1 1:(x>=1)?x:2*x-1;的功能是先求(x>=1)?x:2*x-1:的值,所的的結(jié)果再與前面的語句構(gòu)成條件表達(dá)式進(jìn)行求值。所以【10】應(yīng)該填x=1。

  (11)以下程序中用戶由鍵盤輸入一個(gè)文件名,然后輸入一串字符(用拌結(jié)束輸入)存放到此

  文件中,形成文本文件,并將字符的個(gè)數(shù)寫到文件的尾部。請?zhí)羁铡?/p>

  #include

  main()

  { FILE *fp;

  char ch,fname[32];im count=0;

  printf(”Input the filename:”);

  scanf(”%s”,fname);

  if((幣=fopen( 【12】 ,”w+”))==NULL)

  { print印Can’t open file:%s\n”,fname};exit(0);}

  printf(”Enter data:in”);

  while((ch=getchar())!_1≠)’)

  { fputc(ch,fp);count++;}

  fprintf( 【13】 ,”\n%d\n”,count);

  fclose(fp);

  }

  答案:【12】fname

  【13】fp

  評(píng)析:fopen()函數(shù)實(shí)現(xiàn)打開文件的功能,通常的調(diào)用方式為:FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一個(gè)橫線處要求填寫要打開文件的名字fname。fprintf()函數(shù)的一般調(diào)用方式為:fprintf (文件指針,格式字符串,輸出表列),所以第二個(gè)橫線處應(yīng)填寫fb。

  (12)函數(shù)void fun(noat*sn,int n)的功能是:根據(jù)以下公式計(jì)算s,計(jì)算結(jié)果通過形參指針sn傳回;n通過形參傳入,n的值大于等于0。請補(bǔ)全程序。

  S=I-1/3+1/5—1/7+...+1/(2n+1)

  void fun(float*sn,int n)

  { float s=O.O,w,f=-1.0;

  int i=0:

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

  { f= 【14】 *f;

  w=f/(2*i+1);

  S+=W:

  }

  【15】 =s;

  }

  答案:【14】-1或-1.0

  【15】*sn

  評(píng)析:由于在對s求和時(shí),相鄰兩項(xiàng)的符號(hào)剛好相反,而在函數(shù)fun中沒有對數(shù)據(jù)進(jìn)行取反的操作,故第一空的目的是對數(shù)據(jù)進(jìn)行取反,以保證序列中相鄰兩項(xiàng)的符號(hào)不同。故第一個(gè)應(yīng)填-1或-1.0。在執(zhí)行完循環(huán)體后,要將求和結(jié)果通過指針參數(shù)的形式傳遞給調(diào)用fun的函數(shù),故第二空應(yīng)填*sn。

  (13)下面的函數(shù)strcat(strl,str2)實(shí)現(xiàn)將字符串str2拼接到字符串strl后面的功能。請?zhí)羁帐怪暾?/p>

  Char*strcat(strl,str2)

  char*strl.*str2;

  { char*t=strl;

  while( 【16】 )strl++;

  while( 【17】 );

  return(t);}

  答案:【16】*strl或*str1!=‘\0’或*str1!=0或*strl!=NULL

  【17】*strl++=*str2++或*strl++=*str2,*str2++

  評(píng)析:函數(shù)strcat(strl,str2)實(shí)現(xiàn)將字符串str2連接到字符串strl后面,所以首先要找到字符串strl的串尾,根據(jù)c語言的語法規(guī)定,一個(gè)串的串尾一定是一個(gè)隱含字符“\0”,而在程序中,對字符串中字符的訪問是通過兩/卜指針變量來完成的,因此要找到字符串strl的串尾,要判斷*strl是否為“\0”,要找到字符串str2的串尾,要判斷*str2是否為“\0”,程序中必須可以使字符串中字符逐一順序體現(xiàn),所以在題中我們應(yīng)填寫“*str1”和“*strl++=*str2++”。

  (14)以下函數(shù)fun用于求兩個(gè)整數(shù)a和b的最大公約數(shù)。

  fun(a’b)

  int a’b;

  {int I,J,m,n;

  if(a>b)

  {m=a;a=b; 【18】 ;}

  i=a.j=b;

  while((n= 【19】 )!=O)

  {j=i;i= 【20】 ;}

  retum(i);

  }

  答案:【18】b=m

  【19】j%i

  【20】n

  評(píng)析:函數(shù)中的變量i和j分別存放兩個(gè)形參的最小數(shù)和最大數(shù),在語句i=a和i=b執(zhí)行之前,要將a和b分別變?yōu)樽钚?shù)和最大數(shù),當(dāng)a>b時(shí),程序使用中間變量將兩者交換,所以題中第一個(gè)空中應(yīng)當(dāng)填寫“b=m”;為求兩個(gè)整數(shù)的最大公約數(shù),程序的where循環(huán)條件必須為j整除i成立,所以題_中第二個(gè)空中應(yīng)當(dāng)填寫“j%i”;程序要通過i的值返回最大公約數(shù),因此在循環(huán)中要將每次整除的公約數(shù)賦給i,以保證最后返回的是兩個(gè)整數(shù)的最大公約數(shù),所以第三個(gè)空中應(yīng)當(dāng)填寫“n”。

http://www.ardmore-hotel.com/

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

騰訊筆試題目及答案07-19

華為c語言筆試題07-17

有趣的C語言筆試題09-26

面試筆試題目及答案08-06

工廠筆試題目和答案07-16

工行筆試題目及答案07-28

絕對有用騰訊筆試題目及答案09-26

事業(yè)單位筆試題目及答案07-20

政治類工作的筆試題目及答案07-22