1、国家二级( C+)机试模拟试卷 63及答案与解析 一、选择题 1 一间宿舍可住多个学生,则实体宿舍和学生之间的联系是 ( )。 ( A)一对一 ( B)一对多 ( C)多对一 ( D)多对多 2 关于运算符重载,下列表述中正确的是 ( )。 ( A) C+已有的任何运算符都可以重载 ( B)运算符函数的返回类型不能声明为基本数据类型 ( C)在类型转换符函数的定义中不需要声明返回类型 ( D)可以通过运算符重载来创建 C+中原来没有的运算符 3 有如下程序: #include using namespace std; class B public: virtual void show() co
2、utshow(); void fun2(B void fun3(B b) b.show(); int main() B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); delete p; return 0; 执行这个程序的输出结果是 ( )。 ( A) BBB ( B) BBD ( C) DBB ( D) DBD 4 下列选项中属于面向对象设计方法主要特征的是 ( )。 ( A)继承 ( B)自顶向下 ( C)模块化 ( D)逐步求精 5 建立一个类对象时,系统自动调用 ( A)析构函数 ( B)构造函数 ( C)静态函数 ( D)友元函数 6 有如下模
3、板声明: template class A; 下列声明中,与上述声明不等价的是 ( A) templateclassA; ( B) templateclassA; ( C) templateclassA; ( D) templateclassA; 7 下列选项中,正确的 C+表达式是 ( A) a1+ ( B) b+2 ( C) 3=c ( D) d-=4 8 下列关键字中,用来表示继承方式的是 ( A) static ( B) const ( C) virtual ( D) protected 9 程序流程图中带有箭头的线段表示的是 ( )。 ( A)图元关系 ( B)数据流 ( C)控制流
4、 ( D)调用关系 10 已知有数组定义 char a34; 下列表达式中正确的是 ( A) a0=“AAA“ ( B) strcpy(a1,“BBBBB“) ( C) a21=“CC“ ( D) a11=a11 11 下列关于派生类构造函数和析构函数的表述中,错误的是 ( A)下列关于派生类构造函数和析构函数的表述中,错误的是 ( B)派生类的构造函数会隐含调用基类的构造函数 ( C)在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 ( D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 12 下面不能作为软件设计工具的是 ( A) PAD图 ( B)程序流
5、程图 ( C)数据流程图 (DFD图 ) ( D)总体结构图 13 下列选项中,不是重载函数调用时选择依据的是 ( A)参数个数 ( B)参数类型 ( C)参数名称 ( D)函数名称 14 有如下类声明: class Pam int k; public: Pam(int n):k(n) void show()const; ; 若要在类体外给出成员函数 show的定义,下列定义中正确的是 ( A) voidshow()constcout usingnamespacestd; classMyClass inti; friendvoidIncrement(MyClass答案为 C。 17 【正确答案
6、】 A 【试题解析】 getline(istream ; 所以 B选项正确。 39 【正确答案】 B 【试题解析】 本题考查实型变量, 4.2默认为 double, 4.2f为 float型的、 4L为long型的。所以 B选项正确。 40 【正确答案 】 B 【试题解析】 setprecision 设置实数的精度; setw 设置字段宽度; setfill 填充字符; showpoint强制输出浮点数的小数点和尾数 0;答案为 B。 二、基本操作题 41 【正确答案】 (1)MyClass(inti=0): NUM(0) (2)voidIncrement(MyClass&f)f _i+; (
7、3)Increment(obj); 【试题解析】 (1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行, 并且要使用关键字 const修饰。该题的前一条语句 constintNUM;,说明 NUM是常量数据成员。 (2)主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分: friendvoidIncrement(MyClass&f);,返回类型为 void,函数参数为 MyClass&f;再比较出错的语句: voidIncrement()f _i+; ,错误在于该函数没有参数,应把 MyClass&f 填在括
8、号内。 (3)主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加 类名及作用域,只需要像调用普通函数一样即可。 三、简单应用题 42 【正确答案】 (1)i*2一 1 (2)_rows (3)_cols (4)CharShape&cs 【试题解析】 (1)考查 for循环语句,该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标 i代表行数,那么下标 j就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即j=i*2 1;。 (2)考查 for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中 可
9、以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标 i不大于行数即可。 (3)考查 for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标 j不大于列数即可。 (4)主要考查考生对虚函数的掌握,该语句所在的函数是普通函数 fun,题目要求为fun函数添加形参。从函数体中可以知道形参名为 cs,那么形参的类型是什么呢 ?就是抽象类 CharShape,因此要使用 CharShape&cs 才可以实现题目 要求输出的内容。 四、综合应用题 43 【正确答案】 for(inti
10、=0; iM; i+) for(intj=0; jN; j+) sum setElement(i, j, m1 getElement(i, j)+m2 getElement(i, j); 【试题解析】 主要考查考生对重载运算符的掌握,函数 operator+的功能是将形参中两个 Matrix 对象相加,返回一个新的 Matrix对象,新对象的二维数组 array的元素是形参中两个对象的二维数组 array逐个元素之和。由于 Matrix的 array是私有成员,所以不能通过对象直接对 array进行操作,必须通过成员函数getElement来获取两个对象 array数组元素的值,再通过成员函数 setElement来完成相加功能,结果保存在临时对象 sum中,并返回。