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

1.下列叙述中正确的是

 

A.程序可以作为算法的一种表达方式

 

B.算法的有穷性是指算法的规模不能太大

 

C.算法的复杂度用于衡量算法的控制结构

 

D.算法的效率与数据的存储结构无关

 

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

 

 

 

A.m-1

 

B.1

 

C.m

 

D.0

 

3.能从任意一个结点开始没有重复地扫描到所有结点的数据结构是

 

A.循环链表

 

B.双向链表

 

C.二叉链表

 

D.有序链表

 

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

 

A.不存在这样的树

 

B.7

 

C.8

 

D.6

 

5.在最坏情况下,二分查找法的时间复杂度为

 

A.

 

B.

 

C.

 

D.

 

6. 某二叉树共有730个结点,其中度为1的结点有30个,则叶子结点个数为

 

 

 

A. 不存在这样的二叉树

 

B.351

 

C.1

 

D.350

 

7.软件开发中需求分析的主要任务是

 

A.定义和描述目标系统做什么

 

B.获取需求

 

C.给出软件解决方案 

 

D.需求评审

 

8.软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是

 

A.学生成绩管理系统

 

B.ERP系统

 

C.办公自动化系统

 

D.UNIX系统

 

9.医生可以为病人开不同的药,而同一种药也可由不同医生开给病人,则实体医生和实体药之间的联系是

 

 

 

A.多对多

 

B.一对一

 

C.多对一

 

D.一对多

 

10.学生选课成绩表的关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2且成绩及格的学生学号的表达式为

 

A.

 

B.

 

C.

 

D.

 

11. 若想定义int型变量a,b,c,d并都赋值为1,以下写法中错误的是

 

A.int  a=b=c=d=1;

 

B. int  a=1, b=1, c=1, d=1;

 

C.int  a,b,c,d;  a=b=c=d=1; 

 

D.int  a,b,c,d=1;  a=b=c=d;

 

12. 若有定义:char c; double d; 程序运行时输入: 1 2<回车>,能把字符1输入给变量c、数值2输入给变量d的输入语句是

 

A.scanf("%d%lf", &c,&d);

 

B.scanf("%c%lf", &c,&d) ;

 

C.scanf("%c%f", &c,&d);

 

D.scanf("%d%f", &c,&d);

 

13.输出语句printf("%d\n",11+011);的输出结果是

 

A.20

 

B.22

 

C.022

 

D.021

 

14.以下叙述正确的是

 

A.有些算法不能用三种基本结构来表达

 

B.C语言程序不编译也能直接运行

 

C.结构化程序的三种基本结构是循环结构、选择结构、顺序结构

 

D.如果C语言程序实现的算法很简单,则计算机不进行任何代码转换就能执行程序

 

15.若有定义: double  x;则表达式:x=0,x+10,x++ 的值是

 

A.11.0

 

B.10.0

 

C.0.0

 

D.1.0

 

16.有以下程序

    #include <stdio.h>

    main()

    {  int   x=1, y=0, a=0, b=0;

       switch ( x )

       {  case 1:

            switch(y)

            {  case 0:  a++;  break;

               case 1:  b++;  break;

            }

          case 2:  a++;  b++;  break;

          case 3:  a++;  b++;

       }

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

    }

 

 

 

程序的运行结果是

 

A.a=2,b=2

 

B.a=2,b=1

 

C.a=1,b=1

 

D.a=1,b=0

 

17.以下程序段中的变量已正确定义

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

    for( k=1; k<3; k++ ); printf("*" );

 

 

 

该程序段的输出结果是

 

A.*

 

B.****

 

C.**

 

D.********

 

18.有以下程序

#include   <stdio.h>

main( )

{  char  c;

   for (;  ( c=getchar()) != '#';  )

   {   if ( c>='a' && c<='z' )  c = c - 'a' + 'A';

       putchar(++c);

   }

}

 

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

 

A.AbCdEFg  

 

B.ABCDEFG

 

C.BCDEFGH

 

D.bcdefgh

 

19.有以下程序

    #include <stdio.h>

    int f(int x);

    main()

    { int n=1,m;

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

    }

    int f(int x)

    { return x*2; }

 

 

 

程序运行后的输出结果是

 

A.4

 

B.2

 

C.8

 

D.1

 

20.关于地址和指针,以下叙述正确的是

 

A.可以通过强制类型转换让char型指针指向double型变量

 

