CCF GESP 2025年9月认证 C++ 4级
一
单选题
第 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 题
小杨正在爬楼梯,需要 n 阶才能到达楼顶,每次可以爬 1 阶或 2 阶,求小杨有多少种不同的方法可以爬到楼顶,横线上应填写( )。
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 题
关于异常处理,以下说法错误的是( )。
单选题部分已到底了。