点击上方蓝字·关注我们



CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为计算机和编程学习者提供学业能力验证的平台。GESP旨在提升青少年计算机编程能力,培训机构编编程教育水平,推广和普及计算机和编程教育。
GESP考察语言为图形化(Scratch)编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2026年3月C++四级认证真题解析。
C++ 四级
2026年3月
一、单选题(共15题,每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | B | D | C | C | B | C | B | D | C | B | C | B | A | B | D |
【第1题】2026年春节联欢晚会上一个武术表演节目《武BOT》。节目中多个人形机器人会表演空翻,它们落地可能会有微微踉跄,但都会迅速调整姿态站稳,并适当移动来和前后左右的其他机器人保持原来队列。如果将机器人视作一个计算机系统,那么在该计算机系统中下面哪一项不能作为输入设备( )。
A.用于检测重心的重力传感器
B.预装的AI算法程序
C.接收动作指令的遥控器
D.拍摄其他机器人的摄像头
【答案】B【考察知识点】计算机系统的基本组成【解析】输入设备用于将外部信息传入计算机系统,如传感器、摄像头、遥控器等。预装的AI算法程序属于存储在计算机中的软件代码,不是硬件设备,因此不能作为输入设备。
【第2题】下面代码用来找出输入的N个正整数中最大的一个。如果将代码段用流程图来表示,则L1标记的代码行应该使用的图形是( )。

A.圆形框
B.椭圆形框
C.平行四边形框
D.菱形框
【答案】D【考察知识点】流程图【解析】流程图中,菱形框表示条件判断。if val > Max: 是一个分支判断语句,根据条件是否成立决定后续执行路径,因此应使用菱形框。
【第3题】执行以下Python代码后,输出的结果是?( )

A. 4
B. 10
C. 20
D. 25
【答案】C【考察知识点】二维列表的遍历【解析】遍历3×3矩阵,累加所有偶数。偶数为:2, 4, 6, 8,和为20。
【第4题】执行以下Python代码,说法正确的是?( )

A.元组被成功修改为 (1, [5, 6], 4)
B.代码可以执行,但元组内容未改变
C.抛出TypeError异常
D.元组被修改为 (1, 2, 3, 4, 5, 6)
【答案】C【考察知识点】元组【解析】元组本身不可改,但内部可变对象(如列表)可改内容;本题是直接替换元素,故报错
【第5题】执行以下Python代码后,输出的结果是?( )

A. 3
B. 4
C. 5
D. 6
【答案】B【考察知识点】列表推导式【解析】推导式等价于收集所有单词中的元音字母:hello → e, o;world → o;python → o。共4个元音,因此 len(result)=4。
【第6题】函数定义def func(*args): pass中的*args 会将传入的参数打包成什么类型?
A.列表
B.字典
C.元组
D.集合
【答案】C【考察知识点】函数参数传递【解析】*args将不定数量的位置参数打包成一个元组(tuple)传递给函数。
【第7题】在嵌套函数中,需要修改外层函数(非全局作用域)的变量,应使用哪个关键字?( )
A. global
B. nonlocal
C. local
D. outer
【答案】B【考察知识点】函数作用域【解析】nonlocal 用于在嵌套函数中修改外层函数(非全局)的变量。global 用于修改全局变量。local 和 outer 不是Python关键字。
【第8题】执行以下Python代码后,输出的结果是?( )

A. 12
B. 6
C. 8
D. 9
【答案】D【考察知识点】函数定义与调用【解析】对 [-2,0,3,-1] 处理:-2→2,0→0,3→6,-1→1,得 [2,0,6,1],求和为9。
【第9题】关于lambda匿名函数,以下描述正确的是?( )
A. lambda 匿名函数可以包含多个表达式,用分号分隔
B. lambda 匿名函数必须有参数
C. lambda 匿名函数可以接受多个参数,但只能有一个表达式
D. lambda 匿名函数必须有return语句
【答案】C【考察知识点】lambda匿名函数【解析】lambda语法:lambda参数列表:表达式,可接受任意数量参数(包括0个),但只能有一个表达式,且该表达式的结果即为返回值,无需return。
【第10题】文件text.txt的内容如下:

以下程序统计单词"Python"在文件中出现的次数。Python后面是空格或行尾,且不跟标点。请补全代码。( )
A. readlines()
B. read()
C. readline()
D. readlines
【答案】B【考察知识点】文件读写操作【解析】需要将整个文件内容读取为一个字符串,然后调用 split() 分割成单词列表。read() 返回整个文件内容的字符串,符合需求。
【第11题】以下代码的时间复杂度是?( )

A. O(1)
B. O(n)
C. O(n^2)
D. O(log n)
【答案】C【考察知识点】时间复杂度分析【解析】外层循环n次,内层循环次数分别为0,1,2,…,n-1,总次数为n(n-1)/2,故时间复杂度为O(n²)。
【第12题】执行以下Python代码后,输出的结果是?( )

14
124
1234
程序报错
【答案】B【考察知识点】异常处理【解析】执行顺序:try输出1→抛出异常→except输出2 →else 跳过(因为异常发生)→finally输出4。最终输出"124"。
【第13题】以下代码使用插入排序对列表进行升序排序。空白处应填入?( )

arr[j + 1] = key
arr[j - 1] = key
key = arr[j]
arr[i] = key
【答案】A【考察知识点】插入排序算法【解析】while循环结束后,j指向第一个≤key的位置,key应插入到arr[j+1]。因此填 arr[j+1] = key。
【第14题】阅读以下Python代码,下列说法正确的是?( )

A.找出所有n 位数
B.找出由两个n 位数相乘得到的最大回文数
C.找出所有回文数
D.计算两个n位数乘积的最大值
【答案】B【考察知识点】嵌套循环与回文数判断【解析】插入排序中,while循环用于在已排序序列中为key寻找正确的插入位置。循环结束时,j的值有两种可能:1、j >= 0:此时arr[j] <= key,j指向第一个不大于key的元素,key应插入到其后的位置j + 1。2、j = -1:此时已排序部分所有元素均大于key,key应插入到序列最前面,即位置0,而j + 1正好等于0。
综上,无论哪种情况,key都应被赋值给arr[j + 1]。因此空白处应填入arr[j + 1] = key。
【第15题】以下代码实现了根据分数返回等级(A: 90-100, B: 80-89, C: 70-79, D: 60-69, F: 0-59)的功能,请选择正确的选项填入①②处。( )

A. ① grade_map[score] ② grade
B. ① key ② get_grade(score)
C. ① grade_map[key] ② score
D. ① grade_map[key] ② grade
【答案】D【考察知识点】字典的基本操作【解析】①处:函数get_grade中,循环遍历从高到低排序的阈值(90, 80, 70, 60, 0),当分数score大于等于某个阈值key时,应返回对应的等级。grade_map[key]即为该阈值对应的等级字符(如grade_map[90]是"A"),因此①应填入grade_map[key]。②处:代码已调用get_grade(score)并将结果赋值给变量grade,在打印时需要输出这个等级结果,因此应填入grade。
二、判断题(共10题,每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | × | × | √ | √ | × | × | × | √ | × |
【第1题】小明的妈妈最近刚刚给他买了一块电话手表,除了可以看时间,小明也可以用它和妈妈打电话、收发信息,那么可以推测这块手表中装有一款特定操作系统。( )
【答案】√【考察知识点】计算机系统的基本组成与操作系统【解析】能够实现通话、收发信息等多功能的智能设备通常需要操作系统来管理硬件和运行应用程序,因此推断装有操作系统是正确的。
【第2题】在Python语言中,一个集合可以作为另一个集合的元素。
【答案】×【考察知识点】集合的特性【解析】集合的元素必须是可哈希(不可变)类型。集合本身是可变的,不能作为另一个集合的元素,否则会抛出TypeError。
【第3题】执行以下Python代码后,输出的结果是<class 'set'>。

【答案】×【考察知识点】字典推导式与集合的区别【解析】该代码是字典推导式,生成的是字典,type(my_set) 输出 <class 'dict'>。
【第4题】执行以下Python代码后,输出的结果是20 10。

【答案】√【考察知识点】异或运算【解析】通过三次异或交换了a和b的值,最终a=20, b=10,输出"20 10"。5、执行
【第5题】以下Python代码后,输出的结果是[6, 7]。

【答案】√【考察知识点】filter函数与lambda表达式【解析】filter筛选出大于5的元素:6和7,转换为列表后输出 [6, 7]。
【第6题】执行以下Python代码后,输出的结果是'789\n456'。
【答案】×【考察知识点】文件读写操作【解析】print(repr(f.read())):读取整个文件内容,即‘123\n456789',repr()函数将其转换为字符串表示形式123\\n456789,输出为‘123\n456789'。
【第7题】下面这段程序的时间复杂度为平方阶O(n)。

【答案】×【考察知识点】时间复杂度分析【解析】当i为偶数时内层循环只执行1次,当i为奇数时内层循环执行n次。总次数 ≈ n/2 + (n/2)*n = O(n²),因此时间复杂度为平方阶O(n²),不是O(n)。
【第8题】执行以下Python代码后,会抛出异常 ZeroDivisionError。

【答案】×【考察知识点】异常处理【解析】先访问data['b'],由于键'b'不存在,会抛出KeyError,不会执行到除法运算,因此不会抛出ZeroDivisionError。
【第9题】在对列表进行排序时,sorted() 函数会返回一个新的排序后的列表,不修改原列表,而sort() 方法会直接修改原列表,返回值为 None。
【答案】√【考察知识点】列表排序方法【解析】描述完全正确:sorted() 返回新列表,原列表不变;sort() 原地修改,返回None。
【第10题】阅读以下递推算法的Python代码,执行后的输出结果是13。

【答案】×【考察知识点】递推算法【解析】循环过程:
初始(1,2)
第1次后(2,3)
第2次后(3,5)
第3次后(5,8)输出b=8,不是13。
三、编程题(共2题,每题25分,共50分)
编程题1
试题名称:山之谷
时间限制:1.0 s
内存限制:512.0 MB
题目描述
现有一片山地,可以视为一个N行M列的网格图,第i行j列的海拔为hi,j。如果一个单元格的海拔不高于其所有相邻单元格(相邻包括上、下、左、右、左上、右上、左下、右下,最多8个方向)的海拔,则称该单元格为山谷。请你数一数该片山地中有多少山谷。
输入格式
第一行包含2个整数N, M,表示山地的大小。之后N行,每行包含M个整数hi,1, hi, 2,…… hi,M,表示海拔。
输出格式
输出1行,包含1个整数C,表示山谷的数量。
样例
输入样例

输出样例
样例解释
样例1如图所⽰,绿⾊单元格代表⼭⾕:

数据范围
保证1≤N, M ≤100 ,1≤hi,j≤10
【考察知识点】二维数组、枚举
【解析】
核心题意:统计网格中8邻域内海拔最低的山谷数量。
解题思路:
遍历每个单元格,检查其8个相邻位置;
若当前单元格海拔≤所有相邻海拔,即为山谷;
算法:双重循环枚举+ 8 方向检查
【参考程序】

编程题2
试题名称:礼盒排序
时间限制:1.0 s
内存限制:512.0 MB
题目描述
商店推出了许多礼盒,每个礼盒中包含k件商品,每件商品都有⼀个价格。
现在需要对这些礼盒进⾏排序,排序规则如下:
1.先按礼盒总价格从⼩到⼤排序;
2.如果总价格相同,按礼盒中最贵商品的价格从⼩到⼤排序;
3.如果仍然相同,按礼盒中最便宜商品的价格从⼩到⼤排序;
4.如果仍然相同,按礼盒编号从⼩到⼤排序。
请输出排序后的礼盒编号。
输入格式
第⼀⾏包含两个整数n和k,分别表⽰礼盒数量和每个礼盒中商品的数量。
接下来n⾏,每⾏包含k个整数,第i⾏表⽰第i个礼盒中各商品的价格。
输出格式
输出⼀⾏,包含排序后的礼盒编号(编号从1开始),⽤空格分隔。
样例
输入样例
输出样例
样例解释
4个礼盒分别为:

排序过程:
1.按总价排序,3号礼盒总价最⼩;
2.其余总价均为10,再按最⼤值排序,4号最⼤值更⼩;
3. 1号和2号最⼤值相同,再按最⼩值排序,2号更⼩。
最终顺序为:3 4 2 1
数据范围
保证1≤n≤103,1≤k ≤10,商品价格≤104
【考察知识点】多关键字排序【解析】
对每个礼盒计算总价、最大值、最小值,并记录原始编号(1-based)。
将(总价,最大值,最小值,编号)作为元组放入列表。
Python默认按元组元素依次比较,直接调用 sort() 即可实现多关键字升序排序。
最后输出排序后的编号。
时间复杂度O(n log n),n ≤ 1000 完全可行。
【参考程序】

策划:GESP技术委员会副主席 刘晓庆
技术支持:朱浩淼
【关于GESP第14次认证】

认证语言:
C++/Python/图形化编程

报名及交费时间:
2026年4月15日17:00-6月16日24:00

准考证下载及打印时间:
2026年6月23日9:30-6月27日9:30

认证时间:
1-4级 2026年6月27日 上午09:30-11:30
5-8级 2026年6月27日 下午13:30-16:30

认证方式:
全国各GESP考点内上机考试

报名方式:
登录GESP网站(https://gesp.ccf.org.cn/)进行报名或“CCF GESP”微信公众号报名。

认证安排及收费标准:
认证时间 | 认证级别 | 认证语言 | 认证费用 |
上午9:30-11:30 | 一级 | C++/Python/图形化 | 300元/人 |
上午9:30-11:30 | 二级 | C++/Python/图形化 | 320元/人 |
上午9:30-11:30 | 三级 | C++/Python/图形化 | 340元/人 |
上午9:30-11:30 | 四级 | C++/Python/图形化 | 360元/人 |
下午13:30-16:30 | 五级 | C++/Python | 380元/人 |
下午13:30-16:30 | 六级 | C++/Python | 400元/人 |
下午13:30-16:30 | 七级 | C++/Python | 420元/人 |
下午13:30-16:30 | 八级 | C++/Python | 440元/人 |

报名流程
📍第一种方式:GESP网站报名流程
步骤1:在电脑上使用Google Chrome浏览器/Microsoft Edge浏览器/Firefox浏览器进入GESP网站 (https://gesp.ccf.org.cn) ,参加过GESP认证的考生可直接点击【登录】;未参加过GESP的考生需先点击【注册】完成新用户注册→点击【登录】。
步骤2:进入认证列表,在对应的认证名称后点击【立即报名】。
步骤3:按顺序填写考生的报名信息,身份证信息、语言等级都填写完整后,选择考点,所选城市/区没有考点信息显示,则说明该地区暂无考点,请勾选其他城市/区。考点剩余机位数大于0,则可以报名该考点。填写完成后,点击【提交报名】。
步骤4:在报名信息确认界面,仔细核对报名信息后,点击【确认报名】。
注:如需修改考生信息,请点击【修改报名】。
步骤5:进入交费界面,选择支付方式(支付宝/微信)后,点击【确认】,然后扫码支付报名费用。
注:部分省市的考位数量变化较快,如交费页面提示该考点已报满,请点击【我的报名】后点击【取消报名】,重新填写报名信息后再提交。
步骤6:完成支付,认证报名成功。
步骤7:等待审核,已交费考生信息会依次审核。
步骤8:在指定时间内下载、打印准考证。
步骤9:参加认证。
📍第二种方式:GESP公众号报名流程
点击“CCF GESP”公众号底部菜单栏【GESP】→【报名认证】,同意授权,进行登录。登录后,其余报名步骤可参考“第一种方式”指引完成报名。


【联系我们】
1. GESP微信:关注“CCF GESP”公众号,点击“GESP小助手”即可交流。
2. GESP邮箱:gesp@ccf.org.cn
注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证件号,以便及时有效处理。
3. GESP电话:0512-67656856
咨询时间:周一至周五(法定节假日除外): 上午 8:30-12:00;下午 13:00-17:30
扫描下方二维码关注GESP公众号,了解更多资讯

