点击上方蓝字·关注我们



CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2025年6月C++二级认证真题解析。
C++二级
2025年06月
一、单选题(每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | C | A | C | A | D | D | C | C | B | A | D | D | D | D | A |
第1题 2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用 身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的( )。
A.处理器
B.存储器
C.输入设备
D.输出设备
【参考答案】C
【答案解析】机器人身上的传感器类似计算机的输入设备,常见的传感器有温度传感器、压力传感器、陀螺仪等,负责将信号传递给芯片用于分析机器人相关情况。
第2题 小明购置的计算机使用一年后觉得内存不够用了,想购置一个容量更大的内存条,这时他需要的内存条是( )。
A. RAM
B. ROM
C. CACHE
D. EPROM
【参考答案】A
【答案解析】内存条的英文简称是RAM,指的是计算机的运行内存,运行内存容量越多,可以同时处理的任务、同时工作的软件数量就越多。
第3题 下面C++代码执行后的输出是()。

A. 3
B. 3.5
C. 10
D. 11
【参考答案】C
【答案解析】依据题目给出的程序计算,a*=b等同于a = a * b。3 * 3.5 = 10.5,赋值给整型a时截断为10。
第4题 下面C++代码用于获得正整数的第3位数,如1234则输出2。如果是一位数或两位数,则输出0。横线处应填 入的代码是()。

A. N % 1000 / 100
B. N / 1000 % 100
C. N / 1000 / 100
D. N % 100 / 100
【参考答案】A
【答案解析】N % 1000 取后三位,再/ 100 得到百位数,例如3582%100=582,582/100 = 8
第5题 下面C++代码执行,其输出是()。

A. 6 28
B. 6 6
C. 28 6
D. 28 28
【参考答案】D
【答案解析】依据题目所给出的程序分析,b=(6,28)中逗号运算符取最右边值,b为28,b==a仅作比较,不改变值,a=b使a也为28。最终输出28 28
第6题 今天星期六,其后第N天星期几?如果是星期一到星期六输出形如:星期1、星期2等,星期天则输出星期天。下面的C++代码用于完成上述要求,横线处应填上的代码是( )。

A. (N+6)/7
B. (N+6)//7
C. N % 7
D. (N+6) %7
【参考答案】D
【答案解析】依据题目的描述今天是星期六,经过N天可以求得N+6,使用总的天数对7进行取余,如果整除的话即为星期天,如果有余数,余数就是对应的星期,正确答案是D选项
第7题 下面的C++代码执行后其输出是()。

A. 45
B. 28
C. 3
D. 0
【参考答案】C
【答案解析】依照题目所给出的程序,首先循环变量为1,在累加完成后,1%2=1,if条件成立,本次循环会被跳过,第二次循环变量为2,第一个if条件不成立, 但是第二个if条件成立,程序会被break语句打断,最终输出的结果为1+2的累加值3
第8题 下面C++代码执行后其输出是()。

A. 110
B. 22
C. 12
D. 3
【参考答案】C
【答案解析】代码中break只能结束一层循环,故外层循环仍在继续。当i=11,j=1时i*j%2==1成立,内层循环break,将会执行外层循环的i++,最终i=12, j=1。输出为i*j=12*1=12
第9题 下面C++代码执行后输出是()。

A. 101
B. 100
C. 99
D. 98
【参考答案】B
【答案解析】依照题目所给出的程序,循环的范围是-99至+99,循环步长为2,循环共执行100次,注意代码中第三行写法,其实就是我们平时书写的cnt=cnt+1
第10题 下面C++代码执行后输出是( )。

A. A#A#
【参考答案】A
【答案解析】依据题目给出的程序,首先循环变量为1执行第一个if语句,输出A#,第二次循环变量为2也可以执行第一个if语句,输出A#,第三次循环变量为3执行else循环被打断,整个程序结束,最终输出A#A#
第11题 下面C++代码执行后的输出是( )。

B. 0#0-1#0-1#1-2#0-2#1-2#2-3#0-3#1-3#2-END
C. 0#0-1#0-1#1-2#0-2#1-2#2-END
【参考答案】D
【答案解析】依据题目所给出的程序,循环变量i取值为0、1、2,为0时内层循环不执行,i取1时,j=0,输出1#0-,i取2时,j可以取值0、1,分别输出2#0-和2#1-,最后程序输出END
第12题 下面C++代码执行后,将输出不能被3整除且除以5余数为2的数。下列选项不能实现的是( )。

A. (i % 3 != 0) && (i%5==2)
B. (i % 3) && (i%5==2)
C. (i % 3) && !(i % 5 != 2)
D. !(i%3) && (i%5==2)
【参考答案】D
【答案解析】题目要求输出“不能被3整除” 且 “除以5余数为2”的数“不能被3整除” 表达式为 i % 3 != 0 或i % 3 (非零即真)。“除以5余数为2”表达式为i % 5 == 2。因此,正确的条件应该是(i % 3 != 0) && (i % 5 == 2)。A选项: (i % 3 != 0) && (i%5==2),正确。B选项: (i % 3) && (i%5==2),正确(i%3在C++中非零即真,等同于i%3!=0)。C选项: (i % 3) && !(i % 5 != 2)。!(i % 5 != 2) 等同于(i % 5 == 2)。所以C选项也正确。D选项: !(i%3) && (i%5==2)。!(i%3)等同于i%3 == 0,表示“能被3整除”,与题目要求“不能被3整除”相反。所以D选项不能实现。
第13题 下面C++代码用于判断一个大于0的正整数是几位数,横线处应填入代码先后是( )。

A.
B.
C.
D.
【参考答案】D
【答案解析】计数一个数的位数通常使用循环,每次将数字除以10,直到数字变为0。计数器每次加1。while循环的条件是N > 0 (或者N != 0),只要数字还有位,就继续循环。 循环体内,cnt += 1 计数位数,N /= 10 去掉一位。 选项D: N>0 和N/=10符合逻辑。
第14题 判断一个数是否为自守数。自守数的定义是如果一个数的平方其尾数与该数相同,则为自守数,如25的平方是625,其尾数是25,所以25是自守数。相关说法错误的是()。

A.如果Flag在循环中不被改为false,则说明该数是自守数
B.代码if (N1% 10 != M1 % 10)用于判断其个位数是否相等,如果不等,则表明不是自守数
C.代码N1=N1/10, M1=M1/ 10将个位数去掉
D.将N1 > 0改为N>0效果相同
【参考答案】D
【答案解析】N是原始输入值,在循环中未改变。N1是一个副本,在循环中不断被修改,直至变为0。如果条件改为N>0,循环会变成无限循环
第15题 下面C++代码实现输出如下图形,相关说法错误的是()。

A.代码now_number = 0移动到L1和L2标记的两行代码之间,效果维持不变
B.代码now_number += 1修改为now_number = 1 + now_number 效果维持不变
C.将代码now_number == 10 调整为now_number > 9效果维持不变
D.将最后一行的cout << endl修改为cout<<"\n",效果维持不变
【参考答案】A
【答案解析】now_number = 0 在循环外初始化,确保数字从0开始递增。如果移到L1和L2之间(即内层循环内或外层循环每次迭代开始),now_number会在每次迭代或每次内层循环开始时重置为0,导致输出图案错误
二、判断题(每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | √ | × | √ | × | × | × | × | × | √ |
第1题 人们现在参加很多闭卷考试时通常都不允许带智能手机、平板电脑等,此外很多种智能手表同样因为具有嵌 入操作系统及通信等功能,所以也不允许随身携带。
【参考答案】正确
【答案解析】题目中所描述的智能设备,如果带入考场内,可能会有作弊的情况产生,所以不允许携带进入考场
第2题 在C++代码中,假设为正整数,则N/10舍弃个位数。如果小于10,则其值为0,大于10则是舍弃个位数的数。( )
【参考答案】正确
【答案解析】整数除法/10 小于10的数字整除10结果为0,大于10的数字会被消除掉个位
第3题 下列C++代码执行后,其输出为10 20,即a==b和b==a对a和b的值没有任何影响。()

【参考答案】错误
【答案解析】a==b和b==a确实不改变a和b的值。但cout << (a, b); 会使用逗号运算符,输出最右边表达式的值,即b的值20。所以输出是20,不是10 20
第4题a和b分别是C++的整型变量,如果表达式max(a,b)==min(a,b)的值为真,则说明a和b相等。()
【参考答案】正确
【答案解析】当且仅当两个数相等时,它们的最大值和最小值才会相等,题目描述正确
第5题 下面C++代码编译时将报错,因为字符变量a被赋值了浮点值。( )

【参考答案】错误
【答案解析】char类型可以存储整数值(ASCII码),浮点数45.6会被隐式转换为整数45,然后赋值给char a。编译不会报错,但可能会有警告。45对应的ASCII字符是'-'
第6题 下面C++代码执行时如输入59.99.将输出及格两个汉字。()

【参考答案】错误
【答案解析】score是int类型,输入59.99时,cin会截断小数,仅读取59,从而score实际存储为59。59 < 60 为真,所以输出 “不及格”
第7题 在下面的C++代码中,因为continue将被执行,因此不会有输出。()

【参考答案】错误
【答案解析】依据题目给出的程序分析,for循环结束后i等于10,符合if条件,因此cout << "END";
第8题 下面的C++代码执行后将输出15。()

【参考答案】错误
【答案解析】循环中i的值依次为0, 1, 2, 3, 4。Sum = 0 + 1 + 2 + 3 + 4 = 10。所以输出是10,不是15
第9题 将下面C++代码中的(int i=5; i>1; i--)调整为(int i = 1; i < 5; i++)输出结果相同,因为5到1与1到5的求和相同。( )

【参考答案】错误
【答案解析】原代码:i依次为5, 4, 3, 2。tnt = 5+4+3+2 = 14。 修改后:i依次为1, 2, 3, 4。tnt = 1+2+3+4 = 10。 结果不相同
第10题 为实现如下效果,即N行N列字符。当输入是奇数时,中间列为*,其他是-;当输入是偶数时,则中间两列是*,其他是-。字符阵列后的代码能实现其效果。()

【参考答案】正确
【答案解析】当N为奇数时,N/2和(N-1)/2相等(例如N=5, N/2=2, (N-1)/2=2),所以只有中间一列是*。 当 N为偶数时,N/2和(N-1)/2不相等且相邻(例如N=4, N/2=2, (N-1)/2=1),所以中间两列是*。 其余为 -。代码逻辑正确
三、编程题(每题25分,共50分)
题号 | 1 | 2 |
答案 |
3.1编程题1
•试题名称:数三角形
•时间限制: 1.0 s
•内存限制:512.0 MB
3.1.1题目描述
直角三角形有两条直角边与一条斜边,设两条直角边的长度分别为a,b则直角三角形的面积为。 请你计算当直角边长a,b均取不超过的正整数时,有多少个不同的面积为整数的直角三角形。直角边长分别为a, b 和a', b'的两个直角三角形相同,当且仅当a=a', b=b' 或者a=b', b=a'。
3.1.2输入格式
一行,一个整数n,表示直角边长的最大值。
3.1.3输出格式
输出一行,一个整数,表示不同的直角三角形数量。
3.1.4样例
3.1.4.1输入样例1

3.1.4.2输出样例1

3.1.4.3输入样例2

3.1.4.4输出样例2

3.1.5数据范围 对于所有测试点,保证1≤ n≤ 1000。
【代码解析】题目要求面积为整数的直角三角形数量,面积为(a*b)/2。当a*b为偶数时,面积为整数。代码通过两层循环遍历所有a和b的组合(其中a <= b 避免重复计数),然后判断a*b是否为偶数
3.1.6参考程序

3.2编程题2
•试题名称:幂和数
•时间限制: 1.0 s
•内存限制:512MB
3.2.1题目描述
对于正整数n,如果可以表为两个2的次幂之和,即n=2x+2y( x, y均为非负整数),那么称为幂和数。给定正整数l,r,请你求出满足l≤n≤r的整数n中有多少个幂和数。
3.2.2输入格式
一行,两个正整数l,r,含义如上。
3.2.3输出格式
输出一行,一个整数,表示l,r之间幂和数的数量。
3.2.4样例
3.2.4.1输入样例1

3.2.4.2输出样例1

3.2.4.3输入样例2

3.2.4.4输出样例2

3.2.5数据范围
对于所有测试点,保证1≤l≤r≤10^4
【代码解析】题目要求找出l 到r 之间可以表示为2x+2y形式的数。代码使用两层while 循环生成所有2x和2y的组合(a 和b 分别代表2x和2y)。通过a*=2 和b*=2 来生成下一个2的幂。检查a+b 是否在[l, r] 范围内,如果在则计数
3.2.6参考程序

策划:GESP技术委员会副主席 刘晓庆
技术支持:马长明


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