当前位置:首页 > 心得体会 > [2018年计算机二级考试《C++》备考练习题及答案] C证练习题
 

[2018年计算机二级考试《C++》备考练习题及答案] C证练习题

发布时间:2018-11-05 04:31:15 影响了:
计算机等级网权威发布2016年计算机二级考试《C++》备考练习题及答案,更多2016年计算机二级考试《C++》备考练习题及答案相关信息请访问计算机等级考试网。

1[判断题] C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。

  参考答案:对

  2[单选题]在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是(  )。

  A.派生类的对象可以赋给基类的对象

  B.派生类的对象可以初始化基类的引用

  C.派生类的对象可以直接访问基类中的成员

  D.派生类的对象的地址可以赋给指向基类的指针

  参考答案:C

  3[单选题] 有如下函数定义:

  void funC(int a,int&B.{a++;b++;} 若执行代码段:

  int x=0,Y=1: funC(X,y);

  则变量X和y的值分别是( )。

  A.0和1B.1和1C.0和2D.1和2

  参考答案:C

  参考解析:函数参数的3种传递方式:①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以X的值不会改变;Y为引用形参,所以会改变。故本题答案为C。

  4[单选题]下面程序的结果为

  #include

  int c;

  class A

  {

  private:

  int a;

  static int b;

  public;

  A(){a=0;c=0;}

  void seta(){a++;}

  void setb(){b++;}

  void setc(){c++;}

  void display(){cout <<<<

  int A::b=0;

  void main()

  {

  A al,a2;

  al.seta();

  al.setb();

  al.setc();

  a2.seta();

  a2.setb();

  a3.setc();

  a2.display();

  A.121 B.122 C.112 D.222

  参考答案:B

  6[单选题]已知char a;int b;float c;double d;则表达式a*b+c-d结果为(  )。

  A.doubleB.intC.floatD.char

  参考答案:A

  参考解析:本题考察混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。

  8[单选题] 下列叙述中正确的是(  )。

  A.循环队列有队头和队尾两个指针,因此循环队列是非线性结构

  B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

  C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

  D.循环队列中元素的个数是由队头指针和队尾指针共同决定

  参考答案:D

  参考解析:循环队列中元素的个数是由队首指针和队尾指针共同决定的,元素的动态变化也是通过队首指针和队尾指针来反映的,当队首等于队尾时,队列为空。

  9[简答题]使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。

  程序输出:

  s1:n=20

  s2:n=10

  执行s3.add(s1,s2)

  s3:n=30

  s4:n=30

  注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

  试题程序:

  #include

  classTC

  {

  intn;

  public:

  TC(){}

  TC(intm)

  {

  n=m:

  }

  //********error********

  TCadd(TCs1,s2)

  {

  this->n=s1.n+s2.n;

  //********error********

  return(this);

  }

  voiddisp()

  {

  cout<<"n一="<

  }

  //********error********

  }

  voidmain()

  {

  TCs1(20),s2(10),s3,s4;

  cout<<"s1:";

  s1.disp();

  cout<<"s2:";

  s2.disp();

  s4=s3.add(s1,s2);

  cout<("执行s3.add(s1,s2)\ns3:";

  s3.disp();

  COUt<<"s4:";s4.disp();

  }

  参考解析:

  (1)应改为“TCadd(TCs1,TCs2)”。

  (2)应改为“return(*this);”。

  (3)应改为“};”。

  【解析】本题中的变量“s2”没有声明类型,所以补充“s2”的类型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”语句中的this变量为指针变量,所以第2处的“return(this);”返回语句中的this变量,应该返回指针型,所以修改为“return(*this);”。C++中类的定义格式应为“class类名{};”,以分号为结尾,所以在第3处的类结尾处补充分号“;”,即修改为“};”。

  10[简答题]使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(char*str,charch)的定义,本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回1。

  二分法查找的思想是初始查找区间的下界为0,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。

  注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

  试题程序:

  #include(iostream.h>

  intfun(char*str,charch)

  {

  }

  voidmain()

  {

  charstr[]={"a","b","C","d","e","f","9","h","i,"

  j","k");

  charch;

  cout<<"请输入一个字符:"<

  cin>>ch;

  cout<<"输入字符的位置是:"<

  return;

  }

  参考解析:

  intlow=0;//初始查找区间的下界

  inthigh;

  intk;

  for(high=0;str[high]!=0;high++)//求字符串长度

  while(10w

  {

  k=(low+high)/2;

  if(str[k]==ch)

  returnk;

  elseif(str[k]>ch)

  high=k-l:

  elselow=k+1:

  }

  if(str[low]==ch)

  returnlow;

  return-1:

  【解析】本题首先初始查找区间的下界为0,然后求得字符串长度len,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3