江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
全国计算机二级C语言选择题

1.下列叙述中正确的是

A.栈与队列都只能顺序存储

B.循环队列是队列的顺序存储结构

C.循环链表是循环队列的链式存储结构

D.栈是顺序存储结构而队列是链式存储结构

2.设某二叉树的前序序列为ABC,中序序列为CBA,则该二叉树的后序序列为

A.BCA

B.CBA

C.ABC

D.CAB

3.下列排序方法中,最坏情况下时间复杂度最小的是

A.冒泡排序

B.快速排序

C.堆排序

D.直接插入排序

4.为了对有序表进行对分查找,则要求有序表

A.只能顺序存储

B.只能链式存储

C.可以顺序存储也可以链式存储

D.任何存储方式

5.软件设计中模块划分应遵循的准则是

A.低耦合低内聚

B.高耦合高内聚

C.低耦合高内聚

D.内聚与耦合无关

6.下面属于整数类的实例是

A.0x518

B.0.518

C."-518"

D.518E-2

7.下面属于白盒测试方法的是

A.边界值分析法

B.基本路径测试

C.等价类划分法

D.错误推测法

8.设有一个商店的数据库,记录客户及其购物情况,由三个关系组成:商品 (商品号,商品名,单价,商品类别,供应商) ,客户 (客户号,姓名,地址,电邮,性别,身份证号) ,购买 (客户号,商品号,购买数量),则关系购买的键为

A.客户号

B.商品号

C.客户号, 商品号

D.客户号, 商品号, 购买数量

9.有两个关系R,S如下,由关系R和S通过运算得到关系T,则所使用的操作为

A.并

B.自然连接

C.差

D.交

10.在数据库管理系统提供的数据语言中,负责数据的查询、增加、删除和修改等操作的是

A.数据定义语言

B.数据管理语言

C.数据操纵语言

D.数据控制语言

11.流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是

A.菱形

B.长方形

C.平行四边形

D.椭圆型

12.以下叙述错误的是

A.在进行模块化程序设计的时候,应首先完成每个模块的编写调试,再集中考虑主程序中的算法

B.同一程序各模块可由一组人员同时进行编写调试,可提高编写程序的效率

 

C.模块化的程序设计是采用自顶向下、逐步细化的原则

D.程序的每个模块都可通过三种基本结构实现

13.关于C语言的变量名,以下叙述正确的是

A.变量名不可以与关键字同名

B.变量名不可以与预定义标识符同名

C.变量名必须以字母开头

D.变量名是没有长度限制的

14.有以下程序

#include <stdio.h>

main()

{  int  a;

   a = (int)1.99*3;

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

}

程序的运行结果是

A.3

B.5

C.6

D.结果不确定

15.有以下程序

#include <stdio.h>

main()

{  int  k=-17;

   printf("%d,%o,%x\n", k, 1-k, 1-k);

}

程序的运行结果是

A.-17,22,12

B.-17,12,22

C.-17,-22,-12

D.17,22,12

16.若有定义int  a; float  b; double  c; 程序运行时输入a=1,b=2,c=3 <回车>能把值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是

A.scanf("a=%d,b=%f,c=%lf", &a,&b,&c);

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

C.scanf("a=%d,b=%lf,c=%lf", &a,&b,&c);

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

17.有以下程序

#include <stdio.h>

main()

{  int  a=0,b=0,c=0,d=0;

   (++a || ++b) ? ++c : ++d;

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

}

程序的运行结果是

A.1,0,1,0

B.1,1,0,1

C.1,0,0,1

D.1,1,1,0

18.有以下程序

#include <stdio.h>

main()

{  int  a,b;

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

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

      switch(b)

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

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

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

       }

   }

   printf("\n");

}

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

A.1,2,3,2,3,3,

B.1,2,3,

C.2,3,4,3,4,4,

D.1,1,1,2,2,3

19.有以下程序

#include <stdio.h>

main()

{  int a=1,b=1;

   while(a--)

      b--;

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

}

程序的运行结果是

A.-1,0

B.0,0

C.-1,-1

D.1,1

20.有以下程序

#include <stdio.h>

main()

{  int  a=1, b=0;

   for(;a<5; a++)

   {  if (a%2==0)  break;

      b += a;

   }

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

}

程序的运行结果是

A.1

B.10

C.0

D.4

21.以下能正确输出字符a 的语句是

A.printf("%s", "a");

B.printf("%s", 'a');

C.printf("%c", "a");

D.printf("%d", 'a');

22.有以下程序

#include <stdio.h>

main()

{  char c;

   do {

        c=getchar();

        putchar(c);

      } while(c != '#');

   printf("\n");

}

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

A.abcdefg#

B.abcdefg

C.abcdefg##

D.##

23.以下关于C语言函数参数传递方式的叙述正确的是

A.数据只能从实参单向传递给形参

B.数据可以在实参和形参之间双向传递

C.数据只能从形参单向传递给实参

D.C语言的函数参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用

24.以下关于指针的叙述正确是

A.所有类型的指针变量所占内存的大小是一样的

B.指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节

C.指针变量可直接指向任何类型的变量,而不会出现编译或运行错误

D.指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误

25.有以下程序

#include <stdio.h>

int  k=5;

void  f(int *s)

{  s=&k;  }

main()

{  int  m=3,*p=&m; 

   f(p);

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

}

程序的运行结果是

A.3,3

B.5,5

C.3,5

D.5,3

26.有以下程序

#include <stdio.h>

int  *f(int *s,int *t)

{  if (*s < *t)

   *s=*t;

   return s;

}

main()

{  int i=3, j=5, *p=&i, *q=&j, *r; 

   r=f(p,q); 

   printf("%d,%d,%d,%d,%d\n", i, j, *p, *q, *r);

}

程序的运行结果是

A.5,5,5,5,5

B.3,5,5,5,5

C.5,3,3,3,5

D.3,5,3,5,5

27.有以下程序

#include <stdio.h>

#define  N    4

void  fun(int  a[][N])

{  int  b[N][N],i,j;

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

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

         b[i][j] = a[N-1-j][i];

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

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

         a[i][j] = b[i][j];

}

main()

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

                {5, 6, 7, 8},

                {9,10,11,12},

                {13,14,15,16}

               }, i;

   fun(x);  fun(x);

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

       printf("%d,", x[i][i]);

   printf("\n");

}

程序的运行结果是

A.16,11,6,1,

B.1,6,11,16,

C.4,7,10,13,

D.13,10,7,4,

28.有以下程序

#include <stdio.h>

void  fun(int  a[ ], int  n)

{  int  i,j=0,k=n/2, b[10];

   for (i=n/2-1; i>=0; i--)

   {   b[i] =a[j];

       b[k] =a[j+1];

       j+=2; k++;

   }

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

       a[i] = b[i];

}

main()

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

   fun(c, 10);

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

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

   printf("\n");

}

程序的运行结果是

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

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

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

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

29.有以下程序

#include <stdio.h>

#include <string.h>

main()

{  int  i;

   char  a[]="How are you!";

   for (i=0; a[i]; i++)

      if (a[i] == ' ')

      {  strcpy(a, &a[i+1]);

         i=0;

      }

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

}

 

 

程序的运行结果是

A.you!

B.Howareyou!

C.areyou!

D.are you!

30.有以下程序其中的strstr()函数头部格式为char *strstr(char *p1, char *p2) 确定p2字符串是否在p1中出现并返回p2第一次出现的字符串首地址

#include <stdio.h>

#include <string.h>

char  *a="you";

char  *b="Welcome you to Beijing!";

main()

{  char *p;

   p = strstr(b, a) + strlen(a) + 1;

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

}

程序的运行结果是

A.to Beijing!

B.you to Beijing!

C.Welcome you to Beijing!

D.Beijing!

31.有以下程序

#include <stdio.h>

main()

{  char  b[4][10];  int  i;

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

       scanf("%s", b[i]);

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

}

 

 

执行时若输入: Fig  flower  is  red. <回车>则输出结果是

A.Figflowerisred.

B.Figfloweris  red.

C.Figflower  is  red.

D.Fig  flower  is  red.

32.有以下程序

#include <stdio.h>

#include <string.h>

main()

{  char w[20], a[5][10]={"abcdef", "ghijkl", "mnopq", "rstuv", "wxyz."};

   int  i;

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

      w[i]=a[i][ strlen(a[i]) - 1];

   w[5]= '\0';

   puts(w);

}

程序的运行结果是

A.flqv.

B.agmrw

C.ekpuy

D.flqvz

33.有以下程序

#include <stdio.h>

void f(int x[], int n)

{  if ( n> 1)

   {   f(&x[1], n-1);

       printf("%d,", x[0]);

   }

   else

     printf("%d,", x[0]);

}

main()

{   int  z[6] = {1,2,3,4,5,6};

    f(z,6);     printf("\n");

}

程序的运行结果是

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

B.1,1

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

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

34.有以下程序

#include <stdio.h>

int  a=2;

int  f()

{  static int  n;

   int  m;

   m=n=0;

   n++;  a++;  m++;

   return  n+m+a;

}

main()

{  int  k;

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

       printf("%d,", f( ));

   printf("\n");

}

程序的运行结果是

A.5,6,7,

B.5,7,9,

C.5,8,11,

D.5,5,5,

35.有以下程序

#include <stdio.h>

#define  S(x)  x*x

main()

{  int  k=5, j=2;

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

}

程序的运行结果是

A.21,18 

B.81,81

C.21,21

D.18,18

36.有以下程序

#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.Zhao,m,290,Qian,f,350

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

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

37.有以下程序

#include <stdio.h>

#include <string.h>

typedef struct stu {

                 char  name[10];

                 char  gender;

                 int  score;

               } STU;

void f(char  *name, char  gender, int  score)

{  strcpy(name, "Qian");

   gender = 'f';

   score = 350;

}

main()

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

   b=a;

   f(b.name,b.gender,b.score);

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

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

}

程序的运行结果是

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

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

C.Zhao,m,290,Qian,m,350

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

38.若有定义

        typedef  int  T[10];

        T  *a[20];

则与上述定义完全等价的说明语句是

A.int *a[20][10];

B.int *a[20];

C.int *a[10];

D.int *a[10][20];

39.有以下程序

#include <stdio.h>

main()

{  int  c,d;

   c= 13&5;  d=10&&5;

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

}

程序的运行结果是

A.5,1

B.1,1

C.18,1

D.13,1

40.有以下程序

#include <stdio.h>

main()

{  FILE  *fp;

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

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

   fwrite(&a[0], sizeof(int), 1, fp);

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

   {  fseek(fp, 0L, 0);

      fread(&k, sizeof(int), 1, fp);

      fseek(fp, 0L, 0);

      a[i] +=k;

      fwrite(&a[i], sizeof(int), 1, fp);

   }

   rewind(fp);

   fread(&k, sizeof(int), 1, fp);

   fclose(fp);

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

}

程序的运行结果是

A.21

B.6

C.123456

D.11

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