1、国家二级 C+机试(操作题)模拟试卷 479及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,该工程含有一个源程序文件proj1 cpp。其中位于每个注释 “ ERROR*found*”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为: The value is10 注意:只修改注释 “ ERROR*found*冰 ”的下一行语句,不要改动程序中的其他内容。 proj1 cpp #include iostream using namespace std; class MyClasS int value; public: ERROR*found* void
2、 MyClasS(int val): value(val) int GetValue( )constreturnvalue; void SetValue(int val); ; ERROR*found* inline void SetValue(int val) value=val; int main( ) MyClass obj(0); obj SetValue(10); ERROR*found* 下列语句功能是输出 obj的成员 value的值 cout “The valme is“ obj value endl; return0; 二、简单应用题 2 请打开考生文件夹下的解决方案文件 p
3、roj2,其中有向量基类 VectorBase、向量类 Vector和零向量类 ZeroVector的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。该程序正确输出结果应为: (1, 2, 3, 4, 5) (0, 0, 0, 0, 0, 0) 注意:只能在横线处填写适当的代码,不要改动 程序中的其他内容,也不要删除或移动 “ *found*”。 #include iostream using namespace std; class VectorBase向量基类,一个抽象类 int len; public: VectorBase(int len): len(len) int le
4、ngth( )constreturnlen; 向量长度,即向量中元素的个数 virtual double getElement(inti)const=0;取第 i个元素的值 virtual double sum( )const= 0;求所有元素和 void show( )const显示向量中所有元素 cout “(“; for(int i=0; i length( )-1; i+) cout getElement(i) “, “; *found* cout _ “)“ endl;显示最后一个元素 ; class Vector: public VectorBase 向量类 double*val;
5、 public: Vector(int len, double v =NULL): VectorBase(len) val=new doublelen; for(int i=0; i len; i+) vali=(v=NULL?0 0: vi); *found* Vector( )_; double getElement(int index) constreturn valindex; double sum( )const double s=0 0; *found* for(int i=0; i length( ); i+) _; return s; ; class ZeroVector: p
6、ublic VectorBase零向量类 public: ZeroVector(int len): VectorBase(len) *found* double getElement(int index)const_; double sum( )constreturn0 0; ; int main( ) VectOrBaSe*v; double d =1, 2, 3, 4, 5; v=new Vector(5, d); v- show( ); defete v; v=new ZeroVector(6); v- show( ); delete v; return0; 三、综合应用题 3 请打开考
7、生文件夹下的解决方案文件 proj3,其中使用友元函数访问类的私有数据成员,求出两个数据成员的大于 1的最小公因子。请编写友员函数 FnFun,使其输出结果为: Common denominator is2 要求:补充编制的内容写在 “ *333*”与 “*666*”之间,不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为obj文件,并且在本程序中调用。 proj3 h class FriFunClass int a, b; public: FriFunClass(int i, int j)a=i; b=j; friend i
8、nt FriFun(FriFunClass x);友元函数 , void writeToFile(const char*); proj3 cpp #include iostream using namespace std; #include“prj3 h“ int FriFun(FriFunClass x) *333* 由于函数 FriFun( )是类 FriFunClass的友元函数,所以它可以直接访问 a和 b *666* int main( ) FriFunClass n(10, 20); if(FriFun(n) cout “Common denominatoris“ FriFun(n
9、) “ n“; else cout “No common denominator n“; writeToFile(“ “); return0; 国家二级 C+机试(操 作题)模拟试卷 479答案与解析 一、基本操作题 1 【正确答案】 (1)MyClass(int val): value(val) (2)void MyClass: SetVlue(int val)value=val; (3)cout “The value is“ obj GetValue( ) endl: 【试题解析】 (1)考查构造函数,定义构造函数时不能使用 void,直接使用MyClass(int val)即可。 (2)
10、主要考查成员函数定义,类的成员函数定义时要使用前缀 MyClass,而 inline是内联函数的关键字,在此是错误的,应该删掉 inline并在函数名前加上前缀MyClass,即 void MyClass: SetVMue(int val)value=val; 。 (3)考查成员函数调用, value是私有成员,在主函数中不能直接调用 value,可以使用成员函数 GetValue( )来得到 value的值。 二、简单应用题 2 【正确答案】 (1)getElement(length( )-1) (2)delete val (3)s+=vali (4)return0 0; 【试题解析】 (1
11、)主要考查考生对成员函数的掌握,题目要求显示最后一个元素。前面有纯虚函数 virtual double getElement(int i)const=0,因此可以直接调用getElement函数来取得最后一个元素,注意最后一个元素位置是 Length( )-1而不是 Length( )。 (2)主要考查考生对析构函数的掌握,前面定义了类的私有成员 *val,因此析构函数要释放 val,使用 delete语句完成。 (3)主要考查考生对 for循环的掌握,由函数名 double sum( )const可知,该函数要求元素之和, for循环语句的作用是遍历整个数组,在此使用语句 s+=vali完成
12、程序。 (4)主要考查考生对成员函数的掌握,由该类的注释:零向量类,可以了解到该类的元素都为零,因此无论要取第几个元素都返回 0,由于数据类型为 double,所以为 return0 0。 三、综合应用题 3 【正确答案】 int min=x a x b?x a: x b;此处为取出 x a与 x b中的最小值 for(int i=2; i =min; i+)从 i到 min遍历数组 if(x a i=0&x b i=0) 如 i能同时整除 x a来的 x b,则仅回 i return i; return-1; 【试题解析】 主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于 1的最小公因子,从 2开始往上算,因此要同时可以被两个私有成员整除,这里用取余符号完成,取余为 0即为整除。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1