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

    (28)有以下程序
  void fun(char *a,char *b)
  {  a=b;
  (*a)++;
  }
  main()
  {
  char c1='A',c2='a,*p1,*p2;
  clrscr0;
  pl=&cl;
  p2=&c2;
  fun(p1,p2);
  printf("%c%c\n",cl,c2);
  }
  程序運行后的輸出結(jié)果是__________。
  A)Ab  B)aa  C)Aa   D)Bb
  答案:A
  評析:在函數(shù)調(diào)用中,可以分值傳遞和地址傳遞。若參數(shù)傳遞的是簡單數(shù)據(jù)類型的數(shù)值,稱為值傳遞方式。若參數(shù)傳遞的是變量的地址,稱為地址傳遞方式。
  
  (29)若有定義:static int fun(int a,int b),則以下敘述中錯誤的是_________。
  A)定義了一個返回值為整型的靜態(tài)函數(shù)
  B)該函數(shù)只能被同一文件內(nèi)的函數(shù)調(diào)用
  C)該函數(shù)可以在任何文件中被調(diào)用
  D)該函數(shù)屬于內(nèi)部函數(shù)
  答案:C
  評析:根據(jù)函數(shù)能否被其他源文件調(diào)用,將函數(shù)區(qū)分為內(nèi)部和外部函數(shù)。如果將函數(shù)定義為外部函數(shù),則在函數(shù)首部最左端冠以關鍵字eXtem。如果將函數(shù)定義為內(nèi)部函數(shù),則在函數(shù)首部最左端冠以關鍵字static。內(nèi)部函數(shù)只能被本文件中的其它函數(shù)調(diào)用。而外部函數(shù)則可以被其他任何c程序文件調(diào)用。
  
  (30)以下能正確定義一維數(shù)組的選項是_________。
  A)int num[];    B)int num[0..100];
  C)#define N 100;  D)int N=100;
  int num[N];     int num[N];
  答案:C
  評析:有二種方法指定數(shù)組長度。其一是直接在數(shù)組名后面的方括號內(nèi)輸入數(shù)組的長度。其二是,在定義數(shù)組的同時對其賦值,由實際賦值的元素個數(shù)自動確定數(shù)組的長度。
  
  (31)有以下程序
  fun(int a[],intm,int n)
  { int I,J;
  for(i=m;i<n;i++)
  a[i+ll=a[I]+3;
  }
  main()
  {
  int i,a[6l={2,4,6,8,10,12};
  clrscr0;
  fun(a,2,5);
  for(i=O;i<6;i++)
  printf("%"a[I]);
  }
  程序運行后輸出的結(jié)果是__________。
  A)24691315  B)24691215  C)249121518  D)249121415
  答案:B
  評析:在調(diào)用函數(shù)時,既可以用單個的變量作為參數(shù),也可以用數(shù)組名作為參數(shù)。還可將數(shù)組的下標值作為實參使用。在本題中,是將數(shù)組名和數(shù)組的下標值作為實參。
  
  (32)以下不正確的敘述是__________.
  A)在C程序中,逗號運算符的優(yōu)先級最低。
  B)在C程序中,T和t是兩個不同的變量
  C)若a和b類型相同,在執(zhí)行了賦值表達式a=b后,b中的值將放入a中,而b中的值不變。
  D)當從鍵盤輸入數(shù)據(jù)時,對于整型變量只能輸入整型數(shù)據(jù)。對于實型變量只能輸入實型數(shù)據(jù)。
  答案:D
  評析:在c語言中,為方便表達式的運算,對所有的運算符都設定了一定的優(yōu)先級,其中逗號運算符的優(yōu)先級最低。c語言中的數(shù)據(jù)有常量和變量之分,其中變量是區(qū)分大小寫的,也就是說T和t是兩個不同的變量名。將某個變量的值賦給其它的變量之后,并不影響其本身的值。當定義一個整型變量后,可以從鍵盤上對其輸入整型值,也可以是字符型的數(shù)據(jù)。如果將字符型的值賦給整型變量,則它接受的是字符常量的ASCII碼值。實型變量也可以接收整型值。
  
  (33)有以下程序
  pf(char *p,int n)
  { int i;
  for(i=0;i<n;i++1
  p[i]=p[I]+32;
  }
  main()
  {
  char a[]="ABCD";
  int i:
  clrscr();
  pf(a,4);
  for(i=0;i<4;i++)
  printf("%c",a[I]);
  }
  程序運行后的輸出結(jié)果是________。
  A)ABCD  B)ABCD\0  C)abcd  D)abed\0
  答案:C
  評析:通過指向數(shù)組的指針可以引用數(shù)組中的任何元素,并且對其進行各種運算。本題中就是通過指向數(shù)組的指針將一字符數(shù)組中的所有大寫字母轉(zhuǎn)換成相應的小寫字母。
  
  (34)有以下程序
  main()
  {
  int a[3][3],*p,i;
  clrscr();
  p=&a[0][0];
  for(i=0;i<9;i++)
  p[i]:i+2;
  printf("%d\n",a[2][11);
  }
  程序運行后的輸出結(jié)果是_________。
  A)3  B)6  C)9  D)2
  答案:C
  評析:當某個指針變量指向多維數(shù)組時,可以用其每次加l來順序操作數(shù)組中的元素。在此題中,a[3][3]={{2,3,4},{5,6,7},{8,9,10}}。而最后輸出的a[2][1]就是第3行的第2列的元素,即9。
  
  (35)有以下程序
  #include<stdio.h>
  #define F(X,Y)(X)*(Y)
  main()
  {
  int a=3,b=4;
  clrscr();
  printf("%d\n",F(xiàn)(a--,++b));
  }
  程序運行后的輸出結(jié)果是_________。
  A)8  B)10  C)12  D)15
  答案:D
  評析。在帶參數(shù)的宏定義中,不是簡單的字符替換。其方法是:在程序中如果有帶實參的宏, (如F(x,Y)),則按#define命令行中指定的字符串進行置換。如果串中包含宏中的形參(女NX,Y),、則將程序語句中相應的實參代替形參。本題中的宏定義展開后為:(a.--)*(++b)=(3)*(5)=15。
  
  (36)有以下程序
  main()
  {
  int x=3,y=2,z=l;
  printf("%d\n",x/y&&z);
  }
  程序運行后的輸出結(jié)果是_________。
  A)0  B)l  C)2  D)3
  答案:B
  評析:在c程序的標準輸出函數(shù)prim沖,要注意表達式的優(yōu)先級。如本題的表達式x/y&&z,先運算的是算術運算x/v,結(jié)果是1,然后才運算l&&z,結(jié)果是1。
  
  (37)下列關于c程序編譯的描述中,錯誤的是_________。
  A)在程序的編譯過程中可以發(fā)現(xiàn)所有的語法錯誤
  B)在程序的編譯過程中可以發(fā)現(xiàn)部分的語法錯誤
  C)在程序的編譯過程中不能發(fā)現(xiàn)邏輯錯誤
  D)程序編譯是調(diào)試程序的必經(jīng)過程
  答案:B
  評析:編譯過程實際上就是調(diào)試程序,找出程序中所有可能存在的語法錯誤。但是,對于程序邏輯上的一些錯誤,編譯過程無能為力,只有程序編寫人員自己通過一些良好的編程技巧和方法來排除。
  
  (38)若有以下說明和定義
  union、s
  { int i;
  char ch
  float e
  }a;
  下列對共用體的操作正確的是________。
  A)a='A';   B)re=a;
  C)a.i=3;   D)printf("%dha",a);
  答案:C
  評析:共用體實際上用同一內(nèi)存段來存放幾種不同類型的成員,但在每一瞬時只能存放其中一種,而不是現(xiàn)時存放幾種。因此,不能對共用體名賦值,不能引用共用體名以得到某一個值,也不能把共用體變量作為函數(shù)參數(shù)。
  
  (39)下列選項中正確的語句組是_________。
  A)char s[8];s={"Beijing"};   B)char *s;s={"Beijing"};
  C)char s[8];s="Beijing";   D)char *s;s="Beijing";
  答案:D
  評析:字符串通常是指用一對雙引號括起來的一組字符常量序列。在c語言中,可以直接定義一個指向字符串的指針變量,然后對其賦值為字符串常量后,指向字符串的指針就指向了字符串的首地址。
  
  (40)如果一個C程序由多個文件組成,在將多個文件編譯連接成一個統(tǒng)一的可執(zhí)行文件時,可采用的方法有多種,以下敘述中錯誤的是__________。
  A)可以利用Turbo c集成環(huán)境  B)在MS C上進行編譯連接
  C)用#include命令       D)用文字處理軟件Word
  答案:D
  評析:運算多個文件的程序有3種方法,第1種是利用Turbo c集成環(huán)境,先將每個文件輸入并存儲在磁盤上,然后在編譯在狀態(tài)下建立一個"項目文件",最后再編譯連接。第2種方法是在MS c上先分別對多個文件進行編譯得到.obj文件,然后用link命令把四個文件連接起來。第3種方法是用#include命令將多個文件包含進某個文件中。
  
  (41)有以下程序
  main()
  {
  int n,s=0;
  clrscr0;
  for(n=10;n<30;n++)
  {
  if(n%3==O)
  { s+=n;
  continue;
  }
  if(s>100)break;
  }
  printf("%d",s);
  }
  程序運行后的輸出結(jié)果是___________。
  A)117  B)147  C)127  D)137
  答案:A
  評析:continue語句的功能是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著執(zhí)行下一次是否執(zhí)行循環(huán)的判定。而break語句是從循環(huán)體內(nèi)跳出,即提前結(jié)束循環(huán)。
  
  (42)有以下程序
  main()
  {
  char s[]={'T','E','A','C','H','E','R'},*p;
  clrscr0;
  p=s+3;
  printf("%c",*p++);
  printf("%c",*p++);
  }
  程序運行后的輸出結(jié)果是________。
  A)AC  B)CH  C)HE  D)TEA
  答案:B
  評析:如果有指向字符數(shù)組的指針,那么字符數(shù)組中的元素可以用指針變量表示,執(zhí)行第一個輸出語句printf("%c",*p++);后,輸出字符'C',執(zhí)行第二個輸出語句printr("%c",*p++);后,輸出字符'H'。
  
  (43)已定義以下函數(shù)
  fun(char *pl,char*p2)
  {
  while(('pl='p2)『-'\0'』
  {
  pl++;
  p2++;
  }
  }
  函數(shù)的功能是__________。
  A)將p2所指字符串復制到pl所指內(nèi)存空間
  B)將p2所指字符串的地址賦給指針p1
  C)對pl和p2兩個指針所指字符串進行比較
  D)檢查pl和p2兩個指針所指字符串中是否有'\O'
  答案:A
  評析:指針的白加或自減運算,表示指針向前或向后移動一個存儲單元。
  
  (44)有以下程序
  main()
  {
  char s[][5]={{",",'*'},{",'*',",'*'},{'*'",",",'*'},{",'*',",'*'},{",",'*'}};
  int i, j;
  for(i=0;i<5;i十+)
  {
  for(j=O;__________j++)
  printf("%c",s[i][I]);
  printf("\n");
  }
  }
  若輸出如下的鉆石形平面圖,則在程序的下劃線處應填入的表達式是__________。
  *
  *  *
  *     *
  *  *
  *
  A)j<5  B)j<=5  C)j>5  D)j>=5
  答案:A
  評析:在一個二維數(shù)組中,可以通過其行標和列標來控制其輸出的數(shù)據(jù)元素。
  
  (45)有以下程序
  sum(char *p)
  { *p=*p+3;}
  main()
  {
  char str[10]={"abcde"},*p=str;
  clrscr0;
  sum(p);
  primf("%c\n",*p--);
  }
  程序運行后的輸出結(jié)果是_________。
  A)c  B)d  C)e   D)f
  答案:B
  評析:在用字符指針作為形式參數(shù)時,先讓指針p指向字符數(shù)組的首地址,然后可以用*(p+i)的形式直接存取各對應單元中的元素,而*p+i的意義則不樣,它是指將指針變量p所指向的存儲單元的值加上i。
  
  (46)已定義以下函數(shù)
  fun(int *p)
  (return *p;)
  該函數(shù)的返回值是_________。
  A)不確定的值        B)形參p中存放的值
  C)形參p所指存儲單元的值  D)形參p的地址值
  答案:C
  評析:指針p是指向一個地址,而*p是表示指針p指向存儲單元中的數(shù)據(jù)。
  
  (47)有如下語句
  int *p, a[]={2,4,6,8,10};
  p=a;
  則與語句*p++;等價的語句是__________。
  A)(*p)++;  B)*(p++);  C)*(++p);  D)++*p;
  答案:B
  評析:由于++和*同優(yōu)先級,結(jié)合方向為自右向左,因此語句*p++;等價于*(p++);,而*(++p)是先使p加l,再取*p的值。語句++*p;相當于++(*p),則是先取p所指變量的值,然后自加l。
  
  (48)下列關于結(jié)構(gòu)體與苯用體的說法中,錯誤的是_________。
  A)結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和
  B)共用體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和
  C)共用體變量所占內(nèi)存長度等于最長成員的長度
  D)共用體變量和結(jié)構(gòu)體變量中的所有成員可以是不同數(shù)據(jù)類型
  答案:B
  評析:共用體也稱"聯(lián)合體",與結(jié)構(gòu)體定義形式相同,而它們是含義不同的兩類構(gòu)造數(shù)據(jù)類型。結(jié)構(gòu)體中每個成員都有自己獨立的內(nèi)存空間,是所有成員的內(nèi)存長度之和。而共用體不同,所有成員是共用一個內(nèi)存區(qū)的,所以共用體變量的內(nèi)存長度是最長成員的長度。
  
  (49)下列對于文件的打開方式敘述中,錯誤的是_________。
  A)用"r"方式打開的文件只能讀
  B)用"w"方式打開的文件只能向該文件寫數(shù)據(jù)
  C)用"a"方式打開的文件既能讀,又可以向該文件寫數(shù)據(jù)
  D)如果不能打開文件,fopen函數(shù)將會帶回一個錯信息
  答案:C
  評析:在c程序中打開文件時,必須要確定文件的打開方式。在文件打開函數(shù)fopen中,用"r"方式打開的文件只能讀,即從文件向計算機輸入,而不是向文件輸入;用"w"方式打開的文件只能寫,即向文件寫入數(shù)據(jù),而不能從文件中向計算機輸入數(shù)據(jù)。用"a"方式打開的文件只能在文件末尾添加數(shù)據(jù)。在用"r"方式打開時,fopen函數(shù)如果不能打開一個文件,會返回一個出錯信息。
  
  (50)下列關于c語言數(shù)據(jù)文件的敘述中正確的_________。
  A)文件由ASCII碼字符序列組成,c語言只能讀寫文本文件
  B)文件由二進制數(shù)據(jù)序列組成,c語言只能讀寫二進制文件
  C)文件由記錄序列組成,可按數(shù)據(jù)的存放形式分為二進制文件和文本文件
  D)文件由數(shù)據(jù)流形式組成,可按數(shù)據(jù)的存放形式分為二進制文件和文本文件
  答案:D
  評析:c語言把文件看作一個字符(字節(jié))的序列,即由一個一個字符(字節(jié))數(shù)據(jù)順序組成。根據(jù)數(shù)據(jù)的組織形式,可分為ASCII碼文件和二進制文件。因此,一個c文件是一個字節(jié)流或二進制流。它把數(shù)據(jù)看作是一連串的字符(字節(jié))。而不考慮記錄的界限。換句話說,c語言文件并不是由記錄組成的。
  
  二、填空題(每空2分,共40分)
  
  請將每一個空的正確答案寫在答題卡的【1】至【20】序號的橫線上,答在試卷上不得分。
  
  (1)某二叉樹中共有27個結(jié)點,其中度為2的結(jié)點有10個,則該二叉樹中有 【1】 個度為l的結(jié)點。
  答案:【1】6
  評析:已知n2=10,根據(jù)二叉樹中度為2的結(jié)點與葉子結(jié)點的關系:n0=n2+l可知,為1l。因此,度為l的結(jié)點數(shù)為:n1=n-n0-n2=27-10-l1=6
  
  (2)1973年美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。在這種新的流程圖中,完全去掉了帶箭頭的流程線,全部算法寫在一個矩形框內(nèi)。這種流程圖稱為
  【2】 流程圖。
  答案:【2】N-S
  評析:基于可以用順序結(jié)構(gòu)表示任何復雜算法結(jié)構(gòu)的思想,1973年美國學者I.Nassi和B.Shneiderman提出了一種新的流程圖形式。這種流程圖稱為N-S流程圖(N和s是兩位美國學者的英文姓名的第一個字母)。
  
  (3)在軟件測試過程中,單元測試的目的 【3】 ,多采用白盒測試法。
  答案:【3】保證每個模塊單獨運行正確
  評析:軟件測試的實施過程分為四步,即單元測試、綜合測試、確認測試利系統(tǒng)測試。其中單元測試的主要的目的是保證每個模塊單獨運行正確:多采用白盒測試法,檢查模塊控制結(jié)構(gòu)的某些特殊路徑,期望覆蓋盡可能多的出錯點。
  
  (4)在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)冗余度大大降低的最主要原因是 【4】 。
  答案:【4】實現(xiàn)數(shù)據(jù)共享
  評析:數(shù)據(jù)庫中的數(shù)據(jù)是可以被多個用戶共享的,這和以前的文件系統(tǒng)有所不同。由于數(shù)據(jù)庫中的數(shù)據(jù)實現(xiàn)數(shù)據(jù)共享,可以極大的降低數(shù)據(jù)冗余度,并且只花費很少的存儲空間。
  
  (5)在軟件生存周期中,軟件定義階段的主要任務是 【5】  。
  答案:【5】確定軟件系統(tǒng)的工程需求
  評析:一個軟件生存周期主要包含三個階段,即軟件定義、軟件開發(fā)、軟件維護。軟件定義階段主要任務是確定軟件系統(tǒng)的工程需求。為準確明確軟件的工程需求,軟件定義又分成軟件系統(tǒng)的可行研究和需求分析兩個子階段。
  
  (6)如果在運行以下程序時從鍵盤輸入:bcd<回車>。輸出結(jié)果 【6】 。
  #include<stdio.h>
  main()
  {
  char I='a'J='a',k='a';
  clrscr();
  scanf("%c%*c%c",&i,&j,&k);
  printf("%c%c%c",i,j,k);
  }
  答案:【6】bda
  評析:在scanf()語句中,如果輸入格式中帶有"*",則變量在接收數(shù)據(jù)時,自動忽略掉數(shù)據(jù)輸入序列中"*'對應位置的的數(shù)據(jù)元素,其對應變量的值從"*"對應位置的下一個數(shù)據(jù)開始接收。
  
  (7)以下程序運行后的輸出結(jié)果是 【7】 。
  #define SQ(y)  y*y
  main()
  { int x=lO,y;
  y=SQ(x+3);
  primf("%d",y);
  }
  答案:【7】43
  評析:在使用帶參數(shù)的宏定義時不是進行簡單的字符替換。如果在程序有帶實參的宏,則按#define命令行中指定的字符串從左到右進行置換。如果是表達式時,一定要注意其替換后得到的表達式。本題中,有宏定義行#define sQ(y) y*y。在用實參x+3進行替換后,其得到的字符串表達式為:x+3*x+3=10+3*10+3=43。
  
  (8)已知字符"A"的ASCII值為65,以下程序運行后的輸出結(jié)果是 【8】 。
  main()
  {
  int x=30,y=50,t=4;
  char z='A':
  clrscr();
  if(y>x+2&&y<z-12)
  x=y;
  y=t;
  if(y<z&&y>z-20)
  t=x:
  x=y;
  y=t;
  printf("%d,%d,%d\n",x,y,z);
  }
  答案:【8】4,4, 65
  評析:如果多個分支結(jié)構(gòu)處于順序關系時,每個分支語句都要執(zhí)行。本題中的兩個if語句就是這種關系。
  
  (9)以下程序的運行結(jié)果是 【9】 。
  main()
  {
  int a=4,b=8,c;
  c=("b==a)&&(a+b!=20);
  printf("%d,%d,%d\n",a,b,C);
  }
  答案:【9】4,8,0
  評析:如果在表達中出現(xiàn)多種運算符時,一定要撂照他們的優(yōu)先級別進行運算,否則其結(jié)果可能會產(chǎn)生錯誤。本題中,由于賦值表達中式c=(a/b==a)&&(a+b!=20)中有兩個括號,而且兩個括號是進行邏輯與運算。當?shù)?個括號內(nèi)的值為假時,不管后面括號內(nèi)的值是否為假,兩個括號內(nèi)的值進行邏輯與(&&)運算時,其結(jié)果肯定為假。
  
  (10)以下程序的運行結(jié)果是 【10】 。
  main()
  {
  char a='A',b='E';
  int sum=1,i=1;
  do
  {
  sum*=i;
  i++:
  }while(i<=b-a);
  printf("%d",sum);
  }
  答案:【10】24
  評析:字符數(shù)據(jù)進行算術運算時,是將字符對應的ASCII值當作一個整型數(shù)據(jù)來處理。同樣要將整數(shù)進行字符運算時,可以將整數(shù)轉(zhuǎn)換成ASCII值與其相等的字符。
  
  (11)已知數(shù)字'0'的AsCII碼值為48,在程序運行時若從鍵盤輸入:096<回車>,則下列程序運行后的輸出結(jié)果是 【11】 。
  #include<stdio.h>
  main()
  { char x,y;
  x=getchar();
  scanf("%d",&y);
  x=x+4; y=y/2;
  printf("%c%C",x,y);
  }
  答案:【11】40
  評析:以ASCII碼值為橋梁,可以將字符數(shù)據(jù)與其ASCII值相等的整型數(shù)進行相互轉(zhuǎn)換,并且可以用這個特性對字符進行一些整型數(shù)據(jù)的運算。
  
  (12)以下程序中,min函數(shù)的功能是求4行5列二維數(shù)組每列元素的最小值。請?zhí)羁铡?BR>  Void min(int m,int n,int fI)[5],int *bt)
  { inti,j,k=0;
  for (j=0;j<n;j++)
  { k=f[0][j]};
  for(i=0;i<m;i++)
  if( 【12】 )k=f[i][j];
  bt[j]=k;
  }
  }
  main()
  { int a[4][5],i,j,b[5];
  for(i=0;i<4.i++)
  for(j=0;0<5.J++)
  scanf("%d",&a[i][j]);
  min(4,5,a,b);
  f'0r(j=0;j<5;j++)
  printf("%d",b[j]);
  primf("\n");
  }
  答案:【12】k>f[i][j]
  評析:求二維數(shù)組中每列的最小值時,其方法是先讓每列中的第一個元素同第二個元素比較,然后將較小的值保存在臨時變量k中,最后再將k中的值與問列中剩余的元素進行比較,每次都是將較小的值保存在臨時變量k中。靳列比較后完成后,其最小值就是k的值。然后將k值賦給一維數(shù)組b啪中對應的單元。最后得到的一維數(shù)組b啪中的所有值就是所要求的二維數(shù)組中每列的最小值。
  
  (13)有以下程序
  main()
  { int a,b,c,d;
  clrsc();
  scanf("%o",&a);
  b=a>>4:
  c:~(~0<<4);
  d=b&c:
  printf("%d,%d\n",a,d);
  }
  若從鍵盤上輸入331,則程序運行后的輸出結(jié)果 【13】  。
  答案:【13】217,13
  評析: c語言中的位運算符有6種,本程序有其中4種位運算符,分別是左移、右移、取反和按位與運算。
  
  (14)以下程序運行后輸出結(jié)果是 【14】  。
  int a=30,b=40;
  voidfun(int x,inty)
  { int z;
  z=(x>y)?x:y;
  a=z+10;
  b=z+20;
  }
  main()
  {
  printf("a=%d,b=%d\n",a,b);
  fun(a,b);
  printf("a=%d,b=%d\n",a,b);
  }
  答案:【14】a=30,b=40
  a=50,b=60
  評析:全局變量的作用域是從定義變量的位置開始到本源文件的結(jié)束。在本題中,變量a,b就是屬于全局變量。其初值分別為a=30,b=4O。在沒有對兩個全局變量作任何處理前,它們的值保持原值,所以第1次輸出a,b的值分別是初值a=30,b=40。但在fun函數(shù)中a,b的值改變后,其值在結(jié)束fun函數(shù)后仍然保留,所以第2次輸出a,b的值分別為a=50,b=60。
  
  (15)以下程序運行后的輸出結(jié)果是 【15】  。
  #include<string.h>
  main()
  {
  int i:
  char a[]。"abcdef',*p,*s;
  p=a;
  for(I=O;i<strlen(a)/2;i++)
  {
  a[strlen(a)-i-1]=*p;
  p++;
  }
  s=strupr(a);
  puts(s);
  }
  答案:【15】ABCCBA
  評析:for循環(huán)是將字符數(shù)組a的前半段元素取出,然后按原來相反的順序覆蓋字符數(shù)組的后半段。字符串函數(shù)strupr的功能是將字符串中小寫字母轉(zhuǎn)換為大寫字母。然后用字符串輸出函數(shù)puts輸出。
  
  (16)以下程序運行后其輸出的結(jié)果是 【16】  。
  ma(int a)
  { static int y=l,z=2;
  y*=a;
  Z*=a:
  printf("y=%d,z=%d",y,z);
  }
  main()
  {
  int i,a=2:
  clrsc");
  for(i=0;i<3;I++)
  { printf("%d",i);
  ma(a);
  printf("\n");
  }
  }
  答案:【16】0 y=2,z=4
  l y=4,z=8
  2 y=8,z=16
  評析:靜態(tài)存儲變量的定義方法是在定義變量里,前面加關鍵字static,而且一次允許定義多個靜態(tài)變量。一旦某個變量在函數(shù)中被定義成靜態(tài)的類型,在程序運行期間,每次調(diào)用函數(shù)時,它不再重新賦初值,而是保留上次函數(shù)調(diào)用結(jié)束時的值。.如本題中,在第1次調(diào)用函數(shù)ma()結(jié)束時,y、z的值分別是y=2,z=4。在第2次調(diào)用ma()函數(shù)時,靜態(tài)存儲變量y、z不再重新被賦初值,而是保留上次結(jié)束時的值。
  
  (17)已知有如圖所示的單鏈表,則以下函數(shù)的功能是 【17】  。
  
  #include<stdio.h>
  typedef struct node
  { int data;
  struct node *next;
  }Node;
  Node *reverlist(Llist *head)
  {
  Node *p,*q;
  if(head&&head->nex0
  {
  p=head;
  q=p->next;
  p->next=null;
  while(q)
  {
  p=q;
  q=q->next;
  p->next=head;
  head=p;
  }
  }
  return(head);
  答案:【17】逆置單鏈表
  知識點:單鏈表的運算
  評析:該函數(shù)是首先將head指向的鏈表在第l和第2個結(jié)點間斷開成前后兩個鏈表,用指針head指向前面單個結(jié)點的鏈表,而用指針q指向后面斷開部分的鏈表,每次將指針q指向鏈表的第1個結(jié)點取出,然后插入到head指針指向鏈表的最前面,直到q指針指向鏈表的結(jié)點全部取出,并插入到head指針指向的鏈表中,最后指針head指向的鏈表就是原來鏈表的逆置鏈表。
  
  (18)以下程序的功能是將一個字符串sl中的內(nèi)容復制到字符串s2中,請?zhí)羁铡?BR>  void copy_string(char *pl,char *p2)
  {
  for ( ;*p1 !='\0' ;p1 ++,p2++)
  【18】 ;
  【19】 ;
  ;
  }
  main( )
  {
  char * s1 ="hello!";
  char *s2="Good morning!";
  prinff("\nstring sl=%s\nstring s2=%s\n",sl,s2);
  copy_string( 【20】  );
  printf("\nstring sl=%s\nstring s2=%s\n",sl,s2);
  答案:【18】*p2=*pl
  【19】*p2='\0'
  【20】sl,s2
  評析:形式參數(shù)可以有不同的數(shù)據(jù)類型,其中本題中的字符指針也是一種形式a在本題中,pl,p2都是字符指針,在調(diào)用copy_string函數(shù)時,將數(shù)組s1的首地址傳給p1,把數(shù)組s2的首地址傳給p2。在函數(shù)copy_string中的for循環(huán)中,每次將*pl賦給*p2,第1次就是將s1數(shù)組的第1個字符賦給s2數(shù)組。在執(zhí)行pl++和p2++后,p1和p2就分別指向s1[1]和s2[1]。然后依此類推。在復制所有字符后,還要記得在最后將結(jié)束符'\0'賦給p2。

上一頁  [1] [2] 

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