试题

计算机二级C++上机考试试题及答案

时间:2024-06-20 22:47:31 试题 我要投稿
  • 相关推荐

2017计算机二级C++上机考试试题及答案

  引导语:对基础知识的灵活运用是通过计算机二级考试的关键,以下是百分网小编分享给大家的2017计算机二级C++上机考试试题及答案,欢迎练习!

2017计算机二级C++上机考试试题及答案

  一、选择题(每小题1分,共40小题,共40分)

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

  A.算法程序的长度

  B.算法程序中=的指令条数

  C.算法程序所占的存储空间

  D.算法执行过程中所需要的存储空间

  2.下列叙述中正确的是( )。

  A.一个逻辑数据结构只能有一种存储结构

  B.逻辑结构属于线性结构,存储结构属于非线性结构

  C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

  D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

  3.简单的交换排序方法是( )。

  A.快速排序

  B.选择排序

  C.堆排序

  D.冒泡排序

  4.关于结构化程序设计原则和方法的描述错误的是( )。

  A.选用的结构只准许有一个入口和一个出口

  B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

  C.不允许使用GOT0语句

  D.语言中若没有控制结构,应该采用前后一致的方法来模拟

  5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。

  A.可重用性差

  B.安全性差

  C.非持久性

  D.冗余性

  6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。

  A.模拟现实世界中不同事物之间的联系

  B.强调模拟现实世界中的算法而不强调概念

  C.使用现实世界的概念抽象地思考问题从而自然地解决问题

  D.不强调模拟现实世界中的算法而强调概念

  7.对如下二叉树进行后序遍历的结果为( )。

  A.ABCDEF

  B.DBEAFC

  C.ABDECF

  D.DEBFCA

  8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。

  A.模块间的关系

  B.系统结构部件转换成软件的过程描述

  C.软件层次结构

  D.软件开发过程

  9.两个或两个以上模块之间关联的紧密程度称为( )。

  A.耦合度

  B.内聚度

  C.复杂度

  D.数据传输特性

  10.下列描述错误的是( )。

  A.继承分为多重继承和单继承

  B.对象之间的通信靠传递消息来实现

  C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征

  D.类是具有共同属性、共同方法的对象的集合

  11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。

  A.DB包含DBS和DBMS

  B.DBMS包含DB和DBS

  C.DBS包含DB和DBMS

  D.没有任何关系

  12.下列合法的声明语句是( )。

  A.int_abc=50;

  B.double int=3+5e2.5;

  C.long do=1L:

  D.float 3_asd=3e-3;

  13.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是( )。

  A.x&&Y

  B.x<=Y

  C.x‖y+z&&y-z

  D.!((x  14.若ch为char型变量,k为int型变量(已知字符a的ASCIl码是97),则执行下列语句后输出的结果为( )。

  ch=’b’;

  k=10:

  printf("%X,%o,",ch,ch,k);

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

  A.因变量类型与 与格式描述符的类型不匹配,输出无定值

  B.输出项与格式描述符个数不符,输出为0值或不定值

  C.62,142,k一%d

  D.62,142,k一%l0

  15.有下列程序: 、

  fun(int X,int y){return(x+y);)

  main()

  { int a=1,b=2,c=3,sum;

  sum=fun((a++,b++,a+b),c++);

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

  }

  执行后的输出结果是( )。

  A.6

  B.7

  C.8

  D.9

  16.假定x和Y为double型,则表达式x=2,y—x+3/2的值是( )。

  A.3.500000

  B.3

  C.2.000000

  D.3.000000

  17.有如下程序:

  main()

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

  switch(x)

  {

  case 0:b++;

  case l:a++;

  case 2:a++;b++;

  )

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

  )

  该程序的输出结果是( )。

  A.a=2,b=1

  B.a=1,b=1

  C.a=1,b=0

  D.a=2,b=2

  18.下列程序的输出结果是( )。

  main()

  {int i=1,j=2,k=3;

  if(i++= =1&&(++j= =3= =‖k++= =3))

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

  )

  A.1 2 3

  B.2 3 4

  C.2 2 3

  D.2 3 3

  19.下列程序的输出结果是( )。

  #include

  main()

  { int a=0,i;

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

  { switch(i)

  { case 0:

  case 3:a+=1;

  case l:

  case 2:a+=2;

  default:a+=3;

  )

  printf("%d",i);

  )

  A.19 B.1 C.6 D.8

  20.有以下程序:

  main()

  {int X,i;

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

  {x=i;

  if(X%2=O)

  if(x%3=O)

  if(X%7=0) .

  printf("%d,i)";

  )

  )

  输出结果是( )。

  A.28

  B.27

  C.42

  D.41

  21.以下程序的输出结果是( )。

  main()

  {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;

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

  for(j=0;j<=i;j++)s+=a[i][j];

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

  }

  A.18

  B.19

  C.20

  D.21

  22.有下列程序:

  main()

  { int k=5;

  while(--k) printf("%d",k=1);

  printf("/n");

  )

  执行后的输出结果是( )。

  A.1

  B.2

  C.4

  D.死循环

  23.若有定义:“int a[2][3];”,则 对a数组的第i行第J列元素的正确引用为( )。

  A.*(*(a+i)+j)

  B.(a+i)[j]

  C.*(a+i+j)

  D.*(a+i)+j

  24.下列能正确进行字符串赋值的是( )。

  A.char s[5]={"ABCDE"};

  B.char s[5]={’A’,’B’,’C’,’D’,’E’}; 、

  C.char*S;S="ABCDE";

  D.char*s;printf("%《",s);

  25.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。

  struct node

  {har data;

  struct node*next;)*P,*q,*r;

  现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

  A.q-:>next=r->next;p--:>next=r;rm:>next=q;

  B.q-:>next=r;q->next=r->next;r->next=q;

  C.q-:>next=r->next;r->next=q;p->next=r;

  D.q-:>next=q;p->next=r;q->next=r->next;

  26.有下列程序:

  main()

  {int i,j,x=0;

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

  {x++;

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

  {if(j%2)continue;

  x++:

  )

  x++:

  }

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

  }

  程序执行后的输出结果是( )。

  A.x=4

  B.x=8

  C.x=6

  D.x=12

  27.有下列程序:

  int funl(double a){return a*=a;} 、

  int fun2(double x,double y)

  {double a=0,b=0;

  a=funl(x);b=funl(y);return(int)(a+b);

  )

  main()

  {double w;w=fun2(1.1,2.0),……}

  程序执行后变量w中的值是( )。 、

  A.5.21 B.5 C.5.0 D.0.0

  28.有下列程序:

  main()

  {int i,s=0,t[]={1,2,3,4,5,6,7,8,9};

  for(i=0;i<9;i+=2)s+=*(t+i);

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

  }

  程序执行后的输出结果是( )。

  A.45

  B.20

  C.25

  D.36

  29.有下列程序:

  int fun(int n)

  {if(n= =1))return l;

  else

  return(n+fun(n-1)):

  }

  main()

  { int x;

  seanf("%d",&x);x=fun(x);printf("%d\n",x);

  }

  执行程序时,给变量x输入l0,程序的输出结果是( )。

  A.55

  B.54

  C.65

  D.45

  30.有下列程序:

  int fun(int x[],int n)

  { static int sum=0,i;

  for(i=0;i   return sum;

  }

  main()

  {int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;

  s=fun(a,5)+fun(b,4 );printf("%d\n",s);

  程序执行后的输出结果是( )。 、

  A.45

  B.50

  C.60

  D.55

  31.有下列程序:

  main()

  f char*P[]={"3697","2584");

  int i,j;long num=0;

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

  {j=0;

  while(p[i][j]!=’\0’)

  {if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;

  j+=2;

  )

  )

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

  )

  程序执行后的输出结果是( )。

  A.35 B.37 C.39 D.3975

  32.以下程序的输出结果是( )。

  main()

  { char st[20]="hell0\O\t\\\”;

  printf("%d%d\n",strlen(st),sizeof(st));

  }

  A.9 9

  B.5 20

  C.13 20

  D.20 20

  33.若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是( )。

  A.&t[3][2]

  B.t[3]

  C.t[l]

  D.t[2][2]

  34.函数fseek(pf,OL,SEEK_END)中的SEEK_END代表的起始点是( )。

  A.文件开始

  B.文件末尾

  C.文件当前位置

  D.以上都不对

  35.下述程序的输出结果是( )。

  #include

  main()

  {int i;

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

  {if(i*i>=20)&&(i*i<=lOO))

  break;

  }

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

  )

  A.49

  B.36

  C.25

  D.64

  36.若有定义“int b[8],*p=b;”,则p+6表示( )。

  A.数组元素b[6]的值

  B.数组元素b[6]的地址

  C.数组元素b[7]的地址

  D.数组元素b[0]的值加上6

  37.设变量已正确定义,则以下能正确计算f=n!的程序是( )。

  A.f=0; for(i=1;i<=n;i++)f*=i;

  B.f=1;for(i=1;i  C.f=1;for(i=n;i>1;i++)f*=i;

  D.f=1;for(i=n;i>=2;i--)f*=i;

  38.下述程序执行的输出结果是( )。

  #include

  main()

  {char a[2][4]; ,

  strcpy(a。"are");strcpy(a[1],"you");

  a[o][3]=’&’;

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

  )

  A.are&you

  B.you

  C.are

  D.&

  39.设x=011050,则x=x&01252的值是( )。

  A.0000001000101000

  B.1111110100011001

  C.0000001011100010

  D.1100000000101000

  40.在“文件包含,,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是( )。

  A.直接按系统设定的标准方式搜索目录

  B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

  C.仅仅搜索源程序所在目录

  D.仅仅搜索当 前目录

  参考答案详解

  一、选择题

  1.D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间、算法执行过程中所需要的额外空间。

  2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。

  3.D。【解析】所谓的交换排序方法是指借助数据元素之间的互相交进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。

  4.C。【解析】结构化程序设计的原则和方法之一是限制使用GOT0语句,但不是绝对不允许使用G0T0语句。其他三项为结构化程序设计的原则。

  5.D。【解析】文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。

  6.C。【解析】面向对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。

  7.D。【解析】所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。

  8.B。【解析】软件的过程设计是指系统结构部件转换成软件的过程描述。

  9.A。【解析】模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量标准。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,以利于提高模块的独立性。

  10.C。【解析】对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。

  11.C。【解析】数据库系统由如下5个部分组成:数据库(DB)、数据库管理系统(DBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。其中DB(DataBase)即数据库,是统一管理的相关数据的集合DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。

  12.A。【解析】标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。C选项d0是C语言的一个关键字。D选项标识符只能以字母或下划线开始。

  13.D。【解析】本题考查逻辑运算符的使用。当“&&”的两个运算对象都是逻辑l时,表达式返回值才是1;“‖”的两个运算对象至少有一个是逻辑1时,表达式返回值也是l,x  14.C。【解析】第l个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个printf函数,有两个%说明,第1个%后面的字符要原样输出。本题考查printf函数的格式。①“%x”和“%o”分别表示以十六进制和八进制无符合型输出整型数据(不带前导ox或o);②printf函数中格式说明符之前插入的任何字符都原样输出;③格式说明与输出项的个数也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。

  15.C。【解析】函数fun(int x,int y)的功能是返回x+Y的值。在主函数中,变量a,b,c的初始值分别为 1,2,3。因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

  16.D。【解析】在x=2,y=x+3/2中,3/2=1,2+1=3,因此表达式的值为3,因为X,y为double型变量,故选择D选项。

  17.A。【解析】当X为1时,执行case l,a自加等于l,因为case l后没有break,接着执行case 2,此时a的值为2,b自加为1,故选择A选项。

  18.D。【解析】本题考查自增运算符“++”、逻辑与运算符 “&&”和逻辑或运算符“‖”。自增运算符“++”出现在变量之前,表示先使用变量的值加1,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“&&”两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“‖”只要一个值为1,值就为l。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为l;1与任何数都为进行或(1 1)运算,结果都为1,因此k一3的表达式i++是先运算后自加,因此运算时i为 1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。

  19.A。【解析】本题考查switch语句。当i=1时,执行case l,因为没有遇到break语句,所以依次往下运行,“a=a+2=2,a=a+3=5”;当i=2时,执行case 2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3=10”;当i=3时,执行case 3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a=a+2=13,a=a+3=16;当i=4时,执行default,a=a+3=l9,结束循环。

  20.C。【解析】只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择c选巩。

  21.A。【解析】循环的作用是求行下标从l到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。

  22.A。【解析】在程序语句中,k的初始值为5,进行第l次while循环后,k自减l为4,非0,执行循环体里的printf语句,输出k,此时k的值变为l。程序执行第2次循环时,k自减l变为0,为假,退出while循环语句。所以程序的最后结果为l。

  23.A。【解析】通过地址来引用数组元素的方法有下列5种:

  (1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。故A正确。

  24.C。【解析】选项A、B的空间不够;字符串存储要有结束符’\0’,且要占用一个空间,printf用来输出 字符,不能输入字符串。

  25.D。【解析】由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即可。而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,这时P指向的节点为r;q->next:r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。

  26.B。【解析】在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for循环中,首先x++得到x=5。进入到内层for循环,只有循环变量J的值为奇数时,变量X的值才自加1,所以在内层for循环执行过程中,变量X的值自加l两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。

  27.C。【解析】子函数funl(double a)的功能是返回a的平方值的整数部分。子函数fun2(double X, double y)的功能是返回X的平方值的整数部分与Y的平方值的整数部分的和。又因为题中变量W的定义为double型,函数fun(2)的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量w的值为5.0。

  28.c。【解析】在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此,*(t+i)代表数组的第i+1个元素。所以程序运行的结果是l+3+5+7+9=25,即变量S的值等于25。

  29.A。【解析】本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量X时,递归调用的过程为

  fun(10)=l0+fun(9)=10+9+ fun(8)=10+9+8+fun(7)

  =10+9++8+7+fun(6)=10+9++8+7+6+fun(6)

  =10+9++8+7+6+5+fun(4)

  =10+9++8+7+6+5+4+fun(3)

  =10+9++8+7+6+5+4+3+fun(2)

  =10+9++8+7+6+5+4+3+2+fun(1)

  =10+9++8+7+6+5+4+3+2=55

  30.C。【解析】在函数int fun(int x[],int n)的定义中,变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数int fun(int x[],int n)的功能是求出数组x[]各个元素的和,所以在主函数中,调用函数fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。

  31.D。【解析】执行第一次for循环时,用表达式p[i][J]!=’\o’来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-’\o’)除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。

  32.B。【解析】从题目中可知,’\O’、’\t’、’\\’分别为一个字符,而sizeof是求字节个数的函数,其中包括’\O’占的字节,strlen函数是求数组长度的函数;其以’\0’结束,因此strlen的值为5,sizeof的值为20。

  33.C。【解析】数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项c中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。

  34.B。【解析]SEEK_SET代表文件的开始,SEEK_END代表文件末尾,SEEK_CUR代表文件当前位置。

  35.C。【解析】当if执行到第一个满足(i*i>=20)&&(i*i<=100)这个条件的i出现时,通过break语句跳出循环,执行下面的prinlf语句。

  36.B。【解析】指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中p+6指的是将指针向后移动了6个存储单元,即指向b[6],存放的是b[6]的地址。

  37.D。【解析】由n!的数字定义可知n!=n*(n-1)*(n-2)*…*1。在选项A中,由于f的初值为0,在for循环语句中,f依次乘以l,2,3,…,n,最后计算得到f=n!=0,所以选项A不正确。在选项B中,f的初值为l,在for循环语句中,f依次乘以l,2,3,…,(n-1),最后计算得到f=(n-1)!,所以选项B不正确。在选项C中,f的初值为l,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。

  38.A。【解析]strcpy实现的功能是复制,该操作把are复制到a中,aE03 E33一’&’,且strcpy(aEl], "you")把you复制到a[l]中,故输出a为“are&you”。

  39.A。【解析】本题主要考查按位与运算,x=Oll050的二进制形式为00010010000101000,Ol252的二进制形式为0000001010101010,两者相与得0000001000101000。

  40.B。【解析】#include”文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。

【计算机二级C++上机考试试题及答案】相关文章:

全国计算机二级《C++》上机试题及答案08-15

计算机二级考试VF上机试题及答案03-21

计算机二级《Java》上机试题及答案11-01

计算机二级考试C++语言程序设计上机考试试题05-10

计算机二级C语言考试上机考试题及答案10-29

全国计算机二级考试C++巩固试题与答案10-03

计算机二级C++模拟试题及答案09-22

2024计算机二级C上机考试试题及答案10-23

2016计算机二级考试《Access》上机试题09-07

2016年9月计算机二级《C++》上机题库及答案09-01