您的位置:首页 > 编程语言 > C语言/C++

C++笔试题深度分析 第二波 上

2014-10-03 22:28 155 查看
1. 考虑函数原型 void hello(int a, int b=7, char* pszC="*"),下面的函数调用中属于不

合法调用的是( )

A. hello(5)

B. hello(5, 8)

C. hello(6, "#")

D. hello(0, 0, "#")



解释:考C++中参数的默认变量 选C



2. 一个有 800 个结点的完全二叉树,问有多少个叶子结点? ( )

A. 100

B. 200

C. 400

D. 无法确定



解释:先求完全二叉树的深度 h = log2(800) + 1= 9 + 1 = 10;

那么前面9层的节点数为 2的9次幂 - 1 为 511;

最后一层节点数为 800 - 511 = 289;

289 = 288 + 1 ; 288 所以第九层当中有144个节点有子节点;

完全二叉树第9行也有叶子节点;

所以第九层有 144+1 = 145个节点不是叶子节点;

256- 144 -1 = 111个叶子节点;

所以有111+289 = 400个叶子节点;

完全二叉树特点:

叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1;



如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n= n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2。
总结起来,就是 n0=[n/2],其中[]表示上取整。可根据完全二叉树的结点总数计算出叶子结点数。
采用公式 800/2 = 400;

选C;



3. 若 6 元素为 A、B、C、D、E、F 出栈顺序为 B、D、C、F、E、A,则栈的最小容量为

( )

A. 3

B. 4

C. 5

D. 6



解释:选A



4. 排序算法的稳定是指,关键码相同的记录排序前后相对位置不发生改变,下面哪种排序

算法是不稳定的( )

A. 插入排序

B. 冒泡排序

C. 快速排序

D. 归并排序



解释: 常用算法中只有快速排序与希尔排序是不稳定的;



5. 如下关于进程的描述不正确的是( )

A. 进程在退出时会自动关闭自己打开的所有文件

B. 进程在退出时会自动关闭自己打开的网络链接

C. 进程在退出时会自动销毁自己创建的所有线程

D. 进程在退出时会自动销毁自己打开的共享内存



解释:共享内存既然是共享的,则可能被几个进程共同占有,一个进程结束,如果销毁了这段共享的内存那么其他进程就会招到毁灭;



6. 在一个 cpp 文件里面,定义了一个 static 类型的全局变量,下面一个正确的描述是( )

A. 只能在该 cpp 所在的编译模块中使用该变量

B. 该变量的值是不可改变的

C. 该变量不能在类的成员函数中引用

D. 该变量只能是基本类型(如 int, char)不能是 C++类型



解释:A正确,static具有限***用域的作用;D中可以是类类型;BC明显错误;



7. 下面有关重载函数的说法中正确的是( )

A. 重载函数必须具有不同的返回值类型

B. 重载函数形参个数必须不同

C. 重载函数必须有不同的形参列表

D. 重载函数名可以不同



解释:C很简单



8. 某火车站要通过一条栈道(先进后出)来调换进入车站的列车顺序,若进站的列车顺序为

A、B、C,则下列哪个出站顺序不可能? ( )

A. ABC

B. ACB

C. CAB

D. CBA



解释:选C 很简单



9. 下面哪种情况下,B 不能隐式转换为 A ? ( )

A. class B:public A{ };

B. class A:public B{ };

C. class B{ operator A(); };

D. class A{ A(const B&); };



解释:根据赋值兼容性原则,子类可以转换为父类赋值给父类对象;但是反过来不正确,所以B错误

C中为 类型转换函数,D中为 采用构造函数的方式转换,C和D都可以转换成功!



10. 分析下面程序的运行结果: ( )

#include<iostream.h>

class CBase

{

public:

CBase(){ cout<<"constructing CBase class"<<endl; }

~CBase(){ cout<<"destructing CBase class"<<endl; }

};

class CSub : public CBase

{

public:

CSub(){cout<<"constructing CSub class"<<endl;}

~CSub(){cout<<"destructing CSub class"<<endl;}

};

void main()

{

CSub obj;

}

A. constructing CSub class

constructing CBase class

destructing CSub class

destructing CBase class

B. constructing CBase class

constructing CSub class

destructing CBase class

destructing CSub class

C. constructing CBase class

constructing CSub class

destructing CSub class

destructing CBase class

D. constructing CSub class

constructing CBase class

destructing CBase class

destructing CSub class



解释:很简单  选C 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: