1、二级 C+-203 及答案解析(总分:82.50,做题时间:90 分钟)一、选择题(总题数:35,分数:56.50)1.有 3 个关系 R、S 和 T 如下表所示: (分数:2.50)A.自然连接B交C除D并2.有如下程序: #includeiostream using namespace std; class Part public: Part(int x=0): val(x) coutval; Part() coutval; private: int val; ; class Whole public: whole(int x, int y, int z=0): p2(x), p1(y),
2、 val(z) coutVal; Whole() coutval; private: Part p1, p2; int val; ; int main() Whole obj(1, 2, 3); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.123321B.213312C.213D.1231233.在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是_。(分数:1.00)A.()B.C.D.4.下面程序的运行结果是 _。 #includeiostream.h class A public virtual、() cout”call A: A()”end1;
3、; class B:public A B(int i)p=new chari: -B() delete)p; Cout”call B: B()”; ; void main() A*a=new B(8); Delete a; (分数:2.00)A.call B: B()B.call B: B()C.call A:A()D.call A:A()5.下列数据结构中,能够按照“先进后出”原则存取数据的是_。(分数:1.00)A.循环队列B栈C.队列D.二叉树6.有如下程序: #includeiostream using namespace std; int main() int*p; *p=9; co
4、ut“The value at p:“*p; return 0; 编译运行程序将出现的情况是_。(分数:2.00)A.编译时出现语法错误,不能生成可执行文件B.运行时一定输出:The value at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错7.以下程序的输出结果是 _ 。 #includeiostream.h void func(char*m) +m: cout*mend1; void main() static char*a=“MORNING“,“AFTERTOON“,“EVENING“; char*n: n=a; func(n); (分数:1.00
5、)A.为空B.MORNINGC.AFTERTOOND.EVENING8.有如下程序 #include iostream #include iomanip using namespace std; int main( ) coutsetprecision(3)fixedsetfill(“*“)setw(8); cout12.345_34.567; return 0; 若程序的输出是: *12.345*34.567 则程序中下划线处遗漏的操作符是 _ 。(分数:2.00)A.setprecision(3)B.fixedC.setfill(“*“)D.setw(8)9.下列叙述中正确的是_。(分数:
6、1.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对10.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:1.00)A.内联函数B.重载函数C.递归函数D.函数模板11.考虑函数原型 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,“*“);12.C 源程序中不能表示的数制是_。(分数:2.50)A.二进制B.八进制C.十进制D.十六进
7、制13.下列符号中可以用做 C+标识符的是_。(分数:1.00)A._radiusB.foobarC.elseD.3room14.有如下类定义: class Point private: static int how_many; ; _how_many=0; 要初始化 Point 类的静态成员 how_many,下画线处应填入的内容是_。(分数:1.00)A.intB.static intC.int Point:D.static int Point:15.如果表达式 x*y+z 中,“*”是作为友元函数重载的,“+”是作为友元函数重载的,则该表达式还可为(分数:1.00)A.operator+
8、(operator*(x,y),z)B.operator+(operator*(x,y),Z)C.operator*(operator+(x,y),z)D.operator+(operator*(x,y)16.必须用一对大括号括起来的程序段是_。(分数:1.00)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函数的函数体17.以下程序的输出结果是 _ 。 void main() int a=4,b=5,C=0,d; d=!a! b|!c; coutdend1; (分数:2.00)A.1BOC.非 0 的数D.-118.有如下类定义: class B
9、public:void fun1() private:void fun2() protected:void fun3() ; class D:public B protected:void fun4() ; 若 obj 是类 D 的对象,则下列语句中不违反访问控制权限的是_。(分数:2.00)A.obj.fun1();B.obj.fun2();C.obj.fun3();D.obj.fun4();19.数据库系统依赖于 _ 支持数据独立性。(分数:2.00)A.具有封装机制B.定义完整性约束条件C.模式分级,各级模式之间的映射D.DDL 语言与 DML 语言互相独立20.有如下程序: # inc
10、ludeiostream using namespace std; class Point int x,y; public: Point (int x1=0,int y1=0):x(x1),y(y1) int get()return x+y; ; class Circle Point center; int radius; public: Circle(int cx,int cy,int r):center(cx,cy),radius(r) int get()return center.get()+radius; ; int main() Circle c(3,4,5); coutc.get(
11、)endl; return 0; 运行时的输出结果是_。(分数:2.50)A.5B.7C.9D.1221.下列符号中可以用作 C+标识符的是_。(分数:2.00)A._radiusB.foobarC.elseD.3room22.下列语句都是程序运行时的第 1 条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:1.00)A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345;23.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类名相同B.构造函数可以有返回值C
12、.构造函数可以重载D.每个类都有构造函数24.Windows 环境下,由 C+源程序文件编译而成的日标文件的扩展名是_。(分数:2.50)A.cppB.exeC.objD.lik25.有如下程序: #includeiostream using namespace std; class Test public: Test() n+=2; Test() n-=3; static int getNum()return n; private: static int n; ; int Test:n=1; int main() Test*p=new Test; delete p; cout“n=“Test
13、:getNum()endl; return 0; 执行后的输出结果是_。(分数:2.00)A.n=0B.n=1C.n=2D.n=326.有如下程序: #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()const return m+n; ; int main() Pair a(3, 5); const Pair b(3, 5); couta. get()b. get(); return 0; 执
14、行这个程序的输出结果是_。(分数:1.00)A.33B.38C.83D.8827.下列关于信息和数据的叙述不正确的是 _ 。(分数:2.00)A.信息是数据的符号表示B.信息是数据的内涵C.信息是现实世界事物的存在方式或运动状态的反映D.数据是描述现实世界事物的符号记录28.关于构造函数 A()的拷贝构造函数正确的是(分数:1.00)A.A(A *B) ;B.A(AB) ;C.A(A29.下列程序中,划线处正确的语句是 _ 。 #includeiostream.h Class Base Public: Void fun()cout“Base:fun“endl; ; Class Derived:
15、public Base void fun() _ /显示调用基类的函数 fun() Cout“Derived:fun“endl; ;(分数:1.00)A.fun()B.Base.fun()C.Base:fun()D.Base-fun();30.下列关于虚基类的描述中,错误的是_。(分数:2.00)A.使用虚基类可以消除由多继承产生的二义性B.构造派生类对象时,虚基类的构造函数只被调用一次C.声明“class B:virtual public A”说明类 B 为虚基类D.建立派生类对象时,首先调用虚基类的构造函数31.已知枚举类型声明语句为: enumCOLORWHITE,YELLOW,GREE
16、N=5,RED,BLACK=10; 则下列说法中错误的是(分数:2.00)A.枚举常量 YELLOW 的值为 1B.枚举常量 RED 的值为 6C.枚举常量 BLACK 的值为 10D.枚举常量 WHITE 的值为 132.有如下程序 #includeiostream.h void main() char ch25=“6937“,“8254“,*p2; int i,j,s0; for(i0;i(2;i+)pichi; for(i0;i(2;i+) for(j0;pij“/0,j+2) s10*s+pij-“0“; couts; 该程序的输出结果是 _ 。(分数:2.00)A.69825B.63
17、825C.6385D.69382533.有如下程序: #includeiostream using namespace std; class Base public: Base(int x=0):valB(x)coutvalB; Base()coutvalB; private: int valB; ; class Derived:public Base public: Derived(int x=0,int y=0):Base(x),valD(y)coutvalD; Derived()coutvalD; private: int valD; ; int main() Derived obj12
18、(2,3); return 0; 运行时的输出结果是_。(分数:3.00)A.2332B.2323C.3232D.322334.下列代码段中声明了 3 个类: class Person ; class Student: public Person ; class Undergraduate: Student ; 下列关于这些类之间关系的描述中,错误的是_。(分数:1.00)A.类 Person 是类 Undergraduate 的基类B.类 undergraduate 从类 Student 公有继承C.类 Student 是类 Person 的派生类D.类 Undergraduate 是类 P
19、erson 的派生类35.下列程序的运行结果为_。 #includeiostream. h void print(double a) cout+a; void print(int a, int b) coutba; void main() print(1. 2); cout“ “; print(3, 4); (分数:1.00)A.1.2 34B.2.2 34C.1.2 43D.2.2 43二、填空题(总题数:15,分数:26.00)36.类是用户定义的类型,具有类类型的变量称作 _ 1_ 。 (分数:2.00)37.若有以下程序: #include iostream using namespa
20、ce std; class Base public: void who()cout“ Base“end1: ; class Derived1: public Base public: void who() cout“Derived“end1; ; int main() Base *p; Derived1 obj1; p= p-who(); return 0; 则该程序运行后的输出结果是 _ 1_ 。 (分数:2.00)38.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于 _ 1_ 测试。 (分数:2.00)39.在 MyClass 类的定义中,对赋值运算符=进行重载。请将画线处缺
21、失的部分补充完整。 1MyClass:operator=(const MyClass value=ths.value; return *this; (分数:2.00)40.数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和 1 两个含义。 (分数:1.00)41.如下程序声明了一个二维图形类 TwoDShape,从其派生出矩形类 Rec。 #includeiostream #includestring using namespaee std, class TwoDShape/ 二维图形类 char name20; public: TwoDShape (char * n=“unkno
22、wn“) strcpy(name, n); Char * getName()return name; _ 1_ =0; ; class Rec: public TwoDShape double width, height public: Rec(double w-=0. 0,double h=0. 0):TwoDShape(“rectangle“) width=w; height=h; double getWidth() return width; double getHeight() return height; double area() return width * height; ;
23、int main() TwoDShape * shape; Shape=new Rec(2.1,3.0); cout“object is“shape-getName()“/n“; cout“Area is“shape-area()“/n“; return 0 请将程序补充完整,使程序在运行时输出: abject is triangle Area is 6.3 (分数:2.00)42.cin.getline(line,sizeof(line),“x“)表示的意思是读取 90 个字符存放到 line 如果遇到 1 则结束输入。 (分数:1.00)43.若 Xcs 是一个类,该类中具有一个函数体为空
24、的不带参数的构造函数,此构造函数的类外定义为 1。 (分数:2.00)44.若有如下程序段: #include iostream using namespace std; int main() char *p=“abcdefgh“,*r; long *q; q=(long *)p;q+; r=(char *)q; coutrend1; return 0; 该程序的输出结果是 1。 (分数:2.00)45.下列程序的运行结果是 1。 #includeiostream.h class Base public: virtual void func(int i)cout“class Base:“ien
25、d1;) ; class Derived: public Base public: void func(double d)cout“class Derived:“dendl; ; void main( ) Base a,*p=a; Derived b; p= (*p).func(3.3); (分数:2.00)46.下列程序运行时的输出结果是 1。 #includeiostream using namespace std; int Xfun(int*a, int n); int main() int b6=-2, 6, 8, -3, 5, 4); coutXfun(b, 6)end1; retu
26、rn 0; int Xfun(int*a, int n) int x=0; for(int*p=a; pa+n; p+)if(*p0)x+=*p; return X; (分数:2.00)47.流操作子 1 向输出流中插入一个换行符并刷新输出缓冲区。 (分数:1.00)48.有如下程序段: int n=0,sum=0; while(n+,n50) if(n%2= =0)continue; sum+=n; coutsum; 此程序段执行的输出结果为 _ 1_ ,while 语句共执行了 _ 2_ 次。 (分数:2.00)49.cingetline(line,sizeof(line),“x“)表示的
27、意思是读取 90 个字符存放到 line 如果遇到 1 则结束输入。 (分数:1.00)50.下列程序中需要清理动态分配的数组,划线处应有的语句是 1。 #includeiostream, h class person int age, tall; public: person() age= 0; tall= 40; cout“A baby is born. “end1; person(int i) age=i, tall=40, cout“A old person. “end1; person(int i, int i) age = i; tall = j; cout “ a old per
28、son with tall. “ end1; person( ) cout“ person dead. “end 1; void show() cout“age= “age“ ,tall= “tallend1; ; void main() person * ptr; ptr = new person3; ptr0=person ( ) ptr1=person(18); ptr2=person(20,120); for(int i=0;i3; i+) ptri. show( ); 2 (分数:2.00)二级 C+-203 答案解析(总分:82.50,做题时间:90 分钟)一、选择题(总题数:35
29、,分数:56.50)1.有 3 个关系 R、S 和 T 如下表所示: (分数:2.50)A.自然连接B交C除 D并解析:解析 S 中的关系全部出现在 R 中,只有做除法操作才会出现关系 T。2.有如下程序: #includeiostream using namespace std; class Part public: Part(int x=0): val(x) coutval; Part() coutval; private: int val; ; class Whole public: whole(int x, int y, int z=0): p2(x), p1(y), val(z) c
30、outVal; Whole() coutval; private: Part p1, p2; int val; ; int main() Whole obj(1, 2, 3); return 0; 执行这个程序的输出结果是_。(分数:1.00)A.123321B.213312 C.213D.123123解析:解析 本题考查带参数的构造函数。本题中定义了一个对象 obj,那么执行其构造函数,初始化p1,p2 的顺序是由声明这两个成员的顺序决定的,而不是由参数化列表顺序决定,所以本题中,会先执行 p1,输出 2,然后执行 p2 输出 1,然后输出 3,最后一次输出 312。所以本题答案为 B。3.
31、在定义一个类模板时,模板形参表是用一对括号括起来的,所采用的括号是_。(分数:1.00)A.()B.C. D.解析:解析 声明一个类模板的格式是:template模板形参声明类声明。4.下面程序的运行结果是 _。 #includeiostream.h class A public virtual、() cout”call A: A()”end1; ; class B:public A B(int i)p=new chari: -B() delete)p; Cout”call B: B()”; ; void main() A*a=new B(8); Delete a; (分数:2.00)A.ca
32、ll B: B() B.call B: B()C.call A:A()D.call A:A()解析:5.下列数据结构中,能够按照“先进后出”原则存取数据的是_。(分数:1.00)A.循环队列B栈 C.队列D.二叉树解析:解析 栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。6.有如下程序: #includeiostream using namespace std; int main() int*p; *p=9; cout“The value at p:“*p; return 0; 编译运行程序将出现的情况是_。(分数:2.00)A.编译时出现语法错误,不能生成可执行文件B.运行时
33、一定输出:The value at p:9C.运行时一定输出:The value at p:*9D.运行时有可能出错 解析:解析 此题考查的是指针的使用。本题中,在给*p 赋值前,指针 p 并没有指向一个具体的对象。此时可以通过编译,但运行时由于 p 中为随机值,该赋值可能会破坏内存中某个重要的地址空间的内容,导致程序出错。7.以下程序的输出结果是 _ 。 #includeiostream.h void func(char*m) +m: cout*mend1; void main() static char*a=“MORNING“,“AFTERTOON“,“EVENING“; char*n:
34、n=a; func(n); (分数:1.00)A.为空B.MORNINGC.AFTERTOON D.EVENING解析:8.有如下程序 #include iostream #include iomanip using namespace std; int main( ) coutsetprecision(3)fixedsetfill(“*“)setw(8); cout12.345_34.567; return 0; 若程序的输出是: *12.345*34.567 则程序中下划线处遗漏的操作符是 _ 。(分数:2.00)A.setprecision(3)B.fixedC.setfill(“*“)
35、D.setw(8) 解析:9.下列叙述中正确的是_。(分数:1.00)A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对 解析:解析 栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。10.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:1.00)A.内联函数 B.重载函数C.递归函数D.函数模板解析:解析 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,一般只将规模很小而使用频繁的函数声明为内联函数,可以避
36、免函数调用时间开销,从而提高运行速度。11.考虑函数原型 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,“*“);解析:解析 题中函数声明带有默认参数,那么在 C 选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。12.C 源程序中不能表示的数制是_。(分数:2.50)A.二进制 B.八进制C.十进制D.十六进制解析:解析 C 语言源程序不能表示二进制,在 C 语言中,所有的数值型常量都带有符
37、号,所以整型数量只区别整型和长整型两种形式,整型常量和长整型常量均可用十进制、八进制、十六进制 3 种形式表示,故选项 A 不正确。13.下列符号中可以用做 C+标识符的是_。(分数:1.00)A._radius B.foobarC.elseD.3room解析:解析 本题考查 C+标识符的命名规则,其规则有如下几点:所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;所有标识符不能使用 C+已有的关键字;大、小写字母表示不同意义,即代表不同的标识符。选项 B 包含了字符“”,选项 C 是关键字,选项 D 不能以数字开头。故答案为 A。14.有如下类定义: class Point
38、private: static int how_many; ; _how_many=0; 要初始化 Point 类的静态成员 how_many,下画线处应填入的内容是_。(分数:1.00)A.intB.static intC.int Point: D.static int Point:解析:解析 本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外进行初始化,其一般形式为:数据类型类名:静态数据成员名=初值。所以本题答案为 C。15.如果表达式 x*y+z 中,“*”是作为友元函数重载的,“+”是作为友元函数重载的,则该表达式还可为(分数:1.00)A.operator+(operat
39、or*(x,y),z) B.operator+(operator*(x,y),Z)C.operator*(operator+(x,y),z)D.operator+(operator*(x,y)解析:解析 C+中用成员函数重载 x*y 为:x.operator * (y),用友元函数重载 x*y 为:operator *(x,y),用成员函数重载 x+y 为:x.operator+(y),用友元函数重载 x+y 为:operator+(x,y)。16.必须用一对大括号括起来的程序段是_。(分数:1.00)A.switch 语句中的 case 标号语句B.if 语句的分支C.循环语句的循环体D.函
40、数的函数体 解析:解析 本题考查 C+基本控制结构,A、B、C 三个选项巾的大括号不是必须的,而 D 选项中的函数体必须使用大括号。17.以下程序的输出结果是 _ 。 void main() int a=4,b=5,C=0,d; d=!a! b|!c; coutdend1; (分数:2.00)A.1 BOC.非 0 的数D.-1解析:解析 本题考查逻辑运算符!逻辑“非”,逻辑“与”,|逻辑“或”,三者的优先级顺序为!|,本题中 d=!4!5|!0,即 d=0|1,也即 d=1。18.有如下类定义: class B public:void fun1() private:void fun2() p
41、rotected:void fun3() ; class D:public B protected:void fun4() ; 若 obj 是类 D 的对象,则下列语句中不违反访问控制权限的是_。(分数:2.00)A.obj.fun1(); B.obj.fun2();C.obj.fun3();D.obj.fun4();解析:解析 派生类 D 公有继承父类 B,所以 obj 可以访问基类 B 的公有,不能访问其它成员。19.数据库系统依赖于 _ 支持数据独立性。(分数:2.00)A.具有封装机制B.定义完整性约束条件C.模式分级,各级模式之间的映射 D.DDL 语言与 DML 语言互相独立解析:
42、20.有如下程序: # includeiostream using namespace std; class Point int x,y; public: Point (int x1=0,int y1=0):x(x1),y(y1) int get()return x+y; ; class Circle Point center; int radius; public: Circle(int cx,int cy,int r):center(cx,cy),radius(r) int get()return center.get()+radius; ; int main() Circle c(3,4
43、,5); coutc.get()endl; return 0; 运行时的输出结果是_。(分数:2.50)A.5B.7C.9D.12 解析:解析 简单类之间继承关系的调用,按照通常做法便可以得到答案。center.get()函数调用后,3 和 4 的和被返回,接着再调用 Circle 类的 radius 成员变量 5 相加后得到 12。21.下列符号中可以用作 C+标识符的是_。(分数:2.00)A._radius B.foobarC.elseD.3room解析:解析 此题考查的是 C+语言中标识符的定义。标识符有字母、数字和下划线构成,其第一个字母必须是字母或下划线;定义标识符时,不要采用系统
44、的保留字。22.下列语句都是程序运行时的第 1 条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是_。(分数:1.00)A.coutinternal12345;B.coutleft12345;C.coutright12345;D.coutsetw(6)12345; 解析:解析 本题考查控制输出格式,A、B、C 选项都会输出“12345”,只有 D 选项输出“12345”,所以本题答案为 D。23.下列关于构造函数的描述中,错误的是_。(分数:2.50)A.构造函数名与类名相同B.构造函数可以有返回值 C.构造函数可以重载D.每个类都有构造函数解析:解析 构造函数没有返回值,虽然叫函
45、数,但是它没有任何返回值,包括 void 型都不是,官方叫法为“构造器”。24.Windows 环境下,由 C+源程序文件编译而成的日标文件的扩展名是_。(分数:2.50)A.cppB.exeC.obj D.lik解析:解析 cpp 是 C+源文件的扩展名;exe 是可执行文件的扩展名;lik 是连接文件的扩展名。25.有如下程序: #includeiostream using namespace std; class Test public: Test() n+=2; Test() n-=3; static int getNum()return n; private: static int
46、n; ; int Test:n=1; int main() Test*p=new Test; delete p; cout“n=“Test:getNum()endl; return 0; 执行后的输出结果是_。(分数:2.00)A.n=0 B.n=1C.n=2D.n=3解析:解析 此题考查的是静态数据成员和静态成员函数。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员。题目中的静态数据成员 n 的运算具有叠加性,执行“n+=2”和“n-=3”后 n 的值为 0。26.有如下程序: #includeiostream using namespace std; class Pair int m, n; public: Pair(int j, int k