#G1104. 2023年09月 GESP C++ 六级

2023年09月 GESP C++ 六级

GESP 202309 C++ 六级

第 1 题

近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?({{ select(1) }})。

  • 输入
  • 输出
  • 控制
  • 记录

第 2 题

如果 a 和 b 均为 int 类型的变量,且 b 的值不为 0,那么下列能正确判断“a 是 b 的 3 倍”的表达式是({{ select(2) }})。

  • (a >> 3 == b)
  • (a - b) % 3 == 0
  • (a / b == 3)
  • (a == 3 * b)

第 3 题

以下不属于面向对象程序设计语言的是({{ select(3) }})。

  • C++
  • Python
  • Java
  • C

第 4 题

下面有关 C++ 类定义的说法,错误的是({{ select(4) }})。

  • C++ 类实例化时,会执行构造函数。
  • C++ 自定义类可以通过定义构造函数实现自动类型转换。
  • C++ 自定义类可以通过重载 >、< 等运算符实现大小比较。
  • C++ 自定义类可以包含任意类型的成员。

第 5 题

有关下面 C++ 代码的说法,错误的是( )。

#include <iostream>
#include <string>
using namespace std;
class MyStr {
    string data;
public:
    MyStr(string _data): data(_data) {}
};
int main() {
    MyStr st("ABC");
    cout << st << endl;
    return 0;
}
{{ select(5) }}
- 代码 `cout << st << endl;` 会报错,因为没有为 `MyStr` 类重载 `<<` 运算符。
- 第 6 行代码的 `data` 是 `MyStr` 类的成员变量。
- 代码 `MyStr st("ABC");` 不会报错,将执行构造函数。
- 代码 `cout<< st.data <<endl;` 可输出 `ABC`。
---

### 第 6 题
下列关于命名空间的说法错误的是({{ select(6) }})。
- 命名空间可以嵌套,例如 `namespace A { namespace B { int i; }; }`。
- 命名空间只可以在全局定义。
- 命名空间中可以存放变量和函数。
- 如果程序中使用了 `using` 命令同时引用了多个命名空间,并且命名空间中存在相同的函数,会出现程序运行错误。
---

