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

1.下列叙述中正确的是

 

A.结点中具有两个指针域的链表一定是二叉链表

 

B.结点中具有两个指针域的链表可以是线性结构,也可以是非线性结构

 

C.二叉树只能采用链式存储结构

 

D.循环链表是非线性结构

 

2.某二叉树的前序序列为ABCD,中序序列为DCBA,则后序序列为

 

A.BADC

 

B.DCBA

 

C.CDAB

 

 

D.ABCD

 

3.下面不能作为软件设计工具的是

 

A.PAD图   

 

B.程序流程图

 

C.数据流程图(DFD图)

 

D.总体结构图

 

4.逻辑模型是面向数据库系统的模型,下面属于逻辑模型的是

 

A.关系模型

 

B.谓词模型

 

C.物理模型 

 

D.实体-联系模型

 

5.运动会中一个运动项目可以有多名运动员参加,一个运动员可以参加多个项目。则实体项目和运动员之间的联系是

 

A.多对多

 

B.一对多

 

C.多对一 

 

D.一对一

 

6.堆排序最坏情况下的时间复杂度为

 

 

 

A.

 

B.

 

C.

 

D.

 

7.某二叉树中有15个度为1的结点,16个度为2的结点,则该二叉树中总的结点数为

 

A.32  

 

B.46 

 

C.48  

 

D.49

 

8.下面对软件特点描述错误的是

 

A.软件没有明显的制作过程

 

B.软件是一种逻辑实体,不是物理实体,具有抽象性

 

C.软件的开发、运行对计算机系统具有依赖性

 

D.软件在使用中存在磨损、老化问题

 

9.

 

A.0

 

B.1

 

C.2

 

D.3

 

10.设有表示公司和员工及雇佣的三张表,员工可在多家公司兼职,其中公司C(公司号,公司名,地址,注册资本,法人代表,员工数),员工S(员工号,姓名,性别,年龄,学历),雇佣E(公司号,员工号,工资,工作起始时间)。其中表C的键为公司号,表S的键为员工号,则表E的键(码)为

 

A.公司号,员工号

 

 

B.员工号,工资

 

C.员工号 

 

D.公司号,员工号,工资

 

11.算法应当具有的特性不包括

 

A.可行性

 

B.有穷性

 

C.确定性

 

D.美观性  

 

12.若想给已定义为int型的变量a、b、c、d赋整数1,以下选项中错误的语句是

 

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

 

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

 

C.d=(b=c=(a=1));

 

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

 

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

 

A.21.84 

 

B. 'CPP'    

 

C. "\1.0

 

D.2MB

 

14.下面叙述正确的是

 

A. C语言程序的语句经过编译和链接转换成二进制机器指令后才能执行

 

B.任何算法需要包含三种基本结构中的两种以上

 

C.复杂算法是不能用三种基本结构来表达的

 

D. 只要是简单算法,它的操作步骤都不会超过20步

 

15.若已有定义语句:int  a, b, c;,且变量已正确赋初值,则以下选项中正确的赋值表达式是

 

A.a = (b = c) + 8; 

 

B.(a = b) = c = 9;

 

C.a = (b == c) = 'A';

 

D.a + b = c + 1;

 

16. 以下表达式的值与x无关、其值恒为真的是

 

A.0 < x < 5

 

B. x>10 && x<5 

 

C. x>10 && x<5 

 

D.x<10 &&  x>5

 

17. 以下非法的字符常量是

 

A.'\x21' 

 

B.'\101' 

 

C.'\\n'

 

D. '\0'

 

18.若有定义int  a=0,b=0,c=0,d=0;以下关于C语言表达式(++a || ++b) ? ++c : ++d 执行顺序的叙述正确的是

 

A.先执行++b,表达式++b的值为1;再执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c

 

B.先执行++a,表达式++a的值为1;再执行++b,表达式++b的值为1,由此可确定(++a || ++b)值为1,因此执行++c

 

C.先执行++b,表达式++b的值为1;再执行++a,表达式++a的值为1,由此可确定(++a || ++b)值为1,因此执行++c

 

D.先执行++a表达式++a的值为1由此可确定(++a || ++b)值为1因此执行++c

 

19.有如下程序

#include   <stdio.h>

main( )

{

    int  i, data;

    scanf("%d", &data);

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

    {

        if (i > data) break;

        printf("%d,", i);

    }

}

 

程序运行时,从键盘输入:3<回车>后,程序输出结果为

 

A. 2,3,4,

 

B. 1,2,3,

 

C.0,1,2,3,

 

D.3,4,5,

 

20. 有以下程序

 

#include <stdio.h>

main( )

{

    int  i = 4;

    for ( printf("%d", i); i<2; i++)  printf("%d", i);

    printf("\n");

}

 

程序运行后的输出结果是

 

 

A.4

 

B.12  

 

C.1 

 

D.0

 

21. 有以下程序

#include   <stdio.h>

main( )

{

    if ('\0' == 0) putchar('1');

    if ('0' == 0)  putchar('2');

    if ('a' > 'b') putchar('3');

 

}

 

程序运行后的输出结果是

 

A.  3

 

B.123

 

C.23 

 

D.1 

 

22. 有如下程序段

      int  k;

      for(k=2;k==0;)  printf("%d",k--);

 

则for循环体执行的次数是

 

 

A. 1次

 

B.0次 

 

C.2次  

 

D.无限次

 

23.有以下程序

 

#include  <stdio.h>

int  k=5;

void f(int  *s)

{   s=&k;

    *s=7;

}

main( )

{  int  m=3; 

   f(&m); 

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

 

}

 

程序运行后的输出结果是

 

A. 3,7  

 

B. 7,7

 

C. 5,7

 

D.3,5

 

24.有以下程序

 

#include   <stdio.h>

void fun(int  a[ ], int  n)

{ 

   int i;

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

   {

       if (i % 3 == 0)

          a[i] -= n;

       else

          a[i] += n;

    }

}

main( )

{  int c[5] = {6,7,8,9,10},i;

   fun(c, 5);

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

   printf("\n");

}

 

程序运行后的输出结果是

 

 

A.10,9,8,7,6, 

 

B. 1,12,13,4,15,

 

C.1,7,13,9,15,

 

D. 10,12,8,4,6,

 

25.有以下程序

#include   <stdio.h>

int sub(double  a, double  b)

{

    return (int)(a - b - 1.3);

}

main( )

{

    printf("%d\n", sub(3.2, 4.1));

}

 

 

 

程序运行后的输出结果是

 

A. -2 

 

B. 1.7

 

C.-3 

 

D.2.0

 

26.有以下程序

#include   <stdio.h>

main( )

{

    int  i, *ptr;

    int  array[4] = {1,1,3,4};

    for (ptr=array, i=0; i<3; i++)  printf("%d,", *ptr++);

    printf("\n");

}

 

程序运行后的输出结果是

 

 

A.2,4,8,

 

 

B. 1,3,4, 

 

C. 1,2,4,

 

D.1,1,3, 

 

27.有以下程序

 

#include <stdio.h>

main( )

{  int x[ ] = {8,2,6,12,5,15}, f1, f2;

   int *p = x;

   f1 = f2 = x[0];

   for( ; p<=x+5; p++)

   { if( f1<*p ) f1 = *p;

     if( f2>*p ) f2 = *p;

   }

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

}

 

程序的运行结果是

 

A.8,8

 

B. 15,15 

 

C.2,15

 

D. 15,2 

 

28. 有以下程序

 

#include <stdio.h>

main()

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

   int (*p)[4] = x, k = 1, m, n = 0;

   for(m=0; m<2; m++) n += *(*(p+m)+k);

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

}

 

程序的运行结果是

 

A.14 

 

B.20 

 

C.10  

 

D. 16

 

29.有以下程序

 

#include <stdio.h>

main( )

{  char b[4][10], c;   

   int i,j;

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

   {  j = 0;

      while ((c=getchar())!=' ' && c!='\n')  b[i][j++] = c;

      b[i][j] = '\0';

   }

   printf("%s%s%s%s\n", b[0], b[1], b[2], b[3]);

 

}

