CCF GESP 2026年3月认证 C++ 3级试题
CCF GESP 2026年3月认证 C++ 3级试题
- 场次:2026年3月
- 满分:100 分
- 题目来源:官方直发原件
1 单选题(每题 2 分,共 30 分)
如果字符变量 _1 的值是字符 1,那么 (int) _1 的值是? ( )。
a,b 是整型变量,各自有互不相同的初始值。下列程序实现了什么效果( )。
a=a^b;
b=a^b;
a=a^b;
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
a=a^b;,常规写法应为a=a^b;洛谷在 ^ 两侧加了空格;官方 PDF 第 1 页为 a=a^b;。列位闸门按原件恢复。
已按官方原件恢复:现为原卷原文
关于下列正确的程序段,说法正确的是( )。
char str1[] = "Hello";
char str2[] ={'H','e','l','l','0'};
原文保真说明:来源改写 2 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
char str2[] ={'H','e','l','l','0'};,常规写法应为char str2[] ={'H','e','l','l','0'};洛谷丢掉 str2[] 与 = 之间的空格;官方 PDF 第 1 页为 char str2[] ={'H','e','l','l','0'};。已按列位重建恢复。
已按官方原件恢复:现为原卷原文
来源题面被改写版式选项 2
原卷作
cout<<str1<<endl;,常规写法应为cout<<str1<<endl;洛谷把选项 B 的两行代码压成一行行内代码;官方 PDF 第 1 页是带行号的代码清单。已恢复为代码围栏。
已按官方原件恢复:现为原卷原文
关于以下程序段,说法正确的是( )。
int x=10;
cout<<(x++) + (++x)<<endl;
8 位二进制下,十进制数 −15 的补码是( )。
三进制数 2102(3) 转换成十进制是:( )。
二进制数 10110101 是某数的 8 位补码,该数的十进制是( )。
已知 unsigned char c = 0x0F; (十六进制 0F = 二进制 00001111),执行 c = c << 3; 后,c 的十进制值是:( )。
补码的情况下,关于按位取反运算,用笔计算的情况下,以下说法错误的是:( )
执行以下 C++ 代码后,sub 的值是()。
string str = "GESP2026";
string sub = str.substr(4, 2);
执行以下代码后,输出结果是:( )。
int arr[] = {5, 10, 15, 20, 25, 30};
int count = sizeof(arr) / sizeof(arr[0]);
cout << count;
执行以下代码后,输出结果是:( )。
char s[10] = "abcde";
int a = sizeof(s) / sizeof(s[0]);
int b = strlen(s);
cout << a - b;
以下问题中,最不适合用枚举法解决的是:( )
用枚举法解决“鸡兔同笼问题:头共 35 个,脚共 94 只,求鸡和兔的数量”,以下枚举逻辑最合理的是:( )
模拟“字符串加密”:规则为“每个字符 ASCII 码 +3 ,若超过 z(122)则从 a 重新开始”,以下代码中正确的条件判断是:( )
for (int i = 0; i < str.length(); i++) {
// 需补充条件:
_______________________
else {
str[i] += 3;
}
}
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写版式题干
原卷作
// 需补充条件:,常规写法应为// 需补充条件:洛谷把填空行写成 16 个下划线、注释冒号为半角;官方 PDF 第 4 页为全角冒号与 23 个下划线。已按列位重建恢复。
已按官方原件恢复:现为原卷原文
2 判断题(每题 2 分,共 20 分)
判断题「√」表示正确,「×」表示错误
定义 int arr[5] = {1,2,3}; ,则 arr[3] 的值为 0,arr[5] 是合法下标。
定义 double arr[10]; ,未手动初始化时,数组中所有元素的默认值为 0.0。
定义 int arr[] = {1,2,3}; ,则 sizeof(arr) 的结果为 12(int 占 4 字节)。
下面的流程图是用来求 1+2+3+⋯+10 的和。请判断:这个流程图的逻辑正确还是错误?

下面流程图的功能是计算 5 对 2 取余数,输出结果为 1。

已知大写字母 A 的 ASCII 编码的十六进制表示为 0x41 ,计算字符 m 的 ASCII 编码的八进制表示为 155 (八进制)。
在 C++ 位运算中,各种不同的运算符有优先级的区分,使用括号能够解决优先级的问题。
由于在 0∼255 范围内,char 类型和 int 类型可以互换,因此在这里 x 和 y 相等。
char x='1';
int y=1;
在 C++ 语言中,表达式 ((0xf0 + 0x15) == 255) 的值为 true 。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写数值印错题干
原卷作
((0xf0 + 0x15) == 255),常规写法应为((0xf0 + 0x15) == 255)洛谷有题把原卷十六进制字面写成 0xff0;官方 PDF 第 6 页图像与文本层均为 0xf0。已按原件恢复。C++ 客观题其余题干仍以洛谷为准。
已按官方原件恢复:现为原卷原文
如果 a 为 int 类型的变量,且 a 的二进制最低位为 0 ,则表达式 ((a & 3 & 1) == 0) 的值为 true 。
3 编程题(每题 25 分,共 50 分)
二进制回文串
C++时间 1 s内存 512 MB标准输入输出
对于一个正整数 n,我们将其转换为不含前导零的二进制表示,如果这个二进制序列从左向右读与从右向左读完全相同,则称该数为二进制回文数。例如,9 的二进制表示为 (1001)2,是二进制回文数;12 的二进制表示为 (1100)2,不是二进制回文数。
你的任务是:给定一个正整数 n,计算在 1 到 n 的范围内二进制回文数的数量。
输入格式
输入一行,包含一个正整数 n。
输出格式
输出一行,包含一个数,表示在 1 到 n 的范围内二进制回文数的数量。
样例
15
6
样例 1 中,1 到 15 范围内 1、3、5、7、9、15 是二进制回文数。
数据范围
1≤n≤105。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
凯撒密码
C++时间 1 s内存 512 MB标准输入输出
凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 被替换成 E,C 被替换成 F,以此类推,W 被替换成 Z,X 被替换成 A,Y 被替换成 B,Z 被替换成 C。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。
但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
现在给你一个已破解的凯撒密码明文与密文,与一个有相同偏移量的未破解凯撒密码密文,请你帮忙破解它。
输入格式
输入共三行:
第一行包含一个字符串,表示已破解的凯撒密码明文;
第二行包含一个字符串,表示已破解的凯撒密码密文;
第三行包含一个字符串,表示待破解的凯撒密码密文。
输出格式
输出一行,包含一个字符串,表示待破解的凯撒密码对应的明文。
样例
ABCDEFGVWXYZ DEFGHIJYZABC WKHTXLFNEURZQIRAMXPSVRYHUWKHODCBGRJ
THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG
样例 1 中,通过已破解的密码得出偏移量为 'D' - 'A' = 3,因此,对未破解部分进行逆向偏移:密文中的 W 对应明文中的 T('W' - 3 = 'T'),密文中的 K 对应明文中的 H('K' - 3 = 'H'),以此类推。
数据范围
保证密码长度均不超过 1000,所有字符串由大写字母组成。
原文保真说明:来源改写 1 处(照原卷保留,未作修改)
来源题面被改写措辞改写输入格式
原卷作
表示已破解的凯撒密码密文,常规写法应为表示已破解的凯撒密码密文洛谷 B4500 把输入第二行写成「有相同偏移量的未破解凯撒密码密文」;官方 PDF 第 8 页为「已破解的凯撒密码密文」。争议回查后按原件恢复。题面其余仍以洛谷为准。
已按官方原件恢复:现为原卷原文
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB