1、二级 C+分类模拟 254及答案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:35,分数:65.00)1.有如下类定义: class Animal public: virtual void Name()=0; ; class Koala:public Animal public: void Name()/*函数体略*/ ; 关于上述类定义,下列描述中错误的是_。(分数:2.50)A.类 Koala是类 Animal的派生类B.类 Koala中的 Name函数是一个虚函数C.类 Animal中的 Name函数是一个纯虚函数D.语句“Animal a;”能够建立类 Animal
2、的一个对象 a2.运行以下程序后,如果从键盘上输入 shose后回车,则输出结果为 _。 # includeiostream.h void main() int v1=0,v2=0,k=0; char ch80; cinch; while(chk) switch(chk) case “s“; case “h“; default: v1+1; case “o“: v2+; k+; coutv1 “,“v2end1; (分数:2.00)A.2, 0B.5, 0C.4, 5D.2, 53.有下列程序: #include stdio.h int f(int x,int y) return(y-x)*x
3、); void main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:2.50)A.10B.9C.8D.74.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:2.00)A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员5.若目前 D盘根目录下并不存在 test.txt文件,则下列打开文件方式不会自动创建 test.txt文件的是_。(分数:2.00)A.ifstream fin;fin.open(“d:/test.txt“,ios_base:in
4、);B.fstream fio;fio.open(“d:/test.txt“,ios_base:out);C.ofstream fout;four.open(“d:/test.txt“,ios_base:out);D.ofstream fout;fout.open(“d:/test.txt“,ios_base:app);6.考虑函数原型 void test(int a,int b=7,char z=“*7“),下面的函数调用中,属于不合法调用的是_。(分数:1.00)A.test(5);B.test(5,8);C.test(6,“#“);D.test(0,0,“*“);7.若有以下变量和函数说
5、明: #includeiostream.h charCh=“*“; void sub (int x,int y,char ch,double*Z) switch(ch) case“+“:*Z=x+y;break: case“-“:*Z=x-y;break: case“*“:*Z=x*y; break: case“/“:*Z=X/y;break; 以下合法的函数调用语句是 _ 。(分数:1.00)A.sub(10,20,Ch,y);B.sub(1.2+3,2*2,“+“, k=a; a=b; b=k; void main() int a=2OO4,b=9,*x= fun(x, y); couta
6、“ “bend1;(分数:2.00)A.20049B.92004C.00D.编译时出错9.从工程管理角度,软件设计一般分为两步完成,它们是_。(分数:2.50)A.概要设计与详纲设计B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计10.若已定义过类 A和 B,并且定义类 C如下: class C public: int val; A aObj; B bObj; C*cObj; C(): cObj(0), val(0) ; 若要建立类 C的对象 object,则类成员 val、aObj、bObj 和 cObj中最后被初始化的是_。(分数:1.00)A.valB.aObjC.
7、bObjD.cObj11.若有如下语句: #includeiostream.h void main( ) int x3; do xx2; cout x; while(!(X) ) ; 则上面程序段(分数:2.00)A.输出的是 1B.输出的是 1和2C.输出的是 3和 0D.是死循环12.下列关于函数重载的叙述中,错误的是_。(分数:2.00)A.重载函数的参数个数可以不同B.重载函数的参数类型可以不同C.重载函数的返回值类型必须不同D.重载函数的参数个数或参数类型必须有所不同13.下列选项中不全是 C+语言关键字的是(分数:2.00)A.const,break,defaultB.long,v
8、oid,usingC.virtual,exterm,includeD.try,throw,this14.有如下函数模板定义: templatetypename T1,typename T2 T1 FUN(T2 n)return n*5,0; 若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为_。(分数:1.00)A.FUN(9)B.FUN9C.FUNdouble(9)D.FUN9(double)15.对于循环队列,下列叙述中正确的是_。(分数:2.50)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可
9、以大于队尾指针,也可以小于队尾指针16.支持子程序调用的数据结构是_。(分数:1.00)A栈B树C.队列D.二叉树17.面向对象的开发方法中,类与对象的关系是_。(分数:2.50)A.抽象与具体B.具体与抽象C.部分与整体D.整体与部分18.有三个关系 R、S 和 T如下: (分数:2.50)A.自然连接B交C.投影D并19.以下程序的正确运行结果是 _ 。 #includeiostream.h int f(int); void main() int a=2,i; for(i=0;i3;i+)coutf(a)“ “; coutendl; int f(int a) int b=0 static
10、int c=3; b+:c+; return(a+b+c); (分数:1.00)A.777B.7 10 13C.79 11D.7 8 920.已知各变量的定义如下 int i=8,k,a,b; unsigned long w=5; double x= 1.42,y=5.2; 则以下符合 C+语言语法的表达式是 _ 。(分数:2.00)A.a+=a-=(b=4)*(a=3)B.a=a*3+2C.x%(-3)D.y=float i21.有如下程序: #includeiostream using namespace std; void f1(intx=y;y=z; void f2(int x,int
11、 y)int z=x;x=y;y=z; int main() int x=10,y=26; f1(x,y); f2(x,y); coutyendl; return 0; 运行时的输出结果是_。(分数:2.50)A.10B.16C.26D.3622.派生类的构造函数的成员初始化列表中,不能包含_。(分数:2.50)A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化D.派生类中一股数据成员的初始化23.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性D.合理性24.设有以下程序段: i
12、nt a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是 _ 。(分数:1.00)A.p+qB.p-qC.p*qD.p%q25.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass(int x):val(X) void Set(int X)val=x; void Print()constcout“val=“val“/t“; private: int val; ; int main() const MyClass obj1(10); MyClass obj2(20); obj1.P
13、rint(); /语句 1 obj2.Print(); /语句 2 obj1.Set(20); /语句 3 obj2.Set(30); /语句 4 return 0; 其主函数中错误的语句是_。(分数:2.00)A.语句 1B.语句 2C.语句 3D.语句 426.在类中重载赋值运算符时,应将其声明为类的_。(分数:2.00)A.静态函数B.友元函数C.成员函数D.构造函数27.如果有以下定义及初始化: int a=3,*p= 则由此可以推断,*p 的值是_。(分数:2.50)A.变量 a的值,即 3B.变量 a的地址值C.变量 p的地址值D.无意义28.若 MyClass是一个类名,其有如下
14、语句序列: MyClass c1,*c2; MyClass*c3=new MyClass; MyClassc4=c1; 上面的语句序列所定义的类对象的个数是_。(分数:2.50)A.1B.2C.3D.429.下列语句中正确的是 _ 。(分数:2.00)A.int * p;i=8; p=B.int * p,i; p=C.float * p;int i;p=D.float * p;cout* p;30.下列关于 C+预定义流对象的叙述中,正确的是_。(分数:1.00)A.cin是 C+预定义的标准输入流对象B.cin是 C+预定义的标准输入流类C.cout是 C+预定义的标准输入流对象D.cout
15、是 C+预定义的标准输入流类31.已知枚举类型声明语句为: enumCOLORWHITE,YELLOW,GREEN=5,RED,BLACK=10; 则下列说法中错误的是(分数:2.00)A.枚举常量 YELLOW的值为 1B.枚举常量 RED的值为 6C.枚举常量 BLACK的值为 10D.枚举常量 WHITE的值为 132.有如下类声明: class SAMPLE int n; public: SAMPLE(int i=0):n(i) void setValue(int n0); ; 下列关于 getValue成员函数的实现中,正确的是_。(分数:2.00)A.SAMPLE:setValue
16、(int.n0)n=n0;B.void SAMPLE:setValue(int n0)n=n0;C.void setValue(int n0)n=n0;D.(int n0)n=n0;33.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:2.00)A.无需任何条件B.基类中显式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数34.在软件开发中,需求分析阶段产生的主要文档是 _ 。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书35.有如下程序: #includeiostream using na
17、mespace std; class Base public: virtual void function1()cout“0“; void function2()out“1“; ; class Derived:public Base oublic: void function1()cout“2“; void function2()cout“3“; ; int main() Base*p=new Derived(); p-function1(); p-function2(); return 0; 运行时的输出结果是_。(分数:1.00)A.01B.21C.03D.23二级 C+分类模拟 254答
18、案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:35,分数:65.00)1.有如下类定义: class Animal public: virtual void Name()=0; ; class Koala:public Animal public: void Name()/*函数体略*/ ; 关于上述类定义,下列描述中错误的是_。(分数:2.50)A.类 Koala是类 Animal的派生类B.类 Koala中的 Name函数是一个虚函数C.类 Animal中的 Name函数是一个纯虚函数D.语句“Animal a;”能够建立类 Animal的一个对象 a 解析:2.运行
19、以下程序后,如果从键盘上输入 shose后回车,则输出结果为 _。 # includeiostream.h void main() int v1=0,v2=0,k=0; char ch80; cinch; while(chk) switch(chk) case “s“; case “h“; default: v1+1; case “o“: v2+; k+; coutv1 “,“v2end1; (分数:2.00)A.2, 0B.5, 0C.4, 5 D.2, 5解析:3.有下列程序: #include stdio.h int f(int x,int y) return(y-x)*x); void
20、 main() int a=3,b=4,c=5,d; d=f(f(a,b),f(a,c); printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:2.50)A.10B.9 C.8D.7解析:解析 在 C语言中,子函数 f(int x,inty)的功能是计算 y减去 x的差与 x之积所以在主函数中,调用 f(a,b)的值等于 3,调用 f(a,c)的值等于 6,然后再调用 f(3,6)的值等于 9,所以正确答案为选项 B。4.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:2.00)A.公有成员B.公有成员和保护成员 C.公有成员、保护成员和私有成员D.保护成员解
21、析:解析 此题考查的是派生类对基类成员的访问。基类的成员有公有、保护和私有三种访问属性;类的继承方式也有公有继承、保护继承和私有继承三种。无论那种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。5.若目前 D盘根目录下并不存在 test.txt文件,则下列打开文件方式不会自动创建 test.txt文件的是_。(分数:2.00)A.ifstream fin;fin.open(“d:/test.txt“,ios_base:in); B.fstream fio;fio.open(“d:/test.txt“,ios_base:out);C.ofstream f
22、out;four.open(“d:/test.txt“,ios_base:out);D.ofstream fout;fout.open(“d:/test.txt“,ios_base:app);解析:解析 如果以 iso_base:in模式打开文件但文件又不存在时,可以通过 fail()测出文件打开失败,不会自动创建文件。6.考虑函数原型 void test(int a,int b=7,char z=“*7“),下面的函数调用中,属于不合法调用的是_。(分数:1.00)A.test(5);B.test(5,8);C.test(6,“#“); D.test(0,0,“*“);解析:解析 题中函数声
23、明带有默认参数,那么在 C选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。7.若有以下变量和函数说明: #includeiostream.h charCh=“*“; void sub (int x,int y,char ch,double*Z) switch(ch) case“+“:*Z=x+y;break: case“-“:*Z=x-y;break: case“*“:*Z=x*y; break: case“/“:*Z=X/y;break; 以下合法的函数调用语句是 _ 。(分数:1.00)A.sub(10,20,Ch,y);B.sub(1.2+3,2*2,“+“, k
24、=a; a=b; b=k; void main() int a=2OO4,b=9,*x= fun(x, y); couta“ “bend1;(分数:2.00)A.20049 B.92004C.00D.编译时出错解析:9.从工程管理角度,软件设计一般分为两步完成,它们是_。(分数:2.50)A.概要设计与详纲设计 B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计解析:解析 从软件工程角度看,软件设计分为概要设计和详细设计。概要设计就是结构设计,其主要目标是给出软件的模块结构;详细设计的首要任务是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库。10.若已定义过类
25、A和 B,并且定义类 C如下: class C public: int val; A aObj; B bObj; C*cObj; C(): cObj(0), val(0) ; 若要建立类 C的对象 object,则类成员 val、aObj、bObj 和 cObj中最后被初始化的是_。(分数:1.00)A.valB.aObjC.bObjD.cObj 解析:解析 C+中初始化顺序遵循以下两个原则:(1)初始化列表的初始化变量顺序是根据成员变量声明的顺序来执行的;(2)若有成员对象,先初始化成员对象,多个成员变量按规则(1)执行。按题中所给声明顺序,最后被初始化的是 cObj。故选择 D选项。11.
26、若有如下语句: #includeiostream.h void main( ) int x3; do xx2; cout x; while(!(X) ) ; 则上面程序段(分数:2.00)A.输出的是 1B.输出的是 1和2 C.输出的是 3和 0D.是死循环解析:解析 dowhile 语句的一般格式为 do循环体语句 while(表达式) ;,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 xx2,即为 1。判断表达式的值,!(x) 为真,x0,继续循环。再次执行循环体语句后,x2,此时表达式的值为 0,结束循环。12.下列关于函数重载的叙述中,错
27、误的是_。(分数:2.00)A.重载函数的参数个数可以不同B.重载函数的参数类型可以不同C.重载函数的返回值类型必须不同 D.重载函数的参数个数或参数类型必须有所不同解析:解析 两个或两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数进行最佳匹配,自动确定调用哪个函数,这就是函数的重载。13.下列选项中不全是 C+语言关键字的是(分数:2.00)A.const,break,defaultB.long,void,usingC.virtual,exterm,include D.try,throw,this解析:14.有如下函数模板定义: template
28、typename T1,typename T2 T1 FUN(T2 n)return n*5,0; 若要求以 int型数据 9作为函数实参调用该模板,并返回一个 double型数据,则该调用应表示为_。(分数:1.00)A.FUN(9)B.FUN9C.FUNdouble(9) D.FUN9(double)解析:解析 函数返回类型是 double型,则 T1为 double型,T2 为 int型才符合函数模板的定义。15.对于循环队列,下列叙述中正确的是_。(分数:2.50)A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队
29、尾指针 解析:解析 所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中当存储空间的最后一个位置已被使用而再要进行八队运算时,只要存储空间的第一个位置空闲,可将元素加入到第一个位置,即将存储空闲的第一个位置作为队尾。16.支持子程序调用的数据结构是_。(分数:1.00)A栈 B树C.队列D.二叉树解析:解析 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题
30、的答案为 A。17.面向对象的开发方法中,类与对象的关系是_。(分数:2.50)A.抽象与具体 B.具体与抽象C.部分与整体D.整体与部分解析:解析 现实世界中的很多事物都具有相似的性质,把具有相似的属性和操作的对象归为类,也就是说类是具有共同属性、共同方法的对象的集合,是对对象的抽象。它描述了该对象类型的所有对象的性质,而一个对象则是对应类的一个具体实例。所以本题正确答案为 A选项。18.有三个关系 R、S 和 T如下: (分数:2.50)A.自然连接 B交C.投影D并解析:解析 关系运算中自然连接是使用等于运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表
31、中的重复列。并是指两个结果集合并,交是指两个结果集的公共部分。投影是从表中选出指定的属性值组成新表,是单目运算,由此可知本题答案为 A。19.以下程序的正确运行结果是 _ 。 #includeiostream.h int f(int); void main() int a=2,i; for(i=0;i3;i+)coutf(a)“ “; coutendl; int f(int a) int b=0 static int c=3; b+:c+; return(a+b+c); (分数:1.00)A.777B.7 10 13C.79 11D.7 8 9 解析:20.已知各变量的定义如下 int i=8
32、,k,a,b; unsigned long w=5; double x= 1.42,y=5.2; 则以下符合 C+语言语法的表达式是 _ 。(分数:2.00)A.a+=a-=(b=4)*(a=3) B.a=a*3+2C.x%(-3)D.y=float i解析:21.有如下程序: #includeiostream using namespace std; void f1(intx=y;y=z; void f2(int x,int y)int z=x;x=y;y=z; int main() int x=10,y=26; f1(x,y); f2(x,y); coutyendl; return 0;
33、运行时的输出结果是_。(分数:2.50)A.10 B.16C.26D.36解析:解析 函数 f1的参数传递方式采用传引用方式,调用函数 f1后,实参变量 x、y 的值被交换。此时,x=26,y=10。函数 f2的参数传递方式采用传值方式,调用函数 f2后,不会改变实参变量 x、y 的值。故程序输出 y的值为 10。22.派生类的构造函数的成员初始化列表中,不能包含_。(分数:2.50)A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化 D.派生类中一股数据成员的初始化解析:解析 在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类的构造函数使基类的数
34、据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。23.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性 D.合理性解析:解析 结构化程序设计方法设计出的程序具有明显的优点。其一,程序易于理解、使用和维护;其二,提交了编程工作的效率,降低了软件开发成本。其中,人们更重视前者。24.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是 _ 。(分数:1.00)A.p+qB.p-q C.p*qD.p%q解析:解析 本题考核指针的运算。
35、C+语言中,指向同一字符串的指针之间能且只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。25.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass(int x):val(X) void Set(int X)val=x; void Print()constcout“val=“val“/t“; private: int val; ; int main() const MyClass obj1(10); MyClass obj2(20); obj1.Print(); /语句 1 obj
36、2.Print(); /语句 2 obj1.Set(20); /语句 3 obj2.Set(30); /语句 4 return 0; 其主函数中错误的语句是_。(分数:2.00)A.语句 1B.语句 2C.语句 3 D.语句 4解析:解析 在创建类对象 obj1(10)时,前面有关键字 const,所以当语句 3调用 obj1的成员函数试图修改其私有成员的数值的时候,会编译出错。26.在类中重载赋值运算符时,应将其声明为类的_。(分数:2.00)A.静态函数B.友元函数C.成员函数 D.构造函数解析:27.如果有以下定义及初始化: int a=3,*p= 则由此可以推断,*p 的值是_。(分数
37、:2.50)A.变量 a的值,即 3 B.变量 a的地址值C.变量 p的地址值D.无意义解析:解析 此题考查的是指针变量的定义与赋初值。语句*p= MyClass*c3=new MyClass; MyClassc4=c1; 上面的语句序列所定义的类对象的个数是_。(分数:2.50)A.1B.2 C.3D.4解析:解析 首先定义对象的格式:(存储类型)类名对象名 1(对象名 2,对象名n);第一句定义了对象 c1和指针对象 c2,而 MyClass*c3=newMyClass是 Java里的定义方式,MyClassc4=c1 这种定义方式也是不对的。29.下列语句中正确的是 _ 。(分数:2.0
38、0)A.int * p;i=8; p=B.int * p,i; p= C.float * p;int i;p=D.float * p;cout* p;解析:解析 选项 A中的变量 i没有定义就使用了;选项 C(float)i把 i中的数据取出后变为 float型,就是一个数值,“ public: SAMPLE(int i=0):n(i) void setValue(int n0); ; 下列关于 getValue成员函数的实现中,正确的是_。(分数:2.00)A.SAMPLE:setValue(int.n0)n=n0;B.void SAMPLE:setValue(int n0)n=n0; C.
39、void setValue(int n0)n=n0;D.(int n0)n=n0;解析:解析 此题考查了成员函数的定义格式。在类外部对成员函数定义时的一般格式为:返回类型类名:成员函数名(参数表)函数体,故此题正确答案为选项 B。33.生成派生类对象时,派生类构造函数调用基类构造函数的条件是_。(分数:2.00)A.无需任何条件 B.基类中显式定义了构造函数C.派生类中显式定义了构造函数D.派生类构造函数明确调用了基类构造函数解析:34.在软件开发中,需求分析阶段产生的主要文档是 _ 。(分数:2.00)A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求规格说明书 解析:解析
40、在软件开发过程中,需求分析阶段产生的要文档是软件需求规格说明书。35.有如下程序: #includeiostream using namespace std; class Base public: virtual void function1()cout“0“; void function2()out“1“; ; class Derived:public Base oublic: void function1()cout“2“; void function2()cout“3“; ; int main() Base*p=new Derived(); p-function1(); p-function2(); return 0; 运行时的输出结果是_。(分数:1.00)A.01B.21 C.03D.23解析:解析 本题中需要注意的是虚函数的定义:指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。所以 p-functionl();会指向实现类Derived,而 p-function2()则会指向 Base。