跳到主要内容CCF-GESP 2025 年 6 月 C++ 二级真题解析 | 极客日志C++算法
CCF-GESP 2025 年 6 月 C++ 二级真题解析
综述由AI生成CCF-GESP 2025 年 6 月 C++ 二级考试真题包含单选、判断及编程题,涵盖计算机基础、数据类型、运算符、循环控制及数位分离等知识点。解析详细说明了各题考点与代码逻辑,提供两种幂和数求解方法,帮助考生掌握核心算法与应试技巧。
涅槃凤凰7 浏览 2025 年 6 月真题
一、单选题(每题 2 分,共 30 分)

正确答案:C
考察知识点:计算机相关知识
解析:传感器是获取外界信息(如姿态、平衡相关数据)并传递给机器人系统,这和计算机输入设备(用于向计算机输入数据和信息,比如键盘输入字符、鼠标输入操作指令)功能类似;处理器是处理数据,存储器是存储数据,输出设备是输出数据,均不符合传感器功能,所以 C 正确。

正确答案:A
考察知识点:计算机的存储与网络
解析:计算机中用于临时存储数据和程序、可扩容以提升运行时内存容量的是随机存取存储器 RAM;ROM 是只读存储器,内容一般固定,用于存储固件等;CACHE 是高速缓冲存储器,用于 CPU 和内存间加速数据交换,非用户扩容的常规内存;EPROM 是可擦除可编程只读存储器,也不是常规扩容的内存,所以选 A。

正确答案:C
考察知识点:基本数据类型、数据类型转换、基本运算符
解析:a*=b 等价于 a=a*b,a 是 int 类型,b 是 float,两者进行运算时,全部提升为 double 类型,运算结果为 double 类型数值 10.5,将其赋值给 int 类型变量 a,复合赋值运算符组成的表达式的值为运算符左侧变量的值,因此输出 a 的值为 10。所以选 C。


正确答案:A
考察知识点:基本运算符
解析:根据题目描述,空白处应该填写求百位上的数的代码。考察利用除和取余进行数位分离。B 选项得到万位和千位上数组成的数,比如 N 为 12345 时得到 12;C 选项得到十万位上的数;D 选项得到 0;只有 A 选项可以得到正确答案。正确答案为 A。

