当前位置:首页 > 全部子站 > IT > 等级考试

2018年9月计算机二级C++考试强化练习题及答案(1)

来源:长理培训发布时间:2018-08-17 19:28:37

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

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

  B.成员函数可以重载

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

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

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

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

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

  A.A(7)

  B.A(3,4)

  C.A(16,’#’)

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

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

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

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

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

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

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

  ClaSSA

  {public:

  intm;

  };

  Ak1,k2,*p1,*p2;

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

  A.k1.m=1

  B.k2→m=2

  C.p1→m=3

  D.(*p2).m=4

  5.有以下程序:

  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

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

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

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

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

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

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

  #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

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

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

  B.class和typename都可互相替换

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

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

  9.有如下程序:

  #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

  10.有如下程序

  #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])’’;j+=2)

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

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

  A.69825

  B.63825

  C.6385

  D.693825

  11.阅读以下程序

  #include(iostream.h>

  voidmain(  )

  {

  charline[10];

  cin>>line;

  cout<<1ine<}

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

  A.This

  B.Thisis

  C.Thisisa

  D.Thisisanexample

  12.类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);

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

  A.类B是类A的友元

  B.类C是类A的友元

  C.类A是类C的友元

  D.以上都不对

  14.如有以下程序:

  #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

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

  #include(iostream.h)

  classA

  {public:

  inta;

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

  voidmain(  )

  {Aobj1;

  Aobj2(obj1);

  cout<<""<}

  A.1010

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

  C.10随机数

  D.随机数随机数

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

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

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

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

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

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

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

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

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

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

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

  #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

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

  voidmain(  )

  {inta,b;

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

  cin>>a>>b;

  cout<<"a="

  B.intp=a;

  C."p=a;

  D.p=a;

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

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

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

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

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

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

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

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

  9.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”。

  10.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]>’’是指p[i][j]中的字符只要不是字符串结束标志’’就继续循环,语句j+=2;是使下标j每次增加2,即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和“3”,然后从p[1]所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。

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

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

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

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

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

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

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

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

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

 

责编:曾珂

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部