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

一、選擇題(1)~(10)每小題2分,(11)-(50)每小題1分,共60分)
  
  下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
  
  (1)數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機(jī)無關(guān)的是數(shù)據(jù)的________。
  A)存儲結(jié)構(gòu)   B)物理結(jié)構(gòu)      C)邏輯結(jié)構(gòu)     D)物理和存儲結(jié)構(gòu)
  答案:C
  評析:數(shù)據(jù)結(jié)構(gòu)概念一般包括3個方面的內(nèi)容,數(shù)據(jù)的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)及數(shù)據(jù)上的運(yùn)算集合。數(shù)據(jù)的邏輯結(jié)構(gòu)只抽象的反映數(shù)據(jù)元素之間的邏輯關(guān)系,而不管它在計算機(jī)中的存儲表示形式。
  
  (2)棧底至棧頂依次存放元素A、B、C、D,在第五個元素E入棧前,棧中元素可以出棧,
  則出棧序列可能是________。
  A)ABCED     B)DBCEA       C)CDABE       D)DCBEA
  答案:D
  評析:棧操作原則上"后進(jìn)先出",棧底至棧頂依次存放元素A、B、c、D,則表明這4個元素中D是最后進(jìn)棧,B、c處于中間,A最早進(jìn)棧。所以出棧時一定是先出D,再出c,最后出A。
  
  (3)線性表的順序存儲結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)分別是________。
  A)順序存取的存儲結(jié)構(gòu)、隨機(jī)存取的存儲結(jié)構(gòu)
  B)隨機(jī)存取的存儲結(jié)構(gòu)、順序存取的存儲結(jié)構(gòu)
  C)隨機(jī)存取的存儲結(jié)構(gòu)、隨機(jī)存取的存儲結(jié)構(gòu)
  D)任意存取的存儲結(jié)構(gòu)、任意存取的存儲結(jié)構(gòu)
  答案:B
  評析:順序存儲結(jié)構(gòu)中,數(shù)據(jù)元素存放在一組地址連續(xù)的存儲單元中,每個數(shù)據(jù)元素地址可通過公式LOC(ai)。LOC(a1)+(i-1)L計算得到,從而實現(xiàn)了隨機(jī)存取。對于鏈?zhǔn)酱鎯Y(jié)構(gòu),要對某結(jié)點進(jìn)行存取,都得從鏈的頭指針指向的結(jié)點開始,這是一種順序存取的存儲結(jié)構(gòu)。
  
  (4)在單鏈表中,增加頭結(jié)點的目的是________。
  A)方便運(yùn)算的實現(xiàn)          B)使單鏈表至少有一個結(jié)點
  C)標(biāo)識表結(jié)點中首結(jié)點的位置     D)說明單鏈表是線性表的鏈?zhǔn)酱鎯崿F(xiàn)
  答案:A
  評析:頭結(jié)點不僅標(biāo)識了表中首結(jié)點的位置,而且根據(jù)單鏈表(包含頭結(jié)點)的結(jié)構(gòu),只要掌握了表頭,就能夠訪問整個鏈表,因此增加頭結(jié)點目的是為了便于運(yùn)算的實現(xiàn)。
  
  (5)軟件設(shè)計包括軟件的結(jié)構(gòu)、數(shù)據(jù)接口和過程設(shè)計,其中軟件的過程設(shè)計是指________。
  A)模塊間的關(guān)系            B)系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程描述
  C)軟件層次結(jié)構(gòu)            D)軟件開發(fā)過程
  答案:B
  評析:軟件設(shè)計包括軟件結(jié)構(gòu)設(shè)計、數(shù)據(jù)設(shè)計、接口設(shè)計和過程設(shè)計。其中結(jié)構(gòu)設(shè)計是定義軟件系統(tǒng)各主要部件之間的關(guān)系;數(shù)據(jù)設(shè)計是將分析時創(chuàng)建的模型轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的定義;接口設(shè)計是描述軟件內(nèi)部、軟件和操作系統(tǒng)之間及軟件與人之間如何通信;過程設(shè)計則是把系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程性描述。
  
  (6)為了避免流程圖在描述程序邏輯時的靈活性,提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程  圖,通常也把這種圖稱為________。
  A)PAD圖    B)N-S圖       C)結(jié)構(gòu)圖       D)數(shù)據(jù)流圖
  答案:B
  評析:常見的過程設(shè)計工具有:程序流程圖、N-S圖、PAD圖和HIPO圖。其中,為了避免流程圖在描述程序邏輯時的靈活性,提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,通常也把這種圖稱為N-S圖。
  
  (7)數(shù)據(jù)處理的最小單位是________。
  A)數(shù)據(jù)     B)數(shù)據(jù)元素      C)數(shù)據(jù)項      D)數(shù)據(jù)結(jié)構(gòu)
  答案:C
  評析:數(shù)據(jù)處理的最小單位是數(shù)據(jù)項;由若干數(shù)據(jù)項組成數(shù)據(jù)元素;而數(shù)據(jù)是指能夠被計算機(jī)識別、存儲和加工處理的信息載體;數(shù)據(jù)結(jié)構(gòu)是指數(shù)據(jù)之間的相互關(guān)系和數(shù)據(jù)運(yùn)算。
  
  (8)下列有關(guān)數(shù)據(jù)庫的描述,正確的是________。
  A)數(shù)據(jù)庫是一個DBF文件       B)數(shù)據(jù)庫是一個關(guān)系
  C)數(shù)據(jù)庫是一個結(jié)構(gòu)化的數(shù)據(jù)集合   D)數(shù)據(jù)庫是一組文件
  答案:C
  評析:數(shù)據(jù)庫(Database,簡稱DB)是數(shù)據(jù)的集合,它具有統(tǒng)一的結(jié)構(gòu)形式并存放于統(tǒng)一的存儲介質(zhì)內(nèi),是多種應(yīng)用數(shù)據(jù)的集成,并可被各個應(yīng)用程序所共享。數(shù)據(jù)庫中的數(shù)據(jù)具有"集成"、"共享"之特點。
  
  (9)單個用戶使用的數(shù)據(jù)視圖的描述稱為 ______ 。
  A)外模式    B)概念模式     C)內(nèi)模式      D)邏輯模式
  答案:A
  評析:外模式是用戶的數(shù)據(jù)視圖,也就是用戶所見到的數(shù)據(jù)模式;全局?jǐn)?shù)據(jù)視圖的描述稱為概念模式,即數(shù)據(jù)庫中全部數(shù)據(jù)的整體邏輯結(jié)構(gòu)的描述;物理存儲數(shù)據(jù)視圖的描述稱為內(nèi)模式,即數(shù)據(jù)庫在物理存儲方面的描述;存儲模式即為內(nèi)模式。
  
  (10)需求分析階段的任務(wù)是確定______。
  A)軟件開發(fā)方法  B)軟件開發(fā)工具  C)軟件開發(fā)費(fèi)用    D)軟件系統(tǒng)功能
  答案:D
  評析:需求分析是軟件定義時期的最后一個階段,它的基本任務(wù)就是詳細(xì)調(diào)查現(xiàn)實世界要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)的工作概況,明確用戶的各種需求,然后在此基礎(chǔ)上確定新系統(tǒng)的功能。
  
  (11)若變量a是int類型,并執(zhí)行了語句:a='A'+1.6;,則正確敘述是______。
  A)a的值是字符C           B)a的值是浮點型
  C)不允許字符型和浮點型相加     D)a的值是字符'A'的ASCII值加上l
  答案:D
  評析:在賦值表達(dá)式中,賦值符右邊的值的類型會自動轉(zhuǎn)換成賦值符左邊的變量的類型。在本題中,先用"A"的ASCII碼值加上1.46得到66.46,然后將它強(qiáng)制轉(zhuǎn)換成int型,轉(zhuǎn)換后,實數(shù)的小數(shù)部分全部
  
  (12)若以下選項中變量已正確定義,則正確的賦值語句是______。
  A)x1=26.8%3;  B)1+2=x2;   C)x3=0x12;     D)x4=1+2=3;
  答案:C
  評析:賦值符號"="就是賦值運(yùn)算符,它的作用是將一個數(shù)據(jù)賦給一個變量。如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換,所以選項A錯誤。在賦值表達(dá)式中,賦值運(yùn)算符的左側(cè)必須是一個變量,所以選項B、D錯誤。選項C是將一個十六進(jìn)制數(shù)賦值給變量x3。
  
  (13)以下程序段的輸出結(jié)果是______。
  int a=1234;
  printf("%2d\n",a);
  A)12       B)34        C)1234       D)提示出錯、無結(jié)果
  答案:C
  評析:本題主要考查對primf函數(shù)域?qū)捗枋龇睦斫猓谶@里我們要特別注意:輸出數(shù)據(jù)的實際精度并不主要決定于格式項中的域?qū)捙c精度,也不決定于輸入的數(shù)據(jù)精度,而主要決定于數(shù)據(jù)在機(jī)器內(nèi)的存儲精度。
  
  (14)以下選項中不屬于C語言的類型的是______。
  A)signed short int         B)unsigned char
  C)signed long            D)long short
  答案:D
  評析:c語言中歸納起來,基本類型數(shù)據(jù)有以下幾種:
  [signed]char;unsigned char;[signed]short[int];unsigned short[int];[signed]long[int];unsigned long[int];float;double.
  
  (15)設(shè)有定義:int a,*pa=&a;以下scanf語句能正確為變量a讀入數(shù)據(jù)的是______。
  A)scanf("%d",B);         B)scanf("%d",a);
  C)scanf("%d",&pa);        D)scanf("%d",*pa);
  答案:C
  評析:scanf函數(shù)要求其中的輸入項必須是地址形式,比如:普通變量的地址、數(shù)組名、指針變量等。對于普通變量,地址形式為:&變量名;當(dāng)一個普通變量的地址賦予了一個指針變量名,scanf函數(shù)的輸入項處就可以直接寫這個指針變量名。
  
  (16)以下程序的輸出結(jié)果是______。
  main()
  {int a=5,b=4,c=6,d;
  printf("%d\n",d=a>c?(a>c?a:C):(b));
  }
  A)5       B)4         C)6        D)不確定
  答案:B
  評析:本題最重要的分析d=a>c?(a>c?a:C):(b)),首先運(yùn)算括號內(nèi)的式子a>c?a:c,它的值是c的值6,即式子化成d=a>c?6:4。顯然a=c,所以將4賦給d。
  
  (17)以下程序中,while循環(huán)的循環(huán)次數(shù)是______ 。
  main()
  { int i=0:
  while(i<10)
  {if(i<1)continue;
  if(i==5)break;
  i++:
  }
  ……
  }
  A)1       B)10        C)6        D)死循環(huán),不能確定次數(shù)
  答案:D
  評析:進(jìn)入循環(huán)后,先執(zhí)行一個條件語句,如果i的值小于l,那么直接進(jìn)入下一輪循環(huán),因為i的初始值是0,小于l,故直接進(jìn)入下一輪循環(huán),又因為i的值始終沒有改變,所以這個循環(huán)成了死循環(huán)。
  
  (18)有以下程序:
  main()
  {
  char k;int i;
  for(i=1;i<3;i++)
  {
  scanf("%c",&k);
  switch(k)
  {
  case'0':printf["another\n"];
  case'1':printf["number\n");
  }
  }
  }
  程序運(yùn)行時,從鍵盤輸入:0l<回車>,程序執(zhí)行后輸出結(jié)果是______。
  A)another   B)another      C)another      D)number
  number      number        number       number
  another       number
  答案:C
  評析:switch語句是多分支選擇語句,執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行。"case常量表達(dá)式"只是起語句標(biāo)號作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語句時,根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號,就從此標(biāo)號開始執(zhí)行下去,不再進(jìn)行判斷。
  
  (19)以下程序的輸出結(jié)果是______。
  main()
  {Int a=O,i;
  for(i=1;i<5;i++)
  {switch(i)
  { case 0:
  case 3:a+=2:
  case l:
  case 2:a+=3:
  default:a+=5;
  }
  }
  printf("%d\n",a)
  }
  A)3l       B)13        C)10         D)20
  答案:A
  評析:switch結(jié)構(gòu)的執(zhí)行過程同上題。
  
  (20)己定義c為字符型常量,則下列語句中正確的是______。
  A)C='97'    B)c="97"     C)c=97        D)c="a"
  答案:C
  評析:字符變量占內(nèi)存一個字節(jié),只能放一個字符;字符常量為單引號括起的單個字符;字符串常量為雙引號括起的一串字符(可以0個字符,即"",稱為空串)。選項c為字符ASCII碼的整數(shù)形式。
  
  (21)以下程序的輸出結(jié)果是_________。
  main()
  f int a=4,b=5,c=0,d;
  d=!a&&!b||!c;
  printf("%d\n",d);
  }
  A)l       B)0         C)非0的數(shù)     D)-1
  答案:A
  評析:!a值為0,故!a&&!b的值為0,!c的值為l,而0IIl的值應(yīng)該是l。所以答案是A。
  
  (22)以下程序的輸出結(jié)果是_________。
  #include<stdio.h>
  main()
  {int i=0,a=0;
  while(i<20)
  {for(;;)
  {if((i%10)==0)break;
  else  I--:
  }
  i+=ll;a+=i;
  }
  printf("%d\n",a);
  }
  A)21      B)32        C)33        D)11
  答案:B
  評析:本題中,有兩個循環(huán)語句。首先,i=0,進(jìn)入while循環(huán),for語句中對循環(huán)沒有任何條件,故直接進(jìn)入for循環(huán),因為0%10結(jié)果還是O,所以跳出for循環(huán),執(zhí)行i+:11,i的值變?yōu)?1,執(zhí)行a+=i,a的值變?yōu)?1:接著進(jìn)入下一輪while循環(huán),在for循環(huán)中,因為i的值是11,對10取余結(jié)果為l,所以執(zhí)行i自減,i的值變成10,進(jìn)入又一輪for循環(huán),因為10%10==0,所以跳出for循環(huán),執(zhí)行i+=1l,i的值變成21,執(zhí)行a+=i,也就是將21+1 1的和賦給a,a=32,因為此時i的值不再小于20,所以結(jié)束循環(huán),
  故輸出結(jié)果是32。
  
  (23)有以下程序:
  int n(int x,int y)
  {retum x>y?x:y;}
  Int f2(int x,int y)
  {return x>y?y:x;)
  main()
  { int a=4,b=3,c=5,d,e,f;
  d=f1(a,b);d=fl(d,C);
  e=f2(a,b);e=f2(e,C);
  f=a+b+C-d-e;
  printf("%d,%d,%d\n",d,e,f);
  }
  程序運(yùn)行后的輸出結(jié)果是_________ 。
  A)3,4,5    B)5,3,4      C)5,4,3       D)3,5,4
  答案:B
  評析:函數(shù)n是一個求兩個整數(shù)中最大值的函數(shù),函數(shù)f2是一個求兩個整數(shù)中最小值的函數(shù)。在main函數(shù)中兩次調(diào)用函數(shù)n,求得變量a、b、、c中的最大值賦值給d;兩次調(diào)用函數(shù)f2,求得變量a、b、c中的最小值賦值給e;表達(dá)式a+b+c-d-e得到中間值,輸出5,3,4。
  
  (24)以下程序的輸出結(jié)果是_________。
  int f()
  {static int i=0;
  int s=1:
  s+=i;i++;
  return s;
  }
  main()
  {inti,a=0;
  for(i=0;i<5;j++)a+=f();
  printf("%d\n",a);
  }
  A)20      B)24        C)25         D)15
  答案:D
  評析:靜態(tài)變量,在編譯時就為其分配了存儲空間,程序一開始執(zhí)行便被建立,直到該程序執(zhí)行結(jié)束都存在,而不像動態(tài)變量只存在于函數(shù)或分程序被調(diào)用期間。在函數(shù)多次被調(diào)用的過程中靜態(tài)局部變量的值具有可繼承性。
  
  (25)已定義以下函數(shù):
  fun(int *p)
  {retum *p;}
  該函數(shù)的返回值是______ 。
  A)不確定的值 B)形參p中存放的值 C)形參p所指存儲單元中的值 D)形參p的地址值
  答案:C.
  評析:函數(shù)首部fun(int*p)中+p表示這是一個指針變量,指向整型數(shù)據(jù),用來從主調(diào)函數(shù)接收地址;而語句return *p;中的*p代表p所指向存儲單元中的值。
  
  (26)若有以下程序
  #include<stdio.h>
  Void f(int n);
  main()
  {void f(int n);
  f(5);
  }
  Void f(int n)
  {print("%d\n",n);}
  則以下敘述中不正確的是______ 。
  A)若只在主函數(shù)中對函數(shù)f進(jìn)行說明,則只能在主函數(shù)中正確調(diào)用函數(shù)f
  B)若在主函數(shù)前對函數(shù)f進(jìn)行說明,則在主函數(shù)和其后的其它函數(shù)中都可以正確調(diào)用函數(shù)f
  C)對于以上函數(shù)程序,編譯時系統(tǒng)會提示出錯信息;提示對f函數(shù)重復(fù)說明
  D)函數(shù)f無返回值,所以可用void將其類型定義為無值型
  答案:C
  評析:一個函數(shù)在一個文件中的定義只能有一次,但對它的聲明卻可以有很多個。一個函數(shù)可以正確調(diào)用在當(dāng)前函數(shù)之前聲明的函數(shù)。

[NextPage]
    (27)有以下程序段:
  int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
  b=p[5];
  b中的值是______。
  A)5       B)6         C)8         D)9
  答案:D
  評析:數(shù)組a各元素a[O]~a[9]的值依次為1~10;在程序的說明部分,指針變量p初始化為&a[3](即a+3),則p[5]相當(dāng)于·(p+5),相當(dāng)于a[8],所以執(zhí)行語句b=p[5];后,b的值為9。
  
  (28)在C語言中,形參的缺省存儲類是______。
  A)auto     B)register      C)static      D)extern
  答案:A
  評析:程序進(jìn)行編譯時,并不為形式參數(shù)分配存儲穿間。只有在被調(diào)用時,形式參數(shù)才臨時地占有存儲空間。形式參數(shù)用關(guān)鍵字auto作存儲類別的聲明時,關(guān)鍵字"auto"可以省略,auto不寫則隱含確定為"自動存儲類別",它屬于動態(tài)存儲方式。
  
  (29)有以下定義:
  #include<stdio.h>
  char a[10],*b=a;
  不能給數(shù)組a輸入字符串的語句是______。
  A)gets(a);  B)gets(a[0]);  C)gets(&a[0]); D)gets(b);
  答案:B
  評析:函數(shù)gets的格式為:gets(字符數(shù)組名)
  c語言中,字符數(shù)組名代表數(shù)組的首元素地址,即&a[O],字符指針變量lb值也為數(shù)組a的首地址,選項A、c、D均能給數(shù)組a輸入字符串。選項B中a[O]為數(shù)組元素,是一個數(shù)據(jù)變量。
  
  (30)若指針p已正確定義,要使p指向兩個連續(xù)的整型動態(tài)存儲單元,不正確的語句是 ______.
  A)p=2*(int*)malloc(sizeof(int));  B)p=(int*)malloc(2*sizeof(int))
  C)p=(int*)malloc(2*2)        D)p=(int*)calloc(2,sizeof(int))
  答案:A
  評析:malloe函數(shù)的作用是在內(nèi)存開辟指定大小的存儲空問,并將此存儲空間的地址作為函數(shù)值帶回,它的原型為void。malloe(unsigned int size),函數(shù)值為指針,這個指針是指向void類型。如果要將此返回地址賦給一個指向特定類型的指針變量,則應(yīng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。
  calloc函數(shù)的模型是:void*calloc(unsigned int num,unsigned int size)作用是分配num個大小為size字節(jié)的空間。
  
  (31)下面程序段的輸出結(jié)果是______ 。
  main()
  {
  char strl [10]={'s','t','u','d','e','n','t'};
  printf("%d\n",strlen(strl));
  }
  A)7       B)8         C)10        D)存在語法錯誤
  答案:A
  評析:strlen()函數(shù)得到字符串的長度,返回值為數(shù)值型。字符數(shù)組初始化,若提供的初值個數(shù)大于數(shù)組長度,則按語法錯誤處理。如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定義為空字符。
  
  (32)以下程序的輸出結(jié)果是______。
  main()
  {int x=040;
  printf("%o\n",x<<1);
  }
  A)100      B)80        C)64         D)32
  答案:A
  評析:040用二進(jìn)制表示就是00100000,左移一位,得到的值應(yīng)該是01000000,化成八進(jìn)制應(yīng)該是0100。
  
  (33)下面程序運(yùn)行后的輸出結(jié)果是______。
  main()
  {
  char arr[2][4];
  strcpy(arr[0],"you");strcpy(arr[1],"me");
  arr[0][3]='&';
  print"%s\n",arr[0]);
  }
  A)you&me    B)you        C)me         D)err
  答案:A
  評析:在主函數(shù)中定義了一個2*4的二維字符數(shù)組,執(zhí)行strcpy(arr[O]"fIyou");后,arr[0]={'y''o','u','\0'},執(zhí)行strcpy(arr[1],"me");后arr[1]={ 'm', 'e','\0',不定},當(dāng)執(zhí)行完arr[O][3];'&';從arr[O]開始的存儲空間中的字符依次是'y','o','u','&','m','e','\0',故執(zhí)行printf("%s\n",arr[O]);后的輸出結(jié)果為"you&me",選A。
  
  (34)若要打開A盤上的user子目錄下名為abc.txt的文本文件進(jìn)行讀、寫操作,下面符合  此要求的函數(shù)調(diào)用是______。
  A)fopen("A:\user\abc.txt","r")   B)fopen("A:\\user\\abc.txt","r+")
  C)fopen("A:\user\abc.txt","rb")   D)fopen("A:\\user\\abc.txt","w")
  答案:B
  評析:本題考查點是fopen函數(shù)中文件使用方式的指定。
  文件使用方式"r",表示以"只讀"方式打開一個字符文件。
  文件使用方式"r+",表示以"讀寫"方式打開一個字符文件。
  文件使用方式""rb",表示以"只讀"方式打開一個二進(jìn)制文件。
  文件使用方式"w",表示以"只寫"方式打開一個字符文件。
  
  (35)以下不能正確進(jìn)行字符串賦初值的語句為______。
  A)char str[5]= "good! "     B)char str[]="good! "
  C)char *str="good! "       D)char str[5]={'g','0','o','d'}
  答案:A
  評析:用字符串作初值為字符數(shù)組賦值時,系統(tǒng)總會自動在字符串的末尾補(bǔ)上一個"\O",如選項A中定義的話,把第6個字符也就是"\0"賦給str數(shù)組,但此數(shù)組只含5個元素,而放到了s仃數(shù)組之后的存儲單元中,這就可能會破壞其它數(shù)據(jù)區(qū)或程序本身。
  
  (36)有以下程序:
  #include<string.h>
  main(int argc,char*argv[])
  {
  int i,len=O;
  for(i=1;i<argc;i+=2)len+=strlen(argv[i]);
  Print("%d\n",len);
  }
  經(jīng)編譯連接后生成可執(zhí)行文件ex.exe,若運(yùn)行時輸入以下帶參數(shù)的命令行
  ex abcd efg h3 k44
  運(yùn)行后輸出結(jié)果是______。
  A)14      B)12         C)8         D)6
  答案:C
  評析:main函數(shù)的第一個參數(shù)argc是int型變量,用來統(tǒng)計命令行中的字符串個數(shù),本題輸入帶參數(shù)的命令行"ex abed efg h3 k44<回車>",argc的值是5;第二個參數(shù)是字符型指針數(shù)組,長度由argc的值決定,每個數(shù)組元素存放一個指向字符串?dāng)?shù)據(jù)的指針。for語句將命令行中兩個字符串a(chǎn)bed和h3的長度進(jìn)行累加,放在變量len中。
  
  (37)若有下面的說明和定義:
  struct test
  { int ml;char m2;float m3;
  union uu{char ul[5];int u2[2];}ua;
  }myaa;
  則sizeof(stuct test)的值是______。
  A)12      B)16          C)14       D)9
  答案:A
  評析:在定義了結(jié)構(gòu)體變量后,系統(tǒng)會為之分配內(nèi)存單元,在內(nèi)存中一個整型占2個字節(jié),一個字符占1個字節(jié),一個數(shù)組元素占1個字節(jié),一個浮點型占4個字節(jié)。結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和;而共用體變量所占的內(nèi)存長度等于最長的成員的長度。所以test在內(nèi)存中占12個字節(jié)(2+l+4+5=12)。
  
  (38)若有定義:int aa[8];,則以下謄達(dá)式中不能代表數(shù)組元素aa[1]的地址的是______。
  A)&aa[0]+l   B)&aa[1]      C)aa[0]++    D)aa+1
  答案:C
  評析:答案A中&aa[0]表示aa[0]的地址,加上1就是aa[1]的地址。同樣aa[1]的地址也可以直接用&aa[1]或aa+l表示。
  
  (39)下面敘述中正確的是______。
  A)全局變量的作用域一定比局部變量的作用域范圍大
  B)靜態(tài)類別變量的生存期貫穿于整個程序的運(yùn)行期間
  C)函數(shù)的形參都屬于全局變量
  D)未在定義語句中賦值的auto變量和static變量的初值都是隨機(jī)值
  答案:B
  評析:c語言中,全局變量的作用范圍是從定義處到程序結(jié)束,因此全局變量的定義點直接影響其作用范圍,因此選項A錯誤。靜態(tài)(statiC)存儲類別變量是在程序編譯時分配存儲空間,該類別變量在整個程序運(yùn)行期間占據(jù)著固定的存儲單元,當(dāng)多次調(diào)用其所在的函數(shù)時,該類別變量的值為上一次調(diào)用的值,直至整個程序結(jié)束運(yùn)行后才釋放該變量所占存儲單元。因此選項B正確,選項D錯誤。c語言規(guī)定:函數(shù)的形參是auto型局部變量,因此選項c錯誤。
  
  (40)以下程序的輸出結(jié)果是______ 。
  f(int b[],int m,int n)
  {jnt i,s=0;
  for(i=m;i<n;i=i+2)s=s+b[i];
  return s;
  )
  main()
  {int x,a[]:{1,2,3,4,5,6,7,8,9};
  x=f(a,3,7);
  printf("%d\n",x);
  )
  A)10      B)18         C)8         D)15
  答案:A
  評析:本題中,主函數(shù)調(diào)用f函數(shù),在f函數(shù)中執(zhí)行了兩次循環(huán),第一次i=3,s=0+b[i]:4,然后i的值被修改成5,仍然滿足循環(huán)條件,進(jìn)入第二輪循環(huán),s=4+b[5]=4+6=10,隨后,i的值被修改成7,不再滿足循環(huán)條件,退出循環(huán),返回s的值。所以最后輸出結(jié)果是10。
  
  (41)若有以下定義和語句:
  int s[4][5],(*ps)[5];
  ps=s;
  則對s數(shù)組元素的正確引用形式是______ 。
  A)ps+l       B)*(ps+3)     C)ps[0][2]    D)*(ps+1)+3
  答案:C
  評析:選項A得到的是s數(shù)組第一行的地址,選項B得到的是s數(shù)組第三行第零列元素的地址,而選項D得到的是s數(shù)組第一行第三列元素的地址。只有選項c正確引用了ps數(shù)組第零行第二列的元素。
  
  (42)以下程序的輸出結(jié)果是______。
  main()
  {int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
  for(i=0;i<3;i++)
  fbr(j=I;J<=I;J++)t=t+b[i][b[j][j]];
  printf("%d\n",t);
  }
  A)3       B)4          C)l         D)9
  答案:B
  評析:`兩個循環(huán)語句嵌套使用,在第一次外循環(huán)中,i=0,執(zhí)行內(nèi)循環(huán)時,將j賦值為i的值O,執(zhí)行一次t=t+b[i][b[j][j]],得到t=1,退出內(nèi)循環(huán),接著進(jìn)入第二次外循環(huán),在第二次外循環(huán)結(jié)束時t=2,然后執(zhí)行第三次外循環(huán),得到t=4,退出循環(huán),輸出t的值。
  
  (43)有以下程序:
  #definef (x)X*X
  main()
  {
  int i:
  i=f(4+4)/f(2+2);
  printf("%d\n",i);
  }
  程序運(yùn)行后的輸出結(jié)果是______。
  A)28      B)22         C)16        D)4
  答案:A
  評析:主函數(shù)中f(4+4)/f(2+2)可按帶參宏定義展開為4+4*4+4/2+2*2+2(千萬不要隨意地添加括號),求得結(jié)果為28。
  
  (44)以下程序的輸出結(jié)果是______。
  #inclue<stdio.h>
  #inclue<string.h>
  main()
  {char b1[8]="goddwer",b2[8],*pb=bl+3;
  while(--pb>=b1) strcpy(b2,pb);
  print("%dha",strlen(b2));
  )
  A)8      B)3         C)l         D)7
  答案:D
  評析:每次執(zhí)行循環(huán),都是將pb指針指向的內(nèi)容復(fù)制到b2中,第一次循環(huán)中,將b1[2]~b1[7]六個字符復(fù)制到b2中,第二次循環(huán),將b[1]~b[7]七個字符復(fù)制到b2中,第三次循環(huán),將b1數(shù)組的全部內(nèi)容復(fù)制到b2中。而后一次復(fù)制會覆蓋前面的復(fù)制,最后b2的實際長度應(yīng)該是八,而strlen()函數(shù)測出的是一個字符串中"\O"之前的全部字符的個數(shù),所以最后輸出的值是70
  
  (45)在說明語句:int *f();中,標(biāo)識符f代表的是______。
  A)一個用于指向整型數(shù)據(jù)的指針變量
  B)一個用于指向一維數(shù)組的行指針
  C)一個用于指向函數(shù)的指針變量
  D)一個返回值為指針型的函數(shù)名
  答案:D
  評析:一個函數(shù)在編譯時被分配給一個入口地址,這個入口地址就稱為函數(shù)的指針。可以用一個指針變量指向函數(shù),然后通過該指針變量調(diào)用此函數(shù)。Int*f()表示f是一個函數(shù),它帶回一個指針值,這個指針是指向一個整型數(shù)據(jù)的。
  
  (46)下面函數(shù)中,可以把整數(shù)以二進(jìn)制形式存放到文件中的函數(shù)是______。
  A)fprintf函數(shù)  B)fread函數(shù)   C)fwrite函數(shù)   D)fputc函數(shù)
  答案:C
  評析:ANSI c標(biāo)準(zhǔn)提出設(shè)置兩個函數(shù)(fread和fwrite),用來讀寫一個數(shù)據(jù)塊。它們的一般調(diào)用形式為:
  fread(buffer,size,count,fp);
  fwrite(buffer,size,count,fp);
  其中:buffer是一個指針;size是要讀寫的字節(jié)數(shù);count是要進(jìn)行讀寫多少個size字節(jié)的數(shù)據(jù)項;
  fb是指文件型指針。如果文件以二進(jìn)制形式打開,用fread和fwrite函數(shù)就可以讀寫任何類型的信息。
  
  (47)不合法的main函數(shù)命令行參數(shù)表示形式是______。
  A)main(int a,char*c[])       B)main(int arc,char **arv)
  C)main(int argc,char *argv)    D)main(int argv,char *arge[])
  答案:C
  評析:本題主要考查了對main函數(shù)參數(shù)的了解,main函數(shù)可以有兩個形參,一般形式是:main(int argc,char*argv[]),也就是說,它的第一個形參是一個整型變量,第二個形參是一個指針數(shù)組,其元素指向字符型數(shù)據(jù)。
  
  (48)以下程序的輸出結(jié)果是______.
  int x=3;
  main()
  {int i;
  for(i=l;i<x;i++)incre();
  }
  incre()
  { static int x=l;
  X*=x+l:
  printf("%Di",x);
  }
  A)3 3     B)2 2       C)2 6       D)2 5
  答案:C
  評析:incre()中定義一個靜態(tài)局部變量x,它的作用范圍僅限于本函數(shù)中,而不會影響main()函數(shù)中的x值。
  
  (49)有以下結(jié)構(gòu)體說明和變量的定義,且如圖所示指針p指向變量a,指針q指向變量b。則不能把結(jié)點b連接到結(jié)點a之后的語句是________。
  
  struct node
  { char data;
  struct node *next;
  }a,b,*p=&a,*q=&b;
  A)a.next=q; B)p.next=&b;    C)p->next=&b;   D)(*p).next=q;
  答案:B
  評析:由于p是一個指向struct node型的指針變量,要訪問該指針變量指向的結(jié)構(gòu)體成員,必須使用->運(yùn)算符或"(*p).成員"的形式,故選項B是錯誤的。
  
  (50)若有以下定義:
  struct link
  { int data;
  struct link*next;
  }a,b,c,*p,*q;
  且變量a和b之間已有如圖所示的鏈表結(jié)構(gòu):
  
  指針p指向變量a,q指向變量c。則能夠把c插入到a和b之間并形成新的鏈表的語句組是______。
  A)a.next=c;c.next=b;       B)p.next=q;q.next=p.next;
  C)p->next=&c;q->next=p->next;   D)(*p).next=q;(*q).next=&b;
  答案:D
  評析:本題考的是指針的運(yùn)用。即先將元素a的指針指向q指針?biāo)赶虻脑丶碿,然后將c的指針指向b元素,采取的是直接取元素地址的方式。
  
  二、填空題(每空2分,共40分)
  
  請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得分。
  
  (1)算法的基本特征是可行性、確定性、 【1】  和擁有足夠的情報。
  答案:【1】有窮性
  評析:算法是指解題方案的準(zhǔn)確而完整的描述。它有4個基本特征,分別是可行性、確定性、有窮性和擁有足夠的情報。
  
  (2)順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置  【2】  的存儲單元中。
  答案:【2】相鄰
  評析:常用的存儲表示方法有4種,順序存儲、鏈?zhǔn)酱鎯、索引存儲、散列存儲。其中,順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置也相鄰的存儲單元中。
  
  (3)Jackson結(jié)構(gòu)化程序設(shè)計方法是英國的M.Jackson提出的,它是一種面向  【3】  的設(shè)計方法。
  答案:【3】數(shù)據(jù)結(jié)構(gòu)
  評析:結(jié)構(gòu)化分析方法主要包括:面向數(shù)據(jù)流的結(jié)構(gòu)化分析方法(SA-Structured analysis),面向數(shù)據(jù)結(jié)構(gòu)的Jackson方法(JSD-Jackson system development method)和面向數(shù)據(jù)結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)系統(tǒng)開發(fā)方法(DSSD-Data structured system development method)。
  
  (4)數(shù)據(jù)庫設(shè)計分為以下6個設(shè)計階段:需求分析階段、 【4】  、邏輯設(shè)計階段、物理  設(shè)計階段、實施階段、運(yùn)行和維護(hù)階段。
  答案:【4】概念設(shè)計階段或數(shù)據(jù)庫概念設(shè)計階段
  評析:數(shù)據(jù)庫設(shè)計分為以下6個設(shè)計階段:需求分析階段、概念設(shè)計階段、邏輯設(shè)計階段、物理設(shè)計階段、實施階段及數(shù)據(jù)庫運(yùn)行和維護(hù)階段。
  
  (5)數(shù)據(jù)庫保護(hù)分為:安全性控制、 【5】  、并發(fā)性控制和數(shù)據(jù)的恢復(fù)。
  答案:【5】完全性控制
  評析:考查考生對數(shù)據(jù)庫基本知識的了解。
  安全性控制:防止未經(jīng)授權(quán)的用戶有意或無意存取數(shù)據(jù)庫中的數(shù)據(jù),以免數(shù)據(jù)被泄露、更改或破壞;完整性控制:保證數(shù)據(jù)庫中數(shù)據(jù)及語義的正確性和有效性,防止任何對數(shù)據(jù)造成錯誤的操作;并發(fā)性控制:正確處理好多用戶、多任務(wù)環(huán)境下的并發(fā)操作,防止錯誤發(fā)生;數(shù)據(jù)的恢復(fù):當(dāng)數(shù)據(jù)庫被破壞或數(shù)據(jù)不正確時,使數(shù)據(jù)庫能恢復(fù)到正確的狀態(tài)。
  
  (6)設(shè)有int x=ll;,則表達(dá)式(x++ *1/3)的值為 【6】  。
  答案:【6】3
  評析:白增自減運(yùn)算符的作用是使變量的值增1或減1,如:
  ++i,--i (在使用i之前,先使i的值加(減)1)
  i++,i-- (在使用i之后,使i的值加(減)1)
  所以表達(dá)式(x++*1/3)的值即11/3的值:3。
  
  (7)若從鍵盤輸入58,則以下程序的輸出結(jié)果是 【7】  。
  main()
  { int a;
  Scanf("%d",&a);
  If(a>50)printf("%d",a);
  If(a>40)printf("%d",a);
  if(a>30)printf("%d",a);
  }
  答案:【7】585858
  評析:本題首先為a輸入一個值58,然后執(zhí)行三個判斷語句,在每一個判斷中,如果滿足判斷條件的話,就輸出a,因為三次判斷,條件都滿足,所以三次輸出a。
  
  (8)下列程序運(yùn)行的結(jié)果是 【8】  。
  #include<stdio.h>
  main()
  {
  int x=l,i=l:
  fOr(;x<50;i++)
  {if(x>=10)break;
  if(x%2!=1)
  {x+=3;continue;}
  x-=1;
  }
  printf("x=%d,i=%d\n",x,i);
  }
  答案:【8】x=11,i=11
  評析:本題程序段通過for循環(huán)語句實現(xiàn)當(dāng)x的值為奇數(shù)時,x自減1:當(dāng)x為偶數(shù)時自加3的功能。程序共執(zhí)行了11次循環(huán),當(dāng)x=11時退出循環(huán)。
  
  (9)以下程序的輸出結(jié)果是 【9】  。
  main()
  fint a=177;
  printf("%o\n",a);
  }
  答案:【9】261
  評析:本題考點是printf函數(shù)的格式字符。"%0"表示以八進(jìn)制整數(shù)形式輸出。
  
  (10)以下程序的輸出結(jié)果是【10】   。
  main()
  {int a:O;
  a+=(a=8);
  printf("%d\n",a);
  }
  答案:【10】16
  評析:本題主要考的是運(yùn)算符的優(yōu)先級。
  A+=(a=8)可以寫成a:=a+(a=8)的形式,括號的優(yōu)先級高于"+",而"+"的優(yōu)先級又高于"=",所以先執(zhí)行括號內(nèi)的運(yùn)算,將a賦值為8,然后再執(zhí)行+運(yùn)算。
  
  (11)以下定義的結(jié)構(gòu)體類型擬包含兩個成員,其中成員變量info用來存放整型數(shù)據(jù);成  員變量link是指向自身結(jié)構(gòu)的指針。請將定義補(bǔ)充完整。
  struct node
  {int info;
  【11】  link;
  };
  答案:【11】struct node*
  評析:本題考的是如何定義一個指向結(jié)構(gòu)體變量的指針。
  一個結(jié)構(gòu)體變量指針就是該變量所占據(jù)的內(nèi)存段的起始地址?梢栽O(shè)一個指針變量,用來指向一個結(jié)構(gòu)體變量,此時該指針變量的值是結(jié)構(gòu)體變量的起始地址。指針變量也可以用來指向結(jié)構(gòu)體數(shù)組中的元素。
  
  (12)以下程序的輸出結(jié)果是 【12】  。
  main()
  {int s,i;
  for(s=O,i=O;i<3;i++,s+=i);
  printf("%d\n",s);
  }
  答案:【12】6
  評析:在逗號表達(dá)式內(nèi)按自左至右順序求解,因此本題共執(zhí)行三次循環(huán),具體情形如下:
  第一次當(dāng)i=O時,執(zhí)行i++,s+=i,則i=l,s=l:
  第二次當(dāng)i=l時,執(zhí)行i++,s+=i,則i=2,s=3;
  第三次當(dāng)i=2時,執(zhí)行i++,s+=i,則i=3,s=6。
  當(dāng)i=3后退出循環(huán)。
  
  (13)以下程序的輸出結(jié)果是  【13】   。
  main()
  {char *p="abcdefgh",*r;
  1ong *q;
  q=(1ong*)p;
  q++;
  r=(char*)q;
  printf("%s\n",r);
  }
  答案:【13】efgh
  評析:指針變量p,r指向字符型數(shù)據(jù),而指針變量q指向長整型數(shù)據(jù)。首先通過類型轉(zhuǎn)換將指針p的值賦給q,然后執(zhí)行q自加,因為q是定義為指向長整型數(shù)據(jù)的變量,而長整型數(shù)據(jù)一般占4個字節(jié)的空間,所以實際上,q的值增加了4,當(dāng)再將q的值經(jīng)過強(qiáng)行類型轉(zhuǎn)換賦給r的時候,實際上這時候r是指向了字符e,所以最后打印字符串時,得到的結(jié)果是"efgh"。
  
  (14)以下程序的輸出結(jié)果是  【14】   。
  main()
  {int x=0;
  sub(&x,8,1);
  printf("%d\n",x);
  }
  sub(int *a,int n,int k、
  {if(k<=n) sub(a,n/2,2*k);
  *a+:k:
  }
  答案:【14】7
  評析:本題是一個遞歸調(diào)用。
  主函數(shù)中調(diào)用sub函數(shù)流程如下:
  sub(*x,8,1)-sub(*x,4,2)-sub(*x,2,4)-x=x+k=4
  ︱        ︱
  x=x+k=7     x=x+k=6
  
  (15)以下程序可以將從鍵盤輸入的十進(jìn)制數(shù)(1ong型)以二到十六進(jìn)制數(shù)的形式輸出,請?zhí)羁铡?BR>  #include<stdio.h>
  main()
  {char b[16]={'O','l','2','3','4','5','6','7','8',
  '9','A','B',C','D','E','F'};
  int c[64],d,i=0,base;
  long n:
  print("Enter a number:\n");scanlf["%1d',&n);
  print("Enter new base:\n");scanf("%ld",&base);
  do
  {
  C[i]=  【15】
  i++;n=n/base;
  }while [n!=0);
  pdntf("'Transmite new base:\n");
  f0"--i;i>=O;--i)
  { d=c[I];
  printf("%c",b  【16】 ;
  }
  }
  答案:【15】n%base
  【16】[d]
  評析:進(jìn)制轉(zhuǎn)換的除余取整法。在循環(huán)中,是先對數(shù)n整除以base取余作為轉(zhuǎn)換后的base進(jìn)制數(shù)的第i位存放到數(shù)組元素c[i】中,然后對n整除以base的商作同樣的操作,直到商為O為止,故第一空為n%base。
  由于存入到數(shù)組c中的各個元素為對應(yīng)數(shù)制在十進(jìn)制上表示的各位的權(quán)值,在輸出時必須將其轉(zhuǎn)換成對應(yīng)的字符輸出,而在數(shù)組b中對應(yīng)存放了各個數(shù)對應(yīng)的字符,故第二空應(yīng)填[d]。
  
  (16)設(shè)有如下宏定義
  #define MYSWAP(z,x,y) {z=x;x=f;y=z;}
  以下程序段通過宏調(diào)用實現(xiàn)變量a,b內(nèi)容的交換,請?zhí)羁铡?BR>  float a=5,b=16,c;
  MYSWAPI(  【17】   ,a,b);
  答案:【17】c
  評析:本題最重要的是理解宏MYSWAP(z,x,y)的作用:通過z實現(xiàn)x,y的內(nèi)容交換。所以MYSWAP(c,a,b)可以通過c實現(xiàn)a,b內(nèi)容的交換。
  
  (17)以下程序用來統(tǒng)計文件字符的個數(shù),請?zhí)羁铡?BR>  #include "stdio.h"
  main ()
  {FILE *fp;long num=0;
  if((fp=fopen("fname.dat","r"))==NULl)
  {printf("Open error\n");,exit,(O);}
  while(  【18】  )
  {num++;}
  Printf["num=%ld\n",num];
  Fclose(fp);
  )
  答案:【18】fgetc(fp)!=EOF或!feof(fp)
  評析:本程序考的是龜etc函數(shù)。
  此函數(shù)的功能是從指針變量印所指向的文件中讀入一個字符,如果執(zhí)行龜etc函數(shù)時遇到文件結(jié)束符,則函數(shù)返回文件結(jié)束符EOF。
  
  (18)以下程序用來輸出結(jié)構(gòu)體變量ex所占存儲單元的字節(jié)數(shù),請?zhí)羁铡?BR>  struct st
  {char *name;double score;};
  main()
  { struct st ex;
  print("ex size:%d\n",sizeof( 【19】  ));
  }
  答案:【19】ex
  評析:sizeof函數(shù)計算已知類型所占的字節(jié)數(shù)。sizeof(ex)即計算結(jié)構(gòu)體變量ex在內(nèi)存中所占的字節(jié)數(shù)。
  
  (19)以下程序中,select函數(shù)的功能是:在N行M列的二維數(shù)組中,選出一個最大值作為函數(shù)值返回,并通過形參傳回此最大值所在的行下標(biāo),請?zhí)羁铡?BR>  #define  N  3
  #define  M  3
  select(int a[N][M],int *n)
  {int i,j,row=O,colum=O;
  for(i=0;i<N;i++)
  for(j=0;j<M;j++)
  if(a[i][j]>a[row][colum]){row=i;colum=j;}
  *n=row;
  retum( 【20】   );
  }
  main()
  {int a[N][M]={9,11,23,6,l,15,9,17,20),max,n;
  max=select(a,&n);
  printf("max=%d,line=%d\n",max,n);
  }
  答案:【20】a[row][colum]
  評析:本題通過判斷語句,將較大值的行下標(biāo)賦給row,列下標(biāo)賦給colum,循環(huán)結(jié)束后,a[row][colum]中是數(shù)組元素的最大值,所以應(yīng)該把它的行下標(biāo)賦給*n,將a[row][colum]的值返回。

文章錄入:ak47    責(zé)任編輯:ak47  
 版權(quán)聲明
   如果本網(wǎng)站所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系,我們將會及時處理。如轉(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ū))