计算机等级 > 二级考试 > C++语言程序设计 > C++模拟试题 > 文章内容

全国计算机二级C++语言程序设计考试精选选择题(7)

2017-6-16编辑:daibenhua

全国计算机二级C++语言程序设计考试精选选择题

  1.按照“后进先出”原则组织数据的数据结构是(  )。

  A.队列

  B.栈

  C.双向链表

  D.二叉树

  2.下列对于软件测试的描述中正确的是(  )。

  A.软件测试的目的是证明程序是否正确

  B.软件测试的目的是使程序运行结果正确

  C.软件测试的目的是尽可能多地发现程序中的错误

  D.软件测试的目的是使程序符合结构化原则

  3.模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的(  )。

  A.抽象和信息隐蔽

  B.局部化和封装化

  C.内聚性和耦合性

  D.激活机制和控制方法

  4.下述关于数据库系统的叙述中,正确的是(  )。

  A.数据库系统减少了数据冗余

  B.数据库系统避免了一切冗余

  C.数据库系统中数据的一致性是指数据类型一致

  D.数据库系统比文件系统能管理更多的数据

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

  

  A.ABCDEF

  B.DBEAFC

  C.ABDECF

  D.DEBFCA

  6.同一概念在一处为实体而在另一处为属性或联系的冲突在视图集成中称为(  )。

  A.命名冲突

  B.概念冲突

  C.域冲突

  D.约束冲突

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

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

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

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

  D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考

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

  A.DB包含DBS和DBMS

  B.DBMS包含DB和DBS

  C.DBS包含DB和DBMS

  D.没有任何关系

  9.索引属于(  )。

  A.模式

  B.内模式

  C.外模式

  D.概念模式

  10.下列关于关系运算的叙述中正确的是(  )。

  A.投影、选择、连接是从二维表的行的方向来进行运算

  B.并、交、差是从二维表的列的方向来进行运算

  C.投影、选择、连接是从二维表的列的方向来进行运算

  D.以上三种说法都不对

  11.下面不正确的描述为(  )。

  A.调用函数时,实参可以是表达式

  B.调用函数时,实参与形参可以共用内存单元

  C.调用函数时,将为形参分配内存单元

  D.调用函数时,实参与形参的类型必须一致

  12.在C++程序中,如果要求通过函数来实现一种简单的功能,并且要求尽可能加快程序执行速度,则应该选用(  )。

  A.内联函数

  B.重载函数

  C.递归调用

  D.嵌套调用

  13.每个C++程序中都必须有且仅有一个(  )。

  A.类

  B.预处理命令

  C.主函数

  D.语句

  14.存取指针所指的值时,采用的运算符是(  )。

  A.#

  B.&

  C.%

  D.*

  15.设有“intx=11;”,则表达式(x++*2/3)的值是(  )。

  A.7

  B.8

  C.11

  D.12

  16.已经有“语句intm=10;”则下列表示引用的表示中正确的是(  )。

  A.int&x=m;

  B.int&y=10;

  C.int&z;

  D.float&t=8m;

  17.C++语言本身没有定义I/O操作,但I/O操作包含在C++实现中。C++标准库iostream提供了基本的I/O类。I/O操作分别由两个类istreanl和(  )提供。

  A.fstream

  B.iostream

  C.ostream

  D.cin

  18.将x+y*z中的“+”用成员函数重载,“*”是友元函数重载应写为(  )。

  A.operator+(operator*(y,z))

  B.x.operator+(operator*(y,z))

  C.x.operator+(X*(y,z))

  D.x+(operator*(y,z))

  19.下列函数的运行结果是(  )。

  #include

  intf(inta,intb)

  {intC;

  if(a>b)c=l;

  elseif(a==b)c=0;

  elsec=-1:

  return(c);}

  voidmain(  )

  {inti=2,j=3;

  intp=f(i,j);

  cout

  B.1

  C.2

  D.编译出错,无法运行

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

  voidmain(  )

  {inta=4,b=5,c=0,d;

  d=!a&&!b‖!c;

  cout<}

  A.1

  B.0

  C.非0的数

  D.-l

  21.下列关于成员函数特征的描述中,错误的是(  )。

  A.成员函数一定是内联函数

  B.成员函数可以重载

  C.成员函数可以设置参数的默认值

  D.成员函数可以是静态的

  22.考虑以下的函数原型:

  voldA(inta,intb=5,charZ=’*’);

  下面的函数调用中,不正确的是(  )。

  A.A(7)

  B.A(3,4)

  C.A(16,’#’)

  D.A(0,2,’*’)

  23.关于静态数据成员的描述中正确的是(  )。

  A.类的静态数据成员不是类的所有对象共享的数据

  B.类的静态数据成员不能被类的成员函数调用

  C.类的静态数据成员不能被类的构造函数调用

  D.类的静态数据成员必须进行初始化

  24.设有以下类和对象的定义:

  ClaSSA

  {public:

  intm;

  };

  Ak1,k2,*p1,*p2;

  则下面针对成员变量m的引用,错误的是(  )。

  A.k1.m=1

  B.k2→m=2

  C.p1→m=3

  D.(*p2).m=4

  25.有以下程序:

  classDate

  {

  public:

  Date(inty,intm,intd);

  {

  year=Y:

  month=m;

  day=d;

  }

  Date(inty=2000)

  {

  year=y;

  month=10;

  day=1;

  }

  Date(Date&d)

  {

  year=d.year;

  month=d.month;

  day=d.day;

  }

  voidprint(  )

  {

  cout<}

  private:

  intyear,month,day;

  };

  Datefun(Dated)

  {

  Datetemp;

  temp=d;

  returntemp;

  }

  intmain(  )

  {

  Datedatel(2000,1,1),date2(0,0,0);

  Datedate3(datel);

  date2=fun(date3);

  return0;

  }

  程序执行时,Date类的拷贝构造函数被调用的次数是(  )。

  A.2

  B.3

  C.4

  D.5

  26.下列关于纯虚函数与抽象类的描述巾,错误的是(  )。

  A.纯虚函数是一种特殊的虚函数,它没有具体的实现

  B.抽象类是指具有纯虚函数的类

  C.一个基类声明了纯虚函数,该基类的派生类一定不是抽象类

  D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出

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

  #include

  longfun(intn)

  {longs;

  if(n=-1‖n==2)s=2;

  elses=n-fun(n-l):

  returns;

  }

  voidmain(  ){cout

  B.2

  C.3

  D.4

  28.对于模板定义关键字class和typename说法不正确的是(  )。

  A.程序中的class并不能都替换为typename

  B.class和typename都可互相替换

  C.程序中的typename都能替换为class

  D.程序中的部分class可以替换为typename

  29.有如下程序:

  #include(iostream>

  usingnamespacestd;

  classCon

  {

  charID;

  public:

  Con(  ):ID(’A){cout<<1;}

  Con(charID):ID(ID){cout((2;)

  Con(Con8Lc):ID(c.getlD(  )){cout<<3;}

  chargetID(  )const{returnID;}

  };

  voidshow(Conc){cout

  {

  Conc1;

  show(c1);

  Conc2(’B’);

  show(c2);

  return0;

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

  A.13A23A

  B.23A13B

  C.13A23B

  D.13823A

  30.有如下程序

  #include(iostream.h>

  voidmain(  )

  {charch[2][5]={"6937","8254"),*p[2];

  inti,j,s=0;

  for(i=0;i<2;i++)p[i]=ch[i];

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

  for(j=0;p[i][j])’\0’;j+=2)

  s=10*s+p[i][j]一’0’;

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

  A.69825

  B.63825

  C.6385

  D.693825

  31.阅读以下程序

  #include(iostream.h>

  voidmain(  )

  {

  charline[10];

  cin>>line;

  cout<<1ine<}

  如运行时输入“Thisisanexample.”,则程序的输出结果是(  )。

  A.This

  B.Thisis

  C.Thisisa

  D.Thisisanexample

  32.类MyClass的定义如下,若要对value赋值,则下面语句正确的是(  )。

  classMyClass

  {

  public:

  MyClass(  ){}

  MyClass(inti){value=newint(i);}

  int*value;

  };

  A.MyClassmy;my.value=10;

  B.MyClassmy;*my.value=10;

  C.MyClassmy;my.*value=10;

  D.MyClassmy(10);

  33.类A是类B的友元,类B是类C的友元,则下列说法正确的是(  )。

  A.类B是类A的友元

  B.类C是类A的友元

  C.类A是类C的友元

  D.以上都不对

  34.如有以下程序:

  #include(iostream>

  usingnamespacestd;

  longfun(intn)

  {

  if(n)2)

  return(fun(n-1)+fun(n-2));

  else

  return2;

  }

  intmain(  )

  {

  cout

  }

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

  A.2

  B.3

  C.4

  D.5

  35.下列程序执行结果是(  )。

  #include(iostream.h)

  classA

  {public:

  inta;

  A(  ):a(10){cout<};

  voidmain(  )

  {Aobj1;

  Aobj2(obj1);

  cout<<""<}

  A.1010

  B.编译错误缺少拷贝构造函数

  C.10随机数

  D.随机数随机数

  36.关于类和对象描述错误的是(  )。

  A.对象(Object)是现实世界中的客观事物,对象具有确定的属性

  B.类是具有相同属性和行为的一组对象的集合

  C.对象是类的抽象,类是对象的实例

  D.类是对象的抽象,对象是类的实例

  37.下列对重载函数的描述中,错误的是(  )。

  A.重载函数中不允许使用默认参数

  B.重载函数中编译是根据参数表进行选择的

  C.不要使用重载函数来描述毫不相干的函数

  D.构造函数重载将会给初始化带来多种方式

  38.以下程序的运行结果是(  )。

  #include(iostream.h>

  voidsub(intx,inty,int*z)

  {*z=y-x;}

  voidmain(  )

  {inta,b,c;

  sub(10,5,&a);

  sub(7,a,&b);

  sub(a,b,&c);

  cout((a<<","

  B.-5,-12,-7

  C.-5,-12,-17

  D.5,-2,-7

  39.以下程序不用第3个变量实现将两个数进行对调的操作,画线处应为(  )。

  voidmain(  )

  {inta,b;

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

  cin>>a>>b;

  cout<<"a="

  B.intp=a;

  C."p=a;

  D.p=a;

  1.B。【解析】栈是限定只在表尾进行插入或删除操作

  的线性表,因此栈是先进后出的线性表;队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列具有先进先出(F1FO)的特点;双向链表可以在链表的头和尾进行添加删除操作;二叉树是非线性结构。

  2.C。【解析】软件测试是保证软件质量的关键环节,直接影响着软件的质量评估。软件测试不仅要讲究策略,而且要讲究时效性。软件测试的目的是尽可能多地发现程序中的错误。

  3.C。【解析】模块的独立程序是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。

  4.A。【解析】数据库系统会减少数据冗余,但不可能避免一切冗余。

  5.D。【解析】二叉树的遍历有3种:前序、中序和后序。后序遍历首先遍历左子树或左子结点,然后遍历右子树或右子结点,最后访问根结点。分析本题二叉树,对其进行后序遍历的结果为DEBFCA。

  6.B。【解析】同一概念在一处为实体,而在另一处为属性或联系的冲突称为概念冲突。

  7.C。【解析】面向对象设计通过对人类认识客观世界及事物发展过程的抽象,建立了规范化的分析设计方法,由此带来软件模块化特色突出、可读性好、易维护等一系列优点。

  8.C。【解析】数据库系统(DBS)是指在计算机系统中引入数据库后的系统,一般有数据库(DB)、数据库管理系统(DBMS)、应用系统、数据库管理员和用户构成。

  9.B。【解析】建立索引是加快查询速度的有效手段,这与索引按什么方式组织有关,它建立在数据库表的基础上,属于内模式。

  10.C。【解析】在关系模型的数据语言中,一般除了运用常规的集合运算(并、交、差、笛卡儿积等)外,还定义了一些专门的关系运算,如投影、选择、连接等。前者是将关系(即二维表)看成是元组的集合.这些运算主要是从二维表的行的方向来进行的;后者主要是从二维表的列的方向来进行运算。因此,选项A与选顷B的说法都是错误的,而选项C的说法正确。

  11.B。【解析】函数调用时用实参替换形参,如果实参为表达式,将为表达武的值创建一个临时对象,然后将该实参替换形参。替换的实质是变量间的复制,当然这种复制需要为形参分配内存。需要注意的是:形参在编泽时不分配内存,在运行时才分配内存。

  12.A。【解析】本题考查的是内联函数的相关知识点。C++引入内联函数是用它来代替C语言中的预处理宏函数,内联函数在调用时,是将表达式用内联函数体来替换,这样会加快程序的执行速度。

  13.C。【解析】每个C++程序中都要有且仅有一个主函数,该函数是程序的入口,而语句、预处理命令和函数及类在程序中都可以有多个。

  14.D。【解析】对指针所指向的地址取值时,采用的存取运算符为*。B为取地址符。

  15.A。【解析】当自加运算符做后缀表达式的时候,表达式的值不变,只有变量的值增1,所以表达式(x++*2/3)相当于(11*2/3)取整后为7。

  16.A。【解析】引用比较特殊,即必须指向一个已有的同类型变量。引用是已有变量的别名,故选项C是错误的,选项D中变量类型不同,而选项B中是常数。

  17.C。【解析】本题考查的是C++标准库iostream提供的基本I/O类。istream提供了向流中插入数据的有关操作;0stream提供了从流中提取数据的有关操作。

  18.B。【解析】在定义了重载运算符后的函数后,函数operator+重载了运算符“+”。如果在类以外的其他地方定义了一个函数,在类体中用friend对该函数进行声明,此函数就称为本类的友元函数。“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“*”被改写为“operator*”。“+”为成员函数重载,X.operator+。所以“x+y*z”被改写为“x.operator+(operator*(y,z))”。

  19.A。【解析】本题的函数是根据a和b的值来给c赋值。

  20.A。【解析】本题考查逻辑运算符!逻辑“非”,&&逻辑“与”,‖逻辑“或”,三者的优先级顺序为!)&&>‖,本题中d=!4&&!5‖!0,即d=0‖1,也即d=1。

  21.A。【解析】成员函数不一定是内联函数。

  22.C。【解析】A、B项中,实参不全,参数默认为函数原型中的初始值,但在C项中,第二个实参(char型)与函数原型中的第二个形参类型不一致,故C项错误。

  23.D。【解析】C++类中的静态成员变量是该类中所有对象所共有的,它能够被类中的任何函数调用,所以选项A,B,C是错误的。而类的静态数据成员是必须要进行初始化才能使用。

  24.B。【解析】A*p1,A*p2为指向A类对象的指针,故“p1→m=3,(*p2).m=4”是正确的。但k2不是指针,k2→m的表示是错误的。

  25.B。【解析】本题考核拷贝构造函数。上述程序中,拷贝构造函数一共被调用了3次:第1次是在执行语句Datedate3(date1)时,用已经建立的对象date1对正在建立的对象date3进行初始化;第2次是在调用fun函数时,由于是传值调用,因此实参对象date3要对形参对象d进行初始化;第3次是在执行fun函数中的返回语句returntemp;时,系统初始化一个匿名对象时使用了拷贝构造函数。

  26.C。【解析】纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。

  27.A。【解析】题中fun函数进行了递归调用,第1次调用时:fun(3)n=3,s=3-fun(2),第二次调用时:fun(2)n=2,s=2,返回第一次调用后,s=3-2=1。

  28.B。【解析】在C++程序中的typename是都可以替换为class的,但class不能都替换为typename。

  29.C。【解析】Concl定义cl对象,调用Con的无参数构造函数,输出1,ID值变为A,执行show(c1)时会调用拷贝构造函数,将cl对象的值复制给show函数的形参,此时输出3,然后在show()中输出cl的lD值A,Conc2(’B’)定义c2对象,调用Con(charID)构造函数,输出2,c2的ID值为B,show(c2)执行时先调用拷贝构造函数输出3,然后输出B。因此程序输出结果为“13A23B”。

  30.C。【解析】该题主要要搞清楚以下几点:①定义了一个指针数组char*p[2]后,程序中第一个循环“for(i=0;i(2;i++)p[i]=ch[i]”的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组P和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的内容为字符串“8254”。③程序中第二个循环中的循环体“s=s*10+p[i][j]-’0’”的功能是这样的,每执行一次,将s中的值乘以10(即将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i][3]>’\0’是指p[i][j]中的字符只要不是字符串结束标志’\0’就继续循环,语句j+=2;是使下标j每次增加2,即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和“3”,然后从p[1]所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。

  31.A。【解析】本题考查C++中cin输入流对象的使用规则,其特点是以空格、回车和tab为分隔符。因此this和is之间的空格告诉cin对象停止接收后面的数据。故正确答案为A。

  32.D。【解析】因题目中定义的指针value是指淘变量i的,所以直接利用语句MyClass(inti){value=newint(i);}对value进行赋值即可。

  33.D。【解析】选项A、B和C都不正确,因为友元关系是单项的,并且没有交换性、传递性。

  34.C。【解析】主函数中调用fun(3),在fun内部当n>2时,递归调用fun(n-1)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(1),即返回2+2,等于4。

  35.A。【解析】本题考查拷贝构造函数的知识。如果类中没有实现拷贝构造函数可以完成数据成员的自动赋值,对于复杂对象,则可能需要显式定义拷贝构造函数。

  36.C。【解析】C++中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。

  37.A。【解析】选项A中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。

  38.B。【解析】在C++语言中,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。

  39.B。【解析】本题思路巧妙,分析时可以发现b=(a+b)-b,则此时b中放的是a,完成交换工作的一半,然后要将b放到a中,将表达式展开,则为a=(a+b)-a,此时正好把b放到a中。此时完成全部的交换。

  40.A。【解析】从循环语句中可以看出,是在0到4的循环中输出数组a中的前5个元素,输出的值为*(P+i),即为指针P向后移动指向的元素。所以初始化要将指针P指向数组a,即int*p=a;。

全国计算机二级考试C++语言程序设计上机考试试题及答案(4)

热点推荐

登录注册
触屏版电脑版网站地图