GESP 2025年3月_C++四级试卷

从PDF导入:GESP 2025年3月_C++四级试卷

C++ 120分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
关于下述代码,说法错误的是( )。

A. 函数multiply的定义应该放到函数main之前。
B. 函数声明int multiply(int x, int y);中明确指定了函数multiply()的返回值为整数类型。
C. 在main函数中,函数multiply通过multiply(a, b)被调用,其中a和b是定义在main函数中的变量,它们作为实参传递给了multiply函数的形参x和y。
D. 运行上述代码,将输出The result is: 20。
第2题 中级 2.0分 单选
执行下述代码将输出( )。

A. 2020
B. 2010
C. 1020
D. 编译错误
第3题 中级 2.0分 单选
执行下述代码后,变量a的值为( )。

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

A. 10
B. 20
C. 随机值
D. 编译错误
第4题 中级 2.0分 单选
以下哪种参数传递方式可以避免拷贝大型对象?
A. 只能用值传递
B. 只能用引用传递
C. 只能用指针传递
D. 引用传递和指针传递均可
第5题 中级 2.0分 单选
执行下述代码,将输出( )。

A. 12
B. 21
C. 22
D. 11
第6题 中级 2.0分 单选
下面的描述中,( )正确定义一个名为Person的结构体并正确初始化了一个Person结构体的变量p。
A. struct Person { string name; int age; };
B. struct Person { string name; int age; };
C. struct Person { string name; int age; };
D. struct Person { string name; int age; };
第7题 中级 2.0分 单选
给定如下代码:

A. 结构Person内嵌套结构Address
B. Person有一个Address类型的address成员
C. 一个Person类型的变量p的address的初始化可以写成:p.address.street = "123 Main St"; p.address.city = "Anytown";
D. 结构的嵌套可以减少命名冲突,因此可以不必控制嵌套层次
第8题 中级 2.0分 单选
假设int arr[2][3] = {{1,2,3},{4,5,6}};,则arr[1][2]的值是( )。
A. 2
B. 3
C. 5
D. 6
第9题 中级 2.0分 单选
下面( )正确定义了二维数组。
A. int arr[3,4];
B. int arr[3][4];
C. int arr(3,4);
D. int a[3-4];
第10题 中级 2.0分 单选
小杨正在爬楼梯,需要爬n阶才能到达楼顶。如果每次可以爬1个或2个台阶,下面代码采用递推算法来计算一共有多少种不同的方法可以爬到楼顶,则横线上应填写( )。

A. res += f1 + f2;
B. res = f1 + f2;
C. res += f1 + f2;
D. res = f1 + f2;
第11题 中级 2.0分 单选
给定如下算法,其时间复杂度为( )。

A. O(n²)
B. O(n × 2ⁿ)
C. O(1)
D. O(n³)
第12题 中级 2.0分 单选
下面关于排序稳定性的描述,正确的是( )。
A. 稳定性指算法的时间复杂度恒定
B. 稳定排序保证相同元素的相对顺序不变
C. 选择排序是稳定排序
D. 插入排序不是稳定排序
第13题 中级 2.0分 单选
对数组arr[] = {5, 3, 8, 1}进行升序排序,执行第一轮冒泡排序后数组arr中的内容为( )。
A. 3, 5, 1, 8
B. 3, 1, 5, 8
C. 3, 5, 8, 1
D. 5, 3, 8, 1
第14题 中级 2.0分 单选
运行下面的代码,将出现( )。

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;
}

A. 屏幕上输出Caught: Runtime error occurred.
B. 屏幕上输出Caught an unknown exception.
C. 程序调用std::terminate()
D. 编译错误
第15题 中级 2.0分 单选
下面哪种方式不能实现将字符串"Happy Spring!"输出重定向到文件log.txt( )。
A. freopen("log.txt", "w", stdout);
B. std::ofstream outFile("log.txt");
C. std::ofstream outFile("log.txt");
D. ofstream log_file("log.txt");
第16题 中级 2.0分 判断
函数是C++中的核心概念,用于封装可重用的代码块。
T. 正确
F. 错误
第17题 中级 2.0分 判断
在C++中,函数的返回类型可以省略,默认为int。
T. 正确
F. 错误
第18题 中级 2.0分 判断
结构体的成员默认是public访问权限。
T. 正确
F. 错误
第19题 中级 2.0分 判断

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

T. 正确
F. 错误
第20题 中级 2.0分 判断
二维数组作为函数参数时,必须显式指定所有维度的大小。
T. 正确
F. 错误
第21题 中级 2.0分 判断
递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法。
T. 正确
F. 错误
第22题 中级 2.0分 判断
考虑最坏情况下冒泡排序算法的时间复杂度,T(n)为待排序数字的数目为n的复杂度,则其递推关系式为T(n) = T(n-1) + n,T(0) = 1。
T. 正确
F. 错误
第23题 中级 2.0分 判断
插入排序在最好情况(已有序)下的时间复杂度是O(n²)。
T. 正确
F. 错误
第24题 中级 2.0分 判断
对数组arr[] = {4, 3, 1, 5, 2}进行升序排序,执行第一轮选择排序后数组arr中的内容是{1, 4, 3, 5, 2}。
T. 正确
F. 错误
第25题 中级 2.0分 判断
未捕获异常会调用std::terminate终止程序。
T. 正确
F. 错误
第26题 中级 25.0分 编程
荒地开垦

小杨有一大片荒地,可以表示为一个n行m列的网格图。小杨想要开垦这块荒地,但荒地中一些位置存在杂物,对于一块不存在杂物的荒地,该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。小杨可以选择至多一个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下,最多能够开垦多少块荒地。

【输入格式】
第一行包含两个正整数n, m,含义如题面所示。之后n行,每行包含一个长度为m且仅包含字符.和#的字符串。如果为.,代表该位置为荒地,如果为#,代表该位置为杂物。
【输出格式】
输出一个整数,代表在清除至多一个位置的杂物的情况下,最多能够开垦的荒地块数。
【样例输入】
3 5
..#..
.#...
#....
【样例输出】
11
【样例解释】
移除第二行从左数第二块空地的杂物后:第一行从左数前4块荒地,第二行从左数前3块荒地,第三行从左数前4块荒地,均可开垦,4 + 3 + 4 = 11。
对于全部数据,保证有1 ≤ n, m ≤ 1000。
第27题 中级 25.0分 编程
二阶矩阵

小A有一个n行m列的矩阵A。小A认为一个2×2的矩阵D是好的,当且仅当D₁,₁ × D₂,₂ = D₁,₂ × D₂,₁。其中Dᵢ,ⱼ表示矩阵D的第i行第j列的元素。小A想知道A中有多少个好的子矩阵。

【输入格式】
第一行,两个正整数n, m。接下来n行,每行m个整数Aᵢ,₁, Aᵢ,₂, ..., Aᵢ,ₘ。
【输出格式】
一行,一个整数,表示A中好的子矩阵的数量。
【样例输入】
3 4
1 2 1 0
2 4 2 1
0 3 3 0
【样例输出】
2
对于所有测试点,保证1 ≤ n ≤ 5,1 ≤ m ≤ 500,-100 ≤ Aᵢ,ⱼ ≤ 100。
💬