【202609】C++四级

从PDF导入:GESP 2026年09月_C++4级试卷

C++ 120分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
小杨使用指针修改计数器的值。执行下面程序后,输出结果是(  )。

A. 8 8
B. 8 12
C. 12 12
D. 12 8
第2题 中级 2.0分 单选
关于下面指针声明的说法,正确的是(  )。

A. 可以通过 p 修改 a 的值
B. 可以令 p = &b
C. p 的指向和所指向的值都不能修改
D. p 必须始终指向 a
第3题 中级 2.0分 单选
小杨用二维数组记录仓库货物数量。执行下面代码后,变量 x 的值是(  )。

A. 12
B. 14
C. 20
D. 22
第4题 中级 2.0分 单选
下面函数用于将一个 3 行 5 列二维数组的第 r 行元素全部加 1,横线处正确的形参写法是(  )。

A. int arr[][]
B. int **arr
C. int arr[][5]
D. int arr[5][]
第5题 中级 2.0分 单选
执行下面程序后,输出结果是(  )。

A. 85 60
B. 80 65
C. 85 65
D. 80 60
第6题 中级 2.0分 单选
执行下面程序后,输出结果是(  )。

A. 7 0
B. 7 1
C. 7 2
D. 7 3
第7题 中级 2.0分 单选
小杨定义了结构体数组,并使用指针访问其中的元素。执行下面代码后输出的是(  )。

A. C++ 120
B. Math 150
C. Math 160
D. C++ 160
第8题 中级 2.0分 单选
关于冒泡排序、插入排序和选择排序,下列说法正确的是(  )。
A. 三种排序算法的最坏时间复杂度都是 O(n)
B. 冒泡排序只能从小到大排序,不能从大到小排序
C. 插入排序将每一个待排序元素插入前面已经有序的序列中
D. 选择排序每轮只需要比较一次就能确定最小元素
第9题 中级 2.0分 单选
某机器人每次可以向前移动 1 格或 2 格。到达第 n 格的方法数由下面函数计算。ways(6) 的返回值是(  )。

A. 8
B. 10
C. 13
D. 21
第10题 中级 2.0分 单选
对一组 struct student 的学生按成绩(score)升序排序。排序前后的数据如下。关于该排序的稳定性,判断正确的是(  )。


排序前:(90, 'A'),(80, 'B'),(90, 'C'),(80, 'D')
排序后:(80, 'B'),(80, 'D'),(90, 'C'),(90, 'A')

A. 稳定,因为所有成绩已经按升序列
B. 稳定,因为分数相同不会影响排序结果
C. 不稳定,因为相同成绩的 (90, 'A') 和 (90, 'C') 的相对顺序发生了改变
D. 无法判断,因为没有给出排序算法的代码
第11题 中级 2.0分 单选
下面代码使用插入排序将数组按升序排列。横线处应填写(  )。

A. a[j] < key
B. a[j] > key
C. a[j] == key
D. a[j + 1] > key
第12题 中级 2.0分 单选
下面代码的时间复杂度是(  )。

A. O(1)
B. O(n⁴)
C. O(n)
D. O(n²)
第13题 中级 2.0分 单选
假设文件 data.txt 的内容如下: <img src="/static/uploads/images/7b46389eadf2.png" style="max-width:35%;border-radius:6px;margin:8px 0;" /> 执行下面程序后,输出结果是( )。 <img src="/static/uploads/images/0f9288908915.png" style="max-width:35%;border-radius:6px;margin:8px 0;" />

Blue Sky
执行下面程序后,输出结果是(  )。

A. Blue-Sky
B. Sky-Blue
C. Blue Sky
D. Sky Blue
第14题 中级 2.0分 单选
执行下面程序后,输出结果是(  )。

A. A
B. B
C. C-1
D. 程序崩溃
第15题 中级 2.0分 单选
下面函数使用冒泡排序将数组按升序排列。为了在数组已经有序时提前结束,两处横线应分别填写(  )。

A. false,true
B. true,false
C. false,false
D. true,true
第16题 中级 2.0分 判断
执行下面程序后,变量 a 的值为 15。

T. 正确
F. 错误
第17题 中级 2.0分 判断
一个函数必须在调用之前既声明又定义。
T. 正确
F. 错误
第18题 中级 2.0分 判断
下面二维数组在内存中按行优先连续存储,因此 ((a + 1) + 0) 的值为 5。

