Logo

2025年3月 GESP C++ 4级

GESP · 4级 · 2025-03

60:00
满分 100
时长 60 分钟
27

2025年3月 GESP C++ 4级认证考试真题(含编程操作题部分)

答题卡 已答 0/27
已答 正确 错误 编程题

单选题(共 15 题,每题 2 分)

1

关于下述代码,说法错误的是( )。

int multiply(int x, int y);
int main() {
    int a = 4;
    int b = 5;
    int result = multiply(a, b);
    std::cout << "The result is: " << result << std::endl;
    return 0;
}
int multiply(int x, int y) {
    return x * y;
}
2

执行下述代码将输出( )。

int x = 10;
void func() { int x = 20; std::cout << x; }
int main() {
    func();
    std::cout << x;
    return 0;
}
3

执行下述代码后,变量a的值为( )。

int a = 10;
int* p = &a;
*p = 20
4

以下哪种参数传递方式可以避免拷贝大型对象?

5

执行下述代码,将输出( )。

void swap(int a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}
int main() {
    int x = 1, y = 2;
    swap(x, y);
    std::cout << x << y;
    return 0;
}
6

下面的描述中,( )正确定义一个名为Person的结构体并正确初始化了一个Person结构体的变量p。

7

给定如下代码,

struct Person {
    std::string name;
    int age;
    struct Address {
        std::string street;
        std::string city;
    };
    Address address;
};

下面描述错误的是( )。

8

假设int arr[2][3] = {{1,2,3},{4,5,6}};,则arr[1][2]的值是( )。

9

下面( )正确定义了二维数组。

10

小杨正在爬楼梯,需要爬 阶才能到达楼顶。如果每次可以爬 个或 个台阶,下面代码采用递推算法来计算
一共有多少种不同的方法可以爬到楼顶,则横线上应填写( )。

int f(int n) {
    if (n == 1 || n == 2)
    return n;
    int f1 = 1;
    int f2 = 2;
    int res = 0;
    for (int i = 3; i <= n; i++) {
        ________________________________ // 在此处填入代码
    }
    return res;
}
11

给定如下算法,其时间复杂度为( )。

bool f(int arr[], int n, int target) {
    for (int i = 0; i < (1 << n); i++) {
        int sum = 0;
        for (int j = 0; j < n; j++) {
            if (i & (1 << j)) {
                sum += arr[j];
            }
        }
        if (sum == target) return true;
    }
    return false;
}
12

下面关于排序稳定性的描述,正确的是( )。

13

对数组arr[]={5, 3, 8, 1}进行升序排序,执行第一轮冒泡排序后数组arr中的内容为( )。

14

运行下面的代码,将出现( )。

double hmean(double a, double b) {
    if (a == -b )
    throw runtime_error("Runtime error occurred.");
    return 2.0*a*b/(a + b);
}
int main() {
    double x = 10;
    double y = -10;
    try {
        int result = hmean(x, y);
        cout << "hmean: " << result << endl;
    }
    catch (const runtime_error& e) {
        cout << "Caught: " << e.what() << endl;
    } catch (...) {
        cout << "Caught an unknown exception." << endl;
    }
    return 0;
}
15

下面哪种方式不能实现将字符串"Happy Spring!"输出重定向到文件log.txt( )。

判断题(共 10 题,每题 2 分)

16

函数是C++中的核心概念,用于封装可重用的代码块。

17

在C++中,函数的返回类型可以省略,默认为int。

18

结构体的成员默认是public访问权限。

19

假设整数数组arr[4]= {0, 1, 2, 3};的第一个元素在内存中的地址为0x7ffee4065820, 经过int* p
= arr; p += 1;后,指针p的值是1。

20

二维数组作为函数参数时,必须显式指定所有维度的大小。

21

递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法。

22

考虑最坏情况下冒泡排序算法的时间复杂度, 为待排序数字的数目为 的复杂度,则其递推关系式为
, 。

23

插入排序在最好情况(已有序)下的时间复杂度是 。

24

对数组arr[]={4, 3, 1, 5, 2}进行升序排序,执行第一轮选择排序后数组arr中的内容是{1, 4, 3, 5,
2}。

25

未捕获异常会调用std::terminate终⽌程序。

编程操作题(共 2 题,共 50 分)

26
编程操作题 25分

试题名称:荒地开垦

时间限制:1.0 s | 内存限制:512.0 MB

输入格式

第⼀⾏包含两个正整数 ,含义如题⾯所⽰。
之后 ⾏,每⾏包含⼀个长度为 且仅包含字符 . 和 # 的字符串。如果为 .,代表该位置为荒地,如果为 #,
代表该位置为杂物。

输出格式

输出⼀个整数,代表在清除⾄多⼀个位置的杂物的情况下,最多能够开垦的荒地块数。

样例解释

移除第⼆⾏从左数第⼆块空地的杂物后:
1 .....
2 ....#
3 .....
第⼀⾏从左数前 块荒地,第⼆⾏从左数前 块荒地,第三⾏从左数前 块荒地,均可开垦, 。

数据范围

对于全部数据,保证有 。

27
编程操作题 25分

试题名称:二阶矩阵

时间限制:1.0 s | 内存限制:512.0 MB

题目描述

⼩ A 有⼀个 ⾏ 列的矩阵 。
⼩ A 认为⼀个 的矩阵 是好的,当且仅当 。其中 表⽰矩阵 的第 ⾏第 列
的元素。
⼩ A 想知道 中有多少个好的⼦矩阵。

输入格式

第⼀⾏,两个正整数 。
接下来 ⾏,每⾏ 个整数 。

输出格式

⼀⾏,⼀个整数,表⽰ 中好的⼦矩阵的数量。

数据范围

对于所有测试点,保证 , , 。

已答 0/27