#1187. GESP C++ 四 级 2026年9月真题 · 单选题

GESP C++ 四 级 2026年9月真题 · 单选题

GESP C++ 四 级 2026年9月真题(120 分钟,总分 100 分)

单选题(共 15 题,每题 2 分,共 30 分)

1. 小杨使用指针修改计数器的值。执行下面程序后,输出结果是(  )。

int count = 8;
int *p = &count;
*p += 4;
cout << count << " " << *p;
return 0;

{{ select(1) }}

  • 8 8
  • 8 12
  • 12 12
  • 12 8

2. 关于下面指针声明的说法,正确的是(  )。

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

{{ select(2) }}

  • 可以通过 p 修改 a 的值
  • 可以令 p = &b
  • p 的指向和所指向的值都不能修改
  • 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);

{{ select(3) }}

  • 12
  • 14
  • 20
  • 22

4. 下面函数用于将一个 3 行 5 列二维数组的第 r 行元素全部加 1,横线处正确的形参写法是(  )。

void addOne(________, int r) {
    for (int j = 0; j < 5; j++) {
        arr[r][j]++;
    }
}

{{ select(4) }}

  • int arr[][]
  • int **arr
  • int arr[][5]
  • int arr[5][]

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

int score = 60;
void update(int &score) {
    score += 5;
}
int main() {
    int score = 80;
    update(score);
    cout << score << " " << ::score;
    return 0;
}

{{ select(5) }}

  • 85 60
  • 80 65
  • 85 65
  • 80 60

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

{{ select(6) }}

  • 7 0
  • 7 1
  • 7 2
  • 7 3

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

{{ select(7) }}

  • C++ 120
  • Math 150
  • Math 160
  • C++ 160

8. 关于冒泡排序、插入排序和选择排序,下列说法正确的是(  )。

{{ select(8) }}

  • 三种排序算法的最坏时间复杂度都是 O(n)
  • 冒泡排序只能从小到大排序,不能从大到小排序
  • 插入排序每次将一个待排序元素插入前面已经有序的序列中
  • 选择排序每轮只需要比较一次就能确定最小元素

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

{{ select(9) }}

  • 8
  • 10
  • 13
  • 21

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')

{{ select(10) }}

  • 稳定,因为所有成绩已经按升序排列
  • 稳定,因为分数相同不会影响排序结果
  • 不稳定,因为相同成绩的 (90, 'A') 和 (90, 'C') 的相对顺序发生了改变
  • 无法判断,因为没有给出排序算法的代码

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

{{ select(11) }}

  • a[j] < key
  • a[j] > key
  • a[j] == key
  • 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;

}

{{ select(12) }}

  • O(1)O(1)
  • O(n3)O(n^3)
  • O(n)O(n)
  • O(n2)O(n^2)

13. 假设文件 data.txt 的内容如下:

Blue Sky

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

int main() {
    ifstream fin("data.txt");
    string a, b;
    fin >> a >> b;
    cout << b << "-" << a;
    fin.close();
    return 0;
}

{{ select(13) }}

  • Blue-Sky
  • Sky-Blue
  • Blue Sky
  • Sky Blue

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

{{ select(14) }}

  • A
  • B
  • C-1
  • 程序崩溃

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

{{ select(15) }}

  • false,true
  • true,false
  • false,false
  • true,true