
虹软C++笔试题B组
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本资料为虹软公司C++编程语言方向的B组笔试题目集锦,涵盖数据结构、算法基础及面向对象编程等核心内容。
### 虹软C++笔试题B组解析
#### 选择题
1. **C语言中将构造函数声明成protected会怎么样?**
- 解析:这里提到的是“C语言”,实际上C语言中并没有类的概念,也就没有构造函数、保护(protected)等概念。此问题应指的应该是C++。在C++中,如果将构造函数声明为protected,则意味着该构造函数只能被该类的成员函数以及派生类中的成员函数访问。因此,外部不能直接创建该类的对象。
2. **已知f(x)的原函数是e^x,求积分 ∫xf(x)dx**
- 解析:根据题目所给条件可知 f(x)= e^x 的原函数为 e^x,即 f(x) = e^x。要计算积分 ∫xe^xdx,这是一个常见的问题可以通过分部积分法来解决。设 u=x 和 dv=e^xdx,则 du=dx 且 v=e^x 。根据公式 ∫u dv = uv - ∫v du 得出 ∫xe^xdx = xe^x - e^x + C (其中C为常数)。
3. **A为任意一维列向量,AX=0,问X是什么?**
- 解析:假设A是非零的一维列向量,则 AX=0 表示矩阵 A 乘以 向量 X 的结果是零向量。该问题的解取决于 A 的性质。如果 A 是非奇异(即可逆),则只有当 X 是零向量时,AX = 0 才成立;若A不是满秩,则存在非零向量X使得 AX=0 成立。
4. **C是一个类,C a(4), b[5], *p[2]共调用几次?**
- 解析:这道题考查的是构造函数的调用次数。对于`C a(4)`,这是直接调用一次构造函数;对于 `C b[5]` ,创建一个包含 5 个 C 对象的数组,则会调用五次构造函数;而指针数组 `C *p[2]` 并未初始化任何对象,因此不会调用任何构造函数。总计调用了六次构造函数。
#### 填空题
1. **代码分析**
```cpp
struct B {
virtual ~B() { cout << b << endl; }
};
struct D : B {
~D() { cout << D << endl; }
};
typedef B B2;
D d;
B *p = &d;
void f() {
d.B::~B();
p->~B();
p->~B2();
p->B2::~B();
}
```
- 解析:这段代码涉及虚析构函数的调用和多重继承。D类继承自B,且B的析构函数被声明为虚函数。在`f()`中首先通过d对象调用了其基类 B 的析构函数;然后使用指针p两次尝试调用 B 类的析构函数。由于typedef定义了B2是与B相同的类型,因此 `p->~B2(); p->B2::~B();` 实际上是一样的操作。所以整个f中一共调用了三次虚构造器。
2. **二分查找填空**
- 解析:二分查找是一种在有序数组内高效搜索特定元素的算法。每次迭代过程中,通过将查询区间减半来缩小范围直至找到目标值或确定不存在为止。基本步骤包括:
1. 初始化两个指针low和high分别指向数组起始与结束位置。
2. 计算中间索引mid = (low + high) / 2。
3. 如果中间元素等于目标,则返回该索引;否则,根据大小关系决定继续在[mid+1, high]或[low, mid-1]范围内查找。
3. **结构体s1的大小**
```cpp
struct s1 {
char ch;
char *p;
union {
short a, b;
unsigned int c : 2, d : 1;
};
struct s1 *next;
};
```
- 解析:为了计算结构体`s1`的大小,需要考虑每个成员变量占用的空间及对齐规则。char占1字节;指针(*p和*next)通常为4或8字节;union中的最大成员unsigned int 占4字节。整个union按最大的类型对齐即4字节。因此结构体`s1`的大小在32位系统中是16字节。
4. **1000个人进行淘汰赛,到冠军至少要多少场比赛**
- 解析:每一轮比赛都会有一半选手被淘汰,直到
全部评论 (0)


