等级考试

全国计算机等级考试二级C语言笔试第二套

时间:2024-10-19 09:25:00 雪桃 等级考试 我要投稿
  • 相关推荐

全国计算机等级考试二级C语言笔试第二套

  在学习、工作生活中,我们经常接触到试卷,经过半个学期的学习,究竟学到了什么?需要试卷来帮我们检验。你知道什么样的试卷才是好试卷吗?下面是小编帮大家整理的全国计算机等级考试二级C语言笔试第二套,仅供参考,大家一起来看看吧。

全国计算机等级考试二级C语言笔试第二套

  全国计算机等级考试二级C语言笔试第二套 1

  一、选择题

  在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。

  (1)算法的空间复杂度是指

  A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)执行算法需要的内存空间

  (2)在结构化程序设计中,模块划分的原则是

  A)各模块应包括尽量多的功能 B)各模块的规模应尽量大 C)各模块之间的联系应尽量紧密

  D)模块内具有高内聚度、模块间具有低耦合度

  (3)下列叙述中,不属于测试的特征的是

  A)测试的挑剔性 B)完全测试的不可能性 C)测试的可靠性 D)测试的经济性

  (4)下面关于对象概念的描述中,错误的是

  A)对象就是C语言中的结构体变量 B)对象代表着正在创建的系统中的一个实体

  C)对象是一个状态和操作(或方法)的封装体 D)对象之间的信息传递是通过消息进行的

  (5)下列关于队列的叙述中正确的是

  A)在队列中只能插入数据 B)在队列中只能删除数据 C)队列是先进先出的线性表 D)队列是先进后出的线性表

  (6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是

  A)acbed B)decab C)deabc D)cedba

  (7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为

  A)n+1 B)n-1 C)2n D)n/2

  (8)设有如下三个关系表

  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

  (9)下列叙述中,正确的是

  A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系 B)用E-R图只能表示实体集之间一对一的联系 C)用E-R图只能表示实体集之间一对多的联系 D)用E-R图表示的概念数据模型只能转换为关系数据模型

  (10)下列有关数据库的描述,正确的是

  A)数据处理是将信息转化为数据的过程 B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变

  C)关系中的每一列称为元组,一个元组就是一个字段 D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字

  (11)C语言规定,在一个源程序中,main函数的位置

  A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后

  (12)以下叙述中错误的是

  A)计算机不能直接执行用C语言编写的源程序 B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件

  C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件 D)后缀为.obj和.exe的二进制文件都可以直接运行

  (13)下列选项可以正确表示字符型常量的是

  A)′\r′ B)"a" C)"\897" D)296

  (14)以下叙述中正确的是

  A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数

  C)main( )函数必须放在其他函数之前 D)C函数定义的格式是K&R格式

  (15)设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)

  A) 10□X□20□Y<回车> B) 10□X20□Y<回车> C) 10□X<回车> 20□Y<回车> D) 10X<回车>

  20Y<回车>

  (16)若有说明:int *p,m=5,n;,以下正确的程序段是

  A)p=&n;scanf("%d",&p); B)p=&n;scanf("%d",*p) C)scanf("%d",&n);*p=n; D)p=&n;*p=m;

  (17)在执行下述程序时,若从键盘输入6和8,则结果为

  main( )

  { int a,b,s;

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

  s=a

  if(a

  s=b;

  s*=s;

  printf("%d",s); }

  A)36 B)64 C)48 D)以上都不对

  (18)若执行下面的程序时,从键盘输入5和2,则输出结果是

  main( )

  { int a,b,k;

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

  k=a;

  if(a

  else k=b%a;

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

  A)5 B)3 C)2 D)0

  (19)在C语言中,函数返回值的类型最终取决于

  A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型 C)调用函数时主调函数所传递的实参类型 D)函数定义时形参的类型

  (20)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是

  A)c=(c-′A′)%26+′a′ B)c=c+32 C)c=c-′A′+′a′ D)c=(′A′+c)%26-′a′

  (21)以下选项中,当x为大于l的奇数时,值为0的表达式是

  A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0

  (22)有以下程序

  main( )

  {int k=5,n=0;

  do

  {switch(k)

  {case 1: case 3:n+=1;k--;break;

  default:n=0;k--;

  case 2: case 4:n+=2;k--;break;

  }

  printf("%d",n);

  }while(k>0 && n<5);

  }

  程序运行后的输出结果是

  A)235 B)0235 C)02356 D)2356

  (23)有如下程序

  main( )

  { int n=9;

  while(n>6){n--; printf("%d",n);} }

  该程序的输出结果是

  A)987 B)876 C)8765 D)9876

  (24)有以下程序

  #include

  main( )

  { int c;

  while((c=get ))!=′\n)

  { switch(c-′2′)

  { case 0:

  case 1:putc+4);

  case 2:putc+4);break;

  case 3:putc+3);

  case 4:putc+3);break; } }

  printf("\n")}

  从第一列开始输入以下数据代表一个回车符。

  2743

  程序的输出结果是

  A)66877 B)668966 C)6677877 D)6688766

  (25)有以下程序

  main( )

  { int x=0,y=0,i;

  for (i=1;;++i)

  { if (i%2==0) {x++;continue;}

  if (i%5==0) {y++;break;} }

  printf (" %d,%d",x,y); }

  程序的输出结果是

  A)2,1 B)2,2 C)2,5 D)5,2

  (26)有以下程序

  main( )

  {int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;

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

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

  for(k=j+1;k<4;k++)

  if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

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

  }

  程序运行后的输出结果是

  A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1,

  (27)有以下程序

  int f(int n)

  { if(n==1)return 1;

  else return f(n-1)+1;}

  main( )

  { int i,j=0;

  for(i=1;i<3;i++)j+=f(i);

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

  程序运行后的输出结果是

  A)4 B)3 C)2 D)1

  (28)当运行以下程序时,从键盘输入AhaMA(空格)Aha,则下面程序的运行结果是

  #include

  main( )

  { char s[80],c=′a′;

  int i=0;

  scanf("%s",s);

  while(s[i]!=′

  { if(s[i]==c)s[i]-32;

  else if(s[i]==c-32)s[i]=s[i]+32;

  i++; }

  puts(s); }

  A)ahaMa B)AbAMa C)AhAMa[空格]ahA D)ahAMa[空格]ahA

  (29)下面程序输出的结果是

  main( )

  { int i;

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

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

  printf("%d ",a[2-i][i]); }

  A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1

  (30)现有如下程序段

  #include "stdio.h"

  main( )

  { int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};

  int i=0,j=5;

  printf("%d\n",*(&a[0][0]+2*i+j-2));}

  则程序的输出结果为

  A)21 B)78 C)23 D)28

  (31)请选出正确的程序段

  A)int *p;

  scanf("%d",p);

  …

  B)int *s, k;

  *s=100;

  …

  C)int *s, k;

  char *p, c;

  s=&k;

  p=&c;

  *p=′a′;

  …

  D)int *s, k;

  char *p, e;

  s=&k;

  p=&c;

  s=p;

  *s=1;

  …

  (32)下面程序段的运行结果是

  char a[]="lanuage",*p;

  p=a;

  while(*p!=′u′){printf("%c",*p-32);p++;}

  A)LANGUAGE B)language C)LAN D)langUAGE

  (33)以下程序的输出结果是

  #include

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

  main( )

  { p=(int*)malloc(sizeof(int));

  f(p,a);

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

  free(p); }

  f(int *s, int p[][3])

  { *s=p[1][1];}

  A)1 B)4 C)7 D)5

  (34)有以下程序

  void f(int *q)

  {int i=0;

  for(;i<5; i++) (*q)++;

  }

  main( )

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

  f(a);

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

  }

  程序运行后的输出结果是

  A)2,2,3,4,5, B)6,2,3,4,5, C)1,2,3,4,5, D) 2,3,4,5,6,

  (35)以下合法的字符型常量是

  A)′\x13′ B) ′\081′ C) ′65′ D)"\n"

  (36)有以下语句,则对a数组元素的引用不正确的是

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

  A)a[p-a] B)*(&a[i]) C)p[i] D)*(*(a+i))

  (37)有以下程序

  # include

  main( )

  {char p[20]={′a′, ′b′, ′c′, ′d′}, q[]="abc", r[]="abcde";

  strcat(p, r); strcpy(p+strlen(q), q);

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

  }

  程序运行后的输出结果是

  A)9 B)6 C)11 D)7

  (38)在C语言中,变量的隐含存储类别是

  A)auto B)static C)extern D)无存储类别

  (39)以下程序的输出结果是

  main( )

  { int c=35; printf("%d\n",c&c);}

  A)0 B)70 C)35 D)1

  (40)有以下程序

  #include

  main( )

  { FILE *fp; int i=20,j=30,k,n;

  fp=fopen("d1.dat","w");

  fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);

  fclose(fp);

  fp=fopen("d1.dat","r");

  fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);

  fclose(fp); }

  程序运行后的`输出结果是

  A)20 30 B)20 50 C)30 50 D)30 20

  二、填空题

  请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。

  (1)设一棵完全二叉树共有700个结点,则在该二叉树中有 【1】 个叶子结点。

  (2)常用的黑箱测试有等价类划分法、 【2】 和错误推测法3种。

  (3)数据库管理系统常见的数据模型有层次模型、网状模型和 【3】 3种。

  (4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 【4】 。

  (5)数据库保护分为:安全性控制 、 【5】 、并发性控制和数据的恢复。

  (6)执行以下程序后的输出结果是 【6】 。

  main( )

  {int a=10;

  a=(3*5,a+4);printf("a=%d\n",a);

  }

  (7)以下程序的输出结果是 【7】 。

  #include

  main( )

  {printf("%d\n",strlen("IBM\n012\1\\"));}

  (8)已定义char ch=′$′; int i=1,j;,执行j!=ch&&i++以后,i的值为 【8】 。

  (9)以下程序的运行结果是 【9】 。

  #include

  long fib(int g)

  { switch(g)

  { case 0:return 0;

  case 1:

  case 2:return 1; }

  return(fib(g-1)+fib(g-2)); }

  main( )

  { long k;

  k=fib(5);

  printf("k=%5ld\n",k);}

  (10)下面程序的功能是输出数组s中最大元素的下标,请填空。

  main( )

  { int k, p,s[]={1, -9, 7, 2, -10, 3};

  for(p=0, k=p; p<6; p++)

  if(s[p]>s[k]) 【10】

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

  (11)以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。

  main( )

  {int x[10],a[9],I;

  for(I=0; I<10; I++) scanf("%d",&x[I]);

  for( 【11】 ; I<10; I++ )

  a[I-1]=x[I]+ 【12】 ;.

  for(I=0; I<9; I++) printf("%d ",a[I]);

  printf("");

  }

  (12)设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me( )函数在a:\myfile.txt中有定义。)

  【13】

  main( )

  { printf("\n");

  try_me( );

  printf("\n");}

  (13)以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。

  #include

  struct list { int data; struct list *next;};

  struct list*creatlist( )

  { struct list *p,*q,*ph;int a;ph=(struct list *)malloc (sizeof(struct list));

  p=q=ph;printf("Input an integer number; entre-1 to end:\n");

  scanf("%d",&a);

  while(a!=-1)

  { p=(struct list*)malloc(sizeof(struct list));

  【14】 =a;q->next=p; 【15】 =p;scanf("%d",&a);}

  p->next=′\0;return(ph);}

  main( )

  {struct list * head; head=creatlist( );}

  (1)D 【解析】 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。

  (2)D 【解析】 在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。

  (3)C 【解析】 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。

  (4)A 【解析】 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于C++、Java等语言中,因此A)错误。

  (5)C 【解析】 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按"先进先出"的原则组织数据的。

  (6)D 【解析】 依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二叉树的前序遍历序列为选项D)。

  (7)A 【解析】 对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结点数为n2,则n1=n2+1,所以该二叉树的叶子结点数等于n+1。

  (8)C 【解析】 对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为R×S它是一个m+n元关系,元组个数是p×q由题意可得,关系T是由关系R与关系S进行笛卡尔积运算得到的。

  (9)A 【解析】 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。

  (10)D 【解析】 数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。

  (11)C 【解析】 不论main函数在整个过程中的位置如何,一个C程序总是从main函数开始执行的。

  (12)D 【解析】 一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。

  (13)A 【解析】 C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0~127。由于字符常量用单引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。

  (14)A 【解析】 本题考查C语言的综合基础知识。构成C程序的基本单位是函数,不论main函数在整个程序中的位置如何,一个C程序总是从main函数开始执行,C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。

  (15)D 【解析】 本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一个空格会作为字符赋值给变量c1,而不会被解释成分隔符。

  (16)D 【解析】 "&"是求址运算符,"*"是指变量说明符。选项A)、B)应改为scanf("%d",p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。

  (17)B 【解析】 本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。

  (18)C 【解析】 本题考查简单的if…else语句。先执行条件if(a

  (19)A 【解析】 在C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律按整型处理。在定义函数时,对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数类型为主,即函数类型决定返回值的类型。

  (20)D 【解析】 C语言中,字符数据参加运算时,实际上是其ASCII码参与运算。大写字母的ASCII码比其对应的小写字母的ASCII码小32。因此大写字母转化为小写字母只需将其加上32即可。所以选项B)、C)都符合条件,因为变量c中存储的是大写字母,所以"c-A"的值一定小于26,故选项A)与选项C)的含义相同。

  (21)D 【解析】 因为x的值为大于1的奇数,所以x除以2的余数等于1,因此,选项A)、C)中表达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的结果为假,即等于0。

  (22)A 【解析】 因为变量的初始值分别为"k=5,n=0",所以程序第一次进入循环时,执行 default语句,这时k=4,执行"case 4:"这个分支,结果是"n=2,k=3",打印出2;程序然后进行第二次循环,这时"n=2,k=3",执行"case 3:"这个分支,结果是"n=3,k=2",打印出3;程序进行第三次循环,这时"n=3,k=2",执行"case 2: case 4:"这两个分支,结果是?"n=5,k=1"?,打印出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束,故输出结果为235。

  (23)B 【解析】 该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n的值是9,循环体内,先经过n--运算,n的值变为8,所以第一次的输出值是8,由此可以排除选项A)和D)。由循环条件n>6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C)。

  (24)A 【解析】 本题主要考查了字符输入输出函数getchar和putchar的使用。getchar函数用来从标准输入设备上读入一个字符,putc)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。

  (25)A 【解析】 本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。

  (26)A 【解析】 本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。

  (27)B 【解析】 在main函数中,对f(1)和f(2)的值进行了累加。

  f(1)=1

  f(2)=f(1)+1=2

  最后,j的值为1+2=3

  (28)A 【解析】 本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。

  (29)B 【解析】 本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。

  (30)A 【解析】 通过地址来引用二维数组,若有以下定义:int a[3][4],i,j;且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:?a[i][j]?,?*(a[i]+j),?*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。

  (31)C 【解析】 本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。

  (32)C 【解析】 本段程序的作用是输出字符串"lanuage"中字母u之前的字符,并将其转化为大写字母。

  注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放\0。

  (33)D 【解析】 本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f( )中对p所指向的数据进行了赋值,p[1][1]为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。

  (34)B 【解析】 调用函数f( )时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结果为"6,2,3,4,5"。

  (35)A 【解析】 C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个"\" 开头的字符序列来表示字符常量。其中,形式"\ddd"表示1到3位8进制数所代表的字符;形式"\xhh"表示1到2位16进制数所代表的字符。在本题中,\x13表示回车符,是一个字符常量;\081用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字"8";65不是一个字符,而是一个十进制数字;"\n"是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。

  (36)D 【解析】 本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。

  (37)B 【解析】 strcpy( )函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志\0 到p[6]中。函数strlen( )返回的是字符串中不包括\0在内的实际长度,故本题答案为B)

  (38)A 【解析】 auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字"auto "可以省略,auto不写则隐含确定为"自动存储类别",属于动态存储方式。

  (39)C 【解析】 本题考查按位与"&"。因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。

  (40)A 【解析】 本题中,最主要的是掌握几个有关文件函数的应用。

  函数名:fopen

  功能:打开一个文件

  调用方式FILE *fp ;

  fp=fopen(文件名,使用文件方式);

  函数名:fprintf

  功能:传送格式化输出到一个文件中

  调用方式:fprintf(文件指针,格式字符串,输出表列);

  函数名:fclose

  功能:关闭一个文件

  调用方式:fclose(文件指针);

  函数名:fscanf

  功能:从磁盘文件执行格式化输入

  调用方式:fscanf(文件指针,格式字符串,输入列表)。

  二、填空题

  (1)【1】 350 【解析】 完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,1至9层结点个数为2^9-1=511,最后一层结点个数为700-511=189个,189/2=95,除最后一层外共有结点2^(9-1)-95=161个,所以所有的结点个数为:189+161=350个。

  (2)【2】 边界值分析法 【解析】 黑箱测试法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。

  (3)【3】 关系模型 【解析】 数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。

  (4)【4】 软件生命周期 【解析】 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。

  (5)【5】 完整性控制 【解析】 安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。

  (6)【6】 a=14 【解析】 本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf( )函数内的输出格式控制串,最后的输出结果应为"a=14"。

  (7)【7】 9 【解析】本题的字符串中共有9个字符,它们分别是I、B、M、\n、 0、1、2、\1、\\,其中,"\n"表示换行,"\\"表示反斜杠字符"\",所以本题的最后输出结果为9。

  (8)【8】 1 【解析】 在执行逻辑表达式"j=!ch&&i++"时,首先判断j=!ch的值,因为"ch=$"不为0,所以"j=!ch=0",编译系统便不再计算表达式"i++"的值,i的值不变,仍为1。

  (9)【9】 k=5 【解析】 本题主要考查了函数的递归调用方法。g=0或?g=1?或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。

  (10)【10】 k=p; 【解析】 为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码"k=p;"。

  (11)【11】 I=1 【12】 x[I-1] 【解析】 对于10个数,相临的两个数相加取和,总共要进行9次加法运算,所以空14处应填入I=1。相临的两个数相加取和,放在数组a中,x[0]与x[1]的和存放在a[0]中,所以空15处应填入x[I-1]。

  (12)【13】 #include 【解析】 本题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用#include文件包含命令将定义函数的文件包含进来。

  (13)【14】 p->data 【15】 q 【解析】 本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。

  全国计算机等级考试二级C语言笔试第二套 2

  一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)

  (1)下列数据结构中,属于非线性结构的是

  A.循环队列

  B.带链队列

  C.二叉树

  D.带链栈

  (2)下列数据结果中,能够按照“先进后出”原则存取数据的是

  A.循环队列

  B.栈

  C.队列

  D.二叉树

  (3)对于循环队列,下列叙述中正确的是

  A.队头指针是固定不变的

  B.队头指针一定大于队尾指针

  C.队头指针一定小于队尾指针

  D.队头指针可以大于队尾指针,也可以小于队尾指针

  (4)算法的空间复杂度是指

  A.算法在执行过程中所需要的计算机存储空间

  B.算法所处理的数据量

  C.算法程序中的语句或指令条数

  D.算法在执行过程中所需要的临时工作单元数

  (5)软件设计中划分模块的一个准则是

  A.低内聚低耦合

  B.高内聚低耦合

  C.低内聚高耦合

  D. 高内聚高耦合

  (6)下列选项中不属于结构化程序设计原则的是

  A.可封装.

  B. 自顶向下

  C.模块化

  D. 逐步求精

  (7)软件详细设计产生的图如下:

  该图是

  A.N-S图

  B.PAD图

  C.程序流程图

  D. E-R图

  (8)数据库管理系统是

  A.操作系统的一部分

  B.在操作系统支持下的系统软件

  C.一种编译系统

  D. 一种操作系统

  (9)在E-R图中,用来表示实体联系的图形是

  A.椭圆图

  B.矩形

  C.菱形

  D. 三角形

  (10)有三个关系R,S和T如下:

  其中关系T由关系R和S通过某种操作得到,该操作为

  A.选择

  B.投影

  C.交

  D.并

  (11)以下叙述中正确的是

  A.程序设计的任务就是编写程序代码并上机调试

  B.程序设计的任务就是确定所用数据结构

  C.程序设计的任务就是确定所用算法

  D.以上三种说法都不完整

  (12)以下选项中,能用作用户标识符的是

  A.void

  B.8_8

  C._0_

  D.unsigned

  (13)阅读以下程序

  #include

  main( )

  { int case; float printF;

  printf(“请输入2个数:”);

  scanf(“%d %f”,&case,&pjrintF);

  printf(“%d %f ”,case,printF);

  }

  该程序编译时产生错误,其出错原因是

  A.定义语句出错,case是关键字,不能用作用户自定义标识符

  B.定义语句出错,printF不能用作用户自定义标识符

  C.定义语句无错,scanf不能作为输入函数使用

  D.定义语句无错,printf不能输出case的值

  (14)表达式:(int)((double)9/2)-(9)%2的值是

  A.0

  B.3

  C.4

  D.5

  (15)若有定义语句:int x=10;,则表达式x-=x+x的值为

  A.-20

  B.-10

  C.0

  D.10

  (16)有以下程序

  #include

  main( )

  { int a=1,b=0;

  printf(“%d,”,b=a+b);

  printf(“%d ”,a=2*b);

  }

  程序运行后的输出结果是

  A.0,0

  B.1,0

  C.3,2

  D.1,2

  17)设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是

  A.if(a>B. c=a,a=b,b=c;

  B.if(a>B. {c=a,a=b,b=c;}

  C.if(a>B. c=a;a=b;b=c;

  D.if(a>B. {c=a;a=b;b=c;}

  (18)有以下程序

  #include

  main( )

  { int c=0,k;

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

  switch (k)

  { default: c+=k

  case 2: c++;break;

  case 4: c+=2;break;

  }

  printf(“%d ”,C.;

  }

  程序运行后的输出结果是

  A.3

  B.5

  C.7

  D.9

  (19)以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是

  A.if((a>b)&&(b>C.) k=1;

  else k=0;

  B.if((a>b)||(b>C. k=1;

  else k=0;

  C.if(a<=B. k=0;

  else if(b<=C.k=1;

  D.if(a>B. k=1;

  else if(b>C.k=1;

  else k=0;

  20)有以下程序

  #include

  main( )

  { char s[]={“012xy”};int i,n=0;

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

  if(s[i]>=’a’&&s[i]<=’z’) n++;

  printf(“%d ”,n);

  }

  程序运行后的输出结果是

  A.0

  B.2

  C.3

  D.5

  (21)有以下程序

  #include

  main( )

  { int n=2,k=0;

  while(k++&&n++>2);

  printf(“%d %d ”,k,n);

  }

  程序运行后的输出结果是

  A.0 2

  B.1 3

  C.5 7

  D.1 2

  (22)有以下定义语句,编译时会出现编译错误的是

  A.char a=’a’;

  B.char a=’ ’;

  C.char a=’aa’;

  D.char a=’x2d’;

  (23)有以下程序

  #include

  main( )

  { char c1,c2;

  c1=’A’+’8’-‘4’;

  c2=’A’+’8’-‘5’;

  printf(“%c,%d ”,c1,c2);

  }

  已知字母A的ASCII码为65,程序运行后的输出结果是

  A.E,68

  B.D,69

  C.E,D

  D.输出无定值

  (24)有以下程序

  #include

  void fun(int p)

  { int d=2;

  p=d++; printf(“%d”,p);}

  main( )

  { int a=1;

  fun(a); printf(“%d ”,a);}

  程序运行后的输出结果是

  A.32

  B.12

  C.21

  D.22

  (25)以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能

  #define MIN -2147483647

  int findmax (int x[],int n)

  { int i,max;

  for(i=0;i

  { max=MIN;

  if(max

  return max;

  }

  造成错误的原因是

  A.定义语句int i,max;中max未赋初值

  B.赋值语句max=MIN;中,不应给max赋MIN值

  C.语句if(max

  D.赋值语句max=MIN;放错了位置

  (26)有以下程序

  #include

  main( )

  { int m=1,n=2,*p=&m,*q=&n,*r;

  r=p;p=q;q=r;

  printf(“%d,%d,%d,%d ”,m,n,*p,*q);

  }

  程序运行后的输出结果是

  A.1,2,1,2

  B.1,2,2,1

  C.2,1,2,1

  D.2,1,1,2

  (27)若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是

  A.p=a

  B.q[i]=a[i]

  C.p=a[i]

  D.p=&a[2][1]

  (28)有以下程序

  #include

  #include

  main( )

  { char str[ ][20]={“One*World”, “One*Dream!”},*p=str[1];

  printf(“%d,”,strlen(p));printf(“%s ”,p);

  }

  程序运行后的输出结果是

  A.9,One*World

  B.9,One*Dream

  C.10,One*Dream

  D.10,One*World

  (29)有以下程序

  #include

  main( )

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

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

  switch(i%2)

  { case 0:switch(a[i]%2)

  {case 0:a[i]++;break;

  case 1:a[i]--;

  }break;

  case 1:a[i[=0;

  }

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

  }

  A.3 3 4 4

  B.2 0 5 0

  C.3 0 4 0

  D.0 3 0 4

  (30)有以下程序

  #include

  #include

  main( )

  { char a[10]=”abcd”;

  printf(“%d,%d ”,strlen(a),sizeof(a));

  }

  程序运行后的输出结果是

  A.7,4

  B.4,10

  C.8,8

  D.10,10

  (31)下面是有关C语言字符数组的描述,其中错误的'是

  A.不可以用赋值语句给字符数组名赋字符串

  B.可以用输入语句把字符串整体输入给字符数组

  C.字符数组中的内容不一定是字符串

  D.字符数组只能存放字符串

  (32)下列函数的功能是

  fun(char * a,char * b)

  { while((*b=*a)!=’’) {a++,b++;} }

  A.将a所指字符串赋给b所指空间

  B.使指针b指向a所指字符串

  C.将a所指字符串和b所指字符串进行比较

  D.检查a和b所指字符串中是否有’’

  (33)设有以下函数

  void fun(int n,char * s) {……}

  则下面对函数指针的定义和赋值均是正确的是

  A.void (*pf)( ); pf=fun;

  B.viod *pf( ); pf=fun;

  C.void *pf( ); *pf=fun;

  D.void (*pf)(int,char);pf=&fun;

  (34)有以下程序

  #include

  int f(int n);

  main( )

  { int a=3,s;

  s=f(a);s=s+f(a);printf(“%d ”,s);

  }

  int f(int n)

  { static int a=1;

  n+=a++;

  return n;

  }

  程序运行以后的输出结果是

  A.7

  B.8

  C.9

  D.10

  (35)有以下程序

  #include

  #define f(x) x*x*x

  main( )

  { int a=3,s,t;

  s=f(a+1);t=f((a+1));

  printf(“%d,%d ’,s,t);

  }

  程序运行后的输出结果是

  A.10,64

  B.10,10

  C.64,10

  D.64,64

  (36)下面结构体的定义语句中,错误的是

  A.struct ord {int x;int y;int z;}; struct ord a;

  B.struct ord {int x;int y;int z;} struct ord a;

  C.struct ord {int x;int y;int z;} a;

  D.struct {int x;int y;int z;} a;

  (37)设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是

  A.char str[ ]=”string”;c=str;

  B.scanf(“%s”,C.;

  C.c=get);

  D.*c=”string”;

  (38)有以下程序

  #include

  #include

  struct A

  { int a; char b[10]; double c;};

  struct A f(struct A t);

  main( )

  { struct A a={1001,”ZhangDa”,1098.0};

  a=f(a);jprintf(“%d,%s,%6.1f ”,a.a,a.b,a.C.;

  }

  struct A f(struct A t)

  ( t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;return t; )

  程序运行后的输出结果是

  A.1001,ZhangDa,1098.0

  B.1001,ZhangDa,1202.0

  C.1001,ChangRong,1098.0

  D.1001,ChangRong,1202.0

  (39)若有以下程序段

  int r=8;

  printf(“%d ”,r>>1);

  输出结果是

  A.16

  B.8

  C.4

  D.2

  (40)下列关于C语言文件的叙述中正确的是

  A.文件由一系列数据依次排列组成,只能构成二进制文件

  B.文件由结构序列组成,可以构成二进制文件或文本文件

  C.文件由数据序列组成,可以构成二进制文件或文本文件

  D.文件由字符序列组成,其类型只能是文本文件

【全国计算机等级考试二级C语言笔试第二套】相关文章:

全国计算机等级考试二级C语言03-29

全国计算机等级考试二级C++笔试真题10-11

全国计算机等级考试二级C语言试题二03-29

3月全国计算机等级考试二级C++笔试真题10-11

计算机等级考试二级C语言真题09-26

全国计算机等级考试二级C笔试试卷(含参考答案)03-23

计算机等级考试二级Java笔试真题(通用10套)10-06

2007年3月全国计算机等级考试二级C语言笔试真题参考答案03-28

计算机等级考试二级C++笔试选择题04-23