份c++二级 机试题目及详细答案十一套.docx

上传人:b****6 文档编号:3786158 上传时间:2022-11-25 格式:DOCX 页数:58 大小:40KB
下载 相关 举报
份c++二级 机试题目及详细答案十一套.docx_第1页
第1页 / 共58页
份c++二级 机试题目及详细答案十一套.docx_第2页
第2页 / 共58页
份c++二级 机试题目及详细答案十一套.docx_第3页
第3页 / 共58页
份c++二级 机试题目及详细答案十一套.docx_第4页
第4页 / 共58页
份c++二级 机试题目及详细答案十一套.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

份c++二级 机试题目及详细答案十一套.docx

《份c++二级 机试题目及详细答案十一套.docx》由会员分享,可在线阅读,更多相关《份c++二级 机试题目及详细答案十一套.docx(58页珍藏版)》请在冰豆网上搜索。

份c++二级 机试题目及详细答案十一套.docx

份c++二级机试题目及详细答案十一套

第一套:

一、改错题

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

  0149162536496481

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

  #include

  templateclassVector

  {Tvec[N];

  public:

  voidset(intpos,Tval);

  Tget(intpos);

  /*****************found*****************/}

  templatevoidVector:

:

set(intpos,Tval)

  {vec[pos]=val;}

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

  templateVector:

:

get(intpos)

  {returnvec[pos];}

  intmain()

  {Vectorv;

  inti=0;

  doubled=0.0;

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

  v.set(i,double(i*i));

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

  cout<

  cout<

  /*****************found*****************/}

  【参考答案】

  

(1)在“}”后添加分号。

  

(2)将templateVector:

:

get(intpos)

  改为:

templateTVector:

:

get(intpos)

  (3)将缺少返回值

  改为:

加入return0;

  【试题解析】

  

(1)主要考查对于类定义的理解,即使使用了类模板,在类定义的结尾仍然需要使用分号,这是C++的规定;

  

(2)主要考查是模板类的定义,template是关键字,在<>中间是类型的定义,题目中Vector是一个类的名称,前面应该有该模板的名称,即T,这样才是完整的定义;

  (3)主要考查对函数返回值的掌握,任何返回值类型不为int型的函数最后都必须使用returen语句返回对应类型的值,就算是main函数也不例外。

 

  二、简单应用题

  请编写函数fun(),其功能是计算并输出下列多项式值

  Sn=1+1/1!

+1/2!

+1/3!

+1/4!

+…+1/n!

  例如:

从键盘输入15,则输出为s=2.718282。

  注意:

