CCF GESP 2026年9月认证 C++ 4级
所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
一
单选题
第 1 题
小杨使用指针修改计数器的值。执行下面程序后,输出结果是( )。
int count = 8;
int *p = &count;
*p += 4;
cout << count << " " << *p;
return 0;
第 2 题
关于下面指针声明的说法,正确的是( )。
int a = 10;
int b = 20;
const int *p = &a;
第 3 题
小杨用二维数组记录仓库货物数量。执行下面代码后,变量
x 的值是( )。int goods[3][4] = {{2, 4, 6, 8}, {10, 12, 14, 16}, {18, 20, 22, 24}};
int (*p)[4] = goods;
int x = *(*(p + 1) + 2);
第 4 题
下面函数用于将一个 3 行 5 列二维数组的第 r 行元素全部加 1,横线处正确的形参写法是( )。
void addOne(________, int r) {
for (int j = 0; j < 5; j++) {
arr[r][j]++;
}
}
第 5 题
执行下面程序后,输出结果是( )。
int score = 60;
void update(int &score) {
score += 5;
}
int main() {
int score = 80;
update(score);
cout << score << " " << ::score;
return 0;
}
第 6 题
执行下面程序后,输出结果是( )。
struct Device {
int id;
int state;
};
void reset(Device d) {
d.state = 0;
}
void start(Device &d) {
d.state += 1;
}
int main() {
Device d{7, 2};
reset(d);
start(d);
cout << d.id << " " << d.state;
return 0;
}
第 7 题
小杨定义了结构体数组,并使用指针访问其中的元素。执行下面代码后输出的是( )。
struct Book {
string name;
int pages;
};
int main() {
Book books[2] = {{"C++", 120}, {"Math", 150}};
Book *p = books + 1;
p->pages += 10;
cout << books[1].name << " " << books[1].pages;
return 0;
}
第 8 题
关于冒泡排序、插入排序和选择排序,下列说法正确的是( )。
第 9 题
某机器人每次可以向前移动
1 格或 2 格,到达第 n 格的方法数由下面函数计算。 ways(6) 的返回值是( )。int ways(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 b;
}
第 10 题
对一组 struct student 的学生按成绩( score )升序排序。排序前后的数据如下。关于该排序的稳定性,判断正确的是( )。
struct student {
int score;
char id;
};
排序前:
(90, 'A'), (80, 'B'), (90, 'C'), (80, 'D')
排序后:
(80, 'B'), (80, 'D'), (90, 'C'), (90, 'A')
第 11 题
下面代码使用插入排序将数组按升序排列,横线处应填写( )。
void insertionSort(int a[], int n) {
for (int i = 1; i < n; i++) {
int key = a[i];
int j = i - 1;
while (j >= 0 && __________) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = key;
}
}
第 12 题
下面代码的时间复杂度是( )。
int countPairs(int a[], int n) {
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] + a[j] == 100) {
cnt++;
}
}
}
return cnt;
}
第 13 题
假设文件 data.txt 的内容如下:
Blue Sky
执行下面程序后,输出结果是( )。
int main() {
ifstream fin("data.txt");
string a, b;
fin >> a >> b;
cout << b << "-" << a;
fin.close();
return 0;
}
第 14 题
执行下面程序后,输出结果是( )。
int main() {
try {
int age = -1;
if (age < 0)
throw age;
cout << "A";
} catch (const char *msg) {
cout << "B";
} catch (int value) {
cout << "C" << value;
}
return 0;
}
第 15 题
下面函数使用冒泡排序将数组按升序排列。为了在数组已经有序时提前结束,两处横线应分别填写( )。
void bubbleSort(int a[], int n) {
for (int i = n - 1; i > 0; i--) {
bool changed = __________;
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
changed = __________;
}
}
if (!changed)
break;
}
}
单选题部分已到底了。