编程未来 Coding Future

2026年6月 GESP C++ 4级

GESP · 4级 · 2026-06

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

2026年6月 GESP C++ 4级认证考试真题(客观题部分)

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

1

小杨正在编写一个“数字交换器”程序,他希望通过函数交换两个变量的值。请问运行以下代码后,屏幕上输
出的是( )。

void exchange(int *a, int &b) {
    int t = *a;
    *a = b;
    b = t;
}

int main() {
    int x = 100, y = 200;
    exchange(&x, y);
    cout << x << " " << y;
    return 0;
}
2

下面程序想通过函数计算三门课总分,横线处应填入的是( )。

int sumScore(int a, int b, int c) {
    return a + b + c;
}

int main() {
    int chinese = 88, math = 95, english = 90;
    int total = __________;
    cout << total;
    return 0;
}
3

下面程序输出结果是( )。

int addOne(int x) {
    return x + 1;
}

int main() {
    int a = 6;
    cout << addOne(a) + addOne(3);
    return 0;
}
4

关于下面程序,说法正确的是( )。

void show() {
    int stars = 5;
}

int main() {
    cout << stars;
    return 0;
}
5

小杨在调试一个“等级提升”系统,代码逻辑如下,执行后 *p 的值是( )。

int lv = 5, next_lv = 6;
int *p = &lv;
*p = *p + 1;
p = &next_lv;
6

小杨正在开发一款名为“星际网格”的游戏,他用二维数组 int map[5][4]; 来表⽰地图。已知 int 占
字节,如果 map 的内存地址是 0x2000,则表达式 &map + 1 的地址值是( )。

7

执行完下面代码后,变量 val 的值是( )。

int data[] = {10, 20, 30, 40, 50};
int *ptr = data + 2;
int val = *(ptr - 1) + *(ptr + 1);
8

某班 个小组、每组 名同学的分数存入下面的二维数组 score,则 score[1][2] 的值是( )。

int score[3][4] = {
    {80, 81, 82, 83},
    {90, 91, 92, 93},
    {70, 71, 72, 73}
};
9

小杨定义了一个结构体 Hero 来表⽰游戏角色,下面哪种初始化方式会由于语法错误导致编译失败?(
)。

struct Hero {
    string name;
    int hp;
};
10

下面程序输出结果是( )。

struct Book {
    string title;
    int pages;
};

int main() {
    Book books[2] = {{"Math", 120}, {"Science", 150}};
    cout << books[1].title;
    return 0;
}
11

小杨在对“能量晶⽯”按亮度进行排序。如果两块晶⽯亮度相同,他希望保持它们在原始序列中的相对顺
序。下列关于排序算法稳定性的说法,错误的是( )。

12

小杨的机器⼈正在能量踏板上跳跃,踏板编号为 。跳到第 块踏板的方案数满足递推式
。若 ,则运行以下代码计算 jump(5) 的结果是( )。

int jump(int n) {
    if (n <= 2)
    return n;
    int a = 1, b = 2, c = 0;
    for (int i = 3; i <= n; i++) {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}
13

在“模拟实验室”程序中,为了防⽌除以 导致崩溃,小杨使用了异常处理机制。执行以下代码将输出(
)。

try {
    int x = 10, y = 0;
    if (y == 0) throw "Zero Error";
    cout << x / y;
} catch (int e) {
    cout << "Error Code: " << e;
} catch (const char* msg) {
    cout << "Caught: " << msg;
}
14

下面代码使用某种排序算法,将数组中的元素按从小到大排序。这段代码使用的排序算法是( )。

void mystery_sort(double arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minPos = i;
        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minPos]) {
                minPos = j;
            }
        }
        double temp = arr[i];
        arr[i] = arr[minPos];
        arr[minPos] = temp;
    }
}
15

小杨正在读取“冒险⽇志”文件 quest.txt。若文件内容为 Level 10,执行以下程序后输出为( )。

ifstream fin("quest.txt");
string s;
int v;
fin >> s >> v;
cout << s.length() * v;

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

16

运行以下程序后,变量 a 的值最终会变为 20。

void modify(int *p) {
    *p = *p + 10;
}

int main() {
    int a = 10;
    modify(&a);
    return 0;
}
17

在 C++ 中,引用一旦初始化并绑定到某个变量后,可以通过赋值语句将其重新绑定到另一个变量。

18

下面程序可以正确计算并输出 名学生的平均成绩。

struct Student {
    int id;
    int score;
};

int main() {
    Student students[3] = {
        {1, 90},
        {2, 80},
        {3, 100}
    };

    int sum = 0;
    for (int i = 0; i < 3; i++) {
        sum += students[i].score;
    }
    double average = sum / 3.0;
    cout << average << endl;
    return 0;
}
19

选择排序算法在寻找每一轮最小值时,如果遇到相等的元素不进行交换,则选择排序是一种稳定的排序算
法。

20

