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

     (28)以下選項中,非法的字符常量是 ______。
  A)'\t'    B)'\17'      C)"\n"      D)'\xaa'
  答案:C
  評析:C語言中字符常量是以單引號括起來的單個字符,或為以"\"與三位八進制數值或兩位十六進制數值代替單個字符。
  
  (29)以下程序的輸出結果是______ 。
  #include<stdio.h>
  main()
  {
  int a=200;
  #define a lOO
  printf("%d",a);
  #undef a
  printf ("%dt",a);
  }
  A)200 100    B)100 100      C)100 200      D)200 200
  答案:C
  評析:#define宏名的有效范圍為定義命令之后到本源文件結束,可以在程序中使用#undef命令終止宏定義的作用域。本題由于#undef的作用,使a的作用范圍在#define a 100到#undefa之間,故答案為c。
  
  (30)若有說明:int i,j=2,*p=&i;,則能完成i=j賦值功能的語句是______。
  A)i=*p;    B)*p=*&j;     C)i=&j;      D)i=**p;
  答案:B
  評析:指針是一種用來存放變量地址的特殊變量。本題中指針變量p用于存放整型變量i的地址,改變*p的值即為改變i的值。又因為"&"和"∥兩個運算符的優(yōu)先級別相同,按自右而左的方向結合,所以。&j先進行&j運算,得j的地址,再進行+運算,取所得地址里面的值,故t&j與i等價。
  
  (31)假定int類型變量占用兩個字節(jié),若有定義:int x[10]={0,2,4};,則數組x在內存中所占字節(jié)數是______。
  A)3       B)6         C)10        D)20
  答案:D
  評析:當數組定義后,系統(tǒng)就為其分配內存空間,而不論其中有沒有內容。因此,本題中數組x[10]不論是否為其元素初始化,它所分配的存儲空間仍為2+10=20個字節(jié)。
  
  (32)執(zhí)行以下的程序段后,m的值是______。
  int a[2][3]={{l,2,3},{4,5,6}};
  int m,*p;
  p=&a[0][0];
  m=p[41;
  A)4       B)5         C)3         D)不確定
  答案:B
  評析:程序中定義了一個指向整型變量的指針變量,并對其賦值為二維整型數組a的首元素的地址。P[4]等價于*(p+4),即二維數組a中第四個元素的值,而a是一個2*3的二維數組,其第四個元素為a[1][1],即5。
  
  (33)以下程序的輸出結果是______。
  main()
  {int i,a[10];
  for(i=9;i>=O;i--) a[i]=lO-i;
  printf("%d%d%d",a[2],a[5],a[8]);
  }
  A)258      B)74l        C)852        D)369
  答案:C
  評析:在本題運行時主要注意的是當i=9時,a[i]=10-9=1;i=8時,a[i]=10-8=2;i=7時,a[i]=10-7=3:……依此類推,,直到i=0時,a[i]=10-0=10;此時,i的值已變?yōu)椋?,判斷for的循環(huán)條件,不成立,然后輸出a[2],a[5],a[8]分別為8,5,2。
  
  (34)下面程序的輸出結果為______ 。
  #include<string.h>
  main()
  {
  char pl[7]="abc",p2[]="ABC",str[50]= "xyz";
  strcpy(str,strcat(pl,p2));
  printf("%s",str);
  }
  A)xyzabcABC  B)abcABC       C)xyzabc      D)xyzABC
  答案:B
  評析:strcpy(strl,s1):作用是將字符串s1拷貝到字符數組strl中去。strcat(字符數組1,字符數組2):把。字符串2接到字符串l的后面,結果放在字符數組1中,函數調用后返回字符數組l的地址。
  本題定義了三個字符數組pl,p2,str,strcat(p1,p2)函數的作用是將字符串數組p2接到字符串p1的后面,結果放在字符數組p1,再通過sffcpy()函數將該字符串拷貝到str數組中,原str數組中的字符串xyz被覆蓋,因此打印輸出字符串str即可得到abcABC。
  
  (35)以下數組定義中不正確的是______。
  A)int a[2Ⅱ3];        B)int b[][3]={0,1,2);
  C)int c[100][100]={0};    D)int d[3][]={{l,2},{l,2,3},{1,2,3,4}};
  答案:D
  評析:一維數組的定義方式為:
  類型說明符數組名[常量表達式];
  選項A符合此定義形式,正確;c語言中多維數組賦初值時可以部分賦值,也可以不指定除第一維以外的其它維的大小,故選項c正確;另外,如果對全部數組元素都賦初值,則定義數組時對第一維的長度可以不指定,但第二維的長度不能省,所以選項B正確,而選項D是錯誤的。
  
  (36)以下程序的輸出結果是______。
  main()
  { jnt a[4][4]:{{1,3,5},{2,4,6},{3,5,7}};
  printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]);
  }
  A)0650     B)1470       C)5430       D)輸出值不定
  答案:A
  評析:對未給出初始值的整數數組元素,被缺省初始化為零。
  
  (37)在說明語句:int *f();中,標識符f代表的是______。
  A)一個用于指向整型數據的指針變量  B)一個用于指向一維數組的行指針
  C)一個用于指向函數的指針變量    D)一個返回值為指針型的函數名
  答案:D
  評析:帶回指針值的函數,其一般定義形式為:
  類型標識符 *函數名(參數表);
  例如:int *f(x,y);
  其中,f是函數名,調用它以后能得到一個指向整型數據的指針(地址),x,y是函數f的形參。在f的兩側分別為。運算符和()運算符,而()優(yōu)先級高于s,因此f先與()結合,顯然是函數形式。這個函數前面有一個。,表示此函數是指針型函數(函數值是指針)。前面的int表示返回的指針指向整型變量。
  
  (38)以下程序的輸出結果是______。
  main()
  { char st[20]= "hello\0\t\\";
  printf("%d%d\n",strlen(st),sizeof(st));
  }
  A)99       B)520       C)1320       D)2020
  答案:B
  評析:c語言中字符串是以'\0'字符結束的,且strlen()函數計算的是'\0'字符前的所有字符的個數。本題中strlen(st)應為5。數組定義以后系統(tǒng)就為其分配相應大小的內存空間,而不論其中有沒有內容。sizeof()函數是計算變量或數組的所分配到的內存空間的大小。所以本題的sizeof(st)為20。
  
  (39)下面程序運行后的輸出結果是______。
  int d=1:
  fun(int p)
  { static int d=5;d+=p;
  printf("%d",d);return d;
  }
  main()
  {int a=3;printf("%d\n",fun(a+fun(d)));}
  A)6 9 9     B)6 6 9       C)6 15 15      D)6 6 15
  答案:C
  評析:靜態(tài)局部變量在編譯時賦初值,即只賦初值一次,在程序運行時它已有初值。以后每次調用時不再重新賦初值而只是保留上次函數調用結束時的值,而對自動變量賦初值,不是在編譯時進行的,而在函數調用時進行,每調用一次函數重新給一次初值,相當于執(zhí)行一次賦值語句。
  本題在程序開頭定義了全局變量d并賦初值1,在被調函數fun()中,定義了靜態(tài)局部變量d,初值為5。在第一次調用函數fun時,d初值為5,p由主函數傳遞過來的值為1,則d=d+p=5+l=6,由于d是靜態(tài)局部變量,在函數調用結束后,它仍保留d=6。再次調用fun函數,d的初值為6,而由主函數傳遞的p的值為9,則此時d=d+p=6+9=15,最后打印輸出d的值并返回主函數。
  
  (40)以下選項中,不能正確賦值的是______。
  A)char s1[10];sl="chest";    B)char s2[]。{'C','t','e','s','t');
  C)char s3[20]= "Chest";    D)char*s4="Ctest\n"'
  答案:A
  評析:c語言中不能將字符串常量直接賦給數組。但在賦初值時可以。
  
  (41)以下程序輸出正確的是______。
  alnovep(int *p,int(*a)[3],int n)
  {int i,j;
  for(i=0;i<n;i++)
  for(j=0 ;j<n;j++){ *p=a[i][j];p++;}
  }
  main()
  {int *p,a[3][3]={{1,3,5},{2,4,6}};
  p=(int*)malloc(100);
  amovep(p,a,3);
  printf("%d%d\n",p[2],p[5]);free(p);
  }
  A)56       B)25        C)34         D)程序錯誤
  答案:A
  評析:本題main函數中定義了指針p和二維數組a,通過函數amovep將數組的值存入指針p所指向的存儲單元中,a的各元素分別為:a[0][0]=l,a[0][1]=3,a[0][2]=5,a[1][0]=2,a[l][1]=4,a[1][2]=6,a[2][O]=0,a[2][1]=0,a[2][2]=0a
  通過malloc()函數給指針分配內存空間,free()函數用于釋放指針變量所用內存空間。在主函數中通過amovep(p,a,3)調用函數amovep,使得實參p與形參p,實參數組a與形參中指向數組的指針變量共用同一存儲空間。最后輸出p[2],p[5]為56。
  
  (42)下面程序的輸出結果是______。
  #define a 121
  const b=12:
  enum c{a1,a2};
  main()
  {
  printf("%d,%d,%d.",sizeOf(a),sizeOf(b),sizeof(enum C));
  }
  A)121,0,4   B)2,2,2      C)0,2,4      D)0,2,2
  答案:B
  評析:sizeof函數是取變量所占的存儲空間的字節(jié)數,標識a代表常量121;const b=12;,其中數據類型可以缺省,默認為整型;enum c{al,a2};定義了一個枚舉類型enum c,al,a2為枚舉元素,在c編譯時,對枚舉元素按常量處理,它們的值按定義順序依次為0,1。因此它們的字節(jié)數均為2,2,2。
  
  (43)以下程序的輸出結果是______。
  struct HAR
  {int x,y;struct HAR *p;} h[2];
  main()
  { h[0].X=1; h[O].y=2;
  h[1].x=3;h[1].y=4;
  h[0].p=&h[1];h[1].p=h;
  printf("%d%d\n",(h[O].p)->x,(h[1].p)->y);
  }
  A)12       B)23         C)14         D)32
  答案:D
  評析:本題中是一個含有兩個結點的循環(huán)鏈表。
  c語言中結構體的定義為:.
  struct結構體類型名
  {
  成員項表:
  };
  
  (44)變量a所占的內存字節(jié)數是______ 。
  A)4       B)5          C)6          D)8
  Union U
  { char st[4];
  Int i:
  Long l;
  };
  Struct A
  { int c;
  Union U u;
  }a;
  答案:C
  評析:結構體變量所占內存長度是各成員占內存長度之和,而共用體變量所占的內存長度等于最長的成員的長度。本題結構體變量a中成員c為整型占2個字節(jié),共用體變量u最大長度為4個字節(jié),故選C。
  
  (45)以下程序的結果是______。
  int a,b;
  void fun()
  { a=100;b=200;)
  main()
  {int a=5,b=7;
  fun();
  printf("%d%d\n",a,b);
  }
  A)100200    B)57         C)200100      D)75
  答案:B
  評析:全程變量是可以在子函數中對其值作改變,且它也可作為函數間的值傳遞。但當函數或子函數中定義了與全程變量名稱相同的局部變量,則全程變量將被屏蔽。
  
  (46)以下程序的輸出結果是______。
  #define M(x,y,z) x*y+z
  main()
  { int a=l,b=2,c=3;
  printf("%d\n",M(a+b,b+c,c+a));
  }
  A)19      B)17         C)15        D)12
  答案:D
  評析:c語言的宏定義包括不帶參數的宏定義與帶參數的宏定義。本題為帶參數的宏定義,其形式為:#define宏名(形參表) 字符串,本題的M(a十b,b+c,c+a)被字符串a+b*b+c+c+a代替。
  
  (47)若有以下說明和語句:
  struct st
  {int n;char *ch;);
  struct st a[3]={5,"abc",7,"def',9,"ghK"},*p=a;則值為6的表達式是______。
  A)p++ ->n    B)p一>n++      C)(*p).n++   D)+十p->n
  答案:D
  評析:根據結構變量的存儲特點,p+l意味著增加地址值為結構體數組a的一個元素所占的字節(jié)數,'即p++使p由a[0]指向a[1]起始地址。本題++p>n得到p指向的結構體變量中成員n的值使之加l。因為p指向數組a起始地址,p->n的值為5,再執(zhí)行自加l運行,結果為6。
  
  (48)整型變量x和Y的值相等,且為非O值,則以下選項中結果為0的表達式是______。
  A)x||Y     B)X|Y        C)X&Y        D)X^Y
  答案:D
  評析:"‖"為或運算符,當其左右表達式中只要一個為非零則整個表達式的值1。︱是按位或,&是按位與,^是按位異或,這三位運算符是按值的二進制位來比較的。
  
  (49)C語言中,組成數據文件的成分是______。
  A)記錄    B)數據行       C)數據塊      D)字符(字節(jié))序列
  答案:D
  評析:c語言中的文件是流式文件。流式文件是一種無結構文件,即整個文件是一串字符流或二進制流。文件的存取以字符或字節(jié)為單位。
  
  (50)下面的程序執(zhí)行后,文件test.t中內容是______。
  #include<stdio.h>
  void fun(char *fname,char *st)
  { FILE *myf;int i;
  myf=fopen(fname, "w");
  for(i=0;i<strlen(st);i++)fputc(st[i],myf);
  fclose(myf);
  }
  main()
  {fun("test.t","new world");fun("test.t","hello,");}
  A)hello,  B)new worldhello C)new world  D)hello,rid
  答案:A
  評析:c語言中文件有文本文件與二進制文件,對文件的使用前必須先打開,打開方式有只讀、寫入、讀寫等方式。
  
  二、填空題(每空2分,共40分)
  
  請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得分。
  
  (1)實現算法所需的存儲單元多少和算法的工作量大小分別稱為算法的 【1】  。
  答案:【1】空間復雜度和時間復雜度
  評析:算法的復雜性是指對一個在有限步驟內終止算法和所需存儲空間大小的估計。算法所需存儲空間大小是算法的空間復雜性,算法的計算量是算法的時間復雜性。
  
  (2)數據結構包括數據的邏輯結構、數據的 【2】 以及對數據的操作運算。
  答案:【2】存儲結構
  評析:數據結構包括3個方面,即數據的邏輯結構、數據的存儲結構及對數據的操作運算。
  
  (3)一個類可以從直接或間接的祖先中繼承所有屬性和方法。采用這個方法提高了軟件的  【3】 。
  答案:【3】可重用性
  評析:繼承的優(yōu)點:相似的對象可以共享程序代碼和數據結構,從而大大減少了程序中的冗余,提高軟件的可重用性。
  
  (4)面向對象的模型中,最基本的概念是對象和  【4】 。
  答案:【4】類
  評析:面向對象模型中,最基本的概念是對象和類。對象是現實世界中實體的模型化;將屬性集和方法集相同的所有對象組合在一起,可以構成一個類。
  
  (5)軟件維護活動包括以下幾類:改正性維護、適應性維護、 【5】 維護和預防性維護。
  答案:【5】完善性
  評析:軟件維護活動包括以下幾類:改正性維護、適應性維護、完善性維護和預防性維護。完善性維護是指為了滿足用戶對軟件提出的新功能與性能要求,需要修改或再開發(fā)軟件,以擴充軟件功能、增強軟件性能、改進加工效率、提高軟件的可維護性。
  
  (6)語句:X++;、++X;、X=X+1;、X=l+X;,執(zhí)行后都使變量X中的值增l,請寫出一條同一功能的賦值語句(不得與列舉的相同) 【6】  。
  答案:【6】X+=1:
  評析:在c語言中使變量增l的方法有:自增運算符與賦值語句。其中自增運算符有前置與后置方式,賦值語句也有兩種類型。
  本題中的主要增l方式有:x++;、++x;、X=X+I;、x=1+x;、x+=l;。
  
  (7)設Y是int型變量,請寫出判斷Y為奇數的關系表達式  【7】
  答案:【7】Y%2==1 或Y%2!=0
  評析:判斷變量是否為奇數可以用變量與2取模,判斷結果是為1或不為0。本題具體做法如下:Y%2==1或Y%2 1=0。
  
  (8) 以下程序的輸出是 【8】  。
  main()
  {
  char strl[]="How do you do",*pl=strl:
  strcpy(strl+strlen(strl)/2,"es she");
  printf("%s\n",p1);
  }
  答案:【8】How does she
  評析:strcpy(strl,s1):字符串拷貝函數,作用是將字符串s1拷貝到字符數組strl中去。strlen(str):測試字符串str的長度,函數的值為字符串中實際長度,不包括'\O'在內。本題中strlen(strll的值為13,則strcpy(strl+strlen(strl)/2,"es she",);相當于strcpy(strl+6,"es she");,因此可得答案為How does she。
  
  (9)以上程序運行后的輸出結果是 【9】   。
  main()
  {int i=10,J=0;
  do
  {j=j+i;i--;}
  while(i>2);
  printf("%d\n",j);
  }
  答案:【9】52
  評析:do...while語句的形式為:
  do
  {
  語句:
  }while(條件表達式)
  當條件表達式為非零時,繼續(xù)執(zhí)行循環(huán)體,直到條件表達式為零時退出循環(huán)。
  
  (10)設有如下程序:
  main()
  {int nl,n2;
  scanf("%df",&n2);
  while(n2!=0)
  { nl=n2%lO;
  n2=n2/10:
  printf("%d",n1);
  }
  }
  程序運行后,如果從鍵盤上輸入1298,則輸出結果為  【10】   。
  答案:【10】8921
  評析:本題的程序的功能是將輸入的整數反向輸出。
  
  (11)以下程序輸出的最后一個值 【11】  。
  Int  ff(int n)
  {static int f=1:
  f=f*n:
  retun f
  }
  main()
  { int i;
  for(i=1;i<=5;i++)printf("%d\n",ff(i));
  }
  答案:【ll】120
  評析:
  靜態(tài)變量的類型說明符是static,靜態(tài)局部變量屬于靜態(tài)存儲方式,它具有以下特點:
 、凫o態(tài)局部變量屬于靜態(tài)存儲類別,在靜態(tài)存儲區(qū)內分配存儲單元。在程序整個運行期間都不釋放。
 、趯o態(tài)局部變量是在編譯時賦初值的,即只賦初值一次,在程序運行時它已有初值。以后每次調用函數時不再重新賦初值而只是保留上次函數調用結束時的值。
 、廴缭诙x局部變量時不賦初值的話,則對靜態(tài)局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。(注意:c語言中的非靜態(tài)變量在定義時,系統(tǒng)并不會自動給它賦初值)
 、茈m然靜態(tài)局部變量在函數調用結束后仍然存在,但其他函數是不能引用它的。
  本題中函數的功能是:與for語句一起求一個整數的階乘。
  
  (12)以下函數的功能是:求x的y次方,請?zhí)羁眨?BR>  double fun(double x,int y)
  {int i;
  double z;
  for(i=1,z=x;i<y;i++)z=z* 【12】  ;
  return z:
  )
  答案:【12】x
  評析:函數的定義形式為:
  函數類型函數名(形參表)
  {
  類型說明語句;
  執(zhí)行語句:
  }
  本題中函數的功能是:累積變量以求得變量的Y次方。
  
  (13)下列程序的輸出結果是 【13】   。
  main()
  {
  int a[]={2,4,6},*ptr=&a[0],x=8,y,z;
  for(y=O;y<3;y++)
  z=(*(ptr+y)<x)?*(ptr十y):x;
  printf("%d\n",z);
  }
  答案:【13】6
  評析:條件運算符的優(yōu)先級高于賦值運算符,因此本題先計算關系表達式(*(ptr+y)<x)?*(ptr+y):x的值,再賦給變量z。當y=O時,*(ptr+y)=2,而x=8,(*ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=2,所以Z=2;當y=l時,*(ptr+y)=4,(*(pty+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=4,所以z=4;當y=2時,*(ptr+y)=6,(*(ptr+y)<x)條件為真,則整個條件表達式的值為*(ptr+y)=6,所以z=6;循環(huán)結束。因此輸出z的結果為6。
  
  (14)以下程序運行后的輸出結果是 【14】  。
  main()
  { char s[]="9876",*p;
  for(p=s;p<s+2;p++)printf("%s\n",p);
  }
  答案:【14】9876
  876
  評析:指針是一種數據類型,這種數據類型的變量用來存放內存中分配的存儲單元的首地址。
  指針的定義:
  類型說明符 *指針變量名;
  
  (15)若有定義語句:char s[100],d[100];int j=0,i=0;且s中已賦字符串,請?zhí)羁找詫崿F拷貝。(注:不使用逗號表達式)
  while(s[i]){d[j]= 【15】    ;j++;}
  d[j]=0;
  答案:【15】s[i++]
  評析:本題中為了能實現字符串的拷貝,需要使字符數組s從頭到尾依次遍歷其所有元素。本題應使用i的自增后置來實現。
  
  (16)若有如下結構體說明:
  struct STRU
  { int a,b;char c:double d:
  struct STRU *pl,*p2;
  };
  請?zhí)羁,以完成對t數組的定義,t數組的每個元素為該結構體類型。
  【16】  t[20]
  答案:【16】struct STRU
  評析:結構體類型是構造數據類型,是用戶自己定義的一種類型。
  結構體類型的定義:
  struct結構體類型名
  {
  成員項表:
  };
  定義結構體變量的的形式為:
  struct結構體類型名 變量1,變量2,...
  其中變量包括:一般變量、指針變量、數組變量等。
  
  (17)下面的程序可對指定字符串中的字符串進行從大到小排序,請將程序填完整(注:程序采用了冒泡排序算法)
  #include<stdio.h>
  #include<string.h>
  main()
  { char *str="ABCDabcd",temp;
  Int n,i;
  n=strlen(str);
  while(n-->1)
  for(i=0;i<n;i++)
  if(str[i]<str[i+1])
  { temp= 【17】 ;
  str[i]=str[i+1];
  _【18】  =temp;
  }
  Printf(_【19】  );
  }
  答案:【17】str[i]
  【18】str[i+1]
  【19】"%s",str
  評析:本題要求將字符串str中的字符用冒泡排序算法從大到小排列,其實現過程是將相鄰兩個字符進行比較,如果當前字符小于下一個字符,則通過中間變量temp將字符兩兩交換,所以第一空應填:str[i],第二空應填:str[i+1]。最終打印輸出得到的字符串str,所以第三空應填;"%s",str。
  
  (18)以下程序段打開文件后,先利用fseek函數將文件位置指針定位在文件末尾,然后調  用ftell函數返回當前文件位置指針的具體位置,從而確定文件長度,請?zhí)羁铡?BR>  FILE *myf;long fl;
  myf=_【20】  ("test.t","rb");
  fseek(myf,(),SEEK_END);fl+ftell(myf);
  fclose(myf);
  printf("%l d\n",f1);
  答案:【20】fopen
  評析:C語言中的文件分為:ASCII文件與二進制文件。文件在使用前打開,使用后要關閉。
  打開文件的函數為:fopen(),調用形式為:fp=fopen("文件名","使用文件方式");
  關閉文件的函數為:fclose(),調用形式為:fclose(fp);其中fp為文件指針。

上一頁  [1] [2] 

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