第2课 - 腾讯笔试题精选二
- 考虑函数原型void hello(int a, int b=7,char* pszC=”*”),下面的函数调用中属于不合法调用的是()
- hello(5)
- hello(5,8)
- hello(6,”#”)
- hello(0,0,”#”)
解析:A在C语言中会编译出错,没有显示后面的参数,但是在C++中是合法的,在C++中有些参数如果有了默认值,可以不幅值使用,使用规则是从左到右进行,但是却不能掉过中间的参数。
正确选C
考点:C++默认元素参数
- 一个有800个结点的完全二叉树,问有多少个叶子结点()
- 100
- 200
- 400
- 无法确定
解析:有固定结点的完全二叉树它的叶子结点也是固定的。满二叉树:二叉树中所有的分支结点都是2,而且叶子结点都在同一层次上,称这样的二叉树为满二叉树。完全二叉树:如果一颗具有n个结点的高度为k的二叉树,它的每一个结点斗鱼高度为k的man二叉树中编号为n-1的结点对用,则称这可二叉树为完全二叉树,从上到下从左到右编号。完全二叉树的高度为:log2800+1,有10层,前9层是满二叉树有511(29-1)个结点,第十层有289个结点,289个结点赌赢145个父结点,第九层一共有256个结点,也就是有111个没有子节点,111和189求和为400。
正确选C
考点:数据结构-二叉树
- 若6元素A、B、C、D、E、F出栈顺序为B、D、C、F、E、A,则栈的最小容量为()
A.3
B.4
C.5
D.6
解析:栈的基本性质是后进先出,AB进栈,B出栈,CD进栈,DC出栈,EF进栈FE出栈,A出栈。
正确选A
考点:数据结构-栈
- 排序算法的稳定是指,关键码相投的记录排序前后相对位置不发生改变,下面哪种排序算法是不稳定的()
- 插入排序
- 冒泡排序
- 快速排序
- 归并排序
解析:快速排序和希尔排序是不稳定的。
正确选C
考点:数据结构-排序
- 如下关于进程的描述不正确的是()
A.进程在退出时会自动关闭自己打开的所有文件
B. 进程在退出时会自动关闭自己打开的网络链接
C. 进程在退出时会自动销毁自己打开的所有线程
D.进程在退出时会自动销毁自己打开的共享内存
解析:共享内存是线程间通信的方式之一。操作系统将进程看做是资源分配的基本单位,一个进程退出了,操作系统开始回收系统资源。系统资源包括文件描述符、网络连接和线程。内存也是一种系统资源,但是共享内存是多个进程一起享用的,不能因为一个进程的退出销毁。
正确选D
考点:操作系统,进程通信
- 在一个cpp文件里面,定义了一个static类型的全局变量,下面一个正确的描述是()
- 只能在该cpp所在的编程模块中使用该变量
- 该变量的值是不可改变的
- 该变量不能再类的成员函数中引用
- 该变量只能是基本类型(如int,char)不能是C++类型
解析:const变量不可改变,B错误;全局变量可以在类的成员中使用,只要限制在一个文件中即可,C错误;全局变量可以是基本类型也可以是类的类型。
正确选A
考点:C语言
- 下面有关重载函数的说法中正确的是()
A.重载函数必须具有不同的返回值类型
B. 重载函数形参个数必须不同
C. 重载函数必须有不同的形参列表
D.重载函数名可以不同
解析:C++中有重载,使用一个函数名定义多个函数,C语言中没有重载。重载是根据参数列表来区分的,不是通过返回值;参数列表不同,不代表个数不同;重载函数名一定是相同的。
正确选C
考点:C++
- 某火车站要通过一条栈道(先进后出)来调换进入车站的列车顺序,若进栈的列车顺序为A、B、C,则下列哪个出站顺序不可能()
- ABC
- ACB
- CAB
- CBA
解析:进了就出来ABC,都进了再出CBA,A进了就出其他入栈ACB。
正确选C
考点:数据结构-栈
- 下列哪种情况下,B不能隐式转换为A()
- class B:public A{};
- class A:public B{};
- class B{operator A();};
- class A{A(const B&);};
解析:B是A的子类,B可以隐式转换为A,需要父类对象的时候都可以用子类对象来代替,但是反过来肯定不行;operator是用来操作符重载的,也可是类型转换函数,将B隐式转换为A;D选项是构造函数,可以达到期望的效果。作为隐式类型转换,编译器优先选择operator函数(gcc编译器),之后选择构造函数。在编译过程中我们要避免隐式转换,人为的强制类型转换。
正确选B
考点:C++
- 分析下面程序的运行结果:()
#include<iostream>
class CBbas
{
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;
}
- constructing CSub class
constructing CBase class
destructing CSub class
destructing CBase class
- constructing CBase class
constructing CSub class
destructing CBase class
destructing CSub class
- constructing CBase class
constructing CSub class
destructing CSub class
destructing CBase class
- constructing CSub class
constructing CBase class
destructing CBase class
destructing CSub class
解析:构造函数的使用原则是先父母后客人再自己,析构函数与构造函数相反。
正确选C
考点:C++构造和析构
- 两个字符串char* a,char* b,输出b在a中的位置次序。void output_posit
ion(const char* a, const char* b);如:a = “abdbcc” b = “abc”,b在a中的位置次序为:014 015 034 035
解析:将b中每个元素的在a中的位置依次找出来
#include <cstdlib>
#include <iostream>
#include <string>
#include <list>
using namespace std;
void abstring(string& a, int ai, string& b, int bi, list<int>& l)
{
if( bi == b.length() )
{
for(list<int>::iterator it=l.begin(); it!=l.end(); it++)
{
cout<<*it;
}
cout<<endl;
}
else
{
for(int i=ai; i<a.length(); i++)
{
if( a[i] == b[bi] )
{
l.push_back(i);
abstring(a, i + 1, b, bi + 1, l);
l.pop_back();
}
}
}
}
void output_postion(const char* a, const char* b)
{
string as = a;
string bs = b;
list<int> l;
abstring(as, 0, bs, 0, l);
}
int main(int argc, char *argv[])
{
output_postion("abdbcc", "abc");
cout << "Press the enter key to continue ...";
cin.get();
return EXIT_SUCCESS;
}