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

一、改错题

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

  5

  5

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

  #include

  classA{

  public:

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

  staticintn=1;

  A(){n++;};

  ~A(){n--;}; };

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

  intn=0;

  intmain(){

  Aa;

  Ab[3];

  A*c=newA;

  c=&a;

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

  cout<  cout<  return0; }

  【参考答案】

  (1)将static int n=1;改为:static int n;

  (2)将int n=0;改为:int A::n=0;

  (3)将cout<n<  【试题解析】

  (1)在类的声明中只能对静态数据成员进行引用性声明,不能进行静态数据成员初始化;

  (2)由于静态数据成员是类的成员,所以在初始化时必须限定它所属的类;

  (3)c为类的对象指针,访问类成员函数时使用符号“->”,而不能用“.”。


二、简单应用题

  请编写一个函数sortnum(intnum),参数num是一个三位的整数,该函数将num的百位、十位和个位的数字进行重排,并返回由上述的三个数字组成的最大的三位数。

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

  如输入456后,输出结果如下:

  654

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

  文件kt13_2.cpp的内容如下:

  #include

  intsortnum(intnum)

  {

  }

  voidmain()

  { intnum;

  intresult=0;

  cout<<"请输入一个三位数";

  cin>>num;

  cout<  【参考答案】

  int number[3],i,j,temp;

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

  { number[i]=num;

  num=num/10; }

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

  { for (j=i+1;j<3;j++)

  if (number[j]<=number[i])

  { temp=number[j];

  number[j]=number[i];

  number[i]=temp; } }

  num=number[2]*100+number[1]*10+number[0];

  return num;

  【试题解析】

  本题主要考查对基本控制结构和数组的访问,以及根据实际需要建立模型,对数字进行排序的能力,答案中采用的是冒泡排序法。请注意程序中数组下标的范围和两层for循环嵌套中循环变量的取值情况。


三、综合应用题

  使用VC6打开考生文件夹下的工程kt13_3。此工程包含一个kt13_3.cpp,其中定义了类Person,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

  (1)定义类Person的私有数据成员forename、

  surname和money,forename和surname都是char型的指针数据,money是double型的

  数据。请在注释“//**1**”之后添加适当的语句。

  (2)完成类Person的带三个参数的构造函数Person(char*f,char*s,doublem),分别为forename和surname申请新的空间来存储参数f和s指针指向的内容,注意空间的大小,最后把参数m的值赋给money,请在注释“//**2**”之后添加适当的语句。

  (3)完成类Person的析构函数的定义,把forename和surname指向的空间释放,请在注释“//**3**”之后添加适当的语句。

  (4)完成类Person的成员函数display的定义,使其以格式"fornamesurnamehasmoney"的形式输出内容,请在注释“//**4**”之后添加适当的语句。

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

  输出结果如下:

  RichardBerkhas1000.56

  Pressanykeytocontinue

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

  #include

  #include

  classPerson

  { private:

  //**1**

  doublemoney;

  public:

  Person(char*f,char*s,doublem);

  ~Person();

  voiddisplay(); };

  Person::Person(char*f,char*s,doublem)

  { //**2**

  strcpy(forename,f);

  surname=newchar[strlen(s)+1];

  strcpy(surname,s);

  money=m; }

  Person::~Person()

  { //**3** }

  voidPerson::display()

  { //**4** }

  voidmain()

  { Personp("Richard","Berk",1000.56);

  p.display(); }

  【参考答案】

  (1)char *forename;

  char *surname;

  (2)forename = new char[strlen(f)+1];

  (3)delete []forename;

  delete []surname;

  (4)cout

就业数据资源平台