CCF GESP 2026年3月认证 C++ 4级

单选题
共 15 道 每题 2 分 共计 30 分
第 1 题

执行下面程序后,输出为( )。

int f(int x = 2){
    return x * 3;
}

int main(){
    cout << f() << " " << f(4);
}
A

2 12

B

6 12

C

6 4

D

12 6

第 2 题

执行下面代码后,输出为( )。

int main() {
    int a = 5;
    int* p = &a;
    int** q = &p;
    **q += 7;
    cout << a << " " << *p;
}
A

5 5

B

12 12

C

12 5

D

5 12

第 3 题

已知:

int a[3][4] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};
int (*p)[4] = a;

则表达式 *(*(p + 2) + 1) 的值为( )。

A

6

B

10

C

9

D

11

第 4 题

执行下面程序后,输出为( )。

void fun(int a, int &b, int *c){
    a += 1;
    b += 2;
    *c += 3;
}

int main(){
    int x = 1, y = 1, z = 1;
    fun(x, y, &z);
    cout << x << " " << y << " " << z;
}
A

2 3 4

B

1 3 4

C

2 1 4

D

1 1 1

第 5 题

执行下面程序后输出为( )。

int x = 3;
void f(int& x){
    x += 2;
}
int main(){
    int x = 10;
    f(x);
    cout << x << " " << ::x;
}
A

12 3

B

10 5

C

12 5

D

10 3

第 6 题

下列关于结构体初始化的写法,正确的是( )。

A
struct Point { int x, y; };

Point p = (1,2);
B
struct Point { int x, y; };

Point p = {1,2};
C
struct Point { int x, y; };

Point p = new Point(1,2);
D
struct Point { int x, y; };

Point p = <1,2>;
第 7 题

执行下面代码后输出为( )。

struct S { int a; int b; };

void g(S s){ s.a += 10; }
void h(S& s){ s.b += 10; }

int main(){
    S s{1,2};
    g(s);
    h(s);
    cout << s.a << " " << s.b;
}
A

11 12

B

1 12

C

11 2

D

1 2

第 8 题

关于递推算法的描述,正确的是( )。

A

递推表现为函数自己调用自己

B

递推从已知初值出发,利用递推关系逐步推出后续结果

C

递推只能用于指数复杂度问题

D

递推一定需要回溯

第 9 题

执行 climb(6) 的返回值为( )。

int climb(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 c;
}
A

8

B

13

C

5

D

10

第 10 题

某排序算法对如下数据排序(按 score 升序),则下面关于该排序算法稳定性的描述中,说法正确的是( )。

初始: (90,'A'), (90,'B'), (80,'C'), (90,'D')

排序后: (80,'C'), (90,'A'), (90,'B'), (90,'D')

A

不稳定,因为出现了相同分数

B

稳定,因为相同 score 的相对顺序保持为 A 在 B 前、B 在 D 前

C

不稳定,因为 C 跑到前面了

D

无法判断

第 11 题

下面代码试图把数组按升序进行“插入排序”,横线处应填写( )。

void ins(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;
    }
}
A

a[j] < key

B

a[j] > key

C

a[j+1] > key

D

a[j] == key

第 12 题

下列代码段的时间复杂度为( )。

int cnt=0;
for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
        if( (i+j) % 3 == 0) cnt++;
    }
}
A

$O(n)$

B

$O(n\ log\,n)$

C

$O(n^2)$

D

$O(2^n)$

第 13 题

下面哪种方式不能实现将字符串 Welcome to 2026! 输出重定向到文件 log.txt( )。

A
freopen("log.txt", "w", stdout);
cout << "Welcome to 2026!" << endl; 
fclose(stdout);
B
std::ofstream outFile("log.txt");
cout << "Welcome to 2026!" << endl; 
outFile.close();
C
ofstream log_file("log.txt");
streambuf* org_cout = cout.rdbuf();  
cout.rdbuf(log_file.rdbuf());             
cout << "Welcome to 2026!" << endl;
cout.rdbuf(org_cout);
D
std::ofstream outFile("log.txt");
outFile << "Welcome to 2026!" << endl; 
outFile.close();
第 14 题

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

int divi(int a,int b){
    if(b==0) throw 0;
    return a/b;
}

int main(){
    try{
        cout << divi(10,0);
    }catch(const char* msg){
        cout << "A";
    }catch(int){
        cout << "B";
    }
}
A

A

B

B

C

程序崩溃

D

无输出

第 15 题

下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向前移动时, while 循环的条件应为 ( )。

struct Player{ int score; };
void up(Player players[], int n, int idx){
    Player cur = players[idx];
    int i = idx;
    while( ____________________ ){
        players[i] = players[i-1];
        i--;
    }
    players[i] = cur;
}
A

i > 0 && cur.score > players[i-1].score

B

i > 0 && cur.score < players[i-1].score

C

i < n-1 && cur.score > players[i+1].score

D

i < n-1 && cur.score < players[i+1].score

单选题部分已到底了。