B.函数指针p指向一个同类型的函数f时,必须写成:p = &f;

 

C.指针p指向一个数组f时,必须写成:p = &f;

 

D.一个指针变量p可以指向自身

 

21.有以下程序

#include   <stdio.h>

#define   N    4

int  fun( int  a[][N] )

{  int  i,j,x=0;

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

      for( j=0; j<N; j++ )

         if ( i == j )

            x += a[N-1-j][i];

   return  x;

}

main( )

{  int  x[N][N]={{ 1,  2,  3,  4},

                 { 5,  6,  7,  8},

                 { 9, 10, 11, 12},

                 {13, 14, 15, 17}}, y;

   y = fun(x);

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

}

 

 

程序运行后的输出结果是

 

A.34

 

B.35

 

C.28

 

D.59

 

22.有以下程序

#include  <stdio.h>

#define   N   3

void  fun( int  x[][N], int  *r1, int *r2 )

{  int  i, j;

   *r1 = *r2 =0;

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

   {  j=N - (i+1);

      if (x[*r1][*r2] < x[i][j]){ *r1 = i; *r2 = j; }

   }

}

main( )

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

   fun( a,&i,&j );

   printf("%d\n", a[i][j]);

 

 

}

 

程序运行后的输出结果是

 

A.8

 

B.6

 

C.7

 

D.9

 

23.对于以下函数声明

 

 

void  fun(int  array[4], int  *ptr);

 

 

以下叙述中正确的是

 

A.array, ptr 都是指针变量

 

B.调用fun函数时实参的值将逐一复制给array

 

C.调用fun函数时array按值传送ptr按地址传送

 

D.array 是数组,ptr 是指针,它们的性质不同

 

