1、国家二级( C+)机试模拟试卷 112及答案与解析 一、选择题 1 有如下程序: #include using namespace std; int main() int *p; *p = 9; cout #include using namespace std; class MyBag public: MyBag(string br=“ABC“):brand(br) cout using namespace std; void fun(int i) cout using namespace std; class AA char c; public: AA():c(X) AA(char ch)
2、:c(ch) AA(AA 若执行函数调用表达式 P(1.3,2),函数 P被调用的次数是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 17 若目前 E盘根目录下不存在 data.txt文件,则下列打开文件方式不会自动创建data.txt文件的是 ( A) ifstreamfin;fin.open(“e:data.txt“,ios_base:in); ( B) fstreamfio;fio.open(“e:data.txt“,ios_base:out); ( C) ofstreamfout;fout.open(“e:data.txt“,ios_base:out); ( D) ofst
3、reamfout;fout.open(“e:data.txt“,ios_base:app); 18 若有函数原型声明为 “voidfun(int*x,int“,下列叙述中,错误的是 ( A)调用函数 fun时必须给出个实参 ( B)函数 fun中有 1个指针形参 ( C)函数 fun中有 1个形参有默认值 ( D)函数 fun中有 1个引用形参 19 有如下类定义: class Pet char name30; public: Pet(char * n) strcpy(name, n); void bark() coutbark() ( D) ( 则数值为 9的表达式是 ( )。 ( A) *
4、p+9 ( B) *(p+8) ( C) *p+=9 ( D) p+8 21 有如下类定义: class AA int a; Public: AA(int n=0):a(n) ; class BB :public AA public: BB(int n)_ ; 其中横线处的缺失部分是 ( )。 ( A) :a(n) ( B) :AA(n) ( C) a(n); ( D) a=n; 22 在软件开发中,需求分析阶段产生的主要文档是 ( )。 ( A)软件集成测试计划 ( B)软件详细设计说明书 ( C)用户手册 ( D)软件需求规格说明书 23 已知函数 f 的原型为 void f(int 变量
5、 x、 y的定义是 int x; double y; 则下列调用该函数的语句中正确的是 ( A) f(x, ( B) f(x,y); ( C) f( ( D) f( 24 下列关于函数模板的叙述中,错误的是 ( A)从模板实参表和从模板函数实参表获得信息矛盾时,以模板实参的信息为准 ( B)对于常规参数所对应的模板实参,任何情况下都不能省略 ( C)虚拟类型参数没有出现在模板函数的形参表中时,不能省略模板实参 ( D)模板实参表不能为空 25 若 x和 y是程序中的两个整型变量,则下列 if语句中正确的是 ( A) if(x!=0)y=1;elsey=2; ( B) if(x!=0)y=1el
6、sey=2; ( C) if(x!=0)theny=1elsey=2; ( D) ifx!=0y=1;elsey=2; 26 有如下类定义: class Cup public: void SetPrice(double val=5.8); double GetPrice() return price; double GetPrice() const return price; private: double price; ; void Cup:SetPrice(double val) price=val; 下列关于类中成员函数的叙述中,错误的是 ( A)成员函数 SetPrice不是内联函数
7、( B)成员函数 SetPrice的形参 val具有默认值 ( C)成员函数 GetPrice可以重载 ( D)类中没有对成员函数 GetPrice进行重载 27 对长度为 n的线性表作快速排序,在最坏情况下,比较次数为 ( A) n ( B) n-1 ( C) n(n-1) ( D) n(n-1)/2 28 有如下函数定义: void swap(int a, int a=b; b=c; 若执行语句序列 int x = 0, y = 1; swap(x, y); 则变量 x和 y的值分别是 ( A) 0和 0 ( B) 0和 1 ( C) 1和 0 ( D) 1和 1 29 有如下类声明和函数
8、声明 class Base int m; public: int n; protected: int p; ; class Derived: public Base public: int k; ; void f(Derived d); 则在函数 f中通过 d可访问的数据成员包括 ( A) n ( B) n和 k ( C) n、 k和 p ( D) n、 k、 p和 m 30 有如下程序: #include using namespace std; void fun(int i) cout using namespace std; class Base int m; public: Base(
9、) cout double 由此可知 ( )。 ( A)这可能是一个函数模板的声明 ( B)这可能是一个类模板的声明 ( C)这既可能是一个函数模板的声明,也可能是一个类模板的声明 ( D)这肯定是一个错误的模板声明 37 下列关于运算符重载的叙述中正确的是 ( A)跟普通函数一样,可以为重载的运算符函数的参数设置默 认值 ( B)通过重载,可以改变一个运算符原有的优先级和操作数个数 ( C)只能重载 C+中已经有的运算符,不能定义新运算符 ( D) C+中已有的运算符都可以重载 38 下列关于模板形参的叙述中,错误的是 ( A)模板形参表必须在关键字 template之后 ( B)模板形参表
10、必须用括弧 ()括起来 ( C)可以用 class修饰模板形参 ( D)可以用 typename修饰模板形参 39 下列因素中,对 C+编译器区分重载函数无任何意义的是 ( A)返回值类型 ( B)常成员函数关键字 const ( C)参数类型 ( D)参数个数 40 有如下类定义: class Point public: void SetX(int xx) x=xx; void SetY(int yy) y=yy; private: int x,y; ; class Circle:public Point public: int GetRadius() return radius; priv
11、ate: void SetRadius(int r) radius=r; int radius; friend void show(); ; 在派生类 Circle中函数 show()可访问的成员的个数为 ( A) 1 ( B) 3 ( C) 5 ( D) 7 二、基本操作题 41 请使用 VC6或使用【答题】菜单打开考生文件夹 pmjl下的工程 pmjl。 此工程定义了 StopWatch(秒表 )类,用于表示时、分、秒信息,有构造函数 StopWatch()、设置时间函数 reset(),并且重载了前置和后置 +运算符,实现增加 1秒的功能。 程序中位于每个 “ ERROR*found*”
12、之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是: 00: 00: 00 00: 01: 00 注意:只修改每个 “ ERROR*found*”下的那一行,不要改动程序中的其他内容。 #include #include usingnamespacestd; classStopWatch “秒表 “类 inthours;小时 intminutes;分钟 intseconds;秒 public: StopWatch(): hours(0), minutes(0), seconds(0) voidreset()fhours=minutes=seconds=0; StopWatchoper
13、ator+(int)后置 + StopWatchold=*this; +(*this); returnold; 前进一秒 StopWatch (3)show(+sw); 【试题解析】 (1)主要考查考生对 +运算符的掌握 ,结合程序可知 ,应先使 seconds加 1,再判断是否需要进位 ,因此为 +second。 (2)主要考查考生对 this指针的掌握 ,应返回 this指针指向的类。 (3)主要考查考生对 +运算符的掌握 ,判断 sw是要先取值再自加 1还是先自加 1再取值。 三、简单应用题 42 【正确答案】 (1)name (2)n = p.birth_date.getMonth()
14、 - birth_date.getMonth(); (3)(is_male ? “男 “ : “女 “ ) (4)psm; 【试题解析】 (1)主要考查考生对 strcpy 函数的掌握 ,strcpy函数的功能是复制字符串 ,其格式为 :sercpy(字符串 1,字符串 2);。 (2)主要考查考生对成员函数的掌握 ,函数功能是比较两个人的年龄 ,返回正数、 0 或负数分别表示大于、等于和小于。前面语句比较了年份 ,因此这里应该比较月份。 (3)主要考查考生对成员函数的掌握 ,程序 要求显示性别 (“男 “或 “女 “,双引号内不含空格 ),因此这里要进行判断 ,使用三目运算符 ? :完成语句
15、。 (4)这里是一个变量交换操作 ,使用中间变量 p交换 psm和 psi的值。 四、综合应用题 43 【正确答案】 (1)point1(p1), point2(p2), point3(p3) (2):perimeter()const (3)(this-perimeter()/2 【试题解析】 (1)主要考查考生对构造函数的掌握 ,使用成员列表初始化。 (2)主要考查考生对成员函数的掌 握 ,根据类的定义中对该函数的声明 :double perimeter()const,可知返回类型为 double 型。 (3)主要考查考生对成员函数调用的掌握 ,程序要求使用 perimeter函数 ,因此这里直接调用 perimerter函数即可。