2026年GESP03月认证C++四级试卷

四季读书网 3 0
2026年GESP03月认证C++四级试卷

跟老马一起“升级打怪”学编程!

旨在为小朋友们提供全面的学习材料,共同为等级考试做好准备。

添加小助手微信,回复【GESP 2026.03 C++四级】,获取本套试题答案。

2026年GESP03月认证C++四级试卷分数:100 题数:27

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

1、执行下面程序后,输出为?( )

intf(int x = 2){return x * 3;}
intmain(){cout << f() << " " << f(4);}
  • A. 2 12
  • B. 6 12
  • C. 6 4
  • D. 12 6

2、执行下面代码后,输出为?( )

intmain(){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、执行下面程序后,输出为?( )

voidfun(int a, int &b, int *c){    a += 1;    b += 2;    *c += 3;}
intmain(){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;voidf(int& x){    x += 2;}
intmain(){int x = 10;    f(x);cout << x << " " << ::x;}
  • A. 12 3
  • B. 10 5
  • C. 12 5
  • D. 10 3

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

  • A.
structPoint {int x, y; };Point p = (1,2);
  • B.
structPoint {int x, y; };Point p = {1,2};
  • C.
structPoint {int x, y; };Point p = new Point(1,2);
  • D.
structPoint {int x, y; };Point p = <1,2>;

7、执行下面代码后输出为?( )

structS {int a; int b; };voidg(S s){ s.a += 10; }voidh(S& s){ s.b += 10; }intmain(){    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) 的返回值为?( )

intclimb(int n){if(n <= 2return 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、下面代码试图把数组按升序进行“插入排序”,横线处应填写?( )

voidins(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. 
  • B. 
  • C. 
  • D. 

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

  • A.
freopen("log.txt""w"stdout);cout << "Welcome to 2026!" << endlfclose(stdout);
  • B.
std::ofstream outFile("log.txt");cout << "Welcome to 2026!" << endloutFile.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!" << endloutFile.close();

14、执行下面程序,输出结果是?( )

intdivi(int a,int b){if(b==0throw0;return a/b;}
intmain(){try    {cout << divi(10,0);    }catch(constchar* msg)    {cout << "A";    }catch(int)    {cout << "B";    }}
  • A. A
  • B. B
  • C. 程序崩溃
  • D. 无输出

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

structPlayer{int score; };voidup(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

二、判断题(共10题,每题2分,共20分)

1、下面代码执行结束时,变量 a 的值变成 15。

voidadd10(int &x){ x += 10; }
intmain(){int a = 5;    add10(a);}
  • 正确();
  • 错误();

2、引用一旦绑定某个变量,就不能再绑定其他变量。

  • 正确();
  • 错误();

3、执行下面代码,输出结果为 5

intmain(){int a[2][3];cout << &a[1][2] - &a[0][1] << endl;return0;}
  • 正确();
  • 错误();

4、下面程序可以正常编译并输出 10

intcalc(int x, int y = 10);intcalc(int x)return x * 2; }intcalc(int x, int y)return x * y; }
intmain(){cout << calc(5);}
  • 正确();
  • 错误();

5、下面程序执行后输出 2010

int x = 10;voidf()int x = 20cout << x; }
intmain(){    f();cout << x;}
  • 正确();
  • 错误();

6、在C++中,如果声明了一个指针变量但没有显式初始化,该指针会自动被初始化为 nullptr

  • 正确();
  • 错误();

7、下面代码没有语法错误。

structGameCharacter{string name;int level;float position_x;float position_y;   structEquipment    {string weapon;int attack_bonus;int defense_bonus;    } equipment;structSkill    {string name;int damage;    } skills[8];int skill_count;};
  • 正确();
  • 错误();

8、下面程序能够把 Hello 写入 data.txt 文件中。

ofstream fout("data.txt");cout << "Hello";fout.close();
  • 正确();
  • 错误();

9、由于选择排序和插入排序的时间复杂度均为 ,在任何实际场景下两者的性能表现几乎相同,可以互相替代。

  • 正确();
  • 错误();

10、下面用递推方式计算斐波那契数列第 n 项的程序,时间复杂度是 

intfib(int n){if (n <= 1return n;int f0 = 0, f1 = 1, cur = 0;for (int i = 2; i <= n; i++)     {        cur = f0 + f1;        f0 = f1;        f1 = cur;    }return cur;}
  • 正确();
  • 错误();

三、编程题(共2题,共50分)

1、山之谷

【提交】

https://www.luogu.com.cn/problem/B4501

【问题描述】

现有一片山地,可以视为一个  行  列的网格图,第  行  列的海拔为 

若一个单元格的海拔不高于其所有相邻(包括边相邻和顶点相邻,每个单元格至多有 8 个相邻的单元格)单元格的海拔,则称其为山谷。

请你数一数该片山地中有多少山谷。

【输入描述】

第一行包含  个整数 ,表示山地的大小。

之后  行,每行包含  个整数 ,表示海拔。

【输出描述】

输出 1 行,包含 1 个整数 ,表示山谷的数量。

【样例输入1】

3 57 6 7 7 96 5 6 7 66 5 7 8 9

【样例输出1】

3

【样例解释】

样例 1 如图所示,绿色单元格代表山谷:

2026年GESP03月认证C++四级试卷 第1张

【数据范围】

保证 

2、礼盒排序

【提交】

https://www.luogu.com.cn/problem/B4502

【问题描述】

商店推出了许多礼盒,每个礼盒中包含 k 件商品,每件商品都有一个价格。

现在需要对这些礼盒进行排序,排序规则如下:

  1. 先按礼盒总价格从小到大排序;
  2. 如果总价格相同,按礼盒中最贵商品的价格从小到大排序;
  3. 如果仍然相同,按礼盒中最便宜商品的价格从小到大排序;
  4. 如果仍然相同,按礼盒编号从小到大排序。

请输出排序后的礼盒编号。

【输入描述】

第一行包含两个整数  和 ,分别表示礼盒数量和每个礼盒中商品的数量。

接下来  行,每行包含  个整数,第  行表示第  个礼盒中各商品的价格。

【输出描述】

输出一行,包含排序后的礼盒编号(编号从  开始),用空格分隔。

【样例输入1】

4 33 5 24 1 52 2 43 4 3

【样例输出1】

3 4 2 1

【样例解释】

4 个礼盒分别为:

编号
商品价格
总价
最大值
最小值
1
3 5 2
10
5
2
2
4 1 5
10
5
1
3
2 2 4
8
4
2
4
3 4 3
10
4
3

排序过程:

  1. 按总价排序,3号礼盒总价最小;
  2. 其余总价均为 10,再按最大值排序,4号最大值更小;
  3. 1号和2号最大值相同,再按最小值排序,2号更小。

最终顺序为:3 4 2 1

【数据范围】

保证 ,商品价格 


青少年编程竞赛交流

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。

2026年GESP03月认证C++四级试卷 第2张

抱歉,评论功能暂时关闭!