点击上方蓝字·关注我们



CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2025年3月C++三级认证真题解析。
C++三级
2025年03月
一、单选题(每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | D | B | A | A | B | A | C | A | C | D | D | D | B | D | C |
第1题 Base64编码将每3字节的输入数据编码为4字节的输出数据。如果输入数据长度不是3的倍数,会用=号填充。在Base64编码中,如果输入字符串的长度为10字节,编码后的字符串长度是多少( )
A.12字节
B.13字节
C.14字节
D.16字节
【答案】D
【考纲知识点】数据编码
【解析】输入字符串长度为10,按题目所描述的Base64编码规则,其中前9个字符,输出为12个字符,最后1个字符不是3的倍数,用3个=号填充。故一共是16个字符。
第2题UTF-8编码规则如下:
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
以下哪个字节序列是合法的UTF-8编码( )
A.0xC0 0x80
B.0xF0 0x90 0x80 0x80
C.0x80 0x80 0x80
D.0xFF 0xFE 0xFD
【答案】B
【考纲知识点】进制转换
【解析】将选项中的16进制数转换为2进制,观察可知,答案为B。
第3题在 8位二进制原码表示中,八进制数-5的二进制形式是什么( )
A.10000101
B.11111010
C.11111011
D.00000101
【答案】A
【考纲知识点】进制转换
【解析】八位二进制原码,从左侧数第一位是符号位,负数为1,其余正常短除法即可。
第4题十进制数 111.111的二进制表示可以是下面的( )。
A.1101111.0001110001
B.1101110.1001110001
C.1101111.1001110001
D.1101111.0011110001
【答案】A
【考纲知识点】进制转换
【解析】将十进制数转换为二进制,分别计算整数部分111应用短除法得1101111,小数部分采用乘2取整,顺序排列法,观察4个选项小数部分可知答案为A。
第5题 在C++中,补码的主要作用是()
A.提高浮点数的精度
B.简化整数的加减法运算
C.增加整数的表示范围
D.优化内存分配
【答案】B
【考纲知识点】补码
【解析】补码是计算机中表示有符号整数的一种方式,其核心目的是统一加法和减法的运算逻辑。
第6题在C++中,一个8位有符号整数(使用补码表示)的范围是()
A.-128到127
B.-127到128
C.-256到255
D.0到255
【答案】A
【考纲知识点】原码、反码、补码/数据类型
【解析】8位二进制,第一位为符号位表示正负,剩下7位,每位可以填0,也可以填1,根据乘法原理,能表示27个数字,范围为[-128, 127]。
第7题 在C++中,以下代码的输出是什么()

A.-5
B.5
C.4294967291
D.编译错误
【答案】C
【考纲知识点】数据类型/类型转换
【解析】int类型-5的补码为1000 0000 0000 0000 0000 0000 0000 0101,将数值赋给unsigned int 类型后,原符号位被视为数值位,应用位权法232+22+20,计算后为C选项。
第8题 下列程序的作用是()

A.将十进制数转换成八进制数
B.将八进制数转换成十进制数
C.将二进制数转换成八进制数
D.将八进制数转换成16进制数
【答案】A
【考纲知识点】进制转换
【解析】题目代码用C++输出流控制数字的进制格式,oct是八进制简写,将变量decimal以八进制形式输出。
第9题 下面程序是将十进制转十六进制,横线处应该填入的是()

A.cout << oct << decimal;
B.cout << decimal << decimal;
C.cout << hex << decimal;
D.不能正确执行
【答案】C
【考纲知识点】进制转换
【解析】题目代码用C++输出流控制数字的进制格式,hex是十六进制简写,将变量decimal以十六进制形式输出。
第10题 以下代码的说法正确的是什么( )

A.进行的是整体异或运算
B.进行的是按位同或运算
C.进行的是按位与运算
D.进行的是按位异或运算
【答案】D
【考纲知识点】位运算
【解析】0b前缀表示后面是一个二进制数字,^是按位异或的计算符。因此将2个二进制数字做异或计算即可。
第11题 下面枚举法查找最大值索引程序中,横线处应该填写的是()

A.if (arr[maxIndex] > arr[i])
B.if (arr[i]-1 > arr[maxIndex])
C.if (arr[i]+1 > arr[maxIndex])
D.if (arr[i] > arr[maxIndex])
【答案】D
【考纲知识点】枚举法/模拟法
【解析】程序为打擂台找最值,需要填充的语句为“若当前的元素比最大的元素还要大,则更新最大值的索引(即数组下标)。
第12题 以下代码的功能是将数组中的奇数和偶数分别放在数组的前半部分和后半部分,横线处应该填入的是()

A.while (arr[left] % 2 == 0 && left < right) right--;
B.while (arr[right] % 2 == 0 && left < right) left--;
C.while (arr[right] % 2 != 0 && left < right) right--;
D.while (arr[right] % 2 == 0 && left < right) right--;
【答案】D
【考纲知识点】模拟法
【解析】按照题干所示的方法进行模拟,当查找区间存在时,对应代码while(left < right),则用left变量充当左指针,right指针充当右指针,分别从左往右,从右往左扫描,遇到第一个偶数/奇数时停下来,交换它们,以此达成题意。
第13题 下面程序最后能够得到HelloC++的是()
A.
B.
C.
D.
【答案】B
【考纲知识点】字符串及其函数
【解析】replace方法原型为basic_string& replace( size_type pos, size_type count, const basic_string& str );第一参数表示替换开始的下标位置,第二个表示要从刚才位置开始替换到第几个,第三个表示替换为什么。
第14题 想要得到字符串world,下面程序横线处应该填入的是()

A.
B.
C.
D.
【答案】D
【考纲知识点】字符串及其函数
【解析】insert方法原型为basic_string& insert( size_type index, size_type count, CharT ch );第一个参数表示插入位置,第二个参数表示插入的字符串是什么。
substr方法原型为basic_string substr( size_type pos = 0, size_type count = npos ) const; 第一个参数表示截取子串的开始位置,第二个表示截取长度。
第15题 有 n个正整数,假设一个正整数是美丽数字当且仅当该正整数是9的倍数但不是8的倍数。下面的程序是编写计算n个正整数中美丽数字的数量,横线处应该填入的是()

A.if (a % 9 != 0 && a % 8 != 0)
B.if (a % 9 == 0 & a % 8 == 0)
C.if (a % 9 == 0 && a % 8 != 0)
D.if (a % 9 == 0 & a % 8 != 0)
【答案】C
【考纲知识点】模拟法
【解析】按照题干描述模拟即可。
二、判断题(每题2 分,共20 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | × | √ | √ | √ | √ | √ | √ | √ | × | × |
第1题 判断一个三角形是否成立的条件只有:任意两边长度之和大于第三条边的长度
【答案】错误
【解析】也可以用任意两边之差小于第三边来进行判断。
第2题 这段程序进行的是判断一个从键盘输入的字符的ASCII是否是奇数,若是,输出YES,否则,输出NO
【答案】正确
【考纲知识点】位运算/三目运算
【解析】x & 1操作是一个常见的奇偶性判断写法,等价于x % 2。
第3题闰年的定义: 普通闰年:公历年份是 4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。 世纪闰年:公历年份是整百数的,必须是 400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。 下面程序是判断是否是闰年的正确程序
【答案】正确
【考纲知识点】基本运算/三目运算
【解析】根据题意程序先判断n是否4的倍数且非100倍数,再判断是否400倍数,满足其中1个,n为闰年输出1,否则输出0。
第4题 C++语句cout<<(n%15==0? "YES":"NO");能够判断一个整数能否被3和5同时整除
【答案】正确
【考纲知识点】三目运算
【解析】3和5互质,故可以通过模它们的乘积来判断是否能同时整除3和5。
第5题 有n个同学,从中抽取任意个人数来参加学校组织的大合唱,共有2的n次幂个方法
【答案】正确
【解析】抽取时一个一个考虑,每一个同学都有可能抽中或抽不中,根据乘法原理,答案为2n。
第6题 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数是偶数的这类二进制数称为A类数,否则就称其为B类数。
例如:
(13)10 =(1101) 2 ,其中1的个数为3则称此数为B类数;
(10)10 =(1010) 2 ,其中1的个数为2,称此数为A类数;
判断(2025)10化为二进制后,1的个数为偶数个,因此2025为A类数。
【答案】正确
【考纲知识点】进制转换
【解析】将2025进行短除法后观察其2进制即可。
第7题 该段程序将 n不停地除以2,并输出此时的商和余数,直到n=0为止。
【答案】正确
【考纲知识点】进制转换/模拟法
【解析】程序描述了短除法过程。
第8题 两个13进制的数A和B,在10进制下分别表示10和11。(A+B)13=(18)13,也就是说13进制数A加上13进制数B,和是13进制数18。
【答案】正确
【考纲知识点】进制转换
【解析】A+B = 21, 将十进制数21转换为13进制,得到18。
第9题k进制,逢k进第二位,k2进百位,k3进千位;
【答案】错误
【考纲知识点】进制转换
【解析】只有十进制下,才存在百位,千位,其他进制中并不存在。
第10题 CCF(十九进制) = 21AC(十三进制)(不区分大小写)
【答案】错误
【考纲知识点】进制转换
【解析】将CCF(十九进制)转换为4575(十进制),再转换为210C(十三进制)。结果明显与题干描述不符。
三、编程题(每题25 分,共50 分)
编程题1
时间限制:1.0 s
内存限制:512.0 MB
2025
题目描述
小A有一个整数x,他想找到最小的正整数y使得下式成立:(x and y) + (x or y) = 2025 其中and表示二进制按位与运算,or表示二进制按位或运算。如果不存在满足条件的y,则输出-1。
输入格式
一行,一个整数x。
输出格式
一行,一个整数,若满足条件的y存在则输出y,否则输出-1。
样例
输入样例1
1025
输出样例1
1000
数据范围
对于所有测试点,保证0 < x < 2025。
考纲知识点:
枚举法/位运算
分析:
模拟题意,枚举y,需要注意的是,对于正整数x和y的任意取值,x|y + x%y的计算结果均大于原数,所以y的枚举范围为[1, 2025]。
参考程序
编程题2
时间限制:1.0 s
内存限制:512.0 MB
词频统计
题目描述
在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定n个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即Apple、apple、APPLE、aPPle等均视为同一个单词)。
请你编写一个程序,输入n个单词,输出其中出现次数最多的单词。
输入格式
第一行,一个整数n,表示单词的个数;
接下来n行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。
输出格式
输出一行,包含出现次数最多的单词(输出单词为小写形式)。
样例
输入样例1
6
Apple
banana
apple
Orange
banana
apple
输出样例1
apple
数据范围
对于所有测试点,1 ≤ n ≤ 100,每个单词的长度不超过30,且仅由大小写英文字母组成。
考纲知识点:
枚举法/字符串的使用
分析:
模拟题意,读入字符串后,将所有字符处理为小写,并将n个字符串保存在数组中。因为n〈100,后面O(n2)的效率枚举数组,统计每一个元素重复出现的次数即可。
参考程序

策划: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

