1、国家二级( C+)机试模拟试卷 80及答案与解析 一、选择题 1 下列关于 this指针的描述中,正确的是 ( )。 ( A)类的成员函数都有 this指针 ( B)类的友元函数都有 this指针 ( C)任何与类相关的函数都有 this指针 ( D)类的非静态成员函数都有 this指针 2 在下列枚举符号中,用来表示 “相对于当前位置 “文件定位方式的是 ( )。 ( A) ios_base:cur ( B) ios_base:beg ( C) ios_base:out ( D) ios_base:end 3 必须用一对大括号括起来的程序段是 ( )。 ( A) switch语句中的 cas
2、e标号语句 ( B) if语句的分支 ( C)循环语句的循环体 ( D)函数的函数体 4 在下列关键字中,不能用来表示继承方式的是 ( )。 ( A) private ( B) static ( C) public ( D) protected 5 下列叙述中正确的是 ( )。 ( A)循环队列是队列的一种链式存储结构 ( B)循环队列是队列的一种顺序存储结构 ( C)循环队列是非线性结构 ( D)循环队 列是一种逻辑结构 6 下列叙述中,错误的是 ( A) true是一个逻辑型常量 ( B) x是一个字符型常量 ( C) 100是一个 int常量 ( D) 2.71828是一个 double
3、常量 7 有如下类定义: class Cup public: void SetPrice(double val) price=val; private: double price; ; 若有定义语句 “Cup myCup;“,为了调用 SetPrice成员函数,下列选项中正确的是 ( A) Cup:SetPrice(5.8); ( B) Cup.SetPrice(5.8); ( C) myCup:SetPrice(5.8); ( D) myCup.SetPrice(5.8); 8 一棵二叉树中共有 80个叶子结点与 70个度为 1的结点,则该二叉树中的总结点数为 ( A) 219 ( B) 2
4、29 ( C) 230 ( D) 231 9 已知一运算符函数没有参数。下列关于该运算符函数的表述中错误的是 ( A)该运算符函数是成员函数 ( B)该运算符是一元运算符 ( C)由于无参数,使用该运算符时不需要操作数 ( D)该运算符不是后缀 +或后缀 - 10 有如下程序: #include using namespace std; class TV public: TV(int s=41):size(s) void Print() cout using namespace std; class Base int m; public: Base() cout using namesapce
5、 std; int return r; int main() int a=1,3,5,7; cout using namespace std; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx) x=xx; void SetY(int yy) y=yy; private: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius() return radius; private: void SetRadi
6、us(int r) radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1); / c1.SetY(2); / c1.SetRadius(10); / cout using namespace std; int fun1(int x) return +x; int fun2(int int main() int a=0,b=0,c=0; c=fun1(a)+fun2(b); coutopen(“file.dat“); 34 在下列原型所示的 C+函数中,按 “传值 “方式传递参数的是 ( )。 ( A) voidf1(intx);
7、( B) voidf2(int*x); ( C) voidf3(constint*x); ( D) voidf4(int 35 有如下程序: #include using namespace std; class Base public: void output() coutoutput(); ptr-Print(); delete ptr; return 0; 执行这个程序的输出结果是 ( )。 ( A) 1B ( B) 1D ( C) 2B ( D) 2D 36 有如下程序: #include using namespace std; int main() int sum; for(int
8、 i = 0; i USingnamespacestd; classMyClasS public: ERROR*found* MyClass(inti=0)value=i count+; voidPrint() cout usingnamespacestd; classArray public: Array(unsignedintS) Size=s; num=0; a=newintS; virtual Array()deletea; virtualvoidadd(inte) if(num=size) return; inti=0, j; while(ii; j-) *found* _; *fo
9、und* _; break; i+; if(i=num) ai=e; num+; ; voidfun(Array (3)obj2.Print(); 【试题解析】 (1)主要考查考生对构造函数的掌握 ,使用成员列表初始化给常变量赋初始值。 (2)主要考查考生对静态数据成员的掌握 ,静态数据成员的赋值不需要使用 static关键字。 (3)主要考查考生对成员函数调用的掌握 ,MyClass是类名 ,不能调用函数 ,应使用对象obj2调用函数。 三、简单应用题 42 【正确答案】 (1)anum=e; (2)Array(s) (3)aj=aj1 (4)ai=e 【试题解析】 (1)考查的是虚函数 v
10、irtualvoidadd(inte)的定义,即添加一个整型数e到 anum中。 (2)主要考查的是 Array类的派生类 SortedArray 类的构造函数的定义,定义之前要对基础类初始化。 (3)因为 SortedArray 类是排序类,所以数组 a中的元素要从小到大排序。在if(earrayj)如果 arragiarrayj,把 arrayi与 arrayi进行对换 inttemp;定义一个临时变量 temp temp=arrayi;把 arrayi值放到变量 temp arrayi=arrayj;把 arrayj值赋给 arrayi arrayj: temp;把变量 temp存放在值 arrayj中 for(inta=0; alength; +a)遍历数组,把数组中的所有元素打印到控制台上coutarraya“;