国家二级C++机试(操作题)模拟试卷347
基本操作题
1.使用VC6打开考生文件夹下的源程序文件modi1.cpp,请修改程序中的错误,使程序能得出正确的结果:
num:0
num:1
num:10
注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在
//******error******的下面。
#include
int i=10;
Class TestClass
{
public:
TestClass(int i)
{
cout<<\\
(1)this->i=i+1;或TestClass::i=i+1:或(*this).i=i+1:
(2)TestClass print(0);
(3)cout<<\\
解析:(1)打开modi1.cpp,调试程序,显示错误提示为第二标识下“modi1.cpp(22):error C2512:TestClass’:no appropriate default constructor available”,主函数中首先调用的就是第2个标识下的TestClass print函数,构造函数的名字和类的名字是一样的,而程序中给出的“TestClass print;”没有给出参数,所以程序调试时无法确定调用的函数。根据TestClass构造函数“TestClass(int i)”的定义,应该存在int型参数,并且题目要求第一次输出的值为“0”,所以第2个标识正确的调用函数为“TestClass print(0);”。
(2)运行,发现第一次的输出正确,但是第二次的输出值为“-858993460”,并不是题目中要求的“1”。在主函数中, 可知第二次输出调用的是“print.Print();”,即类TestClass的成员函数“Print()”。成员函数Print的定义“void Printoconst”中的输出语句为“cout<<”num:”<<i<i=i+l;”或“TestClass::i=i+1;”或“(*this).i=i+1;”。
(3)主函数中通过“cout<<\\
简单应用题
2.使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使函数fun()实现以下功能:找出一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后开方,如果开方后的结果满足条件,即是结果。
#include
#include
Void fun()
{
}
int main()
{
fun();
return 0;
}
long int i,x,y,z;
for(i=1;i<100000;i++)
{
x=Sqrt(i+100);
//x为加上100后开方后的结果
y=sqrt(i+268);
//y为再加上268后开方的结果
if(x*x==i+100&&y*y==i+268)
//如果一个数的平方根的平方等于该数。
说明此数是完全平方数
cout<<i<<endl;
}
解析:(1)利用循环找到满足条件的整数。
(2)首先计算X加上100和Y加上268的开方。
(3)一个数的平方根的平方等于该数,说明此数是完全平方数。
综合应用题
3.使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:
(1)声明类objA1,请在注释//********1********后添加适当的语句。
(2)为类objA0增加友元函数func(),请在注释//********2********后添加适当的语句。
(3)为类objA1增加友元函数func(),请在注释//********3********后添加适当的语句。
(4)函数func()返回objA1对象中的变量和objA0的静态变量的乘积,请在注释//********4********后添加适当的语句。
注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。
#include
//********1********
class objA0
{
private:
static int m A0;
//********2********
};
int objA0..m_A0=10;
class objA1
{
private:
int m_A1;
//********3********
public:
objA1(int i)
{
m_A1=i;
}
};
int func(objA1&obj)
{
//********4********
}
int main()
{
objA1 obj 0(10);
cout<<func(obj0)<<endl;
return 0;
}
(1)添加语句:class objA1;
(2)添加语句:friend int func(objA1&obj);
(3)添加语句:friend int func(objA1&obj);
(4)添加语句:return obj.m_A1*objA0::m_A0;
解析:(1)类的声明格式为:“class;”,因此第1个标识下应添加“class objA1;”。
(2)按照友元的定义格式,友元函数是在类声明中由关键字friend修饰的非成员函数,func函数在类外部给出了具体的实现形式,即“int func(objA1&obj)”,因此第2个标识下应添加“friend int func(objA1&obj);”,这里参数是0bjA1类对象obj。
(3)第3个标识下和题目2要求一样,均是声明友元函数,因此第2标识下应添加“friend intfunc(objA1&obj);”。
(4)通过参数obj对象可以直接访问obj.m A1,objA0的静态变量m_A0是所有对象的共享成员,其访问形式为:objA0::m A0,因此第4个标识下应添加“return obj.m_A1*objA0::m_A0;”。
本文档预览:3600字符,共3514字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载