1、二级 C+-10-2 及答案解析(总分:86.50,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:62.50)1.关系模型允许定义 3 类数据约束,下列不属于数据约束的是 A. 实体完整性约束 B. 参照完整性约束 C. 域完整性约束 D. 用户自定义的完整性约束(分数:1.00)A.B.C.D.2.下列程序的运行结果是#includeiostreamhclass A int a;public:A( )a=0;A(int aa) a=aa;couta+;;void main( )A x,y(2),z(3);coutend1; A. 00 B. 23 C. 34 D. 25(分数:
2、1.00)A.B.C.D.3.当使用 fstram 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 A. ios:in B. ios:out C. ios:int | ios:out D. 没有(分数:2.00)A.B.C.D.4.在 C+中,打开一个文件,就是将这个文件与一个U /U建立关联,关闭一个文件,就是取消这种关联。 A.类 B.流 C.对象 D.结构(分数:2.00)A.B.C.D.5.对下面程序描述正确的是U /U。#include iostream using namespace std;class A private:int i;public:class B p
3、rivate:int j;protected:int k;int fun1 ( ); MyB;int fun2 ( ); A. 定义类 B 的对象的语句是: A:B b; B. 类 A 的成员函数 fun2()可以用 MyBj 的方式访问类 B 的私有成员 j。 C. 类 A 的成员函数 fun2()可以用 MyBk 的方式访问类 B 的保护成员 k。 D. 类 B 的成员函数 fun1()可以直接访问类 A 的私有成员 i。(分数:2.00)A.B.C.D.6.以下程序执行后的输出结果是U /U。#include iostreamusing namespace std;void try(in
4、t,int,int,int);int main()int x,y,z,r;x=1;y=2;try(x,y,z,r);coutrendl;return 0;void try(int x,int y,int z,int r)z=x+y;x=x*x;y=y*y;r=z+x+y; A.18 B.9 C. 10 D.不确定(分数:2.00)A.B.C.D.7.在数据库系统中,把具有以下两个特征的模型称为网状模型。允许有一个以上的结点没有双亲有且仅有一个结点无双亲根以外的结点有且仅有一个双亲一个结点可以有多个双亲以下各项组合中符合题意的是U /U。 A.和 B.和 C.和 D.和(分数:2.00)A.B.
5、C.D.8.有如下头文件: int f1( ); static int f2( ); class MA public: int f3( ); static int f4( ); ; 在所描述的函数中,具有隐含的 this 指针的是 A. f1 B. f2 C. f3 D. f4(分数:2.00)A.B.C.D.9.下列有关类和对象的叙述不正确的是 A. 任何一个对象都归属于一个具体的类 B. 类与对象的关系和数据类型与变量的关系相似 C. 类的数据成员不允许是另一个类的对象 D. 一个类可以被实例化成多个对象(分数:2.00)A.B.C.D.10.有如下程序:#includeiostreamu
6、sing namespace std;class Bpublic:Virtual void show()cout“B”;class D:publicBpublic:void show()cout“D”;void funl(B*ptr)ptr-show();voidun2(B A.0 B.1 C.2 D.3(分数:1.00)A.B.C.D.17.若调用一个函数,且此函数中没有 return 语句,则正确的说法是该函数U /U。 A.没有返回值 B.返回若干个系统默认值 C.有返回值,但返回一个不确定的值 D.返回一个用户所希望的函数值(分数:2.00)A.B.C.D.18.以下程序的输出结果是U
7、 /U。min()int i=0,a=0;while(i20)for(;)if(i%10)=0)break;else i-;i+=11;a+=i;coutaendl; A.21 B.32 C.33 D.11(分数:2.00)A.B.C.D.19.对于模板定义关键字 class 和 typename 说法不正确的是U /U。 A.程序中的 class 并不能都替换为 typename B.class 和 typename 都可互相替换 C.程序中的 typename 都能替换为 class D.程序中的部分 class 可以替换为 typename(分数:2.00)A.B.C.D.20.有如下程
8、序:#include iostreamusing namespace std;class Apublic:A()cout“A“;class B public:B()cout“B“;class C:public A B b;public:C()cout“C“;int main()C obj;return 0;执行后的输出结果是U /U。 A.CBA B.BAC C.ACB D.ABC(分数:2.00)A.B.C.D.21.对建立良好的程序设计风格,下面描述正确的是 A. 程序应简单、清晰、可读性好 B. 符号名的命名只要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无(分数:2.
9、00)A.B.C.D.22.以下函数值的类型是fun(float x)float y;y=3*x-4;return y; A. int B. 不确定 C. void D. float(分数:2.00)A.B.C.D.23.在 ios 中提供控制格式的标志位中,U /U是转换为十六进制形式的标志位。 A. hex B. oct C. dec D. left(分数:2.00)A.B.C.D.24.下列叙述中正确的是 A. 数据库系统是一个独立的系统,不需要操作系统的支持 B. 数据库技术的根本目的是解决数据的共享问题 C. 数据库管理系统就是数据库系统 D. 以上 3 种说法都不对(分数:2.00
10、)A.B.C.D.25.向一个栈顶指针为 HS 的链式栈中插入一个 s 所指的结点时,则执行 A. HS-next=s; B. snext=HSnext;HSnext=s; C. s-next=HS;HS=s; D. snext=HS;HS=HSnext;(分数:2.00)A.B.C.D.26.面向对象程序设计将数据和什么放在一起,作为一个相互依存、不可分割的整体来处理? A. 对数据的操作 B. 信息 C. 数据隐藏 D. 数据抽象(分数:2.00)A.B.C.D.27.设置虚基类的目的是U /U。 A.简化程序 B.消除二义性 C.提高运行效率 D.减少目标代码(分数:1.00)A.B.C
11、.D.28.建立派生类对象时,3 种构造函数分别是 a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这 3 种构造函数的调用顺序为 A. abc B. acb C. cab D. cba(分数:1.00)A.B.C.D.29.有如下函数模板:templateT cast(Uu)return u;其功能是将 U 类型数据转换为 T 类型数据。已知 i 为 int 型变量,下列对模板函数 cast 的调用中正确的是U /U。 A. cast(i); B. cast(i); C. cast(i); D. cast(i);(分数:2.00)A.B.C.D. 解析:解析 选项 D)
12、是将 double 类型的数据转化成 int 类型的数据,正确。30.有下列程序:#include stdio.hvoid main() int x;scanf(“%d“,x);if(x=3);elseif(x!=10) printf(“%d/n“,x);程序运行时,输入的值在哪个范围才会有输出结果_。 A.不等于 10 的整数 B.大于 3 且不等 10 的整数 C.大于 3 或等于 10 的整数 D.小于 3 的整数(分数:2.50)A.B. C.D.解析:解析 在本题的程序中输入的数值小于等于 3 时不进行任何处理。如果输入的数值大干 3 并且其值不等于 10 时,则打印输入的数值。所以
13、本题的正确答案为选项 B。31.有如下程序:#inCludeiostreamusing namespace std;Class TestClasspublic:virtUal void furll()cout“funlTestclass”;virtual void fun2()cout“fun2TestClass”;class TestClassl:public TestClassvoid fun()cout“funlTestClass1”;int main()TestClass obj1,*p;TestClassl obj2;pTest() n-=3; ;static int getNum(
14、) return n;privaue:static int n:;int Test:n=1;int main()Test* p=new Test;delete p;cout“n=“Test:getNum()end1;return 0;执行后的输出结果是 A. n=0 B. n=1 C. n=2 D. n=3(分数:2.00)A. B.C.D.解析:解析 本题考核静态数据成员与静态成员函数的定义与使用方式。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员题中变量 n 是静态数据成员,对象对其操作的结果具有叠加作用,main 函数中先定义了 Test 的对象*p,然后又 delete p
15、,所以对静态数据 n 进行了两次操作,分别是“n+=2”和“n-=3”,n 的初始值是 1,那么 n 最后的值变为 0。main 函数最后通过调用静态函数 getNum得到 n 的值,并输出。35.字符串常量“hello“的字符个数是U /U。 A. 3 B. 4 C. 5 D. 6(分数:1.00)A.B.C.D. 解析:解析 本题考核的是字符串常量这个知识点。字符串常量实际上是一个数组,组成数据的字符除显式给出的外,还包括字符结尾处标识字符串结束的符号/0。所以字符串的字符个数等于字符个数加1,C+语言编译器会自动在字符串的末尾加上 /0,作为字符串结束标识。故本题答案选项是:D。二、B填
16、空题/B(总题数:15,分数:24.00)36.下面程序的结果为U U /U /U。 #includeiostreamh voidmain() int a=1,b=2; bool c=1; if(ab)|(c)cout “ture“ end1; else cout “false“ end1; (分数:1.00)填空项 1:_ (正确答案:true)解析:解析 本题考查的是对于逻辑运算符号的理解,“|”运算符的任何一边取值为真,则整个运算结果为真。37.下面程序的输出结果为 【8】 。 # include iostreamh void main( ) int num=0,i=8; do i ;
17、num+; while(i); cout num endl; (分数:1.00)填空项 1:_ (正确答案:【8】4)解析:解析:本题考查的是考生分析简单循环结构的能力。大体过程为第 1 次进入循环,i 变成 7,num变为 1,i 变为 6;第 2 次进入循环,i 变成 5,num 变为 2,i 变为 4;第 3 次进入循环,i 变成 3,num 变为 3,i 变为 2;第 4 次进入循环,i 变成 1,num 变为 4,i 变为 0,循环结束。38.在面向对象方法中,类之间共享属性和操作的机制称为 1。(分数:2.00)填空项 1:_ (正确答案:继承。)解析:解析 在面向对象方法中,一个
18、类可以从直接或间接的祖先中继承所有属性和方法,它提高了软件的可重用性,是类之间的共享属性和操作的机制。39.Jackson 方法是一种面向 1 的结构化方法。(分数:2.00)填空项 1:_ (正确答案:数据结构)解析:解析 Jackson 方法是一种面向数据结构的结构化方法。40.在 C+语言的面向对象程序设计框架中,U U /U /U是程序的基本组成单元。(分数:1.00)填空项 1:_ (正确答案:类)解析:解析 C+语言面向对象程序设计的基本组成单元是 class,面向过程的程序设计的基本组成单元是函数。41.一个学生关系模式为(学号,姓名,班级号,),其中学号为关键词:一个班级关系模
19、式为(班级号,专业,教室,),其中班级号为关键词:则学生关系模式中的外关键词为U U /U /U。(分数:1.00)填空项 1:_ (正确答案:班级号)解析:解析 本题考查外关键词的概念。如果一个关系中的属性或属性组,它不是本关系的关键词,但是另一个关系的关键词则称之为本关系的外关键词。42.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为U /U。(分数:2.00)填空项 1:_ (正确答案:软件生命周期)解析:解析 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用及维护等活动。43.关系操
20、作的特点是 【5】 操作。(分数:1.00)填空项 1:_ (正确答案:【5】集合)解析:解析:在关系操作中,所有操作对象与操作结果都是关系。而关系定义为元数相同 的元组的集合。因此,关系操作的特点是集合操作。44.若要把类 FriendClass 定义为类 MyClass 的友元类,则应在类 MyClass 的定义中加入语句U U /U /U。(分数:1.00)填空项 1:_ (正确答案:friend FriendClass;)解析:解析 本题考核友元类的声明。友元类可以在另一个类的公有部分或私有部分进行说明,说明的方法为: friend类名;45.在下列程序的横线处填上适当的语句,使该程序
21、的输出为 12。 #includediostream.h using namespace std; class Base public: int a,b; Base(int i)a=i; ; class Derived:public Base int a; public: Derived(int x):Base(x),b(x+1); void show() _;/输出基类数据成员 a 的值。 coutbendl; ; void main() Derived d(1); d.show(); return 0; (分数:2.00)填空项 1:_ (正确答案:coutBase:a)解析:解析 本题考
22、查基类和派生类的构造函数。派生类构造函数的执行顺序为:首先调用基类的构造函数,调用顺序按它们被继承时说明的顺序;然后调用子对象的构造函数,调用顺序按它们在类中说明的顺序;最后是派生类构造函数中的内容。本题要求的结果是输出 12,分析题目,首先调用基类的构造函数,然后是调用子对象的构造函数,横线处要求输出基类成员 a 的值,填入 coutBase:a 即可。46.输出带引号的字符串“hello world!”的语句是U U /U /U。(分数:2.00)填空项 1:_ (正确答案:cout“/“hello world!/”“;)解析:解析 使用转义字符“/”“输出引号。47.类中包含了一个静态成
23、员函数,则 main 函数中和 P.f1(P);语句具有同样功能的语句为_。 #includeiostream.h class M public: M(int A)Aa;B+a; static void f1(M m); private: int A; static int B; void M:f1(M m) cout“A=“m.A(end1; cout“B”m.Bend1; int M:B10; void main() M P(5); P.f1(P); (分数:2.00)填空项 1:_ (正确答案:M:f1(P);。)解析:解析 由于 f1 是类 M 的静态成员函数,即说明类 M 的任何对象
24、都共享一份 f1,因此,不仅可以从对象那里访问 f1,还可以用域操作符:通过类名来访问。48.有如下循环语句: for(inti=50;i20;i-=2)couti“,“; 程序运行时循环体的执行次数是_。(分数:2.00)填空项 1:_ (正确答案:15)解析:解析 5022 中有 15 个偶数。49.若有定义语句:int a=3,b=2,c=1;,则表达式 ab?a:b 的值是U U /U /U。(分数:2.00)填空项 1:_ (正确答案:2)解析:解析 本题考查的知识点是:条件运算符。条件运算是 C+中唯一的三目运算,与其对应的运算符?:称为条件运算符。条件运算符的使用格式为: 表达式
25、 1?表达式 2:表达式 3 当计算有条件运算符构成的表达式时,首先计算表达式 1,若其值非 0,则计算出 表达式 2的值,并用这个值作为整个表达式的值;若表达式 1的值为 0,则计算出表达式 3的值,并用这个值作为整个表达式的值。题目中,ab 的结果为假(即 0),所以整个表达式的值为 b 的值 2。50.请分析下面的程序并给出该程序的执行结果U U /U /U。 #include iostream class AA int a; public: AA() cout“ Initializing AA!/n“ ; AAM() cout“ Destroying AA!/n“ ; ; class BB int b; AA p; public: BB() cout“Initializing BB!/n“ ; BB() cout“Destroying BB!/n“ ; ; void main() BB X; cout“Ending main!/n ; (分数:2.00)