T. 正确
F. 错误
第19题 中级 2.0分 判断
执行下面程序后会输出 20 。

T. 正确
F. 错误
第20题 中级 2.0分 判断
下面结构体初始化语句是合法的。

T. 正确
F. 错误
第21题 中级 2.0分 判断
对于按升序实现的稳定插入排序,移动元素的条件通常应为 a[j] >= key,这样能够保证相等元素的相对顺序不变。

T. 正确
F. 错误
第22题 中级 2.0分 判断
下面递推程序计算 n!。当 n = 4 时,返回值为 24 。

T. 正确
F. 错误
第23题 中级 2.0分 判断
下面两层循环的时间复杂度是 O(n²) 。

T. 正确
F. 错误
第24题 中级 2.0分 判断
假设文件能够正常打开,下面程序会把 Welcome 写入 log.txt 。

T. 正确
F. 错误
第25题 中级 2.0分 判断
执行下面程序时,catch (int e) 能够捕获由 throw "Error" 抛出的异常,因此程序输出 Caught 。

T. 正确
F. 错误
第26题 中级 25.0分 编程
新汉诺塔

试题名称:新汉诺塔
时间限制:1.0 s
内存限制:512.0 MB
汉诺塔问题是最经典的递推问题之一:
有三个可以放圆盘柱子,编号为 A、B 和 C。
开始时柱子 A 上套着 n 个圆盘,它们从上到下按照从小到大的顺序排列。
我们的任务是要把这 n 个圆盘移到柱子 C 上,并保持他们的原有顺序不变。
在移动圆盘的过程中,需要遵守以下规则:
1.圆盘只能从一根柱子顶部拿出,从另一根柱子顶部放入。
2.每次只能移动一个圆盘。
3.小圆盘必须时刻位于大圆盘之上。
小杨在学习了汉诺塔问题后,决定添加一个新规则:
4.每一次移动,圆盘只能从 A 移动到 B,从 B 移动到 C,或者从 C 移动到 A;其它移动是不允许的。
在新规则下,给定圆盘数量 n,试问最少移动步数是多少?

【输入格式】
输入一个正整数 n,表示圆盘的数量。
【输出格式】
输出一个整数,表示在新规则下将 n 个圆盘从 A 移动到 C 所需的最少移动步数。
【输入样例 1】
2
【输出样例 1】
7
【样例解释 1】
以下步骤是最优的(编号为 1 的是小盘,为 2 的是大盘):
将 1 从 A 移动到 B;
将 1 从 B 移动到 C;
将 2 从 A 移动到 B;
将 1 从 C 移动到 A;
将 2 从 B 移动到 C;
将 1 从 A 移动到 B;
将 1 从 B 移动到 C。
可以证明没有更少步骤可以完成这个任务。
【输入样例 2】
3
【输出样例 2】
21
【数据范围】
对于所有数据,n ≤ 20。
第27题 中级 25.0分 编程
有序网格

试题名称:有序网格
时间限制:1.0 s
内存限制:512.0 MB
小 A 有一个 n 行 m 列格子组成的二维网格,从上到下依次是第 1 行到第 n 行,从左到右依次是第 1 列到第 m 列。每个格子里有一个数字,第 i 行第 j 列的格子的数字是 a_{i,j}。
小 A 想让二维网格变得有序,因此他先对每一行从左到右按升序排序,再对每一列从上到下按升序排序。以下是一个先完成行排序再完成列排序的例子:

小 A 想知道二维网格经过以上排序后的结果。你能编写程序帮助他吗?

【输入格式】
第一行,两个正整数 n, m,分别二维网格的行数与列数。
接下来 n 行,每行 m 个整数 a_{i,1}, …, a_{i,m},表示二维网格种的数字。
【输出格式】
输出 n 行,每行 m 个整数,表示二维网格先完成行排序再完成列排序后的结果。
【输入样例 1】
3 2
6 5
4 3
2 1
【输出样例 1】
1 2
3 4
5 6
【输入样例 2】
3 4
1 3 2 5
6 2 4 4
5 4 1 3
【输出样例 2】
1 2 3 5
1 3 4 5
2 4 4 6
【数据范围】
对于所有测试点,保证 2 ≤ n ≤ 10,2 ≤ m ≤ 10,1 ≤ a_{i,j} ≤ 100。
💬