江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2014年9月全国二级C语言选择题真题第2套

1.下列叙述中错误的是

 

A.数据结构中的数据元素不能是另一数据结构

 

B.数据结构中的数据元素可以是另一数据结构

 

C.空数据结构可以是线性结构也可以是非线性结构

 

D.非空数据结构可以没有根结点

 

2.为了降低算法的空间复杂度,要求算法尽量采用原地工作(in place)。所谓原地工作是指

 

A.执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化)

 

B.执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化

 

C.执行算法时不使用额外空间

 

D.执行算法时不使用任何存储空间

 

3. 某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为

 

A.m-1

 

B.m

 

C.1

 

D.0

 

4.某棵树只有度为3的结点和叶子结点,其中度为3的结点有8个,则该树中的叶子结点数为

 

A.15

 

B.16

 

C.17

 

D.不存在这样的树

 

5. 某二叉树共有530个结点,其中度为2的结点有250个,则度为1的结点数为

 

A.29

 

B.30

 

C.249

 

D.251

 

6.若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是

 

A.前序序列

 

B.中序序列 

 

C.后序序列

 

D.以上说法均可以

 

7.将C语言的整数设为整数类I,则下面属于类I实例的是

 

A.-103

 

B.10E3

 

C.10.3

 

D."0103"

 

8.下列叙述中正确的是

 

A.软件是程序、数据和文档

 

B.软件是程序和数据

 

C.软件是算法和数据结构

 

D.软件是算法和程序

 

9.软件生命周期是指

 

A.软件的定义和开发阶段

 

B.软件的需求分析、设计与实现阶段

 

C.软件的开发阶段

 

D.软件产品从提出、实现、使用维护到停止使用退役的过程

 

10.下列叙述中正确的是

 

A.数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能

 

B.数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件

 

C.数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少

 

D.数据库系统独立性较差,而文件系统独立性较好

 

11.关于程序模块化,以下叙述错误的是

 

A.程序模块化可以提高程序运行的效率

 

B.程序模块化可以提高程序编制的效率

 

C.程序模块化可以提高程序代码复用率

 

D.程序模块化可以提高调试程序的效率

 

12.以下是正确C语言标识符的是

 

A.&3

 

B.#3

 

C._3

 

D.-3

 

13.若有定义:int  a,b,c; 以下程序段的输出结果是

          a=11;  b=3;  c=0;

 

 

          printf("%d\n",c=(a/b,a%b));

 

A.2

 

B.0

 

C.3

 

D.1

 

14.以下选项中合法的C语言常量是

 

A. 'C-STR'

 

B.2014.1

 

C."\1.0

 

D.2EK

 

15.设有定义:int x,y,z;,且各变量已赋正整数值,则以下能正确表示代数式 的C语言表达式是(   )。

 

A.1.0/x/y/z

 

B.1/x*y*z

 

C.1/(x*y*z)

 

D.1/x/y/(double)z

 

16.有以下程序

    #include <stdio.h>

    main()

    {  char  a,b,c,d;

       scanf("%c%c",&a, &b);

       c=getchar();

       d=getchar();

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

    }

 

当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)

    12<CR>

    34<CR>

 

则输出结果是

 

A. 12

 

               3

 

B. 12

 

C.1234

 

D. 12

 

               34

 

17.有以下程序

#include   <stdio.h>

main( )

{  int  a, b;

   for (a=0; a<3; a++) 

   {  scanf("%d", &b);

      switch(b)

      {  default:  printf("%d,",b+1);  continue;

         case  1:  printf("%d,", b+1);

         case  2:  printf("%d,", b+1);  continue;

      }

   }

}

 

 

执行时输入:1  2  3<回车>,则输出结果是

 

A.2,2,3,4,4,4,

 

B.2,3,4,

 

C.2,2,3,4,

 

D.2,3,3,4,5,6,

 

18.有以下程序

#include  <stdio.h>

#include  <math.h>

main()

{  double  x, y, z;

   scanf("%lf%lf",&x,&y );

   z= x/ y;

   while(1)

     if( fabs(z) > 1.0 )

     {  x=y; y=x; z=x/y; }

     else   break;

   printf("y=%f \n", y );

 

 

}

 

 

执行时输入:3.6  2.4<回车>,则输出结果是

 

A.2.400000

 

B.1.500000

 

C.1.600000

 

D.2.000000

 

19.有以下程序

#include   <stdio.h>

main( )

{  int  i;

   char  c;

   scanf("%c", &c);

   for (i=0; i<5; i++)

   {

        if (i > c) continue;

        printf("%d,", i);

   }

}

 

 

执行时输入0<回车>则输出结果是

 

A.5

 

B.0,0,0,0,0,

 

C.0,1,2,3,4,

 

D.0,1,

 

