1、国家二级 C+机试(选择题)模拟试卷 133及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下面关于算法的叙述中,正确的是( )。(分数:2.00)A.算法的执行效率与数据的存储结构无关B.算法的有穷性是指算法必须能在执行有限个步骤之后终止C.算法的空间复杂度是指算法程序中指令(或语句)的条数D.以上三种描述都正确2.下列二叉树描述中,正确的是( )。(分数:2.00)A.任何一棵二叉树必须有一个度为 2的结点B.二叉树的度可以小于 2C.非空二叉树有 0个或 1个根结点D.至少有 2个根结点3.如果进栈序列为 A,B,C,D,则可能的出栈序
2、列是( )。(分数:2.00)A.C,A,D,BB.B,D,C,AC.C,D,A,BD.任意顺序4.下列各选项中,不属于序言性注释的是( )。(分数:2.00)A.程序标题B.程序设计者C.主要算法D.数据状态5.下列模式中,能够给出数据库物理存储结构与物理存取方法的是( )。(分数:2.00)A.内模式B.外模式C.概念模式D.逻辑模式6.下列叙述中,不属于软件需求规格说明书的作用的是( )。(分数:2.00)A.便于用户,开发人员进行理解和交流B.反映出用户问题的结构,可以作为软件开发工作的基础和依据C.作为确认测试和验收的依据D.便于开发人员进行需求分析7.下列不属于软件工程 3个要素的
3、是( )。(分数:2.00)A.工具B.过程C.方法D.环境8.数据库系统在其内部具有 3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是 ( )。(分数:2.00)A.外模式B.概念模式C.内模式D.存储模式9.将 E-R图转换到关系模式时,实体与联系都可以表示成( )。(分数:2.00)A.属性B.关系C.记录D.码10.某二叉树中度为 2的结点有 10个,则该二叉树中有( )个叶子结点。(分数:2.00)A.9B.10C.11D.1211.有如下程序: #include using namespace std; class A public: A()cout*、:、?:这五个运算
4、符之外,其他运算符都可以重载。20.下列重载函数中,正确的是( )。(分数:2.00)A.void fun(int a,float b);void fun(int C,foat d)B.void fun(int a,float b);void fun(float a,int b) C.float fun(int a,float b);int fun(int b,float a);D.int fun(int a,hat b);float fun(int a,int b)解析:解析:所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。2
5、1.以下不正确的是( )。(分数:2.00)A.语句 for(i=0;i+)表示无限循环B.for(;)表示无限循环C.for()表示无限循环 D.while(1)表示无限循环解析:解析:选项 C)是一个错误的 for语句格式,for()语句中三个表达式可以省略。但是两个分号(:)不能省略。22.有如下程序: intx=3; dox 一=2: countwho()则是调用基类中的 who函数,输出TestClass。32.下列有关继承和派生的叙述中,正确的是 ( )。(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成
6、员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 解析:解析:如果派生类私有继承基类,不能访问基类中的私有成员,所以 A)、B)是错误的。派生类是对基类的具体化,所以 C)错误的。如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类,即选择 D)。33.下面叙述错误的是( )。(分数:2.00)A.派生类可以使用 private派生B.对基类成员的访问必须是无二义性的C.基类成员的访问能力在派生类中维持不变 D.赋值兼容规则也适用于多继承的组合解析:解析:在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的
7、公用成员直接作为派生类的公用成员。涉及如何确定基类的成员在派生类中的访问属性问题,不仅要考虑对基类成员所声明的访问属性,还要考虑派生类所声明的对基类的继承方式,根据这两个因素共同决定基类成员在派生类中的访问属性。所以本题选择 C)。34.下列程序的输出结果为 2,横线处应添加语句 ( )。 #include using namespace std; class TestClass 1 public: void fun()coutfun(); delete p; retum 0: (分数:2.00)A.publicB.privateC.virtual D.protected解析:解析:由主函数
8、main入手,定义 TestClass1类的指针对象 p指向派生类 TestClass2。因为基类和派生类中都有 fun函数,题目要求输出为 2,就是基类对象访问派生类中 fun函数。通过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同名函数。所以这里将基类中的 fun函数声明为virtual。并且当一个成员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。35.要使程序执行后的输出结果为 ABCD,应在横线处添加语句( )。 #include using namespace std; class A public:A()coutB; ; class C:virtual pub
9、lic A public:C()coutC;) ;class D:public B,public C public:DOcoutD; ; void main()D obj;(分数:2.00)A.public AB.private AC.protected AD.virtual public A 解析:解析:由主函数 main入手,定义了类 D对象 obj。其中 D为类 B和 C的公有继承,A 是 C的虚基类。题目中要求的输出结果为“ABCD”,依次为类 A,类 B,类 C,类 D中构造函数的输出语句。为了保证基类通过多条路径被派生类继承时,即保证 A只被继承一次,输出一个 A,所以不但需要声明
10、 A为 C的虚基类,同样也要声明 A为 B的虚基类。36.下面的描述中,正确的是 ( )。(分数:2.00)A.virtual可以用来声明虚函数 B.含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类C.即使基类的构造函数没有参数,派生类也必须建立构造函数D.静态数据成员可以通过成员初始化列表来初始化解析:解析:在基类中用 virtual声明成员函数为虚函数,所以 A是正确的。纯虚函数是在声明虚函数时被“初始化”为 0的虚函数。纯虚函数是一种特殊的虚函数,它没有具体的实现。静态数据成员函数只能在类外进行初始化。37.若要把函数 void fun0定义为 TestClass的友元函数,则应该
11、在类 TestClass的定义中加入的语句是 ( )。(分数:2.00)A.void friend fun()B.friend fun()C.friend void fun() D.TestClass void fun()解析:解析:如果在类以外的其他地方定义了一个函数,在类体中用 friend对该函数进行声明,此函数就称为本类的友元函数。因为函数为 voidfun(),根据友元定义补全语句为“friend void fun();”。38.已知递归函数 fun的定义如下: int fun(hatn) iffn=1)retum 1;递归结束情况 else return n*fun(n-2);递归
12、 则函数调用语句 fun(S)的返回值是( )。(分数:2.00)A.5B.12C.15 D.30解析:解析:递归函数 fun被定义为含有参数 int n,返回整型。其中 fun函数递归调用本身,当 n=1时,fun返回 1,如果大于 1那么执行 n*fun(n一 21。所以,当 n等于 5时,执行 5*fun(3);当 3时继续调用fun,3*fun(1),即 fun(5)=5*(3*fun(1),答案为 15。39.字面常量 42、42、42L 的数据类型分别是 ( )。(分数:2.00)A.long,double,intB.long,float,intC.int,double,long
13、D.int,float,long解析:解析:此题考查的知识点是字面常量。对于整型字面常量,只要没有超过 C+中整数所能表示的范围,C+将自动按整数来存储此数,也可以通过在整型字面常量后添加 u或 1来指定无符号整数或长整数来存储;对于实型字面常量,C+将自动按照双精度数来存储,也可以通过在实型字面常量后添加 f来指定按单精度数存储。40.下列有关内联函数的叙述中,正确的是( )。(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline来定义C.内联函数是通过编译器来实现的 D.内联函数函数体的最后一条语句必须是 return语句解析:解析:此题考查的是内联函数的概念。在调用时,内联函数会像宏函数一样的展开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项 A)错误:即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项 B)错误;内联函数只是比普通函数有更高的执行效率。