份c++二级 机试题目及详细答案十一套Word下载.docx
- 文档编号:16692421
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:58
- 大小:40KB
份c++二级 机试题目及详细答案十一套Word下载.docx
《份c++二级 机试题目及详细答案十一套Word下载.docx》由会员分享,可在线阅读,更多相关《份c++二级 机试题目及详细答案十一套Word下载.docx(58页珍藏版)》请在冰豆网上搜索。
get(intpos)
改为:
templateTVector:
(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的内容如下:
doublefun(intn)
{
}
voidmain()
{intn;
doubles;
Inputn:
cin>
n;
s=fun(n);
s="
S<
doublefun(intn)
{doublet,sn=1.0;
inti,j;
for(i=1;
=n;
{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清单如下:
classLetter
{protected:
charch;
//**1**};
classNumber
intnum;
//**2**};
classGrid:
publicLetter,publicNumber
{public:
//**3**
friendostream&
operator<
(ostream&
o,Grid&
g);
};
//**4**
{o<
["
G.CH<
"
G.NUM<
]"
returno;
{Gridg(’C’,3);
Gridreference:
G<
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&
(ostream&
o,Grid&
g)
主要考查对类和派生类的构造函数的定义,以及重载为友元的运算符函数的定义的掌握,其中(3)使用了参数列表进行变量赋值,这是派生类构造函数中经常使用的,(4)对于友元函数在类体外的定义不需要使用作用域符,而ostream类的对象引用可直接使用原来意义的符号“<
”进行输出。
第二套:
一、改错题
使用VC6打开考生文件夹下的工程kt15_1,此工程包含一个源程序文件kt15_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:
Previous=9,Next=11
源程序文件kt15_1.cpp清单如下:
#include<
iostream.h>
{intx=10,y,z;
prevnext(x,y,z);
Previous="
y<
Next="
z<
endl;
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清单如下:
doublefun(intx,intn)
{intx,n;
x>
fun(x,n)<
if(x==0)return0;
if(n==0)return1;
inty=1;
for(inti=0;
i++)y*=x;
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清单如下:
classA
{inta;
//**1**
intgeta(){returna;
}};
classA1:
publicA
{intb;
//**2**
intgetb(){returnb;
classA2:
publicA1
{intc;
voidshow()
{//**4**}};
{A2a(2,6,9);
a.geta()<
a.getb()<
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<
geta()<
"
getb()<
c<
\n"
本题主要考查对继承和派生的掌握程度,涉及派生类构造函数的定义、基类成员函数的访问等内容。
派生类的构造函数的格式请牢记,
另外派生类构造函数及析构函数的执行顺序也是需要掌握的。
第三套:
使用VC6打开考生文件夹下的工程kt14_1,此工程包含一个源程序文件kt14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果为:
A:
noparameters
B:
intparameter
C:
源程序文件kt14_1.cpp清单如下:
private:
A(){cout<
A:
noparameters\n"
A(inta){cout<
intparameter\n"
classB:
B(inta){cout<
B:
classC:
publicB,publicA
C(inta):
B(a){cout<
C:
{Bb
(1);
Cc
(2);
(1)将private:
public:
(2)将classC:
publicB,publicA改为:
classC:
publicB
(3)将C(inta):
intparameter\n"
C(inta):
(1)一个类的构造函数和析构函数可以由系统自动生成,也可以由用户提供,但构造函数和析构函数都必须是该类的公有成员函数,否则编译时将出现错误,不能被调用;
(2)A已经是B的基类,C公有继承B,A也就成为了C的基类,根据程序的运行结果可知,C是要公有继承B;
(3)派生类的构造函数,初始化基类的参数,调用基类的构造函数时,使用符号“:
”,而不是“:
”;
编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。
n为1000时,函数值应为s=153.909064。
部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
{main()
{clrscr();
printf("
s=%f\n"
fun(1000));
{doubles=0.0;
inti;
i<
N;
I++)<
p>
/*从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型的数据,代表二维坐标的横纵坐标值。
(2)根据类Coordinate定义后的成员函数Display的实现,补充该函数在类Coordinate定义体内的声明,Display为二维坐标类的虚函数。
请在注释“//**2**”之后添加适当的语句。
(3)完成二维坐标类Coordinate的构造函数,将参数a和b分别赋值给数据成员x和y。
(4)根据ThreeDCoord类构造函数的声明,补充ThreeDCoord构造函数的实现,参数a和b通过调用基类的构造函数来初始化基类的数据成员x和y,c赋值给数据成员z。
输出结果如下:
[1,2]
[3,4,5]
源程序文件kt14_3.cpp清单如下:
classCoordinate
Coordinate(inta=0,intb=0);
Coordinate:
Coordinate(inta,intb)
{//**3**}
voidCoordinate:
Display()const
{cout<
'
['
X<
Y<
]'
classThreeDCoord:
publicCoordinate
{intz;
ThreeDCoord(inta=0,intb=0,intc=0);
virtualvoidDisplay()const;
voidThreeDCoord:
Z<
{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
源程序文件kt13_1.cpp清单如下:
classA{
staticintn=1;
A(){n++;
};
~A(){n--;
intn=0;
intmain(){
Aa;
Ab[3];
A*c=newA;
c=&
a;
C.N<
N<
(1)将staticintn=1;
staticintn;
(2)将intn=0;
intA:
n=0;
(3)将cout<
ENDL;
COUT<
n<
(1)在类的声明中只能对静态数据成员进行引用性声明,不能进行静态数据成员初始化;
(2)由于静态数据成员是类的成员,所以在初始化时必须限定它所属的类;
(3)c为类的对象指针,访问类成员函数时使用符号“->
”,而不能用“.”。
二、简单应用题
请编写一个函数sortnum(intnum),参数num是一个三位的整数,该函数将num的百位、十位和个位的数字进行重排,并返回由上述的三个数字组成的最大的三位数。
部分源程序已存在文件kt13_2.cpp中。
如输入456后,输出结果如下:
654
请勿修改主函数main和其他函数中的内容,仅在函数sortnum的花括号中填写若干语句。
文件kt13_2.cpp的内容如下:
intsortnum(intnum)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 份c+二级 机试题目及详细答案十一套 c+ 二级 试题 详细 答案 十一