網(wǎng)站首頁
分類導(dǎo)航
試題中心
下載中心
英語學(xué)習(xí)
繽紛校園
考試論壇
網(wǎng)站留言
客服中心
 05年9月等級考試二級C語言考前密卷(四)
【字體:
05年9月等級考試二級C語言考前密卷(四)
http://1glr.cn 來源:ChinaITLab 點(diǎn)擊: 更新:2005-9-15

(26)有以下程序:
  #include<stdio.h>
  main(){
  char c[6];
  int I=0:
  for(;i<6;c[-]=getchar(),i++);
  for(I=0;i<6;i++)putchar(c[i]);
  primf("\n");
  }
  如果從鍵盤上輸入:
  ab<回車>
  c<回車>
  def<回車>
  則輸出結(jié)果為_________.
  A)a  B)a  C)ab  D)abcdef
  b   b   c
  c   c   d
  d   d
  e
  f
  答案:C
  評析:1.getchar():此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入一個(gè)字符。
  2.putchar():此函數(shù)的作用是向終端輸出一個(gè)字符,也可以輸出控制字符。
  本題在輸入字符時(shí),ab和c后面的回車符分別賦給了c[2]和e[4],所以,正確答案為c。
  
  (27)在調(diào)用函數(shù)時(shí),如果實(shí)參是簡單變量,它與對應(yīng)形參之間的數(shù)據(jù)傳遞方式是_______。
  A)地址傳遞       B)單向值傳遞
  C)由實(shí)參傳遞給形參,再由形參傳遞給實(shí)參
  D)傳遞方式由用戶指定
  答案:B
  評析:c語言規(guī)定,實(shí)參變量對形參變量的數(shù)據(jù)傳遞是"單向值傳遞",只由實(shí)參傳給形參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。調(diào)用結(jié)束后,實(shí)參單元仍保留并維持原值。
  
  (28)下面程序
  #include<stdio.h>
  #include<string.h>
  main()
  { char*p1="abc",*p2="ABC",str[50]="xyz";
  strcpy(str+2,strcat(p1,p2));
  printf("%s\n",str);
  }
  的輸出是_________。
  A)xyzabcABC    B)zabcABC
  C)yzabcABC     D)xyabcABC
  答案:D
  評析:strcat(pl,p2)將字符串a(chǎn)bcABC放到了*pl所指向的存儲單元中;strcpy在本題將abcABC復(fù)制到str+2所指向的存儲單元中,即覆蓋原str數(shù)組中的字符z及其后的所有字符,故str的值為"xyabcABC"。
  
  (29)下面程序
  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+l]=*p+1;
  else++p;
  printf("%d'.,。p);
  }
  }
  的輸出是__________。
  A)23  B)26  C)33  D)36
  答案:A
  評析:觀察題目,可以發(fā)現(xiàn),*p=&aa[01[o]語句實(shí)際是將數(shù)組aa的首地址賦給了指針變量p,將i的值帶入for循環(huán)中,i=0時(shí),aa[0][1]=3,+p=2;*p輸出的是指針?biāo)赶虻臄?shù)組值,此時(shí)p所指向的是aa[O][O],輸出2,而i=l時(shí)執(zhí)行了++p操作使指針向后移動指向了aa[O兒1],所以在輸出*p時(shí)應(yīng)為3。
  
  (30)以下程序的輸出結(jié)果是_________。
  #include<stdio.h>
  #include<s~ing.h>
  fun(char*w,int n)
  {
  char t,*s1,*s2;
  s1=w;s2=w+n-l:
  while(s1<s2)
  {
  t=*s1++:
  *sl=*s2--;
  *s2=t;
  }
  }
  main()
  {
  char*p;
  p="1234567";
  fun(p,strlen(p));
  puts(p);
  }
  A)1234567  B)7654321  C)1711717  D)717717l
  答案:C
  評析:在子函數(shù)fun中,sl為字符串w的起始地址,s2為字符串的結(jié)束地址(字符'\O'除外),當(dāng)執(zhí)行循環(huán)結(jié)束循環(huán),w="1711717"。
  
  
  (31)下面程序
  main()
  { int x=100,a=10,b=20,okl=5,ok2=0;
  if(a<b)
  if(b!=15)
  if(10k1) x=l;
  else i"oL2)x。10;
  X=-1;
  Printf(%d\n",x);
  }
  的輸出是________。
  A)-1  B)0  c)1  D)不確定的值
  答案:A
  評析:第一個(gè)判斷值為真,過渡到下一個(gè)判斷,第二個(gè)判斷為真,過渡到第三個(gè)判斷……如此循環(huán),在打印輸出語句的前一行,程序給變量x賦了值,為.1,所以,無論前期如何變化,最后的x值依然為-1。
  
  (32)下面程序
  main()
  {
  int x=32:
  printf("%d\n",x=x<<1);
  }
  的輸出是________。
  A)100  B)160  C)120  D)64
  答案:D
  評析:<<是c語言中規(guī)定的左移運(yùn)算符,例如,a=a<<2,這個(gè)語句即是將a的二進(jìn)制數(shù)左移兩位,左移一位相當(dāng)于該數(shù)乘于2,左移兩位相當(dāng)于該數(shù)乘以2的2次方。所以,x<<1=32.2=64。
  
  (33)設(shè)有以下定義和語句,輸出的結(jié)果是(用small模式編譯,指針變量占2個(gè)字節(jié))_________。
  
  struct date
  {
  long *cat;
  struct date *next;
  double dog;
  }too;
  printf("%d",sizeof(too));
  A)20  B)16  C)14  D)12
  答案:D
  評析:sizeof函數(shù)計(jì)算已知類型所占的字節(jié)數(shù)。結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。指針變量占2個(gè)字節(jié),所以cat和*next各占2個(gè)字節(jié);double型占8個(gè)字節(jié),故too共占12個(gè)字節(jié)。
  
  (34)以下程序的輸出結(jié)果是_________。
  #include<stdio.h>
  #define FUDGE(y)    2.84+y
  #define PR(a)printf  ("%d",(int)(a))
  #define PRINT l(a)   PR(a);putchar('\n')
  main()
  { intx=2;
  PRINTl(FUDGE(5)*x);
  }
  A)ll  B)12  C)13  D)15
  答案:B
  評析:在程序中如果有帶實(shí)參的宏,則按#define命令行中指定的字符串從左到右進(jìn)行置換,如果串中包含宏中的形參,則將程序語句中相應(yīng)的實(shí)參代替形參。將實(shí)參帶入已經(jīng)定義的宏中,可以得出答案燈"12"。
  
  (35)以下程序段給數(shù)組所有的元素輸入數(shù)據(jù),請選擇正確答案填入:
  #include<stdio.h>
  main()
  {
  int a[10],i=O;
  while(i<l0)scanf("%d",________);
  :
  :
  }
  A)a+(i++)  B)&a[i+l]  C)a+i  D)&a[++I]
  答案:A
  評析:a就是數(shù)組a的首地址,而a+x是數(shù)組中第x個(gè)元素的地址,。所以在四個(gè)選項(xiàng)中,選項(xiàng)B和c只能輸入一個(gè)數(shù)據(jù),選項(xiàng)D不能給a[O]輸入數(shù)據(jù),只有A可以完成給數(shù)組所有的元素輸入數(shù)據(jù)的任務(wù)。
  
  (36)以下對枚舉類型名的定義中正確的是________。
  A)enum a={one,two,three};      B)enum a{one=9,two=-1,three};
  C)enum a={"one","two","three"}; D)enum a{"one","two","three"};
  答案:B
  評析:聲明枚舉類型用enum開頭。例如:enum weekday(sun,mon,tue,wed,thu,fri,sat);
  說明:1、在c編譯中,對枚舉元素按常量處理,同時(shí)可以改變他們的值。2、枚舉值可以用來做判斷比較。3、一個(gè)整數(shù)不能直接賦給一個(gè)枚舉變量。
  
  (37)字符(char)型數(shù)據(jù)在微機(jī)內(nèi)存中的存儲形式是________.
  A)反碼      B)補(bǔ)碼
  C)EBCDIC碼   D)ASCII碼
  答案:D
  評析:將一個(gè)字符常量放到一個(gè)字符變量中,實(shí)際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的ASCII碼值放到存儲單元中。
  
  (38)下面程序的輸出是________。
  typedef union
  { long x[2];
  int y[4];
  char z[8];
  }MYTYPE;
  MYTYPE them;
  main()
  { printf("%d\n",sizeof(them));}
  A)32  B)16  C)8  D)24
  答案:C
  評析:sizeof(x)是一個(gè)標(biāo)準(zhǔn)c函數(shù),它的返回值是x型的數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存字節(jié)數(shù)。題目中定義了一個(gè)共用體,共用體變量在內(nèi)存中所占的長度等于最長的成員的長度。
  
  (39)有以下程序,程序運(yùn)行后的輸出結(jié)果是_________。
  Int f(intb[][4])
  { int I,J,s=O;
  for(j=00<4;j++)
  {
  I=j;
  if(I>2)i=3-j;
  s+=b[i][j];
  }
  return s:
  }
  main()
  {
  int a[4][4]={{1,2,3,4},{O,2,4,6},{3,6,9,12},{3,2,1,0}};
  printf("%d\n",f(a));
  }
  A)22  B)ll  C)18  D)16
  答案:D
  評析:本題通過函數(shù)調(diào)用對數(shù)組a[0][0]、a[1][l]、a[2112]、a[0][3]進(jìn)行求和,然后用return語句返回s的值。
  
  (40)不能把字符串:Hello!賦給數(shù)組b的語句是_________。
  A)charb[10]={'H','e','1','l','0','!'};
  B)char b[10]={'h','e','1','l''O','!'};
  C)charb[10];strcpy(b,"Hello!");
  D)char b[10]="Hello!";
  答案:B
  評析:在c語言中,大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字符,因此,"hello!"和"Hello!"是兩個(gè)不同的字符串。
  
  (41)下面程序的輸出是_________。
  main()
  { int x=3,y=6,a=0;
  while(x++!=(y-=1))
  { a+=1;
  if(y<x)break;
  }
  primf("x=%d,y=%d,a=%d\n",x,y,a);
  }
  A)x=4,y=4,a=1  B)X=5,y=5,a=1
  C)x=5,y=4,a=3  D)x=5,y=4,a=l
  答案:D
  評析:注意的是x++中x值的引用時(shí),這里應(yīng)當(dāng)是先引用,后自加,具體執(zhí)行過程如下:
  第一次while循環(huán):條件為真,執(zhí)行a=a+l=l;此時(shí),x的值已為4,判斷y<x不成立,繼續(xù)執(zhí)行循環(huán);
  第二次while循環(huán):條件為假,此時(shí)x的值已為5,退出while循環(huán),執(zhí)行printf。
  
  (42)若有程序:
  fun(int a,int b)
  {
  static int c=O:
  c+:a+b:
  return C;
  }
  main()
  {
  int x=5,y=3,z=7,r;
  r=fun((y,x+y),z);
  r=fun(x,y);
  printf("%d\n",r);
  }
  上面程序的輸出結(jié)果是__________。
  A)23  B)15   C)19  D)18
  答案:A
  評析:stoic聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來聲明一個(gè)變量的作用有:①對局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。調(diào)用第一個(gè)fun,其兩個(gè)實(shí)參的值為(3,5+3)與7即8與7,在函數(shù)fun執(zhí)行結(jié)束返回15。第二次調(diào)用fun時(shí),由于stat~為靜態(tài)類型,其值保留,執(zhí)行fun(5,3)后,其返回值為23,故選A。
  
  (43)下面程序的輸出是________。
  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'l':vl++;
  case'3':v3++;
  case'2':v2++;
  }
  printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
  }
  A)vl=4,v2=2,v3=l,v4=l  B)vl=4,v2=9,v3=3,v4=l
  C)vl=5,v2=8,v3=6,v4=l  D)vl=8,v2=8,v3=8,v4=8
  答案:C
  評析:當(dāng)switch后面括弧內(nèi)的表達(dá)式的值與某一個(gè)case后面的常量的表達(dá)式的值相等時(shí),就執(zhí)行此caSe后面的語句,若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。
  
  (44)下面程序的輸出是_________。
  main()
  { int k=11;
  printf("k=%d,k=%o,k=%x\n",k,k,k);
  }
  A)k=l1,k=12,k=l1   B)k=ll,k=13,k=13
  C)k=l1,k=013,k=0xb  D)k=l1,k=13,k=B
  答案:D
  評析:在C語言格式字符的輸出中,"%d"是以帶符號的十進(jìn)制形式輸出整數(shù);"%0"是以8進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符O);"O/ox"是以16進(jìn)制無符號形式輸出整數(shù)(不輸出前導(dǎo)符0x)。
  
  (45)下面程序段中c的二進(jìn)制值是__________。
  char a=3,b=6,c;
  c=a^b<<1:
  A)00001011   B)00001111  C)00011110  D)00011100
  答案:B
  評析:c語言提供六種位運(yùn)算符,按優(yōu)先級由高到低的順序分別為:取反(~)、左移((<)和右移(>>)、按位與(&)、按位異或(八)、按位或(I)。所以表達(dá)式c=aAb<<l先運(yùn)算b<<l得二進(jìn)制值為00001 100,再運(yùn)算aA00001 100,最后得二進(jìn)制值00001ll1。B
  評析:c語言提供六種位運(yùn)算符,按優(yōu)先級由高到低的順序分別為:取反(~)、左移((<)和右移(>>)、按位與(&)、按位異或(八)、按位或(I)。所以表達(dá)式c=aAb<<l先運(yùn)算b<<l得二進(jìn)制值為00001 100,再運(yùn)算aA00001 100,最后得二進(jìn)制值00001ll1。
  
  (46)以下敘述中正確的是__________。
  A)C語言比其他語言高級
  B)C語言可以不用編譯就能被計(jì)算機(jī)識別執(zhí)行
  C)C語言以接近英語國家的自然語言和數(shù)學(xué)語言作為語言的表達(dá)形式
  D)C語言出現(xiàn)的最晚,具有其他語言的一切優(yōu)點(diǎn)
  答案:C
  評析:計(jì)算機(jī)語言分為低級語言、匯編語言和高級語言,c語言屬于高級語言,但并不是說c語言比其他語言高級,所以選項(xiàng)A錯(cuò)誤;除了低級語言外,其他各種語言都必須編譯成能被計(jì)算機(jī)識別的二進(jìn)制數(shù)才能執(zhí)行,選項(xiàng)B錯(cuò)誤;C語言出現(xiàn)從1972年到1973年間,并不是出現(xiàn)最晚的語言,所以選項(xiàng)D也是錯(cuò)誤的。
  
  (47)下列可用于C語言用戶標(biāo)識符的一組是__________。
  A)void define WORD   B)a3_b3 _123 Car
  C)For -abc IFCase    D)2a DO sizeof
  答案:B
  評析:c語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線3種字符組成,且第一個(gè)字符必須為字母或下劃線,所以排除c和D。c語言還規(guī)定標(biāo)識符不能為c語言的關(guān)鍵字,從而選項(xiàng)A(void是關(guān)鍵字)是錯(cuò)誤的。
  
  (48)fgetc函數(shù)的作用是從指定文件讀入一個(gè)字符,該文件的打開方式必須是________。
  A)只讀  B)追加  C)讀或讀寫  D)以上均正確
  答案:D
  評析:fgetc函數(shù)是指從指定的文件讀入一個(gè)字符,該文件必須是以讀或讀寫方式打開的。電etc"函數(shù)的調(diào)用形式為:ch=fgetc(fp);。
  
  (49)請選出正確的程序段_________。
  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;
  ……
  答案:C
  評析:本題的A和B犯了一個(gè)同樣的錯(cuò)誤,即指針變量p定義后并沒有指向具體的變量,因此不能進(jìn)行賦值操作。另外,在選項(xiàng)D中,s是int指針變量,p是char型指針變量,所指向的內(nèi)存單元所占用的字節(jié)數(shù)是不同的,因而不能將字符指針變量p的值賦給整型指針變量s。
  
  (50)若有下面的說明和定義,則sizeof(struct aa)的值是__________。
  struct aa
  {
  int rl;double r2;float r3:
  union uu{char u1[5];long u2[2]}ua;
  }mya;
  A)30  B)29  C)24  D)22
  答案:D
  評析:結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和,每個(gè)成員分別占有自己的內(nèi)存單元;共用體變量所占的內(nèi)存長度等于最長的成員的長度。結(jié)構(gòu)體變量aa中,成員r1占2個(gè)字節(jié),r2占8個(gè)字節(jié),r3古4個(gè)字節(jié),共用體ua占8個(gè)字節(jié),所以共占用2+8+4+8=22個(gè)字節(jié)。
  
  二、填空題(每空2分,共40分)
  
  請將每一個(gè)空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得  分。
  
  (1)在先左后右的原則下,根據(jù)訪問根結(jié)點(diǎn)的次序,二叉樹的遍歷可以分為三種:前序遍  歷、 【1】 遍歷和后序遍歷。
  答案:【1】中序
  評析:在先左后右的原則下,根據(jù)訪問根結(jié)點(diǎn)的次序,二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷和后序遍歷。
  前序遍歷是指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹;并且遍歷左、右子樹時(shí),仍然先訪問根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。
  中序遍歷指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后訪問根結(jié)點(diǎn),最后遍歷右子樹;并且遍歷左、右子樹時(shí),仍然先遍歷左子樹,然后訪問根結(jié)點(diǎn),最后遍歷右子樹。
  后序遍歷指在訪問根結(jié)點(diǎn)、遍歷左子樹與遍歷右子樹這三者中,首先遍歷右子樹,然后訪問根結(jié)點(diǎn),最后遍歷左子樹;并且遍歷左、右子樹時(shí),仍然先遍歷右子樹,然后訪問根結(jié)點(diǎn),最后遍歷左子樹。
  
  (2)結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則可以概括為自頂向下、逐步求精、 【2】 和限制使用goto語句。
  答案:【2】模塊化
  評析:結(jié)構(gòu)化程序設(shè)計(jì)方法的主要原則可以概括為自項(xiàng)向下、逐步求精、模塊化和限制使用goto語句。
  自頂向下:程序設(shè)計(jì)時(shí),應(yīng)先考慮總體,后考慮細(xì)節(jié);先考慮全局目標(biāo),后考慮局部目標(biāo)。不要一開始就過多追求眾多的細(xì)節(jié),先從最上層總目標(biāo)開始設(shè)計(jì),逐步使問題具體化。
  逐步求精:對復(fù)雜問題,應(yīng)設(shè)計(jì)一些子目標(biāo)作過度,逐步細(xì)化。
  模塊化:一個(gè)復(fù)雜問題,肯定是由若干稍簡單的問題構(gòu)成。模塊化是把程序要解決的總目標(biāo)分解為分目標(biāo),再進(jìn)一步分解為具體的小目標(biāo),把每個(gè)小目標(biāo)稱為一個(gè)模塊。
  限制使用goto語句。
  
  (3)軟件測試是保證軟件質(zhì)量的重要手段,而軟件測試的主要和重要的測試方法是通過測  試數(shù)據(jù)和 【3】  的設(shè)計(jì)來實(shí)現(xiàn)。
  答案:【3】測試實(shí)例
  評析:進(jìn)行軟件測試時(shí),應(yīng)精心設(shè)計(jì)測試實(shí)例和選擇測試數(shù)據(jù),以對系統(tǒng)進(jìn)行全面測試。
  
  (4)數(shù)據(jù)庫系統(tǒng)的三級模式分別為 【4】 模式、內(nèi)部級模式與外部級模式。
  答案:【4】概念 或 概念級
  評析:數(shù)據(jù)庫系統(tǒng)在其內(nèi)部具有三級模式及二級映射,三級模式分別是概念級模式、內(nèi)部級模式和外部級模式。
  概念模式是數(shù)據(jù)庫系統(tǒng)中全局?jǐn)?shù)據(jù)邏輯結(jié)構(gòu)的描述,是全體用戶(應(yīng)用)公共數(shù)據(jù)視圖。
  內(nèi)模式又稱物理模式,它給出了數(shù)據(jù)庫物理存儲結(jié)構(gòu)與物理存取方法,如數(shù)據(jù)存儲的文件結(jié)構(gòu)、索引、集簇及hash等存取方式與存取路徑,內(nèi)模式的物理性主要體現(xiàn)在操作系統(tǒng)及文件級上,.它還未深入到設(shè)備級上(如磁盤及磁盤操作)。
  外模式也稱子模式或用戶模式,它是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式,它由概念模式推導(dǎo)面出。
  
  (5)數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個(gè)部分,即數(shù)據(jù)項(xiàng)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)流、 【5】 和處理過程。
  答案:【5】數(shù)據(jù)存儲
  評析:數(shù)據(jù)字典是各類數(shù)據(jù)描述的集合,它通常包括5個(gè)部分,即數(shù)據(jù)項(xiàng),是數(shù)據(jù)的最小單位;數(shù)據(jù)結(jié)構(gòu),是若干數(shù)據(jù)項(xiàng)有意義的集合;數(shù)據(jù)流,可以是數(shù)據(jù)項(xiàng),也可以是數(shù)據(jù)結(jié)構(gòu),表示某一處理過程的輸入或輸出;數(shù)據(jù)存儲,處理過程中存取的數(shù)據(jù),常常是手工憑證、手工文檔或計(jì)算機(jī)文件;處理過程。
  
  (6)下面程序的輸出是 【6】 。
  main()
  {int arr[10],i,k=O:
  for(i=0;i<10;i++)
  arr[i]=i;
  for(I=1;i<4;i++)
  k+=arr[I]+i;
  printf("%d\n",k);}
  答案:【6】12
  評析:本題通過第一個(gè)for循環(huán)將數(shù)組arr[O]-arr[9]分別賦值為0-9,通過第二個(gè)for循環(huán)的三次循環(huán)累加,求出結(jié)果為12,具體分析如下:
  i=l:k=0+arr[1]+l即k=2:
  i=2:k=2+arr[2]+2即k=6:
  i=3:k=6+arr[3]+3即k=12;
  
  (7)若a=10,b=20,則表達(dá)式!(a<b)的值是 【7】 。
  答案:【7】0
  評析:已知a=10,b=20,所以邏輯表達(dá)式a<b的值為true,即為1,在這個(gè)表達(dá)式前面有一個(gè)邏輯運(yùn)算符!,表示反操作,所以整個(gè)語句的值應(yīng)當(dāng)為false,即為0。
  
  (8)有以下程序:
  int fa(int x){return x*x;}
  int fb(int x){return x*x*x;}
  int f(int(*f1)(),int(*f2)(),int x)
  {return f2(X)-n(x);}
  main()
  {int i;i=f(fa,fb,2);printf("%d\n",i);}
  程序運(yùn)行后,輸出結(jié)果是 【8】 。
  答案:【8】4
  評析:在主函數(shù)中調(diào)用函數(shù)f,函數(shù)f有三個(gè)參數(shù),形參f1與f2分別是兩個(gè)指向函數(shù)的指針。在f中執(zhí)行r2(x)-f1(x),實(shí)際上是執(zhí)行了fb(2).fa(2),故執(zhí)行i=(fa,fb,2)后i的值為2^3-2^2=4。
  
  (9)下面程序的輸出是 【9】 。
  main()
  {enum em{eml=3,em2=1,em3};
  char*aa[]={"AA","BB","CC","DD"};
  primf("%s%s%s\n",aa,aa,aa);
  }
  答案:【9】DDBBCC
  評析:c語言對枚舉的定義規(guī)定:在枚舉中聲明的各個(gè)枚舉元素,如果沒有明確指出某個(gè)枚舉元素的值,它的上一個(gè)元素存在并有明確值的情況下,這個(gè)枚舉元素的值為其上一個(gè)元素的值+1。
  在本題中,沒有明確說明枚舉元素em3的值,則em3=em2+l=1+l=2,進(jìn)而可知,在printf()打印函數(shù)中,要打印的數(shù)組元素是aa[3]、aa[1]、aa[2],因此最后的打印結(jié)果應(yīng)當(dāng)為"DDBBCC"。
  
  (10)若想通過以下輸入語句使a=5.0,b=4,c=3,則輸入數(shù)據(jù)的形式應(yīng)該是 【10】 。
  int b,c;float a;
  scanf("%£%d,c=%d",&a,&b,&c)
  答案:【10】5.0,4,c=3
  評析:scanf(格式控制,地址表列),如果在"格式控制"字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。所以此題中輸入數(shù)據(jù)的形式是5.0;4,c=3。
  
  (11)下列程序的輸出結(jié)果是 【11】 。
  int t(int x,int y,int cp,int dp)
  {  cp=x*x+y*y;
  dp=x*x-y*y;
  }
  main()
  {  int a=4,b=3,c=5,d=6;
  t(a,b,c,d);
  printf("%d%d\n",c,d);
  }
  答案:【ll】5 6
  評析:本題中a,b,c,d是實(shí)參,x,多,cp,dp是形參。c語言規(guī)定,實(shí)參變量對形參變量的數(shù)據(jù)傳遞是"值傳遞",即單向傳遞,只由實(shí)參傳給形參,而不能由形參傳回來給實(shí)參。在內(nèi)存中,實(shí)參單元與形參單元是不同的單元。在調(diào)用函數(shù)時(shí),給形參分配存儲單元,并將實(shí)參對應(yīng)的值傳遞給形參,調(diào)用結(jié)束后,形參單元被釋放,實(shí)參單元仍保留并維持原值。因此,程序的輸出結(jié)果是5 6。
  
  (12)下面程序的輸出結(jié)果是 【12】 。
  char b[]="ABCD";
  main()
  {
  char b[30];
  strcpy(&b[0],"GH");
  strcpy(&b[1],"GH");
  strcpy(&b[2],"GH");
  printf("%s\n",b);
  }
  答案:【12】GGGH
  評析:由于在函數(shù)main中定義了數(shù)組變量b,其將屏蔽全局變量b。對于一維數(shù)組變量,其值為一常數(shù),等于數(shù)組首元素地址。strcpy(&b[0],"GH"),是將字符串。"GH"復(fù)制到數(shù)組b中從首元數(shù)開始的空間中,此是b中的字符串為"GH";strcpy(&b[1],"GH"),是將字符串。"GH"復(fù)制到數(shù)組b中從第二個(gè)元素開始的空間中,此是b中的字符串為"GH"。執(zhí)行第三次strcpy函數(shù)后,b中的字符串為"GGGH"。
  
  (13)有以下定義和語句,則sizeof(a)的值是 【13】 ,而sizeof(a.share)的值是 【14】 。
  struct date
  { int day;
  int mouth;
  int year;
  union{int sharel;
  float share2;
  }share;
  }a;
  答案:【13】10
  【14】4
  評析:結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。int占2個(gè)字節(jié),float占4個(gè)字節(jié),共用體變量所占的內(nèi)存長度等于最長的成員的長度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。
  
  (14)下述函數(shù)用于統(tǒng)計(jì)一行字符中的單詞個(gè)數(shù),單詞之間用空格分隔。
  Word_num(str)
  char str[];
  {int i,num=O,word=O;
  for(i=0;str[i]!= 【15】 ;i++)
  if( 【16】 =='')word=0;
  else if(word==0)
  {
  word=l;
  【17】;
  }
  return(num);
  }
  答案:【15】'\0'或0或NULL
  【16】str[I]
  【17】num++或num=num+l或num+=1
  評析:觀察題目要求,可以知道以下幾點(diǎn):
  ①for循環(huán)的結(jié)束條件應(yīng)當(dāng)是:str[i]已是字符串的最后一個(gè)字符;
 、趕trⅢ代表字符串str中的第i+1個(gè)字符;
 、壅妥兞縩um的值是要記錄的單詞的個(gè)數(shù)。
  c語言中規(guī)定字符串的最后一個(gè)字符是一個(gè)隱含的字符串結(jié)束符"\0",所以在題中第一個(gè)空中應(yīng)填寫"\0";題中第二個(gè)空應(yīng)填寫"str[i]",以判斷當(dāng)前位置的字符是否為空格;題中第三個(gè)空中應(yīng)當(dāng)填寫"num++",通過變量num的加l累加得到字符串中的單詞個(gè)數(shù)。
  
  (15)有一個(gè)已排好序的數(shù)組,今輸入一個(gè)數(shù),要求按原來的順序規(guī)律將它插入到數(shù)組中。算法是:假設(shè)排序順序是從小到大,對輸入的數(shù),檢查它在數(shù)組中哪個(gè)數(shù)之后,然后將比這個(gè)數(shù)大的數(shù)順序后移一個(gè)位置,在空出的位置上將該數(shù)插入。請?jiān)诔绦蛑械目瞻滋幪钌弦粭l語句或一個(gè)表達(dá)式。
  #defineN 100
  main()
  { float a[N+1],x;
  inti,p;
  for(i=0;i<N;i++)
  scanf("%f",&a[I]);
  scanf("%f",&x);
  for(I=0,p=N;i<N;i++)
  if(x<a[I])
  { 【18】;
  break;}
  for(i=N-1; 【19】;I--)
  a[I+1]=a[I];
  a[p]_x;
  for(i=0; 【20】;i++)
  { primf("%8.2f",a[i]);
  if(i%5==O)
  printf("\n");
  }
  }
  答案:【18】p=i;
  【19】i>=p
  【20】i<=N
  評析:本題主要考查了插入排序。由于程序中的數(shù)組在開始已經(jīng)按從小到的大順序排好。在插入時(shí),首先要查到第一個(gè)大于待插入數(shù)的數(shù)組下標(biāo),即當(dāng)待插入元素小于數(shù)組中當(dāng)前元素時(shí),記下數(shù)組的當(dāng)前下標(biāo)p,并結(jié)束循環(huán)。故第一空目的是為了記下數(shù)組下標(biāo),應(yīng)填p=i;插入排序的第二部是將大于待插入元素的所有元素都向后移動一位,故在循環(huán)時(shí),要從最后一個(gè)元素到第p個(gè)元素都要后移一位,因此第二空應(yīng)埴i>=p。最后一個(gè)循環(huán)是將N+1個(gè)元素都輸出,故最后一空應(yīng)為i<=N。(注:本題有多種答案,以上僅提供一種)

[1] [2] 下一頁  

文章錄入:ak47    責(zé)任編輯:ak47  
 版權(quán)聲明
   如果本網(wǎng)站所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時(shí)處理。如轉(zhuǎn)載本網(wǎng)內(nèi)容,請注明出處。
 發(fā)表評論
關(guān)于本站 網(wǎng)站聲明 廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接   
Copyright © 2004-2006 考試吧 (Exam8.com) All Rights Reserved 
中國科學(xué)院研究生院中關(guān)村園區(qū)(北京市海淀區(qū))