跳到正文
OJ
佛大附属信奥
在线评测 · 分级学习
学习
题库
测验
提交
作业
留言
登录
菜单
学习
题库
测验
提交
作业
留言
登录
GESP C++ 四级 · 2025 年 9 月认证理论卷
登录
后作答才能记录成绩
一、单选题(每题 2 分)
1.
运行下面程序后变量a的值是( )。 ```cpp int a = 42; int* p = &a; *p = *p + 1; ```
A. 42
B. 43
C. 编译错误
D. 不确定
2.
以下关于数组的描述中,( )是错误的。
A. 数组名是一个指针常量
B. 随机访问数组的元素方便快捷
C. 数组可以像指针一样进行自增操作
D. sizeof(arr) 返回的是整个数组arr占用的字节数
3.
给定如下定义的数组arr,则*(*(arr + 1) + 2)的值是( )。 ```cpp int arr[2][3] = {{1, 2, 3}, {4, 5, 6}}; ```
A. 2
B. 5
C. 4
D. 6
4.
下面这段代码会输出( )。 ```cpp 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; } ```
A. 3 5
B. 编译失败:定义处少了默认参数
C. 运行错误
D. 链接失败:未定义引用
5.
下面这段代码会输出( )。 ```cpp int x = 5; void foo() { int x = 10; cout << x << " "; } void bar() { cout << x << " "; } int main() { foo(); bar(); } ```
A. 5 5
B. 10 10
C. 5 10
D. 10 5
6.
下面程序运行的结果是( )。 ```cpp void increaseA(int x) { x++; } void increaseB(int* p) { (*p)++; } int main() { int a = 5; increaseA(a); cout << a << " "; increaseB(&a); cout << a; } ```
A. 6 7
B. 6 6
C. 5 6
D. 5 5
7.
关于结构体初始化,以下哪个选项中正确的是( )。 ```cpp struct Point {int x,y;}; ```
A. Point p = (1,2);
B. Point p = {1,2};
C. Point p = new {1,2};
D. Point p = <1,2>;
8.
运行如下代码会输出( )。 ```cpp 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; } ```
A. Mimi 2
B. Mimi 3
C. kitty 3
D. kitty 2
9.
关于排序算法的稳定性,以下说法错误的是( )。
A. 稳定的排序算法不改变相等元素的相对位置
B. 冒泡排序是稳定的排序算法
C. 选择排序是稳定的排序算法
D. 插入排序是稳定的排序算法
10.
下面代码试图实现选择排序,使其能对数组 nums 排序为升序,则横线上应分别填写( )。 ```cpp 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; } } ____________________; // 在此处填入代码 } } ```
A. ```cpp nums[j] < nums[minIndex] swap(nums[i], nums[minIndex]) ```
B. ```cpp nums[j] > nums[minIndex] swap(nums[i], nums[minIndex]) ```
C. ```cpp nums[j] <= nums[minIndex] swap(nums[j], nums[minIndex]) ```
D. ```cpp nums[j] <= nums[minIndex] swap(nums[i], nums[j]) ```
11.
下面程序实现插入排序(升序排序),则横线上应分别填写( )。 ```cpp 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--; } ____________________; // 在此处填入代码 } } ```
A. ```cpp arr[j] > key arr[j + 1] = key ```
B. ```cpp arr[j] < key arr[j + 1] = key ```
C. ```cpp arr[j] > key arr[j] = key ```
D. ```cpp arr[j] < key arr[j] = key ```
12.
关于插入排序的时间复杂度,下列说法正确的是( )。
A. 最好情况和最坏情况的时间复杂度都是$O(n^2)$
B. 最好情况是$O(n)$,最坏情况是$O(n^2)$
C. 最好情况是$O(n \log n)$,最坏情况是$O(n^2)$
D. 最好情况是$O(1)$,最坏情况是$O(n^2)$
13.
小杨正在爬楼梯,需要n阶才能到达楼顶,每次可以爬1阶或2阶,求小杨有多少种不同的方法可以爬到楼顶,横线上应填写( )。 ```cpp 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; } ```
A. ```cpp prev2 = prev1; prev1 = current; current = prev1 + prev2; ```
B. ```cpp current = prev1 + prev2; prev2 = prev1; prev1 = current; ```
C. ```cpp current = prev1 + prev2; prev1 = current; prev2 = prev1; ```
D. ```cpp prev1 = current; prev2 = prev1; current = prev1 + prev2; ```
14.
假设有一个班级的成绩单,存储在一个长度为 n 的数组 scores 中,每个元素是一个学生的分数。老师想要找出所有满足 scores[i] + scores[j] + scores[k] == 300 的三元组,其中 i < j < k。下面代码实现该功能,请问其时间复杂度是( )。 ```cpp 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++; } } } } ```
A. $O(n)$
B. $O(n^2)$
C. $O(n^3)$
D. $O(n \log n)$
15.
关于异常处理,以下说法错误的是( )。
A. try 块中的代码可能会抛出异常
B. catch 块可以有多个,处理不同类型的异常
C. throw 语句用于抛出异常
D. 所有异常都必须被捕获,否则程序会崩溃
二、判断题(每题 2 分)
1.
以下代码能正确初始化指针。 ```cpp int a = 5; int *p = a; ``` ( )
对
错
2.
执行下面C++代码将输出 11。 ```cpp int x = 10; void f() { int x = x + 1; cout << x << endl; } int main() { f(); } ``` ( )
对
错
3.
以下C++代码合法。 ```cpp struct Student { string name; int age; float score; }; Student* students = new Student[20]; ``` ( )
对
错
4.
执行下面C++代码将输出 10。 ```cpp void func(int* p) { *p = 10; } int main() { int a = 5; func(&a); cout << a << endl; return 0; } ``` ( )
对
错
5.
下面代码将二维数组arr传递给函数f,函数内部用arr[i][j]访问元素,函数参数声明为int arr[][4]是错误的。 ```cpp void f(int arr[][4], int rows) { // 访问 arr[i][j] } int main() { int arr[3][4] = { /* 初始化 */ }; f(arr, 3); } ``` ( )
对
错
6.
递推是在给定初始条件下,已知前一项(或前几项)求后一项的过程。 ( )
对
错
7.
虽然插入排序的时间复杂度为$O(n^2)$,但由于单元操作相对较少,因此在小数据量的排序任务中非常受欢迎。 ( )
对
错
8.
对整数数组{4, 1, 3, 1, 5, 2}进行冒泡排序(将最大元素放到最后),执行一轮之后是{4, 1, 3, 1, 2, 5}。 ( )
对
错
9.
以下代码只能捕获int类型异常。 ```cpp int main() { try { throw 42; } catch (...) { cout << "Caught" << endl; } return 0; } ``` ( )
对
错
10.
以下代码将 Hello 写入文件 data.txt。 ```cpp ofstream file("data.txt"); cout<<"Hello"<< endl; file.close(); ``` ( )
对
错