20.以下程序拟实现计算 sum=1+1/2+1/3+ … +1/50

#include   <stdio.h>

main( )

{  int  i;    double  sum;

   sum=1.0;

   i=1;

   do

   {  i++;    sum += 1/i;   }

   while( i<50 );

   printf("sum=%lf\n",sum);

}

 

 

程序运行后不能得到正确结果出现问题的语句是

 

A.sum += 1/i;

 

B.while(i<50);

 

C.sum = 1.0;

 

D.i++;

 

21. 若有定义语句

    double  a, *p=&a;

 

 

以下叙述中错误的是

 

A.定义语句中的 * 号是一个间址运算符

 

B.定义语句中的 * 号是一个说明符

 

C.定义语句中的p只能存放double类型变量的地址

 

D.定义语句中 *p=&a 把变量a的地址作为初值赋给指针变量p

 

22.关于函数返回值以下叙述正确的是

 

A.函数可以返回整个结构体,即使结构体中有数组

 

B.函数只能返回基本数据类型的数值或指针

 

C.函数不可以返回一个数组

 

D.函数不能没有返回值

 

23.有以下程序

#include  <stdio.h>

int  fun( int *b,  int  n )

{   int  i, r=1;

    for( i=0; i<=n; i++ ) r=r*b[i];

    return  r;

}

main()

{   int  x, a[]={2,3,4,5,6,7,8,9 };

    x=fun( a,3 );

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

 

 

}

 

程序运行后的输出结果是

 

A.24

 

B.720

 

C.120

 

D.6

 

24.若有语句int  a[3][4], (*p)[4];  p = a;则以下选项中叙述错误的是

 

A.系统将开辟一个名为p的二维数组,p[0][0]中的值即为a[0][0]中的值

 

B.p+1代表a[1][0]的地址

 

C.p中将存放 a 数组的首地址

 

D.p+2代表 a 数组最后一行的首地址

 

25.有以下程序

#include   <stdio.h>

void change( char*  array, int  len )

{  for (len--; len>=0; len--)

        array[len] += 1;

}

main( )

{  int  i;

   char  array[5] = "ABCD";

   change(array, 4);

   for (i=0; i<4; i++)

        printf("%c,", array[i]);

}

 

程序运行后的输出结果是

 

 

 

A. B,C,D,E,

 

B.A,B,C,D,

 

C.C,D,E,F,

 

 

D.B,D,F,H,

 

26.设有以下程序段

        float  a[8] = {1.0, 2.0};

        int  b[1] = {0};

        char  c[] = {"A", "B"};

        char  d == "1";

 

 

以下叙述正确的是

 

A.只有变量c的定义是合法的

 

B.只有变量a,b,c的定义是完全合法的

 

C.所有变量的定义都是完全合法的

 

D.只有变量a, b的定义是完全合法的

 

27.有以下程序

#include   <stdio.h>

main( )

{  int  a[4],p,x,i;

   for( i=3;i>0;i-- )a[i-1]=i*2-1;

   scanf("%d",&x);

   i=0;

   while( a[i]<x )  i++;

   p=i;

   for( i=3;i>p;i-- )  a[i]=a[i-1];

   a[p]=x;

   for( i=0;i<4;i++ )   printf("%3d",a[i]);

   printf("\n");

}

 

 

执行时输入:2<回车>,则输出结果是

 

A.1  2  3  4

 

B.5  4  3  1

 

C.1  2  3  5

 

D.3  2  1  4

 

28.有以下程序

#include  <stdio.h>

int fun(int  a[],int  n,int  x)

{  int  *p=a;

   while( p<a+n && *p!=x ) p++;

   if ( p<a+n )  return  p-a;

   else  return  -1;

}

main()

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

   printf("%d\n",fun(a,10,10)); 

}

 

 

程序运行后的输出结果是

 

A.9

 

B.-1

 

C.10

 

D.0

 

29.有以下程序

#include  <stdio.h>

main( )

{  char  w[20], a[5][10]={"abcde", "fghij", "klmno", "pqrst", "uvwxy"};

   int  i;

   for ( i=0; i<5; i++ )

       w[i] = a[i][i];

   w[5]= '\0';

   printf( "%s\n", w );

 

 

}

 

 

程序运行后的输出结果是

 

A.ejoty

 

B.afkpu

 

C.agmsy

 

D.eimqu

 

30.语句printf("%d\n", strlen("\t\"\\\n\'\065\08AB"));的输出结果是

 

A.6

 

B.7

 

C.8

 

D.9

 

31.有以下程序

#include  <stdio.h>

#include  <string.h>

void  fun( char *s, int m1, int m2 )

{  char  t, *p;

   p=s + m1;  s= s+m2;

   while( s<p )

   {  t=*s;  *s=*p;  *p=t;

      s++;   p--;

   }

}