如果使用带 flag 的冒泡排序,且待排序数组一开始就是有序的,那么算法只需一轮扫描即可结束,时间
复杂度为 。

21

在 C++ 中定义二维数组并初始化时,可以省略第一维,但不能省略第二维。因此 int a[][2] = {{1, 2},
{3, 4}}; 是合法的,⽽ int a[][] = {{1, 2}, {3, 4}}; 是不合法的。

22

下面代码的时间复杂度是 。

int cnt = 0;
for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= i; j++) {
        cnt++;
    }
}
23

假设文件 output.txt 能正常打开,下面代码通过 rdbuf 将 cout 的输出重定向到了文件中。

ofstream fout("output.txt");
streambuf* old_buf = cout.rdbuf();
cout.rdbuf(fout.rdbuf());
cout << "GESP Exam";
cout.rdbuf(old_buf);
24

小杨想通过下面程序给饭卡充值,程序会输出 70。

void recharge(int money) {
    money += 20;
}

int main() {
    int card = 50;
    recharge(card);
    cout << card;
    return 0;
}
25

下面代码可以通过编译。
6 / 10
1 int a[5];
2 a++;

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

26
编程操作题 25分

试题名称:扫雷

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

题目描述

小杨同学正在游玩经典游戏「扫雷」,他想自己生成一个「扫雷」的地图。

小杨同学希望生成的地图大小为 $n$ 行 $m$ 列,一共 $n \times m$ 个区块。区块行号为 $1, 2, \cdots, n$,列号为 $1, 2, \cdots, m$。其中一些区块为雷区,其它区块不为雷区。

小杨同学指定了 $q$ 个区块为雷区,而其它区块均不为雷区。小杨同学希望你帮忙计算非雷区的区块,每个区块与多少个雷区相邻?

我们定义区块相邻,当且仅当两个区块至少有一个公共顶点(也就是说对于不在地图边缘的区块,周围 $8$ 个区块均与其相邻)。

输入格式

输入包含 $q + 1$ 行。

第一行,三个正整数 $n$, $m$ 和 $q$,分别表示地图行数和列数,以及雷区数量。

接下来的 $q$ 行,每行有 $2$ 个整数,分别表示第 $i$ 个雷区的行号和列号。

保证输入的雷区不重复。

输出格式

输出 $n$ 行,每行 $m$ 个字符(使用空格分割),对于第 $i$ 行第 $j$ 列,输出地图对应区块的信息:

  1. 如果为雷区,输出 *
  2. 如果不是雷区,输出其相邻雷区数量(输出 $0$ 到 $8$ 中的一个数字)。

样例输入 #1

3 4 4
1 1
1 3
2 4
3 2

样例输出 #1

* 2 * 2
2 3 3 *
1 * 2 1

说明/提示

输出解释 1

根据输入,在 $3 \times 4$ 的地图上有 $4$ 个雷区,分别是 $(1,1)$,$(1,3)$,$(2,4)$ 和 $(3,2)$,如输出样例中 * 所示,其它非雷区区块的相邻雷区数量可以直观看出。

数据范围

$3 \le n, m \le 500$, $1 \le q \le n \cdot m$。

输入的雷区必定在地图内且不重复,注意行号和列号均从 $1$ 开始。

27
编程操作题 25分

试题名称:身高体重指数

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

题目描述

一个人的身高体重指数(BMI)等于其体重(千克为单位)除以其身高(米为单位)的平方。

例如,一个体重为 $50\text{ kg}$,身高为 $1.6\text{ m}$ 的人的身高体重指数为 $50\text{ kg}/1.6\text{ m}/1.6\text{ m} = 19.53125\text{ kg/m}^2$。

现在有 $n$ 个小朋友,第 $i$ 个小朋友的编号为 $i$,体重为 $w_i$,身高为 $h_i$。

请按照身高体重指数从高到低为小朋友们排序,数据保证不存在两个小朋友的身高体重指数完全相同。输出排序后小朋友的编号。

输入格式

输入 $3$ 行,

第一行为一个正整数 $n$,表示小朋友的个数;

第二行为 $n$ 个整数 $w_1, w_2, \cdots, w_n$ 表示小朋友们的体重,单位为 $\text{kg}$;

第三行为 $n$ 个浮点数 $h_1, h_2, \cdots, h_n$ 表示小朋友们的身高,单位为 $\text{m}$。

输出格式

输出一行 $n$ 个数,表示按照身高体重指数从高到低排序后的编号。

样例输入 #1

3
45 33 39
1.55 1.33 1.44

样例输出 #1

3 1 2

说明/提示

样例解释

三个小朋友(编号依次为 $1$,$2$,$3$)的身高体重指数分别为(保留两位小数的结果):$18.73$,$18.66$,$18.81$,故排序后输出的编号为 $3\ 1\ 2$。

数据范围

$1 \le n \le 1000$,$10 \le w_i \le 100$,$0.8 \le h_i \le 1.9$,$h_i$ 均恰有两位小数。

已答 0/27