Logo

2025年9月 GESP C++ 4级

GESP · 4级 · 2025-09

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

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

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

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

1

运行下面程序后变量a的值是( )。

int a = 42;
int* p = &a;
*p = *p + 1;
2

以下关于数组的描述中,( )是错误的。

3

给定如下定义的数组arr,则*(*(arr + 1) + 2)的值是( )。

int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
4

下面这段代码会输出( )。

int add(int a, int b = 1); // 函数声明
int main() {
    cout << add(2) << " " << add(2, 3);
    return 0;
}
int add(int a, int b) { // 函数定义
    return a + b;
}
5

下面这段代码会输出( )。

int x = 5;
void foo() {
    int x = 10;
    cout << x << " ";
}
void bar() {
    cout << x << " ";
}
int main() {
    foo();
    bar();
}
6

下面程序运行的结果是( )。

void increaseA(int x) {
    x++;
}
void increaseB(int* p) {
    (*p)++;
}
int main() {
    int a = 5;
    increaseA(a);
    cout << a << " ";
    increaseB(&a);
    cout << a;
}
7

关于结构体初始化,以下哪个选项中正确的是( )。

struct Point {int x,y;};
8

运行如下代码会输出( )。

struct Cat {
    string name;
    int age;
};
void birthday(Cat& c) {
    c.age++;
}
int main() {
    Cat kitty{"Mimi", 2};
    birthday(kitty);
    cout << kitty.name << " " << kitty.age;
}
9

关于排序算法的稳定性,以下说法错误的是( )。

10

下面代码试图实现选择排序,使其能对数组 nums 排序为升序,则横线上应分别填写( )。

void selectionSort(vector<int>& nums) {
    int n = nums.size();
    for (int i = 0; i < n - 1; ++i) {
        int minIndex = i;
        for (int j = i + 1; j < n; ++j) {
            if ( __________ ) { // 在此处填入代码
                minIndex = j;
            }
        }
        ____________________; // 在此处填入代码
    }
}
11

下面程序实现插入排序(升序排序),则横线上应分别填写( )。

void insertionSort(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while ( j >= 0 && ____________________ ) { // 在此处填入代码
            arr[j + 1] = arr[j];
            j--;
        }
        ____________________; // 在此处填入代码
    }
}
12

关于插入排序的时间复杂度,下列说法正确的是( )。

13

小杨正在爬楼梯,需要 阶才能到达楼顶,每次可以爬 阶或 阶,求小杨有多少种不同的方法可以爬到
楼顶,横线上应填写( )。

int climbStairs(int n) {
    if (n <= 2) return n;
    int prev2 = 1;
    int prev1 = 2;
    int current = 0;
    for (int i = 3; i <= n; ++i) {
        ________________ // 在此处填入代码
    }
    return current;
}
14

假设有一个班级的成绩单,存储在一个长度为 n 的数组 scores 中,每个元素是一个学生的分数。老师
想要找出 所有满足 scores[i] + scores[j] + scores[k] == 300 的三元组,其中 i < j < k。下面代码实现该功
能,请问其时间复杂度是( )。

int cnt = 0;
for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
        for (int k = j + 1; k < n; k++) {
            if (scores[i] + scores[j] + scores[k] == 300) {
                cnt++;
            }
        }
    }
}
15

关于异常处理,以下说法错误的是( )。

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

16

以下代码能正确初始化指针。

int a = 5;
int *p = a;
17

执行下面C++代码将输出 11。

int x = 10;
void f() {
    int x = x + 1;
    cout << x << endl;
}
int main() {
    f();
}
18

以下C++代码合法。

struct Student {
    string name;
    int age;
    float score;
};
Student* students = new Student[20];
19

执行下面C++代码将输出 10。

void func(int* p) {
    *p = 10;
}
int main() {
    int a = 5;
    func(&a);
    cout << a << endl;
    return 0;
}
20

下面代码将二维数组arr传递给函数f,函数内部用arr[i][j]访问元素,函数参数声明为int arr[]
[4]是错误的。

void f(int arr[][4], int rows) {
    // 访问 arr[i][j]
}
int main() {
    int arr[3][4] = { /* 初始化 */ };
    f(arr, 3);
}
21

递推是在给定初始条件下,已知前一项(或前几项)求后一项的过程。

22

虽然插入排序的时间复杂度为 ,但由于单元操作相对较少,因此在小数据量的排序任务中非常受欢
迎。

23

对整数数组{4, 1, 3, 1, 5, 2}进行冒泡排序(将最大元素放到最后),执行一轮之后是{4, 1, 3, 1,
2, 5}。

24

以下代码只能捕获int类型异常。

int main() {
    try {
        throw 42;
    } catch (...) {
        cout << "Caught" << endl;
    }
    return 0;
}
25

以下代码将 Hello 写入文件 data.txt。

ofstream file("data.txt");
cout<<"Hello"<< endl;
file.close();

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

26
编程操作题 25分

试题名称:排兵布阵

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

题目描述

作为将军,你⾃然需要合理地排兵布阵。地图可以视为 ⾏ 列的⽹格,适合排兵的⽹格以 1 标注,不适合排兵
的⽹格以 0 标注。现在你需要在地图上选择⼀个矩形区域排兵,这个矩形区域内不能包含不适合排兵的⽹格。请问
可选择的矩形区域最多能包含多少⽹格?

输入格式

第⼀⾏,两个正整数 ,分别表⽰地图⽹格的⾏数与列数。
接下来 ⾏,每⾏ 个整数 ,表⽰各⾏中的⽹格是否适合排兵。

输出格式

⼀⾏,⼀个整数,表⽰适合排兵的矩形区域包含的最⼤⽹格数。

数据范围

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

27
编程操作题 25分

试题名称:最长连续段

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

题目描述

对于 个整数构成的数组 ,如果对 都有 ,那么称数组 是⼀个连续段。
给定由 个整数构成的数组 ,你可以任意重排数组 中元素顺序。请问在重排顺序之后, 所有是连
续段的⼦数组中,最长的⼦数组长度是多少?
例如,对于数组 ,可以将其重排为 ,有以下 个⼦数组:
其中除 以外的⼦数组均是连续段,因此是连续段的⼦数组中,最长⼦数组长度为 。

输入格式

第⼀⾏,⼀个正整数 ,表⽰数组长度。
第⼆⾏, 个整数 ,表⽰数组中的整数。

输出格式

⼀⾏,⼀个整数,表⽰数组 重排顺序后,所有是连续段的⼦数组的最长长度。

数据范围

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

已答 0/27