就业数据资源平台
当前位置:首页 > C++语言程序设计
2012年计算机二级C++上机冲刺题及答案解析(十)

一、改错题

  使用VC6打开考生文件夹下的工程kt15_1,此工程包含一个源程序文件kt15_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:

  Previous=9,Next=11

  源程序文件kt15_1.cpp清单如下:

  #include<iostream.h>

  /*****************found*****************/

  intmain()

  { intx=10,y,z;

  prevnext(x,y,z);

  cout<<"Previous="<<y<<",Next="<<z<<endl;

  return0; }

  /*****************found*****************/

  voidprevnext(intx,intprev,intnext)

  { /*****************found*****************/

  prev=x--;

  next=++x; }

  【参考答案】

  (1)在main()函数前缺少prevnext函数声明

  应添加:void prevnext (int,int &,int &);

  (2)将void prevnext (int x, int prev,int next)

  改为:void prevnext (int x, int &prev,int &next)

  (3)将prev=x--;改为:prev=x-1;

  【试题解析】

  (1)函数在使用前必须已经被定义,main()中调用prevnext函数,而该函数的实现在main()之后,所以在main()之前必须添加该函数的声明;

  (2)由运行结果可知,通过函数prevnext调动要改变main()中的实参值,所以prev和next都应为引用型参数;

  (3)由运行结果prev=x-1,而源程序的prev=x,x=x-1,这里涉及运算符的优先级问题。


二、简单应用题

  请编写一个函数fun(intx,intn),该函数返回x的n次幂的值,其中x和n都是非负整数。x的n次幂的计算方法是1与x相乘n次,如x的20次幂的计算为1与x相乘20次。

  注意:部分源程序已存在文件kt15_2.cpp中。

  请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。

  如输入3和4,输出结果如下:

  34

  81

  文件kt15_2.cpp清单如下:

  #include<iostream.h>

  doublefun(intx,intn)

  {

  }

  voidmain()

  { intx,n;

  cin>>x>>n;

  cout<<fun(x,n)<<endl; }

  【参考答案】

  if(x==0) return 0;

  if(n==0) return 1;

  int y=1;

  for(int i=0;i<n;i++) y*=x;

  return y;

  【试题解析】

  本题主要考查用基本控制结构与函数知识解决实际问题的能力。求x的n次幂是数学中常用的运算,编程时在x=0与n=0时需特殊处理。


三、综合应用题

  使用VC6打开考生文件夹下的工程kt15_3。此工程包含一个kt15_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。

  (1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a。请在注释“//**1**”之后添加适当的语句。

  (2)定义类A1的构造函数,该构造函数有两个整型参数x和y,在构造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值传入。请在注释“//**2**”后添加适当的语句。

  (3)定义类A2的构造函数,该构造函数有三个整型的参数x,y和z,在构造函数中请将x赋值给数据成员c,将y和z分别赋值给

  基类A1构造函数的参数x和y。请在注释“//**3**”之后添加适当的语句。

  (4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在输出时以空格隔开。请在注释“//**4**”之后添加适当的语句。

  注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

  程序输出结果如下:

  9

  6

  962

  源程序文件kt15_3.cpp清单如下:

  #include<iostream.h>

  classA

  { inta;

  public:

  //**1**

  intgeta(){returna;} };

  classA1:publicA

  { intb;

  public:

  //**2**

  intgetb(){returnb;} };

  classA2:publicA1

  { intc;

  public:

  //**3**

  voidshow()

  { //**4** } };

  voidmain()

  { A2a(2,6,9);

  cout<<a.geta()<<endl;

  cout<<a.getb()<<endl;;

  a.show(); }

  【参考答案】

  (1)A(int x) {a=x;}

  (2)A1(int x,int y) : A(y){b=x;}

  (3)A2(int x,int y,int z):A1(y,z){c=x;}

  (4)cout<<geta()<<" "<<getb()<<" ";

  cout<<c<<"\n"; 

  【试题解析】

  本题主要考查对继承和派生的掌握程度,涉及派生类构造函数的定义、基类成员函数的访问等内容。派生类的构造函数的格式请牢记,

  另外派生类构造函数及析构函数的执行顺序也是需要掌握的。

就业数据资源平台