全國計算機等級考試二級筆試樣卷C語言程序設(shè)計

字號:

 
    一、選擇題((1)~(10)、(21)~(40)每題2分,(11)~(20)每題2分,共70分)
       下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
     
    (1)下列選項中不符合良好程序設(shè)計風(fēng)格的是
    A) 源程序要文檔化      B) 數(shù)據(jù)說明的次序要規(guī)范化
    C) 避免濫用goto語句   D) 模塊設(shè)計要保證高耦合、高內(nèi)聚
     
    (2)從工程管理角度,軟件設(shè)計一般分為兩步完成,它們是
    A) 概要設(shè)計與詳細(xì)設(shè)計  B) 數(shù)據(jù)設(shè)計與接口設(shè)計
    C) 軟件結(jié)構(gòu)設(shè)計與數(shù)據(jù)設(shè)計  D) 過程設(shè)計與數(shù)據(jù)設(shè)計
     
    (3)下列選項中不屬于軟件生命周期開發(fā)階段任務(wù)的是
        A)軟件測試     B)概要設(shè)計 C)軟件維護(hù) D)詳細(xì)設(shè)計
     
    (4)在數(shù)據(jù)庫系統(tǒng)中,用戶所見的數(shù)據(jù)模式為
        A) 概念模式    B)外模式  C)內(nèi)模式   D)物理模式
     
    (5)數(shù)據(jù)庫設(shè)計的四個階段是:需求分析、概念設(shè)計、邏輯設(shè)計和
    A) 編碼設(shè)計    B) 測試階段    C)運行階段 D)物理設(shè)計
     
    (6)設(shè)有如下三個關(guān)系表
    

      
    

    R
    

     
    

    S
    

     
    

     
    

    T
    

     
    

     
    

     
    

    A
    

     
    

    B
    

    C
    

     
    

    A
    

    B
    

    C
    

     
    

     
    

    m
    

     
    

    1
    

    3
    

     
    

    m
    

    1
    

    3
    

     
    

     
    

    n
    

     
    

     
    

     
    

     
    

    n
    

    1
    

    3
    

     
    

    下列操作中正確的是
    A)T=R∩S      B)T=R∪S
    C)T=R×S      D)T=R/S
     
    (7)下列敘述中正確的是
        A)一個算法的空間復(fù)雜度大,則其時間復(fù)雜度也必定大
        B)一個算法的空間復(fù)雜度大,則其時間復(fù)雜度必定小
        C)一個算法的時間復(fù)雜度大,則其空間復(fù)雜度必定小
    D)上述三種說法都不對
     
    (8)在長度為64的有序線性表中進(jìn)行順序查找,最壞情況下需要比較的次數(shù)為
    A)63   B)64   C)6    D)7
     
    (9)數(shù)據(jù)庫技術(shù)的根本目標(biāo)是要解決數(shù)據(jù)的
    A)存儲問題 B)共享問題 C)安全問題 D)保護(hù)問題
     
    (10)對下列二叉樹
    進(jìn)行中序遍歷的結(jié)果是
    A)ACBDFEG  B)ACBDFGE  C)ABDCGEF  D)FCADBEG
     
    (11)下列敘述中錯誤的是
        A)一個C語言程序只能實現(xiàn)一種算法
        B)C程序可以由多個程序文件組成
        C)C程序可以由一個或多個函數(shù)組成
        D)一個C函數(shù)可以單獨作為一個C程序文件存在
     
    (12)下列敘述中正確的是
        A)每個C程序文件中都必須要有一個main()函數(shù)
        B)在C程序中main()函數(shù)的位置是固定的
        C)C程序中所有函數(shù)之間都可以相互調(diào)用,與函數(shù)所在位置無關(guān)
        D)在C程序的函數(shù)中不能定義另一個函數(shù)
     
    (13)下列定義變量的語句中錯誤的是
        A)int  _int;       B)double  int_;      C)char  For;            D)float  US$;
    (14)若變量x、y已正確定義并賦值,以下符合C語言語法的表達(dá)式是
        A)++x,y=x--        B)x+1=y          C)x=x+10=x+y         D)double(x)/10
     
    (15)以下關(guān)于邏輯運算符兩側(cè)運算對象的敘述中正確的是
        A)只能是整數(shù)0或1                B)只能是整數(shù)0或非0整數(shù)
        C)可以是結(jié)構(gòu)體類型的數(shù)據(jù)         D)可以是任意合法的表達(dá)式
     
    (16)若有定義int  x,y; 并已正確給變量賦值,則以下選項中與表達(dá)式(x-y)?(x++) : (y++)中的條件表達(dá)式(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);
        }
    程序運行后的輸出結(jié)果是
        A)2,3,3            B)2,3,2              C)2,3,1          D)2,2,1
     
    (18)設(shè)有定義:int  a;    float  b;    執(zhí)行 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);   /*  輸出計算結(jié)果 */
        }
    程序運行后的輸出結(jié)果是
        A)a+b=10           B)a+b=30       C)30          D)出錯
     
     
    (20)在嵌套使用if語句時,C語言規(guī)定else總是
        A)和之前與其具有相同縮進(jìn)位置的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");
        }
    執(zhí)行后的輸出結(jié)果是
        A)1           B)2            C)4              D)死循環(huán)
     
    (23)有以下程序
        main()
        { int  i;
          for(i=1; i<=40; i++)
          { if(i++%5==0)
               if(++i%8==0)  printf("%d ",i);
          }
          printf("\n");
        }
    執(zhí)行后的輸出結(jié)果是
        A)5            B)24             C)32             D)40
     
    (24)以下選項中,值為1的表達(dá)式是
        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);
        }
    執(zhí)行后的輸出結(jié)果是
        A)6            B)7             C)8            D)9
     
    (26)有以下程序
        main()
        {  char  s[]="abcde";
           s+=2;
           printf("%d\n",s[0]);
        }
    執(zhí)行后的結(jié)果是
        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);
        }
    執(zhí)行后的輸出結(jié)果是
        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)); }
    執(zhí)行后的輸出結(jié)果是
        A)7            B)3            C)2            D)0
     
    (29)在16位編譯系統(tǒng)上,若有定義int  a[]={10,20,30}, *p=&a;,當(dāng)執(zhí)行p++;后,下列說法錯誤的是
        A)p向高地址移了一個字節(jié)        B)p向高地址移了一個存儲單元
        C)p向高地址移了兩個字節(jié)        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);
        }
    執(zhí)行后的輸出結(jié)果是
        A)1            B)2            C)3            D)4
     
    (31)若有定義:int w[3][5]; ,則以下不能正確表示該數(shù)組元素的表達(dá)式是
        A)*(*w+3)      B)*(w+1)[4]        C)*(*(w+1))        D)*(&w[0][0]+1)
     
    (32)若有以下函數(shù)首部
        int  fun(double  x[10], int  *n)
    則下面針對此函數(shù)的函數(shù)聲明語句中正確的是
        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");
        }
    程序運行后輸出的結(jié)果是
        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<回車>,則輸出結(jié)果為
        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;
          …
        }
    則以下函數(shù)調(diào)用語句錯誤的是
        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);
        }
    該程序生成的可執(zhí)行文件名為:proc.exe。若運行時輸入命令行:
        proc  123  45  67
    則程序的輸出結(jié)果是
        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);
        }
    程序的運行結(jié)果是
        A)12  12       B)11  7        C)11  11       D)12  7
     
    (38)有以下結(jié)構(gòu)體說明、變量定義和賦值語句
        struct STD
        { char  name[10];
          int  age;
          char  sex;
        } s[5],*ps;
        ps=&s[0];
    則以下scanf函數(shù)調(diào)用語句中錯誤引用結(jié)構(gòu)體變量成員的是
        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);
        }
    程序執(zhí)行后的輸出結(jié)果是
        A)d            B)c            C)b            D)a
     
    二、填空題(每空2分,共30分)
        請將每一個空的正確答案寫在答題卡【1】至【15】序號的橫線上,答在試卷上不得分。
     
    (1)下列軟件系統(tǒng)結(jié)構(gòu)圖
    的寬度為  【1】  。
     
    (2)  【2】  的任務(wù)是診斷和改正程序中的錯誤。
     
    (3)一個關(guān)系表的行稱為   【3】   。
     
    (4)按“先進(jìn)后出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是  【4】    。
     
    (5)數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊列屬于  【5】   。
     
    (6)設(shè)有定義:float  x=123.4567;,則執(zhí)行以下語句后的輸出結(jié)果是 【6】 。
            printf("%f\n",(int)(x*100+0.5)/100.0);
     
    (7)以下程序運行后的輸出結(jié)果是 【7】 。
        main()
        { int  m=011,n=11;
          printf("%d  %d\n",++m, n++);
        }
     
    (8)以下程序運行后的輸出結(jié)果是 【8】
        main()
        { int  x,a=1,b=2,c=3,d=4;
          x=(a
          printf("%d\n",x);
        }
     
    (9)有以下程序,若運行時從鍵盤輸入:18,11<回車>,則程序的輸出結(jié)果是 【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)以下程序的功能是:將輸入的正整數(shù)按逆序輸出。例如:若輸入135則輸出531。請?zhí)羁铡?BR>        #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)以下程序中,函數(shù)fun的功能是計算x2-2x+6,主函數(shù)中將調(diào)用fun函數(shù)計算:
            y1=(x+8)2-2 (x+8)+6
            y2=sin2(x)-2sin(x)+6
    請?zhí)羁铡?BR>        #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列二維數(shù)組中每一行的元素進(jì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
               /*判斷行下標(biāo)是否為偶數(shù)來確定按升序或降序來排序*/
                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); /*以矩陣的形式輸出二維數(shù)組*/
          sort(aa);
          outarr(aa);
        }
     
    (13)下面程序的運行結(jié)果是:【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);
        }