考试吧

计算机等级

考试吧>等级考试>计算机二级考试>C加加>模拟试题>正文
2016年计算机二级《C++》基础练习题及答案(2)
考试吧 2016-01-05 10:47:55 评论(0)条

  点击查看:2016年计算机二级《C++》基础练习题及答案汇总

  1[单选题]下列关于面向对象概念的描述中,错误的是(  )。

  A.面向对象方法比面向过程方法更加先进

  B.面向对象方法中使用了一些面向过程方法中没有的概念

  C.面向对象方法替代了结构化程序设计方法

  D.面向对象程序设计方法要使用面向对象的程序设计语言

  参考答案:C

  2[简答题] 有以下两个程序,分析它们的执行结果有什么不同。

  程序1:

  #include

  class Point

  {

  int x,y;

  public:

  Point(){x=y=0;}

  Point(int i,int j){x=i;y=j;}

  Point operator+(Point);

  void disp() ( cout<<”(”<

  }

  Point Point::operator+(Point P)

  {

  this->x+=P.x; this->y+=p.y;

  return *this;

  }

  void main()

  {

  Point pl(2,3),p2(3,4),p3;

  cout<<”p1:”;p1.disp();

  cout<<”p2:”;p2.disp();

  p3=pl+p2;

  cout<<”执行p3=p1+p2后”<

  cout<<”p1:”,p1.disp();

  cout<<”p2:”;p2.disp();

  cout<<”p3:”;p3.disp();

  }

  程序2:

  #include

  class Point{

  int x,Y;

  public:

  Point(){x=y=O;}

  Point(int i,int j){x=i,y=j;}

  Point operator+(Point);

  void disp f){cout<< ”(”<

  }

  Point Point::operator+(Point P)

  {

  Point s;

  s.x=x+p.x; s.y=y+p.y;

  return s;

  }

  void main()

  {

  Point pl(2,3),p2(3,4),p3;

  cout<<”p1:”;p1.disp();

  cout<<”p2:”;p2.disp();

  p3=pl+p2;

  cout<<”执行p3=p1+p2后”<

  cout<<”p1:”;p1.disp();

  cout<<”p2:”;p2.disp();

  cout<<”p3:”;p3.disp();

  }

  参考解析:这两个程序中的main函数完全相同,类Point中的运算符重载均采用成员函数方式实现,只是程序1的运算符重载函数使用this指针,而程序2的运算符重载函数使用局部对象。

  p3=p1+p2 等价于p3=p1.operator+(p2)。对于程序1,this指针指向p1对象,执行this->x+=p.x;this->y十一 p.y;语句,修改p l对象的x和y成员值,执行return*this;语句,将pl对象赋给p3。所以p1和p3两个对象的x、Y值相同,即p3=pl+p2等价于 p1=p1+p2,p3:p1,其运行结果如下:

  p1:(2,3)

  p2:(3,4)

  执行p3=pl+p2后

  P1:(5,7)

  p2:(3,4)

  P3:(5,7)

  对于程序2,执行运算符重载函数,Point s;语句定义一个对象,s.x=x+p.x;s.y=y+p.y;语句用于修改s对象的x、Y值,ret%il~l s;语句返回该对象,赋给p3,而p1和p2对象不改变。其运行结果如下:

  p1:(2,3)

  p2:(3,4)

  执行p3=pl+p2后

  p1:(2,3)

  p2:(3,4)

  p3:(5,7)第

  3[单选题]C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是

  A.增加了一些新的运算符

  B.允许函数重载,并允许设置缺省参数

  C.规定函数说明符必须用原型

  D.引进了类和对象的概念

  参考答案:D

  4[单选题] 若x和y是程序中的两个整型变量,则下列if语句中正确的是(  )。

  A.if(x==O)y=1;elsey=2;

  B.if(x==0)theny=1elsey=2

  C.if(x==O)y=1elsey=2;

  D.ifx==0y=1elsey=2;

  参考答案:A

  参考解析:if…else语句的格式“if(<条件>)<语句1>else<语句2>”注意语句结束要以分号结尾,对照题中选项可知A正确。

  5[单选题]

  A.3B.4C.5D.6

  参考答案:C

  参考解析:

  

  6[单选题]友元函数的作用是(  )。

  A.提高程序的效率

  B.加强类的封装性

  C.实现数据的隐蔽性

  D.增加成员函数的种类

  参考答案:A

  参考解析:友元函数的引入是为了提高程序的效率,减少通过接口访问的限制,但却破坏了类的封装性。

  7[单选题]下列描述中,错误的是(  )。

  A.公有继承时基类中的公有成员在派生类中仍是公有成员

  B.公有继承时基类中的保护成员在派生类中仍是保护成员

  C.保护继承时基类中的公有成员在派生类中仍是公有成员

  D.保护继承时基类中的保护成员在派生类中仍是保护成员

  参考答案:C

  参考解析:保护继承时基类中的公有成员在派生类中是保护成员。

  8[单选题] 下列关于C++函数的说明中,正确的是(  )。

  A.内联函数就是定义在另一个函数体内部的函数

  B.函数体的最后一条语句必须是return语句

  C.标准C++要求在调用一个函数之前,必须先声明其原型

  D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式

  参考答案:C

  参考解析:内联函数不是定义在另一个函数体内部的函数,而是将inline放在函数定义中函数类型之前;函数体的最后一条语句可以是任意的语句;编译器不会根据函数返回值的类型来区分重载形式,选项D错误。标准C++要求在调用一个函数之前,必须先声明其原型。

  9[简答题]使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在屏幕输出以下类似内容:

  0012FF6810012FF3C5

  0012FF6C20012FF444

  0012FF7030012FF4C3

  0023FF7440012FF542

  0012FF7850012FF5C1

  006AFDCC~006AFDEF数据可能因为机器的不同,程序输出的内容会有差异。只要相差为4的连续地址即可。

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

  试题程序:

  #include

  usingnamespacestd;

  intmain()

  {

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

  double*q,b[5]={5.0,4.0,3.0,2.0,1.0);

  intx;

  P=a;

  q=b;

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

  for(x=0;x<=5;X++)

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

  cout<

  (q+x)<

  return0;

  }

  参考解析:

  (1)应改为“for(x=0;x<5;x++)”。

  (2)应改为“cout<

  【解析】本题中根据数组a、b的定义。它们都有5个元素,而第1处的“for(x=0;x<=5;x++)”循环了6次,应该是5次,所以在第1处将其修改为“for(x=0;x<5;x++)”;第2处的P变量为指针型变量,p+x为糯向数组中第X个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout<

  10[填空题]类中包含了一个静态成员函数,则main函数中和P.f1(P);语句具有同样功能的语句为_______。

  

  参考解析:

  【答案】M::f1(P);

  【解析】由于f1是类M的静态成员函数,即说明类M的任何对象都共享一份f1,因此,不仅可以从对象那里访问f1,还可以用域操作符::通过类名来访问。

  11[填空题]在C++中,三种派生方式的说明符号为(  )、(  )、(  )不加说明,则默认的派生方式为(  )。

  参考解析:public 、private 、 protected、private

  12[单选题]线性表常采用的两种存储结构是(  )。

  A.顺序存储结构和链式存储结构

  B.散列方法和索引方式

  C.链表存储结构和数组

  D.线性存储结构和非线性存储结构

  参考答案:A

  参考解析:线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结构。

  13[单选题]下列程序段执行后,j值是(  )。

  for(int i(0), j(0); i<10; i++)

  if(i) j++;

  A.0 B.9C.10 D.无限

  参考答案:B

  14[单选题]有以下程序,执行后输出结果是(  )。

  

  A.3,4,5 B.5,3,4 C.5,4,3 D.4,3,5

  参考答案:D

  参考解析:考生根据分析可以得知f函数的功能是交换两个变量的值。表明看起来,在main函数中,使用三次f函数完成三个变量的交换。真的如此么?只要考生注意到f函数采用值传递,而值传递的缺点就是不会改变形参的值,因此,上述操作根本无法改变原来三个变量的值!故三个变量的值依然保持不变。

  15[单选题] 已知类A有公用数据成员a,并重载了=运算符,且有Aobj2;constA*ptr=newA;,则下列语句错误的是(  )。

  A.ptr->a=100;B.ptr=&obj2;C.ptr++;D.obj2=*ptr;

  参考答案:A

  参考解析:本题考查const修饰符的作用。注意,const位置不同,其修饰的部分也是不同的。本题中const修饰的是ptr所指的对象本身,所以,ptr可以重新指向新的对象,而ptr->a则无法被更新。

  16[单选题]下列函数的运行结果是(  )。

  

  A.25B.30C.20D.15

  参考答案:A

  参考解析:

  17[单选题] 对于循环队列,下列叙述中正确的是(  )。

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

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

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

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

  参考答案:D

  参考解析:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进行入队运算时,只要存储空间的第一个位置空闲,可将元素加入到第一个位置,即将存储空闲的第一个位置作为队尾。

  18[单选题]以下程序的输出结果是(  )。

  

  A.1234B.123C.12D.1

  参考答案:B

  参考解析:本题考察的是循环次数的判定。有while后的逻辑表达式可知,整个循环体需要执行3次,故可直接选定正确答案为B。

  19[填空题]十进制28和3.6的类型分别是_______。

  参考解析:int和double

  【解析】整型和双精度型。注意除非定义了float变量。实型常量隐含为 double型。

  20[简答题]请使用VC6或使用【答题】菜单打开考生文件夹prosS下的工程pr093,其中包含了类TaxCaleulator(“个税计算器”)和主函数main的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在main函数中,通过两个数组创建了如下的税率表:

  利用这个税率表创建“个税计算器”时,假定起征额为2 000元(即不超过2 000元的所得不征收个人所得税)。请补充完成计算应纳个人所得税额的成员函数getTaxPayable,其中的参数income为月收入。此程序的正确输出结果应为:

  月收入为800元时应缴纳个人所得税0元

  月收入为l 800元时应缴纳个人所得税0元月收入为2 800元时应缴纳个人所得税 55元 月收入为3 800元时应缴纳个人所得税l55元

  月收入为4 800元时应缴纳个人所得税295元月收入为5 800元时应缴纳个人所得税455元

  注意:只能在函数9etTaxPayable中的“//**********333**********”和“//**********666**********”之间

  填人若干语句,不要改动程序中的其他内容。 //Tax Calculator.h #include #include

  using flamespace std; class TaxCalculator{ public:

  TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),

  list_len(the_length),threshold(the—threshold){ for(int i=0;i

  lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];

  } f

  —TaxCalculator(){delete[]lower_limits;delete[]rates;}

  double getTaxPayable(double income)eonst;//返回指定月收入的应纳个人所得税额 void showTaxPayable(double income)const;//显示指定月收入的应纳个人所得税额 private:

  double$lower—limits;//适用收入段下限 double *rates; //适用税率

  int list—len;//税率表项数

  double threshold; //起征额 };

  void writeToFile(consl char * path); //TaxCalcnlator.cpp

  ‘#include”TaxCalculator.h”

  double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;

  //应纳税工资额

  double tax_payable=0.0; //应纳个人所得税额

  int i=list_len-1;

  //从税率表的最高适用段开始计算 while(i>=0){

  //**********333**********

  //**********666**********

  --i; }

  return tax_payable;

  } void TaxCalculator::showTaxPayable(double income)const{

  cout<<”月收入为”<

  }

  //main.cpp

  #include”TaxCalculator.h” int main(){

  double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};

  TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);

  calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);

  return 0;

  }

  参考解析:

  if f income<=2000)//如果收入小于2000

  return tax—payable;

  //直接tex—payable(初始代为零)

  i“taxable>lower_limits[i]){

  //如果taxable(收入超出起征额的部分)大于lower—limits

  [i]阶段最低限额

  tax_payable+=(taxable-lower-limits[i])*

  rates[i]:

  //把起过阶段最低限额的部分乘以该阶段的税率后,加到tax_payable(个人所得税)

  taxable=lower_limits[i];

  //把fower_limits[i]赋值于taxable

  }

展开全文
评论(0条) 发表
Copyright © 2004-
考试吧(m.566.com)北京美满明天科技有限公司
社会统一信用代码:91110108MA01WU311X
帮助中心