main()

{   char  ss[10]="012345678";

    int  n=6;

    fun( ss,0,n-1 );

    fun( ss,9,n );

    fun( ss,0,9 );

    printf("%s\n", ss );

}

 

 

程序运行后的输出结果是

 

A.012345

 

B.876543210

 

C.876543

 

D.012345678

 

32.有以下程序

#include   <stdio.h>

int  m=1,n=2;

void sub1(int  m,int  n)

{   m+=2; n++;   }

void sub2( )

{   m++;  n+=2;   }

main( )

{  printf("%d,%d,",m,n);

   sub1(4,5);

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

   sub2();

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

 

 

}

 

 

程序运行后的输出结果是

 

A.1,2,1,2,2,4

 

B.1,2,6,6,7,8

 

C.1,2,2,4,2,4

 

D.1,2,6,6,2,4

 

33.有以下程序

#include   <ctype.h>

#include   <stdio.h>

long fun( char  s[] )

{  long  n;  int  sign;

   for(  ; isspace(*s); s++ );

   sign=(*s=='-')? -1 : 1;

   if(*s=='+' || *s=='-') s++;

   for( n=0 ; isdigit(*s); s++ )

       n=10*n+(*s-'0');

   return sign*n;

}

main()

{  char  s[]="  -26a3";

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

 }

 

程序运行后的输出结果是

 

A.-263

 

B.2

 

C.0

 

D.-26

 

34.设有定义

    struct complex

    {  int real,unreal;} data1={1,8},data2;

 

 

 

则以下赋值语句中错误的是

 

A.data2=(2,6);

 

B.data2=data1;

 

C.data2.real=data1.real;

 

D.data2.real=data1.unreal;

 

35.有以下程序

 

#include <stdio.h>

#define S(x) x*x/x

main( )

{  int k = 6, j = 3;

   printf("%d,%d\n", S(k+j+2), S(j+k+2));

 

 

}

 

 

 

程序运行后的输出结果是

 

A. 11,11

 

B.29,29

 

C.26,29

 

D.121,121

 

36.若有定义

          typedef  int  *T[10]; 

          T  a;

 

 

则以下选项与上述定义中a的类型完全相同的是

 

A.int  *a[10];

 

B.int  (*a)[10];

 

C.int  a[10];

 

D.int  (*a[10])();

 

37.有以下程序

#include   <stdio.h>

main( )

{  FILE  *fp;

   int  i, a[6]={1,2,3,4,5,6},k;

   fp = fopen( "data.dat", "w+" );

   for ( i=0; i<6; i++ )

       fprintf(fp, "%d\n", a[5-i]);

   rewind(fp);

   for ( i=0; i<6; i++ )

   {   fscanf(fp, "%d", &k);

       printf("%d,", k);

   }

   fclose(fp);

}

 

 

程序运行后的输出结果是

 

A.6,5,4,3,2,1,   

 

B.1,2,3,4,5,6,

 

C.1,1,1,1,1,1

 

D.6,6,6,6,6,6,

 

38. 有以下程序

#include  <stdio.h>

#include  <stdlib.h>

void  fun( double  *p1, double  *p2, double  *s )

{   s=( double* )calloc( 1,sizeof(double) );

    *s = *p1 + *p2;

}

main()

{   double  a[2]={1.1,2.2 }, b[2]={ 10.0,20.0 }, *q=NULL;

    fun( a,b,q );

    printf("%5.2f \n", *q  );

 

 

}

 

 

程序运行后的结果是

 

A.有运行错误

 

B.输出11.10

 

C.输出12.10

 

D.输出21.10

 

39.若文件指针fp已正确指向文件,ch为字符型变量,以下不能把字符输出到文件中的语句是

 

A.fget( fp,ch );

 

B.fputc(ch,fp);

 

C.fprintf( fp, "%c",ch );

 

D.fwrite( &ch,sizeof(ch),1,fp);

 

40.有以下程序

#include   <stdio.h>

struct  ball

{

    char  color[10];

    int  dim;

};

main( )

{

    struct ball list[2] = {{"white", 2}, {"yellow", 3}};

    printf("%s:%d\n", (list+1)->color, list->dim);

 

 

}

 

程序运行后的输出结果是

 

A.yellow:3

 

B.yellow:2 

 

C.white:2

 

D.white:3

 

1.A  2.A  3.A  4.C  5.A  6.B  7.A  8.A  9.D  10.A  11.A  12.C  13.A  14.B  15.A  16.A  17.C  18.A  19.C  20.A  21.A  22.A  23.C  24.A  25.A  26.D  27.C  28.A  29.C  30.A  31.A  32.A  33.D  34.A  35.B  36.A  37.A  38.A  39.A  40.B 

 

34