【计算机类职业资格】二级C++笔试73及答案解析.doc
《【计算机类职业资格】二级C++笔试73及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】二级C++笔试73及答案解析.doc(16页珍藏版)》请在麦多课文档分享上搜索。
1、二级 C+笔试 73 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.不能作为函数重载的判断依据的是(分数:2.00)A.constB.返回类型C.参数个数D.参数类型2.设 a 和 b 均为 double 型变量,且 a=5.5、b=2.5,则表达式(int)a+b/b 的值是(分数:2.00)A.6.500000B.6C.5.500000D.6.0000003.下列叙述中正确的是(分数:2.00)A.用 E-R 图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系B.用 E-R 图只能表示实体集之间一对一的联系C.用 E-R
2、 图只能表示实体集之间一对多的联系D.用 E-R 图表示的概念数据模型只能转换为关系数据模型4.有如下类的定义。空格处的语句是 class MyClass _int x,y; public: MyClass(int a=0,int b=0) x=a; y=b; staticvoidchange() x-=10; y-=10; ;(分数:2.00)A.staticB.constC.privateD.不需要填入内容5.下列关于类中成员函数特征的描述中错误的是(分数:2.00)A.类的成员函数一定是内联函数B.类的成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的6.关系表中的
3、每一横行称为一个(分数:2.00)A.元组B.字段C.属性D.码7.以下函数实现的功能是 void fun(char*s) char*p,*q,temp; p=s; q=s+strlen(s)-1; while(pq) temp=*p; *p=*q; *p=temp; p+; q-; (分数:2.00)A.将一个字符串首尾颠倒B.计算字符串的长度C.统计字符串中的空格个数D.将字符串中的小写字母变成大写字母8.设有以下定义和程序: #includeiostream.h classA1 public: void show1() cout“classA1”end1; ; classA2:publi
4、c A1 public: void show2() cout“classA2“end1; ; class A3:protected A2 public: voidshow3() cout“class A1”end1; ; void main() A1obj1; A2obj2; A3obj3; 则以下不合语法的调用语句是(分数:2.00)A.obj1show1();B.obj2show1();C.obj3show1();D.obj2show2();9.有以下程序 #includeiostream using namespace std; class Base private: char c; p
5、ublic: Base(char n):c(n) Base() coutc; ; class Derived:public Base private: char c; public: Derived(char n):Base(n+1),c(n) Derived() coutc; ;int main() Derived obj(x); return 0; 执行后的输出结果是(分数:2.00)A.xyB.yxC.xD.y10.有以下程序: #includeiostream #includemath using namespace std; class point private: double x
6、; double y; public: point(double a,double B) x=a; y=b; friend double distance (point a,point B) ; ; double distance (point a,point B) return sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); int main() point p1(1,2); point p2(5,2); coutdistance(p1,p2)end1; return 0; 程序运行后的输出结果是(分数:2.00)A.1B.5C.4D.611.以下程
7、序的输出结果是 #includeiostream using nameSpace std; int main() cout.fill(*); coutwidth(5); couthex100end1; return 0; (分数:2.00)A.*100B.*64C.100*D.64*12.有如下程序 #includeiostream using nameSpace std; class base public: vinual void f1() cout“F1 Base“; virtual void f2() cout“F2Base“; ; class derive:public base v
8、oid f1() cout“F1Derive“; void f2(int x) cout“F2Derive“; ; int main() base obj1,*p; derive obj2; p=C.obj3show1(); D.obj2show2();解析:解析 本题考核派生类的使用以及访问权限问题。C+中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。A2 是 A1 的公有派生类,A3 是 A2 的保护派生类,所以类 A1 的成员函数 show1()在类 A3 中呈现保护属性,不能通过 A3 类的对象访问。9.有以下程序 #includeiostream using n
9、amespace std; class Base private: char c; public: Base(char n):c(n) Base() coutc; ; class Derived:public Base private: char c; public: Derived(char n):Base(n+1),c(n) Derived() coutc; ;int main() Derived obj(x); return 0; 执行后的输出结果是(分数:2.00)A.xy B.yxC.xD.y解析:解析 本题考核继承与派生中继承基类的数据成员与成员函数。在 C+中,由于析构函数不能被
10、继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数 main结束时,派生类 Derived 对象 obj 将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出 x,然后调用基类的析构函数,输出 y。10.有以下程序: #includeiostream #includemath using namespace std; class point private: double x; double y; public: point(double a,doubl
11、e B) x=a; y=b; friend double distance (point a,point B) ; ; double distance (point a,point B) return sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); int main() point p1(1,2); point p2(5,2); coutdistance(p1,p2)end1; return 0; 程序运行后的输出结果是(分数:2.00)A.1B.5C.4 D.6解析:解析 本题考核友元函数的应用。分析程序:类 point 中定义了两个私有成员 x 和
12、 y,以及一个友元函数 distance。从而,函数 distance 可以访问类 point 中的任何成员。在函数 distance 中,返回值为 sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)。由此可知,函数 distance 的功能是计算 a、b两点之间的距离。在主函数 main 中,先定义两点: p1(1,2)和 p2(5,2)。然后调用函数 distance 计算两点之间的距离为 4,所以程序最后输出为 4。11.以下程序的输出结果是 #includeiostream using nameSpace std; int main() cout.f
13、ill(*); coutwidth(5); couthex100end1; return 0; (分数:2.00)A.*100B.*64 C.100*D.64*解析:解析 本题考核格式控制数据的输入输出。语句“cout.fill(*);”是将填充字符设置成*,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用*填满,语句“cout.width(5);”是将数据的输出宽度设置成 5,关键字 hex 的作用是将整数按十六进制输出,即输出 64,又由于初始状态为右对齐,所以程序最终输出*64。12.有如下程序 #includeiostream using nameSpace std; clas
14、s base public: vinual void f1() cout“F1 Base“; virtual void f2() cout“F2Base“; ; class derive:public base void f1() cout“F1Derive“; void f2(int x) cout“F2Derive“; ; int main() base obj1,*p; derive obj2; p=元素 b 出栈后,元素 c,d 进栈,栈中有 3 个元素,分别为 a,c,d:元素 d,c 出栈后,元素 e,f 进栈,栈中有 3 个元素,分别为 a,e, f;最后,元素 f,e,a 出栈
15、,栈为空。 可以看出,进栈的顺序为 a,b,c,d,e,f,出栈的顺序为 b,d,c,f,e,a,满足题目要求。每次进栈操作后,栈中最多有 3 个元素,所以,为了顺利完成这些操作,栈的容量应至少为 3。本题的正确答案为 A。14.有以下程序 #includeiostream using namespace std; int a; int fun(); int main() extern int a; int b; a=100; b=fun(); coutbend1; return 0; int fun() extern int a; return(10*A) ; 其程序运行后的输出结果是(分数
16、:2.00)A.100B.10C.1000 D.10000解析:解析 本题考核变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。先来了解外部变量:外部变量用关键字 extern 表示。由于外部变量可以被程序中的所有函数共同访问,其作用域为全局,因此也称为全局变量。对于外部变量而言,“定义变量”和“说明变量”是两个不同的概念。定义a 为外部变量是告诉编译程序,a 是一个外部变量,并要求系统为 a 分配一个固定的永久存储空间。a 的值在整个程序的运行期间都存在,只有当定义它的程序运行结束时,它的存储空间才释放。外部变量定义后,当程序中的函数要引用外部变量时,应在函数中作引用说明。在此程
17、序中,在第二行定义了一个外部变量 a,主函数 main 给外部变量赋的初始值为 100,当调用函数 fun()时,外部变量 a 的值传到函数 fun()中,因此函数所返回的值为 100*10=1000。15.在结构化方法中,软件功能分解属于下列软件开发中的阶段是(分数:2.00)A.概要设计 B.需求分析C.详细设计D.编程调试解析:解析 概要设计的任务是划分出构成系统的各物理元素以及设计出软件的结构(如确定模块及模块间的关系)。设计过程通常分为以下几步:提出可选择方案;选择合理方案;推荐最佳方案;功能分解;设计软件结构;制定测试计划:最后提交概要设计文档。软件功能分解属于概要设计阶段。本题的
18、正确答案为 A。16.在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态,其中只能用于检测刚进行的操作是否失败函数名是(分数:2.00)A.fail B.eofC.badD.good解析:解析 C+中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数 is open()判定流对象是否与一个打开的文件相联系,若是,返回 true,否则返回 false;函数 good()刚进行的操作成功时返回 true,否则返回 false:函数 fail()与 good()相反,刚进行的操作失败时返回 true,否则返回false:函数 bad()如果进行了非法操作返回 true,
19、否则返回 false;函数 eof()进行输入操作时,若到达文件尾返回 true,否则返回 false。其中,eof 函数只能用于输入流操作。17.关于在调用模板函数时实参的使用,下列表述中正确的是(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略 解析:解析 模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模
20、板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用和括起来的参数表)或从模板函数实参表(用()括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略:或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。由此可
21、知只有 D) 选项的说法是正确的。18.若有以下程序: #includeiostream using namespace std; class Base public: Base() x=O; int x; ; Class Derived1:virtual public Base public: Derived1() x=10; ; class Derived2:Virtual public Base public: Derived2() x=20; ; class Derived:public Derived1,protected DeriVed2 ; int main() Derived
22、obj; coutObj.xend1; return 0; 该程序运行后的输出结果是(分数:2.00)A.10B.20 C.30D.0解析:解析 本题考核虚基类。本题中,虽然 Derived1 和 Derived2 都是由共同的基类 x 派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x 只存在一份拷贝,不论在类Derived1 修改,还是在类 Derived2 中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj”时,就会先调用虚基类 Base 的构造函数,使得 x=0,然后执行类 Derived1 的构造函数使得 x=10,再执行类
23、Derived2 的构造函数,使得 x=20。最后输出 x 的值为 20。19.下列关于 this 指针的叙述中,正确的是(分数:2.00)A.this 指针是一个隐含指针,它隐含于类的成员函数中B.只有在使用 this 时,系统才会将对象的地址赋值给 thisC.类的友元函数也有 this 指针D.this 指针表示了成员函数当前操作的数据所属的对象 解析:解析 本题考核 this。类的每一个成员函数都有一个隐含定义的常量指针,称为 this 指针。它是成员函数所属对象的指针,它指向类对象的地址。成员函数可以通过这个指针知道自己属于哪一个对象。当对一个对象调用成员函数时,编译程序先将对象的地
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 二级 笔试 73 答案 解析 DOC