### 第 7 题
有关下面 C++ 代码的说法,正确的是( )。
```cpp
#include <iostream>
using namespace std;
class ManyData {
    int * __data;
    int head, tail, capacity;
public:
    ManyData(int cap) {
        capacity = cap;
        __data = new int[capacity];
        head = tail = 0;
    }
    void push(int val) {
        __data[tail++] = val;
    }
    int pop() {
        return __data[--tail];
    }
    int size() {
        return tail - head;
    }
};
int main() {
    auto myData = ManyData(100);
    myData.push(1);
    myData.push(2);
    myData.push(3);
    myData.push(100);
    cout << myData.size() << endl;
    cout << myData.pop() << endl;
    return 0;
}

{{ select(7) }}

  • 这段代码不能正常运行。
  • ManyData 类可用于构造队列(Queue)数据结构。
  • 在上面代码环境,代码 cout<< myData.__data[0] << endl; 可以增加到代码 main 函数末尾(return 0; 之前),且不会导致报错。
  • 可以为 ManyData 类的 push()、pop() 函数增加异常处理代码,否则在使用 ManyData 类时可能导致运行时错误或逻辑错误(不一定局限于上述代码中的 main 函数)。

第 8 题

有关下面 C++ 代码的说法,错误的是( )。

#include <iostream>
using namespace std;
class MoreData {
    int * __data;
    int head, tail, capacity;
public:
    MoreData(int cap) {
        capacity = cap;
        __data = new int[capacity];
        head = tail = 0;
    }
    MoreData & push(int val) {
        __data[tail++] = val;
        return *this;
    }
    int pop() {
        return __data[head++];
    }
    int size() {
        return tail - head;
    }
};
int main() {
    auto myData = MoreData(100);
    myData.push(1);
    myData.push(2);
    myData.push(3);
    myData.push(11).push(12).push(13);
    cout << myData.pop() << endl;
    return 0;
}

{{ select(8) }}

  • 这段代码不能正常运行。
  • MoreData 类的 push 方法返回 *this,支持链式调用。
  • 代码 myData.push(11).push(12).push(13); 是合法的链式调用。
  • 代码 cout << myData.pop() << endl; 会输出 1,因为 pop 是从 head 位置取出元素。

第 9 题

某内容仅会出现 ABCDEFG ,其对应的出现概率为 0.40、0.30、0.15、0.05、0.04、0.03、0.03,如下图所示。 按照哈夫曼编码规则,假设 B 的编码为 11 ,则 D 的编码为( )。 ({{ select(9) }})

  • 10010
  • 10011
  • 10111
  • 10001

第 10 题

下面有关格雷码的说法,错误的是({{ select(10) }})。

  • 在格雷码中,任意两个相邻的代码只有一位二进制数不同。
  • 格雷码是一种唯一性编码。
  • 在格雷码中,最大数和最小数只有一位二进制数不同。
  • 格雷码是一种可靠性编码。

第 11 题

有关下图的二叉树,说法正确的是( )。 ({{ select(11) }})

  • 既是完全二叉树也是满二叉树。
  • 既是二叉搜索树也是平衡二叉树。
  • 非平衡二叉树。
  • 以上说法都不正确。

第 12 题

NN 个节点的二叉搜索树,其查找的平均时间复杂度为({{ select(12) }})。

  • O(1)O(1)
  • O(N)O(N)
  • O(logN)O(\log N)
  • O(N2)O(N^2)

第 13 题

青蛙每次能跳 1 或 2 步。下面是青蛙跳到第 NN 步台阶 C++ 实现代码。该段代码采用的算法是( )。

int jumpFrog(int N) {
    if (N <= 3)
        return N;
    return jumpFrog(N - 1) + jumpFrog(N - 2);
}

(洛谷注:本题答案存在争议) {{ select(13) }}

  • 递推算法
  • 贪心算法
  • 动态规划算法
  • 分治算法

第 14 题

NN 个节点的双向循环链,在其中查找某个节点的平均时间复杂度是({{ select(14) }})。

  • O(1)O(1)
  • O(N)O(N)
  • O(logN)O(\log N)
  • O(N2)O(N^2)

第 15 题

关于 C++ 语言,以下说法不正确的是({{ select(15) }})。

  • 若对象被定义为常量,则它只能调用以 const 修饰的成员函数。
  • 所有的常量静态变量都只能在类外进行初始化。
  • 若类 A 的对象 a 是类 B 的静态成员变量,则 a 在 main() 函数调用之前应被初始化。
  • 静态全局对象、常量全局对象都是在 main 函数调用之前完成初始化,执行完 main 函数后被析构。

第 16 题

TCP/IP 的传输层的两个不同的协议分别是 UDP 和 TCP({{ select(16) }})。

  • 正确
  • 错误

第 17 题

5G 网络中,5G 中的 G 表示 Gigabytes/s,其中 1 GB = 1024 MB({{ select(17) }})。

  • 正确
  • 错误

第 18 题

在面向对象中,类是对象的实例({{ select(18) }})。

  • 正确
  • 错误

第 19 题

在 C++ 类的定义中,使用 static 修饰符定义的静态成员被该类的所有对象共享({{ select(19) }})。

  • 正确
  • 错误

第 20 题

在 C++ 类的定义中,可以定义初始化函数或运算符函数等({{ select(20) }})。

  • 正确
  • 错误

第 21 题

DFS 是深度优先算法的英文简写({{ select(21) }})。

  • 正确
  • 错误

第 22 题

哈夫曼编码是一种有损压缩算法({{ select(22) }})。

  • 正确
  • 错误

第 23 题

有些算法或数据结构在 C/C++ 语言中使用指针实现,一个典型的例子就是链表。因此,链表这一数据结构在 C/C++ 语言中只能使用指针来实现({{ select(23) }})。

  • 正确
  • 错误

第 24 题

如果节点数为 NN,广度搜索算法的最差时间复杂度为 O(N)O(N)({{ select(24) }})。

  • 正确
  • 错误

第 25 题

二叉搜索树的左右子树也是二叉搜索树({{ select(25) }})。

  • 正确
  • 错误