正确答案:D
考察知识点:基本运算
解析:(6, 28) 是由逗号运算符组成的表达式,表达式的值是最后一个逗号后边式子的值,因此定义 b 的同时给其赋值为 28,第 2 行不改变 a、b 的值,第 3 行将 b 的值赋值给 a,此时 a、b 的值都为 28。答案为 D。
正确答案:D
考察知识点:基本运算
解析:求星期六后 N 天是星期几?星期六,1 天、8 天等后是星期日 (0 表示),2 天、9 天后是星期一,…;则该求解可用 (N+6)%7,做取余运算求解,余数为 1~6 对应星期一到星期六,余数为 0 对应星期天。答案为 D。实际上,周期性问题都可以做类似解答。
正确答案:C
考察知识点:控制语句结构 - 循环、break、continue 关键字
解析:i 为 1,执行第 3 行,sum 值为 1,第 4 行 if 条件(1%2 的结果为 1,1 为真)成立,执行 continue,跳过其后语句,进入下一次循环;i 为 2,执行第 3 行,sum 值为 3,第 4 行 if 条件(2%2 的结果为 0,0 为假)不成立,第 5 行 if 条件(2%7 的结果为 2,2 为真)成立,执行 break,跳出循环;此时 sum 值为 3。正确答案 C。
正确答案:C
考察知识点:循环嵌套
解析:当 i 和 j 都不是偶数时,第 4 行条件成立,跳出内层循环。当 i 为 1,内层循环循环条件不成立;当 i 为 2,第 4 行条件不可能成立,内层循环执行完毕;当 i 为 3,内层循环 j 为 1 时,第 4 行条件成立,跳出内层循环;…;当 i 为 11,内层循环 j 为 1 时,第 4 行条件成立,跳出内层循环;当 i 为 12,外层循环结束。此时 i 为 12,j 为 1。输出 i*j 值为 12,答案为 C。
正确答案:B
考察知识点:控制语句结构 - 循环
解析:cnt 记录了循环次数,循环变量 i 的初始值为 -99,循环条件 i<100,i 的最大值为 99,循环步长为 2,循环次数为 100。答案为 B。
正确答案:A
考察知识点:控制语句结构 - 循环、break、continue 关键字
解析:i 不是 3 的倍数(i 为 1 和 2)时,第 3 行条件成立,执行第 4、5 行,否则(i 为 3)执行第 8 行。答案为 A。
正确答案:D
考察知识点:循环嵌套
解析:i 为 0,内层循环循环条件不成立,无输出;i 为 1,内层循环 j 的取值为 0,输出 1#0-。只有 D 符合。此类题型逻辑相似,建议自行推导验证。
正确答案:D
考察知识点:控制语句结构 - 循环、基本运算、数据的真假性
解析:不能被 3 整除且除以 5 余数为 2 可以表示为:i%3!=0 && i %5==2。
i%3 余数为 0 等价于 i%3 为假,i%3 余数不为 0 等价于 i%3 为真,因此 i%3 等价于 i%3!=0。
i %5==2 等价于 !(i %5!=2)。只有 D 无法实现题目要求。
正确答案:D
考察知识点:控制语句结构 - 循环
解析:判断一个大于 0 的正整数是几位数,数位分离的思想。除以 10 去掉数 N 的最后一位,反复执行,直到 N 为 0,循环次数即为数的位数。答案为 D。
正确答案:D
考察知识点:控制语句结构 - 循环、数位分离
解析:自守数的定义是如果一个数的平方其尾数与该数相同,则为自守数。
信息学竞赛中常出现新概念,需仔细审题,难点通常在于概念理解而非知识点本身。
对输入数和其平方依次从个位进行数位分离,直到输入数被拆完,如果此过程中分离出来的数都相等,则其为自守数,否则不是自守数。答案为 D。
正确答案:A
考察知识点:循环嵌套
解析:本题代码要实现的功能是:输出 10 行,第 i 行 输出 i 个数字,循环使用数字 0~9
A 选项,将 now_number=0 放在 L1 和 L2 之间,则每行输出的开始值都为 0,很显然和原来的效果不同。答案为 A。
B 选项,now_number+=1 等价于 now_number=1+now_number
C 选项,now_number==10 和 now_number>9 在本题场景下等价
D 选项,endl 和字符'\n'都表示换行。
二、判断题(每题 2 分,共 20 分)
正确答案:正确
考察知识点:考试规范
解析:闭卷考试为防作弊,禁止带具有信息存储、通信等作弊可能功能的设备,智能手表因有嵌入式系统、通信功能,会被禁止携带,该表述符合实际考试规范。答案正确。
正确答案:正确
考察知识点:基本运算
解析:十进制数除以 10 得到舍弃个位数的值,如果 N 本身为 1 位数,则结果为 0。答案正确。
正确答案:错误
考察知识点:基本运算
解析:(a, b) 是由逗号运算符组成的表达式,其值为最后一个逗号后边的式子的值,因此 cout<<(a,b) 输出的为 b 的值,第 2、3 行代码为判等的运算,不会改变 a、b 的值,因此输出结果为 20。答案错误。
正确答案:正确
考察知识点:基本运算
解析:max 和 min 是系统提供的函数,其作用分别是求两个数的较大值和较小值,两个数中的较大值和较小值相等,则这两个数一定相等。答案正确。
正确答案:错误
考察知识点:基本数据类型,基本运算、类型转换
解析:浮点值 45.6 可以赋值给字符类型变量 a,这里实际进行了两次类型转换,先将 45.6 转成 int 类型 45,再将 45 转成对应的字符(ASCII 码为 45 的字符)。答案错误。
正确答案:错误
考察知识点:基本运算、数据类型转换
解析:score 是 int 类型,输入 59.99,实际上是将 59 存入 score 中,第 4 行 if 条件成立,输出 不及格。答案错误。
正确答案:错误
考察知识点:控制语句结构 - 循环、continue 关键字
解析:for 循环语句中,当 if 条件成立,执行 continue,continue 用于跳过本次循环,进入下次循环。当循环执行完毕,i 的值为 10,第 5 行 if 条件成立,输出 END。答案错误。
正确答案:错误
考察知识点:控制语句结构 - 循环
解析:这段代码,每循环一次,将循环变量累加到 Sum 上边。Sum 最后的值为 0+1+2+3+4=10。答案错误。
正确答案:错误
考察知识点:控制语句结构 - 循环
解析:for(int i=5; i>1; i--) 循环变量从 5 开始,每循环一次减 1,直到 i>1 不成立,求的是 5+4+3+2 的和。
for(int i=1; i<5; i++) 循环变量从 1 开始,每循环一次加 1,直到 i<5 不成立,求的是 1+2+3+4 的和。答案错误。
正确答案:正确
考察知识点:控制语句结构 - 循环、基本运算
解析:N 为奇数,N/2 和 (N-1)/2 的计算结果相同,比如 N 为 5,计算结果都为 2,可以用来表示中间列。
N 为偶数,N/2 和 (N-1)/2 的计算结果不同,比如 N 为 6,N/2 结果为 3,(N-1)/2 结果为 2,可以分别用来表示中间两列。
代码符合题目要求。答案正确。
三、编程题(每题 25 分,共 50 分)
本题考察循环嵌套、算术运算符。
解析:当直角边长 a,b 均取不超过 n 的正整数时,有多少个不同的面积为整数的直角三角形。
直角三角形的面积为 a*b/2。因此要保证面积为整数,则 a 为偶数或者 b 为偶数。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, cnt = 0;
cin >> n;
for (int a = 1; a <= n; a++) {
for (int b = a; b <= n; b++) {
if (a % 2 == 0 || b % 2 == 0) cnt++;
}
}
cout << cnt;
return 0;
}
本题考察 循环嵌套、数学函数。
方法 1:幂和数:n=2^x+2^y(x,y 均为非负整数),找 l 和 r 之间有多少个幂和数
已知,1 ≤l ≤r ≤10^4,可推出,x、y 最小值为 0,最大值为 17(2^16 < 10^4 < 2^17),且为了防止重复遍历,y 取值要大于等于 x。
这个方法的难点是从 l,r 的范围推出 x,y 的范围。
#include <bits/stdc++.h>
using namespace std;
int main() {
int l, r, cnt = 0;
cin >> l >> r;
for (int i = l; i <= r; i++) {
for (int x = 0; x <= 17; x++) {
for (int y = x; y <= 17; y++) {
if (pow(2, x) + pow(2, y) == i) cnt++;
}
}
}
cout << cnt;
return 0;
}
方法 2,幂和数:n=2^x+2^y(x,y 均为非负整数),找 l 和 r 之间有多少个幂和数。
令 a 表示 2^x, b 表示 2^y,则 a,b 最小为 1,最大不超过 r,且为了防止重复遍历,b 取值要大于等于 a。有以下代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int l, r, a, b, cnt = 0;
cin >> l >> r;
a = 1;
while (a <= r) {
b = a;
while (b <= r) {
int tmp = a + b;
if (tmp >= l && tmp <= r) cnt++;
b *= 2;
}
a *= 2;
}
cout << cnt;
return 0;
}
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online