• 全國計算機等級考試二級筆試樣卷C語言程序設計

    發布時間:2009-03-03                    來源:教育部考試中心

      一、選擇題((1)~(10)、(21)~(40)每題2分,(11)~(20)每題2分,共70分)

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

      (1)下列選項中不符合良好程序設計風格的是

      A) 源程序要文檔化      B) 數據說明的次序要規范化

      C) 避免濫用goto語句   D) 模塊設計要保證高耦合、高內聚

      (2)從工程管理角度,軟件設計一般分為兩步完成,它們是

      A) 概要設計與詳細設計  B) 數據設計與接口設計

      C) 軟件結構設計與數據設計  D) 過程設計與數據設計

      (3)下列選項中不屬于軟件生命周期開發階段任務的是

      A)軟件測試     B)概要設計 C)軟件維護 D)詳細設計

      (4)在數據庫系統中,用戶所見的數據模式為

      A) 概念模式    B)外模式  C)內模式   D)物理模式

      (5)數據庫設計的四個階段是:需求分析、概念設計、邏輯設計和

      A) 編碼設計    B) 測試階段    C)運行階段 D)物理設計

      (6)設有如下三個關系表


      下列操作中正確的是

      A)T=R∩S      B)T=R∪S

      C)T=R×S      D)T=R/S

      (7)下列敘述中正確的是

      A)一個算法的空間復雜度大,則其時間復雜度也必定大

      B)一個算法的空間復雜度大,則其時間復雜度必定小

      C)一個算法的時間復雜度大,則其空間復雜度必定小

      D)上述三種說法都不對

      (8)在長度為64的有序線性表中進行順序查找,最壞情況下需要比較的次數為

      A)63   B)64   C)6    D)7

      (9)數據庫技術的根本目標是要解決數據的

      A)存儲問題 B)共享問題 C)安全問題 D)保護問題

      (10)對下列二叉樹

      進行中序遍歷的結果是

      A)ACBDFEG  B)ACBDFGE  C)ABDCGEF  D)FCADBEG

      (11)下列敘述中錯誤的是

      A)一個C語言程序只能實現一種算法

      B)C程序可以由多個程序文件組成

      C)C程序可以由一個或多個函數組成

      D)一個C函數可以單獨作為一個C程序文件存在

      (12)下列敘述中正確的是

      A)每個C程序文件中都必須要有一個main()函數

      B)在C程序中main()函數的位置是固定的

      C)C程序中所有函數之間都可以相互調用,與函數所在位置無關

      D)在C程序的函數中不能定義另一個函數

      (13)下列定義變量的語句中錯誤的是

      A)int  _int;       B)double  int_;      C)char  For;            D)float  US$;

      (14)若變量x、y已正確定義并賦值,以下符合C語言語法的表達式是

      A)++x,y=x--        B)x+1=y          C)x=x+10=x+y         D)double(x)/10

      (15)以下關于邏輯運算符兩側運算對象的敘述中正確的是

      A)只能是整數0或1                B)只能是整數0或非0整數

      C)可以是結構體類型的數據         D)可以是任意合法的表達式

      (16)若有定義int  x,y; 并已正確給變量賦值,則以下選項中與表達式(x-y)?(x++) : (y++)中的條件表達式(x-y) 等價的是

      A)(x-y>0)      B)(x-y<0)        C)(x-y<0||x-y>0)   D)(x-y==0)

      (17)有以下程序

      main()

      { int  x, y, z;

      x=y=1;

      z=x++,y++,++y;

      printf("%d,%d,%d\n",x,y,z);

      }

      程序運行后的輸出結果是

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

      (18)設有定義:int  a;    float  b;    執行 scanf("%2d%f",&a,&b); 語句時,若從鍵盤輸入876  543.0<回車>,a和b的值分別是

      A)876和543.000000               B)87和6.000000

      C)87和543.000000                D)76和543.000000

      (19)有以下程序

      main()

      { int  a=0, b=0;

      a=10;                     /*  給a賦值

      b=20;                         給b賦值     */

      printf("a+b=%d\n",a+b);   /*  輸出計算結果 */

      }

      程序運行后的輸出結果是

      A)a+b=10           B)a+b=30       C)30          D)出錯

      (20)在嵌套使用if語句時,C語言規定else總是

      A)和之前與其具有相同縮進位置的if配對

      B)和之前與其最近的if配對

      C)和之前與其最近的且不帶else的if配對

      D)和之前的第一個if配對

      (21)下列敘述中正確的是

      A)break語句只能用于switch語句

      B)在switch語句中必須使用default

      C)break語句必須與switch語句中的case配對使用

      D)在switch語句中,不一定使用break語句

      (22)有以下程序

      main()

      { int  k=5;

      while(--k)  printf("%d",k -= 3);

      printf("\n");

      }

      執行后的輸出結果是

      A)1           B)2            C)4              D)死循環

      (23)有以下程序

      main()

      { int  i;

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

      { if(i++%5==0)

      if(++i%8==0)  printf("%d ",i);

      }

      printf("\n");

      }

      執行后的輸出結果是

      A)5            B)24             C)32             D)40

      (24)以下選項中,值為1的表達式是

      A)1 –'0'          B)1 - '\0'       C)'1' -0         D)'\0' - '0'

      (25)有以下程序

      fun(int  x, int  y){ return (x+y); }

      main()

      { int  a=1, b=2, c=3, sum;

      sum=fun((a++,b++,a+b),c++);

      printf("%d\n",sum);

      }

      執行后的輸出結果是

      A)6            B)7             C)8            D)9

      (26)有以下程序

      main()

      {  char  s[]="abcde";

      s+=2;

      printf("%d\n",s[0]);

      }

      執行后的結果是

      A)輸出字符a的ASCII碼         B)輸出字符c的ASCII碼

      C)輸出字符c                    D)程序出錯

      (27)有以下程序

      fun(int  x, int  y)

      { static int  m=0, i=2;

      i+=m+1;    m=i+x+y;    return m;

      }

      main()

      { int  j=1, m=1, k;

      k=fun(j,m);    printf("%d,",k);

      k=fun(j,m);    printf("%d\n",k);

      }

      執行后的輸出結果是

      A)5, 5         B)5, 11            C)11, 11       D)11, 5

      (28)有以下程序

      fun(int  x)

      { int  p;

      if(x==0||x==1)  return(3);

      p=x-fun(x-2);

      return p;

      }

      main()

      {  printf("%d\n",fun(7)); }

      執行后的輸出結果是

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

      (29)在16位編譯系統上,若有定義int  a[]={10,20,30}, *p=&a;,當執行p++;后,下列說法錯誤的是

      A)p向高地址移了一個字節        B)p向高地址移了一個存儲單元

      C)p向高地址移了兩個字節        D)p與a+1等價

      (30)有以下程序

      main()

      { int  a=1, b=3, c=5;

      int  *p1=&a, *p2=&b, *p=&c;

      *p =*p1*(*p2);

      printf("%d\n",c);

      }

      執行后的輸出結果是

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

      (31)若有定義:int w[3][5]; ,則以下不能正確表示該數組元素的表達式是

      A)*(*w+3)      B)*(w+1)[4]        C)*(*(w+1))        D)*(&w[0][0]+1)

      (32)若有以下函數首部

      int  fun(double  x[10], int  *n)

      則下面針對此函數的函數聲明語句中正確的是

      A)int  fun(double x, int *n);      B)int  fun(double  , int );

      C)int  fun(double *x, int n);      D)int  fun(double *,  int *);

      (33)有以下程序

      void change(int k[ ]){ k[0]=k[5]; }

      main()

      { int  x[10]={1,2,3,4,5,6,7,8,9,10},n=0;

      while( n<=4 )  { change( &x[n]) ; n++; }

      for(n=0; n<5; n++)  printf("%d ",x[n]);

      printf("\n");

      }

      程序運行后輸出的結果是

      A)6 7 8 9 10       B)1 3 5 7 9       C)1 2 3 4 5       D)6 2 3 4 5

      (34)有以下程序

      main()

      { int  x[3][2]={0}, i;

      for(i=0; i<3; i++)    scanf("%d",x[i]);

      printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);

      }

      若運行時輸入:2 4 6<回車>,則輸出結果為

      A)2  0  0      B)2  0  4      C)2  4  0      D)2  4  6

      (35)有以下程序

      int add( int  a,int  b){ return (a+b);  }

      main()

      { int  k, (*f)(), a=5,b=10;

      f=add;

      …

      }

      則以下函數調用語句錯誤的是

      A)k=(*f)(a,b);                 B)k=add(a,b);

      C)k= *f(a,b);                      D)k=f(a,b);

      (36)有以下程序

      #include   

      main( int  argc, char  *argv[ ])

      { int  i=1,n=0;

      while (i

      printf("%d\n",n);

      }

      該程序生成的可執行文件名為:proc.exe。若運行時輸入命令行:

      proc  123  45  67

      則程序的輸出結果是

      A)3            B)5            C)7            D)11

      (37)有以下程序

      # include   

      # define    N    5

      # define    M    N+1

      # define    f(x)   (x*M)

      main()

      { int  i1, i2;

      i1 = f(2) ;

      i2 = f(1+1) ;

      printf("%d  %d\n", i1, i2);

      }

      程序的運行結果是

      A)12  12       B)11  7        C)11  11       D)12  7

      (38)有以下結構體說明、變量定義和賦值語句

      struct STD

      { char  name[10];

      int  age;

      char  sex;

      } s[5],*ps;

      ps=&s[0];

      則以下scanf函數調用語句中錯誤引用結構體變量成員的是

      A)scanf("%s",s[0].name);          B)scanf("%d",&s[0].age);

      C)scanf("%c",&(ps->sex));         D)scanf("%d",ps->age);

      (39)若有以下定義和語句

      union data

      {  int  i;   char  c;   float  f; } x;

      int  y;

      則以下語句正確的是

      A)x=10.5;      B)x.c=101;     C)y=x;         D)printf("%d\n",x);

      (40)有以下程序

      #include 

      main()

      { FILE  *fp;    int  i;

      char  ch[]="abcd",t;

      fp=fopen("abc.dat","wb+");

      for(i=0; i<4; i++) fwrite(&ch[i],1,1,fp);

      fseek(fp,-2L,SEEK_END);

      fread(&t,1,1,fp);

      fclose(fp);

      printf("%c\n",t);

      }

      程序執行后的輸出結果是

      A)d            B)c            C)b            D)a

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

      請將每一個空的正確答案寫在答題卡【1】至【15】序號的橫線上,答在試卷上不得分。

      (1)下列軟件系統結構圖

      的寬度為  【1】  。

      (2)  【2】  的任務是診斷和改正程序中的錯誤。

      (3)一個關系表的行稱為   【3】   。

      (4)按“先進后出”原則組織數據的數據結構是  【4】    。

      (5)數據結構分為線性結構和非線性結構,帶鏈的隊列屬于  【5】   。

      (6)設有定義:float  x=123.4567;,則執行以下語句后的輸出結果是 【6】

      printf("%f\n",(int)(x*100+0.5)/100.0);

      (7)以下程序運行后的輸出結果是 【7】

      main()

      { int  m=011,n=11;

      printf("%d  %d\n",++m, n++);

      }

      (8)以下程序運行后的輸出結果是 【8】

      main()

      { int  x,a=1,b=2,c=3,d=4;

      x=(a   x=(x   x=(d>x) ? x : d;

      printf("%d\n",x);

      }

      (9)有以下程序,若運行時從鍵盤輸入:18,11<回車>,則程序的輸出結果是 【9】

      main()

      {  int  a,b;

      printf("Enter a,b:");   scanf("%d,%d",&a,&b);

      while(a!=b)

      {  while(a>b) a -= b;

      while(b>a) b -= a;

      }

      printf("%3d%3d\n",a,b);

      }

      (10)以下程序的功能是:將輸入的正整數按逆序輸出。例如:若輸入135則輸出531。請填空。

      #include   

      main()

      { int  n,s;

      printf("Enter a number : ");   scanf("%d",&n);

      printf("Output:  ");

      do

      {  s=n%10;  printf("%d",s);  【10】 ;  }

      while(n!=0);

      printf("\n");

      }

      (11)以下程序中,函數fun的功能是計算x2-2x+6,主函數中將調用fun函數計算:

      y1=(x+8)2-2 (x+8)+6

      y2=sin2(x)-2sin(x)+6

      請填空。

      #include   "math.h"

      double fun(double  x){ return (x*x-2*x+6); }

      main()

      { double  x,y1,y2;

      printf("Enter x:");    scanf("%lf",&x);

      y1=fun( 【11】 );

      y2=fun( 【12】 );

      printf("y1=%lf,y2=%lf\n",y1,y2);

      }

      (12)下面程序的功能是:將N行N列二維數組中每一行的元素進行排序,第0行從小到大排序,第1行從大到小排序,第2行從小到大排序,第3行從大到小排序,例如:

      #define    N    4

      void sort(int  a[][N])

      { int  i, j, k, t;

      for (i=0; i

      for (j=0; j

      for (k=  【13】 ; k

      /*判斷行下標是否為偶數來確定按升序或降序來排序*/

      if ( 【14】 ? a[i][j]a[i][k])

      {  t = a[i][j];

      a[i][j]=a[i][k];

      a[i][k] = t;

      }

      }

      void outarr(int  a[N][N])

      {    ……    }

      main()

      { int  aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}};

      outarr(aa); /*以矩陣的形式輸出二維數組*/

      sort(aa);

      outarr(aa);

      }

      (13)下面程序的運行結果是:【15】  。

      #include  

      int f(int  a[],int  n)

      { if(n>1)

      return a[0] + f(a+1, n-1);

      else

      return a[0];

      }

      main()

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

      s = f(aa+2,4);    printf("%d\n", s);

      }

美国一级黄色视频免费观看