【计算机类职业资格】二级C++模拟501及答案解析.doc

上传人:arrownail386 文档编号:1324430 上传时间:2019-10-17 格式:DOC 页数:31 大小:107KB
下载 相关 举报
【计算机类职业资格】二级C++模拟501及答案解析.doc_第1页
第1页 / 共31页
【计算机类职业资格】二级C++模拟501及答案解析.doc_第2页
第2页 / 共31页
【计算机类职业资格】二级C++模拟501及答案解析.doc_第3页
第3页 / 共31页
【计算机类职业资格】二级C++模拟501及答案解析.doc_第4页
第4页 / 共31页
【计算机类职业资格】二级C++模拟501及答案解析.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、二级 C+模拟 501 及答案解析(总分:171.00,做题时间:90 分钟)一、选择题(总题数:40,分数:71.00)1.有如下程序: # include ioslreclm Using namespace std; class Base public: Base(int x=0):valB(x)coutvalB; Base()coutvalB; Private: int valB; ; class, Derived: public Base public: Dcrived(int x=0,int y=0):Base(x),valD(y) coutvalD; Derived()coutva

2、lD; private: int valD; ; int main() Derived obj12(2,3); return 0; 运行时的输出结果是 _ ,(分数:2.50)A.2332B.2323C.3232D.32232.设有定义: class C public: int value; ; int x,*p; 则以下引用形式中,正确的是(分数:2.00)A.x=value;B.x=C:value;C.p= 则对数组元素不正确的引用是_。(分数:2.50)A.ap-aB.*(ai)C.piD.*(*(a+i)5.下列程序段中包含 4 个函数,其中具有隐含 this 指针的是 _ 。 int

3、 fun1(); class Test public: int fun2(); friend int fun3(); static int fun4(); ;(分数:2.00)A.fun1B.fun2C.fun3D.fun46.程序段“int x=12; double y=3.141593; printf(“%d%8.6“f“,x,y);”的输出结果是_。(分数:2.50)A.123.141593B.12 3.141593C.12,3.141593D.123.14159307.某二叉树有 5 个度为 2 的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6D.48.下列

4、有关模板的叙述中,正确的是_。(分数:1.00)A.函数模板不能含有常规形参B.函数模板的一个实例就是一个函数定义C.类模板的成员函数不能是模板函数D.用类模板定义对象时,绝对不能省略模板实参9.下列程序的运行结果为 #includeiostream.h void main( ) int a2; int ba1; cout a/b endl; (分数:2.00)A.0.66667B.0C.0.7D.0.6666666610.有如下程序: #includeiostream using namespace std; class XX int x; public: XX(int xx=0):x(xx

5、) int getX()return x; ; class YY:public XX int y; public: YY(int xx,int yy):XX(xx),y(yy) int getV()return getX()+y; ; int main() YY c(3,4); coutc.getV()+c.getX()endl; return 0; 运行这个程序的输出结果是_。(分数:2.50)A.3B.4C.7D.1011.设有定义 char str80;以下不能将输入数据 first/nsecond/nCR读取到数组 str 中的语句是_。(分数:1.00)A.cin.get(str,s

6、trlen(str);B.cin.getline(str,strlen(str);C.cinstr;D.cin.read(str,strlen(str);12.一个函数带有参数说明时,则参数的默认值应该在 _ 中给出。(分数:2.00)A.函数定义B.函数声明C.函数定义或声明D.函数调用13.将下面类 TestClass 中的函数 fun()的对象成员 n 值修改为 100 的语句应该是 _ 。 class TcstClass public: TestClass(int x)n=x; void SetNum(int n1)n=n1; private: int n; int fun() Tes

7、tClass * ptr=new TestClass(45); _; (分数:2.00)A.TestClass(100)B.ptr-SetNum(100)C.SetNum(100)D.ptr-n=10014.下列程序的执行结果是_。 #include class Sampleint x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b;Sample()if(x=y)cout“x=y“endl;elsecout“x!=y“endl;void disp()cout“x=“x“,y=“yendl;void main()Sample s1(2,3);s

8、1.disp(); A.x=2,y=2 B.x=3,y=3 C.x=2,y=3 D.x=3,y=2A B C D C解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会调用含有两个参数的构造函数Sample(int a,int b)x=a;y=b;,disp()函数输出成员变量 x 和 y 的值 x=2,y=3;然后结束时调用析构函数,因为 x 和 y 值不等,故输出 x!=y。(分数:1.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3D.x=3,y=215.有如下程序段: int i=2; do i *=i; cout“#“; if(i1000) brea

9、k; while(1); 运行这个程序段时,输出字符“#“的个数是(分数:2.50)A.3B.4C.5D.616.有如下程序: #includeiostream #includestring using namespace std; class TV public: Tv(int s=2):size(s) TV(const TV private: int size; ; int main() TV room1(1), room2(room1), room3; TV*roomPtr=new TV(3); delete roomPtr; return 0; 运行时的输出结果是_。(分数:1.00)

10、A.3211B.3210C.3121D.232317.若要对 Data 类中重载的加法运算符成员函数进行声明,下列选项中正确的是_。(分数:2.50)A.Data+(Data);B.Data operator+(Data);C.Data+operator(Data);D.opcrator+(Data, Data);18.己知类 X 是类 Y 的友元,类 Y 是类 Z 的友元,则 _。(分数:2.00)A.类 X 一定是类 Z 的友元B.类 Z 一定是类 X 的友元C.类 Z 的成员函数可以访问类 Y 的对象的任何成员D.类 K 的成员函数可以访问类 Y 的对象的任何成员19.有如下程序: #i

11、ncludeiostream #includecstring using namespace std; class MyString public: char str80; MyString(const char*s) strcpy(str,s); MyString return*this; ; ostream int main() MyString x(“abc“),y(“cde“); cout(x+=y)endl; return 0; 运行这个程序的输出结果是_。(分数:2.00)A.abcB.cdeC.abcdeD.abccde20.下面类的定义,有 _ 处错误。 class MyCla

12、ss public: void MyClass(); MyClass(int value); private: int i0;(分数:2.00)A.1B.2C.3D.421.有如下类定义: class AA int a; public: int getRef()constreturn / int getValue()constreturn a; / void set(int n)consta=n; / friend void show(AA aa)constcouta;) / ; 其中的四个函数定义中正确的是_。(分数:2.00)A.B.C.D.22.以下非法的赋值语句是(分数:2.00)A.

13、n=(i=2,+i);B.j+;C.+(i+1);D.x=j0;23.下列关于 this 指针的描述中,正确的是_。(分数:2.00)A.类的成员函数都有 this 指针B.类的友元函数都有 this 指针C.任何与类相关的函数都有 this 指针D.类的非静态成员函数都有 this 指针24.若调用一个函数,且此函数中没有 return 语句,则正确的说法是该函数 _ 。(分数:1.00)A.没有返回值B.返回若干个系统默认值C.有返回值,但返回一个不确定的值D.返回一个用户所希望的函数值25.下面有关 for 循环的正确描述是(分数:1.00)A.for 循环只能用于循环次数已经确定的情况

14、B.for 循环是先执行循环体语句,后判断表达式C.在 for 循环中,不能用 break 语句跳出循环体D.for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来26.一棵二叉树共有 25 个结点,其中 5 个是叶子结点,则度为 1 的结点数为_。(分数:2.50)A.16B.10C.6D.427.关于 continue 语句叙述不正确的是_。(分数:1.00)A.continue 语句用于循环体中,结束循环B.continue 语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue 可以用于 if 语句中D.continue 语句不能代替

15、 break 语句28.有如下程序: #includeiostream using namespace std; class Pair int m,n; public: Pair(int j,int k):m(j),n(k) int get()return m; int get()constreturn m+n; ; int main() Pair a(3,5); const Pair b(3,5); couta.get()b.get(); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.33B.38C.83D.8829.有如下类定义: class Sample publ

16、ic: Sample(int x):ref(x) / private: Sample():ref(0) / static int val=5; / const int ref; / ; 上述程序段中,错误的语句是_。(分数:1.00)A.B.C.D.30.下列叙述中错误的是_。(分数:2.50)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式31.下列控制格式输入/输出的操作符中,能够设置

17、浮点数精度的是_。(分数:2.50)A.setprecisionB.setwC.setfillD.showpoint32.有如下类定义: class AA int a; public: AA(int n=0):a(n) ; class BB:public AA public: BB(int n)_ ; 其中横线处缺失部分是_。(分数:3.00)A.:a(n)B.:AA(n)C.a(n);D.a=n;33.下列叙述中正确的是(分数:2.00)A.所有形态的二叉树都只能采用链式存储结构B.循环队列是队列的一种存储方式C.栈只能采用顺序存储结构D.循环队列与循环链表都属于链式存储结构34.有如下头文

18、件: int f1(); static int f2(); class MA public: int f3(); static int f4(); ; 在所描述的函数中,具有隐含的 this 指针的是_。(分数:1.00)Af1Bf2Cf3Df435.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是_。(分数:1.00)A.不合法的运算符B.一元运算符C.无操作数的运算符D.二元运算符36.下列叙述中正确的是_。(分数:1.00)A.栈是“先进先出”的线性表B.队列是“先进后出”的线性表C.循环队列是非线性结构D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构37.对于

19、一个类定义,下列叙述中错误的是_。(分数:1.00)A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数B.如果没有定义缺省的构造函数,编译器一定将生成一个缺省的构造函数C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷贝构造函数D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数38.下列关于纯虚函数与抽象类的描述中,错误的是_。(分数:2.50)A.纯虚函数是一种特殊的虚函数,它没有具体的实现B.抽象类是指具有纯虚函数的类C.一个基类声明了纯虚函数,该基类的派生类一定不是抽象类D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出39.关于 getl

20、ine()函数的下列描述中, _ 是错误的。(分数:1.00)A.该函数是用来从键盘上读取字符串的B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符时便停止D.该函数中所使用的终止符只能是换行符40.下列符号中,正确的 C+标识符是_。(分数:2.00)A.enumB.100bitC.s-1D._int二、基本操作题(总题数:1,分数:30.00)41.请使用 VC6 或使用【答题】菜单打开 prog1 下的工程 prog1。此工程中包含程序文件 main.cpp,其中有类 Score(“成绩”)和主函数 main 的定义。程序中位于每个“/ ERROR *found*”之

21、后的一行语句有错误,请加以改正。改正后程序的输出结果应为: 学号:12345678 课程:英语 总评成绩:85 注意:只修改每个“/ ERROR *found*”下的一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Score public: Score (const char * the_course, const char * the_id, int the_normal, int the_midterm, int the_end_of_term : course(the_course), normal(the_no

22、rmal), midterm(the_midterm), end_of_term(the_end_of_term) / ERROR *found* strcpy (the_id, student_id); const char * getCourse() const return course; /返回课程名称 / ERROR *found* const char * getID() const return /返回学号 int getNormal() const return normal; /返回平时成绩 int getMidterm() const return midterm; /返回

23、期中考试成绩 int getEndOfTerm() const return end_of_term; /返回期考试成绩 int getFinal() const; /返回总评成绩 private: const char * course; /课程名称 char student_id12; /学号 int normal; /平时成绩 int midterm; /期中考试成绩 int end_of_term; /期考试成绩 ; /总评成绩中平时成绩占 20%,期中考试占 30%,期考试占 50%,最后结果四舍五入为一个整数 / ERROR *found* int getFinal() const

24、 return normal * 0.2 + midterm * 0.3 + end_of_terms 0.5 + 0.5; int main() char English = “英语“; Score score (English, “12345678“,68,83,92); cout “学号:“ score.getID() “ “; cout “课程:“ score.getCourse() “ “; cout “总评成绩:“ score.getFinal() endl; return 0; (分数:30.00)_三、简单应用题(总题数:1,分数:30.00)42.请使用 VC6 或使用【答题

25、】菜单打开 proj2 下的工程 proj2。其中有类 Point(“点”)、Rectangle(“矩形”)和 Circle(“圆”)的定义。在程序所使用的平面坐标系统中,x 轴的正方向是水平向右的,y 轴的正方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是: -圆形- 圆心=(3,2) 半径=1 面积=3.14159 -外切矩形- 左上角=(2,1) 右下角=(4,3) 面积=4 注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“/ *found*”。 #include iostream #include cmat

26、h using namespace std; /平面坐标中的点 /本题坐标系统中,x 轴的正方向水平向右,y 轴的正方向竖直向下。 class Point public: Point(double x=0.0, double y=0.0): x_(x), y_(y) double getX() const return x_; double getY() const return y_; void setX(double x) x_=x; void setY(double y) y_=y; private: double x_; /x 坐标 double y_; /y 坐标 ; /矩形 cla

27、ss Rectangle public: Rectangle (Point p, int w, int h) : point (p), width (w), height (h) double area() const /矩形面积 return width * height; Point topLeft() const /左上角顶点 return point; Point bottomRight() const /右下角顶点(注:y 轴正方向竖直向下) / *found* return Point(_); private: Point point; /左上角顶点 double width; /

28、水平边长度 double height; /垂直边长度 ; /圆形 class Circle public: Circle (Point p, double r):center(p), radius(r) Rectangle boundingBox() const; /外切矩形 double area() const /圆形面积 / *found* return PI *_; public: static const double PI; /圆周率 private: Point center; /圆心 double radius; /半径 ; const double Circle:PI =

29、3.14159; Rectangle Circle:boundingBox() const / *found* Point pt(_); int w, h; / *found* w = h =_; return Rectangle(pt, w, h); int main () Point p(3, 2); Circle c(p, 1); cout -圆形- /n“; cout “圆心 = (“ p.getX() “,“ p.getY() “)/n“; cout “半径 =“ 1 endl; cout “面积 =“ c.area() endl endl; Rectangle bb = c.bou

30、ndingBox(); Point t1 = bb.topLeft(); Point br = bb.bottomRight(); cout “-外切矩形-/n“; cout “左上角 = (“ t1.getX() “,“ t1.getY() “)/n“; cout “右下角 = (“ br.getX() “,“ br.getY() “)/n“; cout “面积 =“ bb.area() endl; return 0; (分数:30.00)_四、综合应用题(总题数:1,分数:40.00)43.请使用 VC6 或使用【答题】菜单打开 proj3 下的工程 proj3,其中声明了 SortedL

31、ist 类,是一个用于表示有序数据表的类。其成员函数 insert 的功能是将一个数据插入到一个有序表中,使得该数据表仍然保持有序。请编写这个 insert 函数。程序的正确输出应为: 插入前: 1,2,4,5,7,8,10 插入 6 和 3 后: 1,2,3,4,5,6,7,8,10 要求: 补充编制的内容写在“/ *333*”与“/ *666*”之间。不得修改程序的其他部分。 注意:程序最后将结果输出到文件 out.dat 中。输出函数 writeToFile 已经编译为 obj 文件,并且在本程序中调用。 /SortedList.h #include iostream using nam

32、espace std; class SortedList /有序数据表类 int len; double * d; public: SortedList (int len, double data = NULL); SortedList() delete d; int length() const return len; /有序数据表长度(即元素的个数) double getElement (int i) const return di; void insert (double data); void show() const; /显示有序数据表 ; void writeToFile (cha

33、r *, const SortedList /main.cpp #include “SortedList.h“ SortedList:SortedList (int len, double data):len(len) d = new doublelen; for(int k = 0; k len; k+) dk = (data = NULL? 0.0:datak); for(int i = 0; i len-1; i+) int m=i; for(int j = i; j len; j +) if(dj dm) m=j; if (m i) double t = dm; dm = di; di

34、 = t; void SortedList:insert (double data) / *333* / *666* void SortedList:show() const /显示有序数据表 for(int i = 0; i len - 1; i+) cout di “,“; cout dlen - 1 endl; int main() double s = 5,8,1,2,10,4,7; SortedList list(7,s); cout “插入前:“ endl; list.show(); list.insert(6.0); list.insert(3.0); cout “插入 6 和

35、3 后:“ endl; list.show(); writeToFile(“ “, list); return 0; (分数:40.00)_二级 C+模拟 501 答案解析(总分:171.00,做题时间:90 分钟)一、选择题(总题数:40,分数:71.00)1.有如下程序: # include ioslreclm Using namespace std; class Base public: Base(int x=0):valB(x)coutvalB; Base()coutvalB; Private: int valB; ; class, Derived: public Base publi

36、c: Dcrived(int x=0,int y=0):Base(x),valD(y) coutvalD; Derived()coutvalD; private: int valD; ; int main() Derived obj12(2,3); return 0; 运行时的输出结果是 _ ,(分数:2.50)A.2332 B.2323C.3232D.3223解析:解析 本题使用析构函数。2.设有定义: class C public: int value; ; int x,*p; 则以下引用形式中,正确的是(分数:2.00)A.x=value; B.x=C:value;C.p= 则对数组元素

37、不正确的引用是_。(分数:2.50)A.ap-aB.*(ai)C.piD.*(*(a+i) 解析:解析 数组和指针的关系非常密切,因为数组名称单独使用表示的是数组的首地址。故可用的表示可能是 aipi,*(p+i),同样(ai)表示地址,因此*(ai)等同于 ai。本题答案为 D。5.下列程序段中包含 4 个函数,其中具有隐含 this 指针的是 _ 。 int fun1(); class Test public: int fun2(); friend int fun3(); static int fun4(); ;(分数:2.00)A.fun1B.fun2 C.fun3D.fun4解析:解析

38、 this 指针是成员函数所属对象的指针,是指向类对象的地址,是一个隐含的指针,隐含于每个类的非静态成员函数中。fun1 是外部函数,fun3 是友元函数,fun4 是静态成员函数,故选 B。6.程序段“int x=12; double y=3.141593; printf(“%d%8.6“f“,x,y);”的输出结果是_。(分数:2.50)A.123.141593 B.12 3.141593C.12,3.141593D.123.1415930解析:解析 根据输出函数 printf 中对输出数值格式的要求,第一个数和第二数之间没有空格或分隔号,因而此题答案为选项 A。7.某二叉树有 5 个度为

39、 2 的结点,则该二叉树中的叶子结点数是_。(分数:1.00)A.10B.8C.6 D.4解析:解析 根据二叉树的基本性质 3:在任意一颗二叉树中,度为 O 的叶子结点总是比度为 2 的结点多一个,所以本题中是 5+1=6 个。8.下列有关模板的叙述中,正确的是_。(分数:1.00)A.函数模板不能含有常规形参B.函数模板的一个实例就是一个函数定义 C.类模板的成员函数不能是模板函数D.用类模板定义对象时,绝对不能省略模板实参解析:解析 本题考查函数模板和类模板的基础知识,所以本题答案为 B。9.下列程序的运行结果为 #includeiostream.h void main( ) int a2

40、; int ba1; cout a/b endl; (分数:2.00)A.0.66667B.0 C.0.7D.0.66666666解析:解析 表达式值的类型是由操作数的类型决定的,因为本题的两个数都是 int 型的,所以得出的结果也为 int 型,即去掉小数点后的部分,只取商的整数部分。10.有如下程序: #includeiostream using namespace std; class XX int x; public: XX(int xx=0):x(xx) int getX()return x; ; class YY:public XX int y; public: YY(int xx

41、,int yy):XX(xx),y(yy) int getV()return getX()+y; ; int main() YY c(3,4); coutc.getV()+c.getX()endl; return 0; 运行这个程序的输出结果是_。(分数:2.50)A.3B.4C.7D.10 解析:11.设有定义 char str80;以下不能将输入数据 first/nsecond/nCR读取到数组 str 中的语句是_。(分数:1.00)A.cin.get(str,strlen(str);B.cin.getline(str,strlen(str);C.cinstr;D.cin.read(st

42、r,strlen(str); 解析:解析 本题考查 cin 流对象的几种成员函数 get,getline,read 及流提取符的使用规则。12.一个函数带有参数说明时,则参数的默认值应该在 _ 中给出。(分数:2.00)A.函数定义B.函数声明C.函数定义或声明 D.函数调用解析:13.将下面类 TestClass 中的函数 fun()的对象成员 n 值修改为 100 的语句应该是 _ 。 class TcstClass public: TestClass(int x)n=x; void SetNum(int n1)n=n1; private: int n; int fun() TestCla

43、ss * ptr=new TestClass(45); _; (分数:2.00)A.TestClass(100)B.ptr-SetNum(100) C.SetNum(100)D.ptr-n=100解析:解析 对象指针存放的是对象的地址,要访问对象指针所指向对象的成员。可以通过两种方式。(*指针).成员,或者是指针-成员。14.下列程序的执行结果是_。 #include class Sampleint x,y;public:Sample()x=y=0;Sample(int a,int b)x=a;y=b;Sample()if(x=y)cout“x=y“endl;elsecout“x!=y“end

44、l;void disp()cout“x=“x“,y=“yendl;void main()Sample s1(2,3);s1.disp(); A.x=2,y=2 B.x=3,y=3 C.x=2,y=3 D.x=3,y=2A B C D C解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会调用含有两个参数的构造函数Sample(int a,int b)x=a;y=b;,disp()函数输出成员变量 x 和 y 的值 x=2,y=3;然后结束时调用析构函数,因为 x 和 y 值不等,故输出 x!=y。(分数:1.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3 D.x=3,y=2解析:解析 本题考查类的构造函数和析构函数。首先,Samples1(2,3);会调用含有两个参数的构造函数 Sample(int a,int b)x=a;y=b;,disp()函数输出成员变量 x 和 y 的值 x=2,y=3;然后结束时调用析构函数,因为 x 和 y 值不等,故输出 x!=y。15.有如下程序段: int i=2; do i *=i; cout“#“; if(i1000) break; while(1); 运行这个程序段时,输出字符“#“的个数是(分数:2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1