24.设有定义:int  x[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是

 

A.for(i=0;i<10;i++)  scanf("%d",p+i);

 

B.for(i=0;i<10;i++)  scanf("%d",*p+i);

 

C.for(i=0;i<10;i++)  scanf("%d",*(p+i));

 

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

 

25.有以下程序

     #include <stdio.h>

     main()

     {  char  s[]="012xy\08s34f4w2";

        int  i, n=0;

        for ( i=0; s[i]!=0; i++ )

           if(s[i] >= '0' && s[i] <= '9')  n++;

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

     }

 

 

 

程序运行后的输出结果是

 

A.7

 

B.0

 

C.3

 

D.8

 

26.有以下程序段

       char  str[ 4 ][ 12 ]={"aaa","bbb","ccc","ddd" },  *p[4];

       int   i;

       for( i=0; i<4; i++ ) p[i]=str[i];

 

 

以下选项中不能正确引用字符串的是

 

A.*p[3]

 

B.p[3]

 

C.str[2]

 

D.*p

 

27. 有以下程序

#include   <stdio.h>

int mul(int  val)

{  static int init = 1;

   return init *= val;

}

main( )

{  int  i;

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

        printf("%d,", mul(i));

}

 

 

程序运行后的输出结果是

 

A.1,2,6,24,120,

 

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

 

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

 

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

 

28.有以下程序

#include   <stdio.h>

void fun( int  n )

{  static int  k=0;

   if(n<0){  printf("-");   n=-n;  }

   k+=n%10;     printf("%d,",k);

   if(n/10)  fun(n/10);

}

main( )

{  int  x=-12;

   fun(x);    printf("\n");

 

 

}

 

程序运行后的输出结果是

 

A.-2,3

 

B.-1,-2,

 

C.-2,-3,

 

D.-2,1

 

29.有以下程序

     #include <stdio.h>

     struct S{int  n;  int  a[20];  };

     void f(struct S  *p)

     { int  i,j, t;

       for (i=0; i<p->n-1; i++)

         for (j=i+1; j<p->n; j++)

           if (p->a[i] > p->a[j])  {  t= p->a[i];  p->a[i] = p->a[j];  p->a[j] = t;  }

     }  

     main()

     { int  i;   struct S  s={10, {2,3,1,6,8,7,5,4,10,9}};

       f(&s);

       for (i=0; i<s.n; i++) printf("%d,", s.a[i]);

     }

 

 

程序运行后的输出结果是

 

A.1,2,3,4,5,6,7,8,9,10,

 

B.10,9,8,7,6,5,4,3,2,1,

 

C. 2,3,1,6,8,7,5,4,10,9,

 

D.10,9,8,7,6,1,2,3,4,5,

 

30.有以下程序

#include   <stdio.h>

typedef  struct  stu {

                       char  name[10];

                       char  gender;

                       int  score;

                     } STU;

void  f( STU  a, STU  *b, STU  c )

{  *b = c =a;

   printf( "%s,%c,%d,", b->name, b->gender, b->score );

   printf( "%s,%c,%d,", c.name, c.gender, c.score );

}

main( )

{  STU  a={"Zhao", 'm', 290}, b={"Qian", 'f', 350}, c={"Sun", 'm', 370};

   f( a, &b, c );

   printf( "%s,%c,%d,", b.name, b.gender, b.score );

   printf( "%s,%c,%d\n", c.name, c.gender, c.score );

 

 

}

 

程序运行后的输出结果是

 

A.Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370

 

B.Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290

 

C.Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370

 

D.Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290

 

31.有以下程序

#include  <stdio.h>

#define   SUB( x,y )    (x)*(y)

main()

{   int   a=3, b=4;

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

 

 

}

 

程序运行后的输出结果是

 

A.15

 

B.12

 

C.16

 

D.20

 

32.有以下程序

#include  <stdio.h>

main()

{   struct  cm{ int x;  int y; } a[2]={4,3,2,1 };

    printf("%d \n", a[0].y/a[0].x*a[1].x  );

 

 

}

 

 

程序运行后的输出结果是

 

A.1

 

B.4

 

C.0

 

D.3

 

33.以下选项中的编译预处理命令行,正确的是

 

A.#define    E      2.38

 

B. ##define   PI_2   1.56

 

C. #define    int    INT

 

D.#DEFINE    TRUE

 

34.设有以下程序段

 

 

struct  book

{

    float price;

    char language;

    char title[20];

} rec, *ptr;

ptr = &rec;

 

 

要求输入字符串给结构体变量rec的title成员,错误的输入语句是

 

A.scanf("%s", ptr.title);

 

B.scanf("%s", rec.title);

 

C.scanf("%s", (*ptr).title);

 

D.scanf("%s", ptr->title);

 

35.有以下程序

#include   <stdio.h>

#include   <string.h>

struct  computer

{    char  CPU[10];   };

main( )

{

    struct computer  pc1, pc2;

    strcpy(pc1.CPU, "3.2G");

    strcpy(pc2.CPU, "????");

    pc1 = pc2;

    printf("%s\n", pc1.CPU);

 

 

}

 

程序运行后的输出结果是

 

A.?

 

B.3.2G

 

C.????

 

D.?.2G

 

36.有以下程序

#include   <stdio.h>

main( )

{

    int  a = 2, b;

    b = (a >>= 1) + 4;

    printf("%d,%d", a, b);

 

 

}

程序运行后的输出结果是

 

 

A.1,5

 

B.2,4 

 

C.2,6

 

D.2,5

 

37.若要建立下图所示的存储结构,以下正确的程序段是(   )。

 

 

 

 

 

 

A.char  **q,*p,c;

        p=&c;  q=&p;

 

B. char  **q,*p,c;

 

 

        p=&c;  q=*p;

 

C.char  *q,*p,c;

 

 

        p=&c;  *q=p;

 

D.char  *q,*p,c;

 

 

        q=p;  p=*c;

 

38.有以下程序

#include  <stdio.h>

struct  tt

{  int x;  struct tt *y;  } s[3]={ 1,0,2,0,3,0};

main( )

{  struct  tt *p=s+1;

   p->y=s;

   printf("%d,",p->x);

   p=p->y;

   printf("%d\n",p->x);

 

 

}

 

程序运行后的输出结果是

 

A. 2,3

 

B.2,1

 

C.1,2

 

D.3,1

 

39.有以下程序

#include   <stdio.h>

main( )

{  int  x=3,y=5;

   x=x^y;  y=x^y;  x=x^y;

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

 

 

}

程序运行后的输出结果是

 

 

A.3,5

 

B.5,3

 

C.35,35

 

D.8,8

 

40.有以下程序

#include   <stdio.h>

struct tt

{ int x;  struct tt  *y; } s[2]={ 1,0,2,0};

main( )

{  struct tt  *p=s;

   p->y=s;

   printf("%d",++p->x);

 

 

}

 

程序运行后的输出结果是

 

A.2

 

B.0

 

C.1

 

D.3

 

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

 

35