程序运行时从第一列开始输入:

Peach flower is pink.<回车>

 

则输出结果是

 

 

A. Peachflower is pink.

 

B.Peachfloweris pink.

 

C.Peachflowerispink.

 

D.Peach flower is pink.

 

30.有如下程序

 

#include <stdio.h>

void convert(char  ch)

{

    if (ch < 'X') convert(ch+1);

    printf("%c", ch);

}

main( )

{

    convert('W');   

    printf("\n");

}

 

程序运行后的输出结果是

 

 

A. YZ

 

B.VW 

 

C.XY 

 

D. XW  

 

31.有以下程序

#include   <stdio.h>

#include   <string.h>

main( )

{ char  a[20]="ab",b[20]="cdef";

  int  k=0;

  strcat(a,b);

  while(a[k]!='\0') { b[k]=a[k]; k++;}

  puts(b);

}

 

程序的运行结果是

 

A.abcdef

 

B. cbcdef  

 

C. cdef 

 

D.ab

 

32.以下使指针指向一个字符串的选项错误的是

 

A.char str[ ] = "string", *ps;

     *ps = str;

 

B.char str[ ] = "string", *ps;

 

     *ps = str;

 

C. char str[ ] = "string", *ps;

 

     ps = str;

 

D.char *ps;

 

     ps = "string";

 

33.有以下程序

#include <stdio.h>

typedef struct stu {

                      char  name[10];

                      char  gender;

                      int  score;

                   } STU;

void f(STU  a, STU  *b)

{  *b = a;

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

}

main( )

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

   f(a,&b);

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

 

}

 

程序运行后的输出结果是

 

A.Zhao,m,290,Zhao,m,290

 

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

 

C. Qian,f,350,Qian,f,350

 

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

 

34. 若有定义

    typedef  int  *T;

    T  a[20];

 

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

 

A.int  a[20];

 

B.int  (*a)[20];

 

C. int  *a[20]; 

 

D. int  **a[20];

 

35.有如下程序

#include   <stdio.h>

struct person

{

    char  name[10];

    int  age;

};

main( )

{

    struct person room[2] = {{"Wang", 19}, {"Li", 20}};

    printf("%s:%d\n", (room+1)->name, room->age);

 

}

 

程序运行后的输出结果是

 

A.  Li:20

 

B. Wang:19

 

C.Li:19 

 

D.Wang:17

 

36.以下关于编译预处理的叙述中错误的是

 

A.预处理命令是在程序正式编译之前被处理的

 

B.源程序中凡是以#开始的控制行都是预处理命令行

 

C. 一行上只能有一条有效的预处理命令

 

D.预处理命令行必须位于源程序的开始

 

37.以下关于宏的叙述错误的是

 

A.宏替换不具有计算功能

 

B.宏替换不具有类型

 

C.宏名必须用大写字母构成 

 

D.宏替换不占用运行时间

 

38. 有以下程序

#include   <stdio.h>

struct S

{

    int x, y;

};

main( )

{

    struct S  data[3] = {4, 3, 2, 0, 8, 1};

    int i;

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

        printf("%d%d;", data[i].x, data[i].y >> 1);

    printf("\n");

}

 

程序运行后的输出结果是

 

 

A. 43;20;81;

 

B.41;22;64;

 

C.40;21;80;

 

D. 41;20;80;

 

39.以下叙述正确的是

 

A.文件指针是指针类型的变量

 

B.文件指针变量的值是文件的当前读取位置

 

C.文件指针变量的值是文件的当前读取位置

 

D. 调用fscanf函数能向所有类型的文件中写入任意字符

 

40.有以下程序

 

#include <stdio.h>

typedef struct stu {

                   char  name[10];

                   char  gender;

                   int  score;

                   } STU;

void f(STU a, STU *b)

{  a = *b;

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

}

main( )

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

   f(a,&b);

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

 

}

 

程序运行后的输出结果是

 

 

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

 

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

 

C.Qian,f,350,Qian,f,350  

 

D.Zhao,m,290,Zhao,m,290

 

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