部分源程序以存在文件kt17_2.cpp中。

  请勿改动主函数main和其他函数中的内容,仅在函数fun的花

  括号中填入所编写的若干语句。

  文件kt17_2.cpp的内容如下:

  #include

  #include

  doublefun(intn)

  {

  }

  voidmain()

  {intn;

  doubles;

  cout<<"Inputn:

"<

  cin>>n;

  s=fun(n);

  cout<<"s="<

  【参考答案】

  doublefun(intn)

  {doublet,sn=1.0;

  inti,j;

  for(i=1;i<=n;i++)

  {t=1.0;

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

  t*=j;

  sn+=1.0/t;}

  returnsn;}

  【试题解析】

  本题解法是通过观察所给的多项式,可以找出该多项式相应的数学规律。

本题中,多项式是一个累加求和的多项式,并且每一项总是比前一项多乘一个整数,所乘整数恰好等于每一项的编号,这样利用循环语句进行阶乘、累加就可以实现功能。

由于函数中出现了"/"的运算,所以最终的函数值要考虑到用double类型。

三、综合应用题

  使用VC6打开考生文件夹下的工程kt17_3。

此工程包含一个kt17_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。

请按要求完成下列操作,将程序补充完整。

  

(1)添加类Letter的带一个参数c的构造函数,c是char型的数据,默认值为“A”,该函数把参数c的值赋给类的保护成员ch,请在注释“//**1**”之后添加适当的语句。

  

(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默认值为0,该函数把参数n的值赋给类的保护成员num,请在注释“//**2**”之后添加适当的语句。

  (3)添加派生类Grid构造函数的定义,传入的参数为char型的c和int型的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加适当的语句。

  (4)完成派生类Grid的友元函数--"<<"运算符重载的定义,使其以格式"[g.ch,g.num]"输出,请在注释“//**4**”之后添加适当的语句。

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

  #include

  classLetter

  {protected:

  charch;

  public:

  //**1**};

  classNumber

  {protected:

  intnum;

  public:

  //**2**};

  classGrid:

publicLetter,publicNumber

  {public:

  //**3**

  friendostream&operator<<(ostream&o,Grid&g);};

  //**4**

  {o<<"["<

  returno;}

  intmain()

  {Gridg(’C’,3);

  cout<<"Gridreference:

"<

  return0;}

  【参考答案】

  

(1)Letter(charc=’A’){ch=c;}

  

(2)Number(intn=0){num=n;}

  (3)Grid(charc=’A’,intn=0):

Letter(c),Number(n){}

  (4)ostream&operator<<(ostream&o,Grid&g)

  【试题解析】

  主要考查对类和派生类的构造函数的定义,以及重载为友元的运算符函数的定义的掌握,其中(3)使用了参数列表进行变量赋值,这是派生类构造函数中经常使用的,(4)对于友元函数在类体外的定义不需要使用作用域符,而ostream类的对象引用可直接使用原来意义的符号“<<”进行输出。

第二套:

 一、改错题

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

  Previous=9,Next=11

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

  #include

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

  intmain()

  {intx=10,y,z;

  prevnext(x,y,z);

  cout<<"Previous="<

  return0;}

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

  voidprevnext(intx,intprev,intnext)

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

  prev=x--;

  next=++x;}

  【参考答案】

  

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

  应添加:

voidprevnext(int,int&,int&);

  

(2)将voidprevnext(intx,intprev,intnext)

  改为:

voidprevnext(intx,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

  doublefun(intx,intn)

  {

  }

  voidmain()

  {intx,n;

  cin>>x>>n;

  cout<

  【参考答案】

  if(x==0)return0;

  if(n==0)return1;

  inty=1;

  for(inti=0;i

  returny;

  【试题解析】

  本题主要考查用基本控制结构与函数知识解决实际问题的能力。

求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

  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<

  cout<

  a.show();}

  【参考答案】

  

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

  

(2)A1(intx,inty):

A(y){b=x;}

  (3)A2(intx,inty,intz):

A1(y,z){c=x;}

  (4)cout<

  cout<

  【试题解析】

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

派生类的构造函数的格式请牢记,

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

第三套:

 

一、改错题

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

  A:

noparameters

  B:

intparameter

  A:

noparameters

  B:

intparameter

  C:

intparameter

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

  #include

  classA

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

  private:

  A(){cout<<"A:

noparameters\n";}

  A(inta){cout<<"A:

intparameter\n";}};

  classB:

publicA

  {public:

  B(inta){cout<<"B:

intparameter\n";}};

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

  classC:

publicB,publicA

  {public:

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

  C(inta):

:

B(a){cout<<"C:

intparameter\n";}};

  voidmain()

  {Bb

(1);

  Cc

(2);}

  【参考答案】

  

(1)将private:

改为:

public:

  

(2)将classC:

publicB,publicA改为:

classC:

publicB

  (3)将C(inta):

:

B(a){cout<<"C:

intparameter\n";}

  改为:

C(inta):

B(a){cout<<"C:

intparameter\n";}

  【试题解析】

  

(1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用;

  

(2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B;

  (3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:

”,而不是“:

:

”;

 二、简单应用题

  编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。

  例如:

n为1000时,函数值应为s=153.909064。

  注意:

部分源程序给出如下。

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

  试题程序:

  #include

  #include

  #include

  doublefun(intn)

  {main()

  {clrscr();

  printf("s=%f\n",fun(1000));}

  【参考答案】

  doublefun(intn)

  {doubles=0.0;

  inti;

  for(i=0;i  /*从0~n中找到既能被3整除同时又能被7整除的数,并将这些数求和*/

  if(i%3==0&&i%7==0)

  s=s+i;

  s=sqrt(s);/*对s求平方根*/

  returns;}

  【试题解析】

  本题的解题思路是:

逐个取得从0~n之间的所有数,对每次取得的数进行条件判断,条件是既能被3整除同时又能被7整除,注意:

这两个条件要求同时成立,因此用到了“&&”运算符。

满足条件,该数就被累加到s中去,所有符合条件的数找完后,用sqrt()函数对s求平方根。

三、综合应用题

  使用VC6打开考生文件夹下的工程kt14_3。

此工程包含一个kt14_3.cpp,其中定义了二维坐标类Coordinate和三维坐标类ThreeDCoord,其中ThreeDCoord类由Coordinate类public派生,但

  两个类的定义并不完整。

请按要求完成下列操作,将程序补充完整。

  

(1)定义类Coordinate的保护数据成员x和y,它们都是int型的数据,代表二维坐标的横纵坐标值。

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

  

(2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在类Coordinate定义体内的声明,Display为二维坐标类的虚函数。

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

  (3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数据成员x和y。

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

  (4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员x和y,c赋值给数据成员z。

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

  输出结果如下:

  [1,2]

  [3,4,5]

  注意:

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

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

  #include

  classCoordinate

  {protected:

  //**1**

  public:

  Coordinate(inta=0,intb=0);

  //**2**};

  Coordinate:

:

Coordinate(inta,intb)

  {//**3**}

  voidCoordinate:

:

Display()const

  {cout<<'['<

  classThreeDCoord:

publicCoordinate

  {intz;

  public:

  ThreeDCoord(inta=0,intb=0,intc=0);

  virtualvoidDisplay()const;};

  //**4**

  voidThreeDCoord:

:

Display()const

  {cout<<'['<

  voidmain()

  {Coordinatec(1,2);

  ThreeDCoordt(3,4,5);

  c.Display();

  t.Display();}

  【参考答案】

  

(1)protected:

  intx;

  inty;

  

(2)virtualvoidDisplay()const;

  (3)x=a;y=b;

  (4)ThreeDCoord:

:

ThreeDCoord(inta,intb,intc):

Coordinate(a,b)

  【试题解析】

  本题主要考查对类数据成员的定义、构造函数、派生类及虚函数的理解,是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<

:

N<

  return0;}

  【参考答案】

  

(1)将staticintn=1;改为:

staticintn;

  

(2)将intn=0;改为:

intA:

:

n=0;

  (3)将cout<

COUT

  【试题解析】

  

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

  

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

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

二、简单应用题

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

  注意:

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

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

  654

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

  文件kt13_2.cpp的内容如下:

  #include

  intsortnum(intnum)

  {

  }

  voidmain()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1