1、国家二级 C+机试(选择题)模拟试卷 125及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.数据结构主要研究的是数据的逻辑结构、数据的运算和( )。(分数:2.00)A.数据的方法B.数据的存储结构C.数据的对象D.数据的逻辑存储2.一棵二叉树的前序遍历结果是 ABCEDF,中序遍历结果是 CBAEDF,则其后序遍历的结果是( )。(分数:2.00)A.DBACEFB.CBEFDAC.FDAEBCD.DFABEC3.在数据处理中,其处理的最小单位是( )。(分数:2.00)A.数据B.数据项C.数据结构D.数据元素4.在数据库系统的内部结构体
2、系中,索引属于( )。(分数:2.00)A.模式B.内模式C.外模式D.概念模式5.以下( )不属于对象的基本特征。(分数:2.00)A.继承性B.封装性C.分类性D.多态性6.数据库系统的核心是( )。(分数:2.00)A.数据模型B.软件开发C.数据库设计D.数据库管理系统7.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(分数:2.00)A.软件矛盾B.软件危机C.软件藕合D.软件产生8.关系模型允许定义 3类数据约束,下列不属于数据约束的是( )。(分数:2.00)A.实体完整性约束B.参照完整性约束C.属性完整性约束D.用户自定义的完整性约束9.关系表中的每
3、一行记录称为一个( )。(分数:2.00)A.字段B.元组C.属性D.关键码10.在数据库管理技术的发展中,数据独立性最高的是( )。(分数:2.00)A.人工管理B.文件系统C.数据库系统D.数据模型11.下列语句中,错误的是( )。(分数:2.00)A.const int buffer=-256;B.const int temp;C.const double*point;D.const double*rt=new double(55);12.下列变量名中,合法的( )。(分数:2.00)A.CHINAB.byte-sizeC.doubleD.A+a13.在进行任何 C+流的操作后,都可以用
4、 C抖流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是( )。(分数:2.00)A.failB.eofC.badD.good14.对于语句 cout5) coutx; if(x+5) cout5) cout5成立(此时 m的值变为 6),所以执行语句 coutx; if(x+5) cout5不成立,因为“+”后缀,之后 x的值变为5,执行语句 COHtx-5成立,所以执行语句 coutxendl:输出 7。17.关于 this指针的说法不正确的是( )。(分数:2.00)A.不能在程序中修改 this指针B.this指针可以给其他指针赋值,但不能修改 this指针C.静
5、态成员函数中没有 this指针D.this指针可以被赋值 解析:解析:this 指针不能在程序中修改,不能被幅值;静态成员没有 this指针,因为类中只有一个静态成员函数实例,使用 this指针无意义。18.( )使一个函数可以定义成对许多不同数据类型完成同一个任务。(分数:2.00)A.函数模板 B.重载函数C.递归函数D.模板函数解析:解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。因此,函数模板使一个函数可以定义成对许多不同数据类型完成同一个任务。19.有如下程序: #include using namespace std; int i=1
6、; class Fun public: static int i; int value()return i-1; int valueoconstreturn i+1; ; int Fun:i=2; int main() int i=3: Fun fun1; constFun fun2; retum 0: 若程序的输出结果是:123 则程序中横线处的语句是( )。(分数:2.00)A.coutFun:ifun2value(); B.coutFun:ifun1value()fun2value();C.coutfunlvalue0fun2value0Fun:i;D.coutfun2value0Fun
7、:ifunlvalue();解析:解析:此题因为定义的变量 i是 static类型的(main()函数内部的 i只是一个局部变量),所以,选项 A)中 funlvalue()的返回值是 1,Fun:i 引用的是外部变量会输出 2;fun2value();会调用常成员函数 int value()constretun i+1;使得外部静态变量 i的值增加为 3,故输出 3。20.下列对重载函数的描述中,( )是错误的。(分数:2.00)A.重载函数中不允许使用默认参数 B.重载函数中编译是根据参数表进行选择C.不要使用重载函数来描述毫不相干的函数D.构造函数重载将会给初始化带来多种方式解析:解析:
8、选项 A)中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫无相干的函数;重载函数中编译是根据参数表进行选择,包括参数的个数和类型。21.下列关于对象概念的描述中,正确的是( )。(分数:2.00)A.对象就是 C语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的 解析:解析:对象之间的信息传递是通过消息进行的。对象=方法(函数)+属性(数据),而 C语言的结构体其实就是不同类型数据的组合。并没有处理数据的方法。22.在下列 double型常量表示中,错误的是( )。(分数:2
9、.00)A.E15 B.35C.3E5D.3E5解析:解析:在 C+中,科学计数法表示小数的方法:E(e)左右必须有数,且 E(e)的右侧只能为整数。23.下列给字符数组进行初始化中,正确的是( )。(分数:2.00)A.char s1=“12345abed“;B.char s2131=“xyz“:C.char s33=a,x,y; D.char s41213=“xyz“,“mnp“;解析:解析:在 C+中定义二维数组时并赋值,则数组的行数可以省略不写。选项 A)、B)、D)均是字符字符串初始化。24.对于 int*pa5;的描述,正确的是( )。(分数:2.00)A.Da是一个指向数组的指针
10、,所指向的数组是 5个 int型元素 B.pa是一个指向某个数组中第 5个元素的指针,该元素是 int型变量C.pa5表示某个数组的第 5个元素的值D.pa是一个具有 5个元素的指针数组,每个元素是一个 int型指针解析:解析:语句“int*p5”表示一个数组 p,它的大小是 5,里面存放的数据类型是 int*,也就是整型指针。称之为指针数组(从右向左解析这个表示)。25.执行后的输出结果是( )。 #include void main() int i(0); while(+i) if(i=10)break; if(i3!=1) continue; coutiA.1 4 7 B.2 4 7C.
11、4 3 2D.7 3 1解析:解析:从 if(i=10)break;语句了解本循环只到 10,输出 i的条件是只要 1-10之间的数对 3取余为 1的输出,所以输出的 1 4 7。26.有如下程序: #include using namespace std; class A ( public: AOcout“A“; ); class Bpublic:B()cout“B“; ; class C:public A B b: public:C()cout“C“; ; int main() C obj; return0: 执行后的输出结果是( )。(分数:2.00)A.CBAB.BACC.ACBD.A
12、BC 解析:解析:此题中,语句 C obj对象初始化首先调用基类的构造函数 A(),输出“A”,其次是 C类中对象的构造函数的调用,即调用 B(),输出“B”;最后是调用自身的构造函数 C(),输出“C”。27.下面程序的输出结果是( )。 #include #include“stringh“ void main() char a=“Hello Test“,b=“Test“; strcpy(a,b); coutaA.HelloB.Test C.Hello TestD.Hello Test HelloTest解析:解析:程序中首先定义字符数组 a和 b,其值分别为“Hello Test”和“Te
13、st”。然后利用 strcpy复制函数,将 b的值复制给 a,所以输出 a的结果为 Test。28.有如下程序: #include void main() char str25=“1234“,“5678“,*p2; int i,j,s=0; for(i=0;i0;j+=2) s=10*s+pij-0; coutA.1357 B.2468C.3556D.23678解析:解析:程序中的“for(i=0;i29.以下程序的输出结果是( )。 #include using namespace std; void fun(char*q) +q; cout*qA.为空B.HIC.HELLO D.TEST解
14、析:解析:由程序 main主函数入手,调用 fun函数,在 fun函数中执行“cout*q*qendl:”输出该字符串值。30.下列程序用来判断数组中特定元素的位置所在,则输出结果为( )。 #include #include int fun(int*p,int n,int,j) int i; *j=0; for(i=0;ij,aD;(分数:2.00)A.2,9 B.3C.9D.3,9解析:解析:由程序中的主函数 main入手,调用 fun函数。其中第一个实参为数组 a的名字,数组名作为实参,传递的是数组的起始地址。所以在 fun函数中指针 p指向了数组的第一个元素 a0。另外实参整型 i传递
15、的是引用,也就是 i的地址。在 fun函数中在 for循环中,依次将当前元素 pi与 j指针值为标识的 p*j进行比较,取较大的。最后循环后的结果就是 p*存放数组中的最大值,并且指针 j为该值的标识位。可以看出数组的最大值是 9标识位为 2。31.以下程序的正确运行结果是( )。 #include int fun(int); void main() inta=2,i; for(i=0;ifun(a)A.4,5,6B.6,7,9C.7,8,9 D.7,7,7解析:解析:主函数中在 for循环中依次调用 fun函数。其中 c为静态变量,到程序结束有效。第一次循环中 2+1+4=7,第二次循环 2
16、0+1+5=8,第三次循环 2+1+6=9。即答案为 7 8 9。32.有以下程序: #include using namespace std; int a; int fun(); int main() extem int a; intb: a=10; b=fun(); coutbA.10B.1C.100 D.1000解析:解析:由主函数 main入手,首先定义外部变量 a,它的作用域为从变量的定义处开始,到本程序文件的末尾,赋值为 10。然后调用 fun函数,在 fun函数中计算 10*a,其中 a的作用域为到文件结尾,所以这里的 a为 10,即 10*10。33.静态数据成员在( )进行初
17、始化。(分数:2.00)A.成员函数列表B.类体外 C.构造函数D.成员函数解析:解析:静态数据成员不能在参数初始化表对静态数据成员初始化,只能在类体外进行初始化。34.有如下程序: #include using namespace std; class TestClass1 public: TestClass1()cout“TestClass1“; TestClass1()cout“TestClass1“; ; class TestClass2:public TestClass l TestClass1*p; public: TestClass2()cout“TestClass2“;p=ne
18、w TestClass1(); TestClass2()cout“TestClass2“;delete p; ; int main() TestClass2 obj; return 0: 执行这个程序的输出结果是( )。(分数:2.00)A.TestClass2TestClass 1 TestClass1TestClass1TestClass2TestClass1B.TestClass1 TestClass2TestClass1TestClass2TestClass1TestClass1 C.TestClass2TestClass1 TestClass1TestClass2TestClass1
19、TestClass1D.TestClass1 TestClass2TestClas1TestClass1TestClass2TestClass1解析:解析:派生类中构造函数的执行顺序是:先调用基类构造函数,对基类数据成员初始化,然后调用子对象构造函数,对子对象数据成员初始化;最后执行派生类构造函数本身,对派生类数据成员初始化。由主函数 main入手,首先定义了一个 TestClass2对象 obi。其中 TestClass2公共继承 TestClass1,对象 obi可以访问 TestClass1中的公有成员函数。TestClass2 中定义了一个 TestClass1的指针 p,给 p分配新
20、空间,即指向类 TestClass1,输出“TestClass1”。在 TestClass2的构造函数中首先输出“TestClass2”,并在 TestClass1构造函数中输出“TestClass1”。TestClass2 析构函数中输出“TestClass2”,删除指针 p,输出“TestClass1”。析构 TestClass1输出“TestClass1”。35.有如下类说明: class TestClass intx; public: TestClass(int n)x=n; ; class TestClass1:public TestClass inty; public: TestC
21、lass 1(int a,int b); ; 在构造函数TestClass1的下列定义中,正确的是( )。(分数:2.00)A.TestClass1:TestClass1(int a,int b):x(a),y(b)B.TestClass1:TestClass1(int a,int b):TestClass (a),y(b) C.TestClass1:TestClass1(int asint b):x(a),TestClass 1(b)D.TestClass1:TestClass1(int asint b):TestClass (a),TestClass1(b)解析:解析:题目中程序 Test
22、Class为基类,TestClass1 为派生类,派生类构造函数的一般形式为:派生类构造函数名(总参数类表):基类构造函数名(参数列表)派生类中新增数据成员初始化语句。派生类TestClass1的基类函数名为 TestClass,总参数为 int a,int b,所以选择 B)。36.在声明派生类时,如果不显示地给出继承方式,缺省的类继承方式是私有继承 private。 已知有如下类定义: class TestClass protected: void fun() ; class TestClass1:TestClass; 则TestClass类中的成员函数 fun(),TestClass1
23、类中的访问权限是( )。(分数:2.00)A.publicB.private C.protectedD.virtual解析:解析:程序中的 TestClass1为 TestClass的派生类,如果不写继承方式,则默认为 private,所以 TestClass 1私有继承 TestClass,对于基类中的保护成员,继承类的访问权限为 private。所以选择B)。37.下面叙述错误的是( )。(分数:2.00)A.对基类成员的访问能力在 private派生类中和 public派生类中是相同的B.基类的 private成员在 public派生类中不可访问C.基类中的 public成员在 prot
24、ected派生类中是 protected的D.基类中的 public成员在 protected派生类中仍然是 public的 解析:解析:基类的公有成员和保护成员在保护派生类中都成了保护成员,其私有成员仍为基类私有。38.在 C+中,实现封装性需借助于( )。(分数:2.00)A.枚举B.类 C.数组D.函数解析:解析:此题考查的是 C+语言中对象概念的理解。所谓封装性是指将数据和算法捆绑成一个整体,这个整体就是对象。C+语言通过建立用户定义类型“类”来支持封装性和信息隐藏。39.下列关于类和对象的叙述中,错误的是( )。(分数:2.00)A.一个类只能有一个对象 B.对象是类的具体实例C.类
25、是对某一类对象的抽象D.类和对象的关系是一种数据类型与变量的关系解析:解析:此题考查的是类和对象的概念。类是用户定义的一种数据类型,可以使用这个类型来说明一个或多个变量,即对象。40.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 return语句C.标准 C+要求在调用一个函数之前,必须先声明其原型 D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式解析:解析:此题考查的是有关函数的概念。内联函数是在函数定义之前加关键字 inline来声明的函数,而不是定义在另一个函数体内部的函数,故选项 A)错误;无返回值的函数在执行完最后一条语句后,会自动返回而不必加入 return语句,故选项 B)错误;如果函数只是返回值类型不同,而其他完全相同,则不能作为函数重载来使用。