GESP 客观题评测系统
2026-03-Level-3
2026-03-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题)
如果字符变量 _1 的值是字符 1,那么 (int) _1 的值是? ()。
正确答案C
解析详情
【答案】C
【考点】ASCII 编码
【解析】 在 C++ 中,字符变量是以 ASCII 码形式存储的。字符 '1' 的 ASCII 码值是 49。当进行 (int) 强制类型转换时,取出的就是其对应的 ASCII 码数值。
【易错点】 容易误认为字符 '1' 转换后就是整数 1。
第 2 题(单选题)
a,b是整型变量,各自有互不相同的初始值。下列程序实现了什么效果()。
a = a ^ b;
b = a ^ b;
a = a ^ b;正确答案B
解析详情
【答案】B
【考点】异或运算的应用
【解析】 利用异或运算的性质(a^a=0, a^0=a)可以实现不使用临时变量交换两个数。第一步 a=a^b;第二步 b=a^b=(a^b)^b=a;第三步 a=a^b=(a^b)^a=b。最终 a, b 的值互换。
【易错点】 不熟悉位运算交换变量的经典用法,误以为是无效计算。
第 3 题(单选题)
关于下列正确的程序段,说法正确的是()。
char str1[] = "Hello";
char str2[] = {'H', 'e', 'l', 'l', '0'};cout << str1 << endl;
cout << str2 << endl;这段程序将输出不同的结果。正确答案C
解析详情
【答案】C
【考点】C 风格字符串与字符数组
【解析】 str1 使用字符串字面量初始化,包含末尾的空字符 '\0',数组长度为 6;str2 显式列出字符初始化,且最后一个字符是 '0'(数字零)而非 'o'(小写字母 o),且没有空字符,长度为 5。两者在长度和内容上均不相等。
【易错点】 忽视了数字 '0' 与字母 'o' 的区别,以及字符串初始化会自动添加 '\0' 的特性。
第 4 题(单选题)
关于以下程序段,说法正确的是()。
int x=10;
cout<<(x++) + (++x)<<endl;正确答案B
解析详情
【答案】B
【考点】自增运算符与表达式求值
【解析】 在多数现代 C++ 编译器中,按照从左向右求值:x++ 返回 10,然后 x 变为 11;接着 ++x 将 x 从 11 变为 12 并返回 12。结果为 10 + 12 = 22。尽管在 C++17 之前这是未定义行为,但在该考题语境下通常按此类逻辑计算。
【易错点】 混淆前置自增和后置自增的返回值和副作用发生时机。
第 5 题(单选题)
8 位二进制下,十进制数 -15 的补码是()。
正确答案D
解析详情
【答案】D
【考点】补码表示法
【解析】 正数 15 的原码为 00001111。负数 -15 的补码计算方法是:先取反得 11110000,再加 1,得 11110001。即符号位保持 1,数值位按位取反加一。
【易错点】 误将反码当作补码,或者在计算补码时忽略了最后的加一操作。
第 6 题(单选题)
三进制数 2102 _{(3)} 转换成十进制是:()。
正确答案B
解析详情
【答案】B
【考点】进制转换
【解析】 按权展开计算:2*3^3 + 1*3^2 + 0*3^1 + 2*3^0 = 2*27 + 1*9 + 0 + 2 = 54 + 9 + 2 = 65。因此三进制数 2102 对应的十进制数是 65。
【易错点】 对 3 的幂次计算出错,如误记 3^3 为 9 或 18。
第 7 题(单选题)
二进制数 10110101 是某数的 8 位补码,该数的十进制是()。
正确答案B
解析详情
【答案】B
【考点】补码求原码
【解析】 补码最高位为 1,表示负数。求原码:补码减 1 得 10110100,取反(符号位除外)得 11001011。数值位 1001011 转换成十进制为 64+8+2+1=75,故结果为 -75。
【易错点】 忘记符号位,或直接将其按无符号二进制数计算得到 181。
第 8 题(单选题)
已知 unsigned char c = 0x0F; (十六进制 0F = 二进制 00001111),执行 c = c << 3; 后,c 的十进制值是:()。
正确答案D
解析详情
【答案】D
【考点】位运算之左移
【解析】 0x0F 对应十进制 15。左移 3 位相当于乘以 2 的 3 次方(即 8)。15 * 8 = 120。二进制来看,00001111 左移 3 位变为 01111000,即 64+32+16+8=120。
【易错点】 左移位数计算错误,或在处理无符号字符类型溢出判断时产生混淆(此题未溢出)。
第 9 题(单选题)
补码的情况下,关于按位取反运算,用笔计算的情况下,以下说法错误的是:()
正确答案B
解析详情
【答案】B
【考点】按位取反运算
【解析】 按位取反公式为 ~x = -(x + 1)。因此 ~0 = -(0 + 1) = -1。选项 B 说 ~0 的结果是 0,显然是错误的。其他选项如 ~5 = -6, ~(-3) = 2 均符合该公式。
【易错点】 将位取反 ~ 与逻辑取反 ! 混淆,误以为非零取反为零,零取反为一。
第 10 题(单选题)
执行以下 C++ 代码后,sub 的值是()。
string str = "GESP2026";
string sub = str.substr(4, 2);正确答案A
解析详情
【答案】A
【考点】字符串 substr 函数
【解析】 `substr(pos, n)` 函数从索引 `pos` 开始截取长度为 `n` 的子串。"GESP2026" 中索引 4 处的字符是 '2'(G=0, E=1, S=2, P=3, 2=4),截取 2 个字符得到 "20"。
【易错点】 字符串索引从 0 开始计算,容易出现偏离一位的错误,或者误将第二个参数记为结束索引。
第 11 题(单选题)
执行以下代码后,输出结果是:()。
int arr[] = {5, 10, 15, 20, 25, 30};
int count = sizeof(arr) / sizeof(arr[0]);
cout << count;正确答案B
解析详情
【答案】B
【考点】数组长度计算
【解析】 `sizeof(arr)` 返回整个数组占用的总字节数,`sizeof(arr[0])` 返回单个元素占用的字节数。两者相除即得到数组元素的个数。数组中有 6 个元素,故结果为 6。
【易错点】 认为 sizeof 返回的是元素个数,或者认为返回的是数组中最后一个元素的值。
第 12 题(单选题)
执行以下代码后,输出结果是:()。
char s[10] = "abcde";
int a = sizeof(s) / sizeof(s[0]);
int b = strlen(s);
cout << a - b;正确答案B
解析详情
【答案】B
【考点】sizeof 与 strlen 的区别
【解析】 `sizeof(s)` 返回数组定义的总容量大小,即 10 字节。`strlen(s)` 返回字符串的实际长度,不含 '\0',即 "abcde" 的长度 5。因此 a-b = 10 - 5 = 5。
【易错点】 误以为 sizeof 也会根据字符串实际内容动态变化,或者忘记 strlen 不计算末尾的空字符。
第 13 题(单选题)
以下问题中,最不适合用枚举法解决的是:()
正确答案C
解析详情
【答案】C
【考点】算法选择之枚举法
【解析】 枚举法适用于在有限搜索空间内,通过逐一尝试所有可能情况来验证是否满足特定条件的场景。选项 C 是纯数值累加计算,有明确的求和公式(等差数列求和),不需要枚举验证,最不符合枚举思想。
【易错点】 认为所有使用循环解决的问题都属于枚举法,忽略了枚举法核心在于“尝试验证”。
第 14 题(单选题)
用枚举法解决“鸡兔同笼问题:头共35个,脚共94只,求鸡和兔的数量”,以下枚举逻辑最合理的是:()
正确答案A
解析详情
【答案】A
【考点】枚举法效率优化
【解析】 已知头共 35 个,则鸡的数量 x 的可能范围是 0 到 35。确定 x 后,兔的数量 y 自动确定为 35-x。只需枚举一个变量即可解决问题,时间复杂度最低。C 选项枚举范围过大且包含无关组合,效率较低。
【易错点】 未建立变量间的约束关系,导致嵌套循环枚举或枚举了不可能存在的范围。
第 15 题(单选题)
模拟“字符串加密”:规则为“每个字符 ASCII 码 + 3,若超过 z (122) 则从 a 重新开始”,以下代码中正确的条件判断是:()
for (int i = 0; i < str.length(); i++) {
// 需补充条件:
___
else {
str[i] += 3;
}
}if (str[i] > 122) str[i] = str[i] + 3 - 26;if (str[i] > 122) str[i] = str[i] - 26;if (str[i] + 3 > 122) str[i] = str[i] - 23;if (str[i] + 3 > 'z') str[i] = 'a' + (str[i] + 3 - 'z') - 1;正确答案D
解析详情
【答案】D
【考点】字符加密与越界处理
【解析】 根据规则,需判断增加 3 后的字符是否超过 'z'。若超过,需循环回到字母表开头。D 选项 `str[i] + 3 > 'z'` 判断正确,且计算逻辑 `'a' + (位移量) - 1` 正确模拟了环状替换。
【易错点】 在字符加法后判断时点选择错误,或环回计算公式中未正确处理索引对齐(少减或多减 1)。
判断题(每题 2 分)
第 1 题(判断题)
定义 int arr[5] = {1,2,3};,则 arr[3] 的值为 0,arr[5] 是合法下标。
正确答案错误
解析详情
【答案】错误
【考点】数组初始化与越界
【解析】 部分初始化数组时,未指定的元素(如 arr[3])会被初始化为 0。但大小为 5 的数组合法下标范围是 0 到 4,arr[5] 属于越界访问,是不合法的。
【易错点】 误以为数组下标包含数组长度本身。
第 2 题(判断题)
定义 double arr[10];未手动初始化时,数组中所有元素的默认值为0.0。
正确答案错误
解析详情
【答案】错误
【考点】变量初始化规则
【解析】 在函数内部定义的局部非静态数组,若不进行显式初始化,其内容是未定义的(包含随机垃圾值)。只有全局数组或静态数组才会默认初始化为 0。
【易错点】 认为 C++ 会像某些其他高级语言一样对所有局部变量自动赋默认值。
第 3 题(判断题)
定义 int arr[] = {1,2,3};,则 sizeof(arr) 的结果为 12(int 占 4 字节)。
正确答案正确
解析详情
【答案】正确
【考点】sizeof 与数组内存占用
【解析】 编译器会根据初始化列表确定数组长度为 3。3 个 int 类型的元素共占用 3 * 4 = 12 字节。
【易错点】 误认为 sizeof 返回的是元素个数 3。
第 4 题(判断题)
下面的流程图是用来求 1+2+3+\ldots+10 的和。请判断:这个流程图的逻辑正确还是错误?

正确答案正确
解析详情
【答案】正确
【考点】流程图逻辑分析
【解析】 流程图通过循环变量从 1 递增到 10,并在循环体中不断将当前值累加到总和变量中,循环条件和更新逻辑准确描述了 1 到 10 的累加过程。
【易错点】 由于无法直接查看流程图细节,需严格遵循题目逻辑判断。通常涉及循环边界(是否包含 10)的验证。
第 5 题(判断题)
下面流程图的功能是计算 5 对 2 取余数,输出结果为 1。

正确答案正确
解析详情
【答案】正确
【考点】流程图与模运算模拟
【解析】 求余数可以通过重复减法实现(5-2-2=1)。流程图模拟了这种逻辑,在 5 大于等于 2 时不断减 2,最终剩余的值即为余数 1。
【易错点】 误判循环终止条件或减法逻辑是否对应求余功能。
第 6 题(判断题)
已知大写字符 A 的ASCII编码的十六进制表示为 0x41,计算字符 m 的ASCII编码的八进制表示为 155(八进制)。
正确答案正确
解析详情
【答案】正确
【考点】ASCII 码与多进制转换
【解析】 'A' 是 65 (0x41),则 'Z' 是 90,'a' 是 97,'m' 是第 13 个小写字母,故其 ASCII 码为 97 + 12 = 109。109 转换为八进制:109 ÷ 8 = 13...5,13 ÷ 8 = 1...5,1 ÷ 8 = 0...1,逆序得到 155。结论正确。
【易错点】 在大写和小写字母转换间出现偏移计算错误,或进制转换过程出错。
第 7 题(判断题)
在 C++ 位运算中,各种不同的运算符有优先级的区分,使用括号能够解决优先级的问题。
正确答案正确
解析详情
【答案】正确
【考点】运算符优先级与括号
【解析】 位运算符(如 &、|、^、<<、>>)的优先级各不相同且通常低于算术运算符。在表达式中使用括号可以显式指定运算顺序,避免因优先级记忆不清导致的逻辑错误。
【易错点】 位运算符优先级相对较低,如 `a & 1 == 0` 会被先计算 `1 == 0`,必须用括号保护。
第 8 题(判断题)
由于在0~255范围内,char 类型和 int 类型可以互换,因此在这里 x 和 y 相等。
char x = '1';
int y = 1;正确答案错误
解析详情
【答案】错误
【考点】字符值与数值的区别
【解析】 字符变量 x 的值是字符 '1',其数值(ASCII 码)为 49。整型变量 y 的值是数值 1。虽然类型可以隐式转换,但它们的数值不相等。
【易错点】 混淆字符的表现形式与其底层的数值编码。
第 9 题(判断题)
在C++语言中,表达式 `((0xf0 + 0x15) == 255)` 的值为 true。
正确答案错误
解析详情
【答案】错误
【考点】十六进制数与布尔表达式
【解析】 在 C++ 中,`0xf0` 等于 240,`0x15` 等于 21,两者相加得到 261。因为 261 不等于 255,所以表达式 `((0xf0 + 0x15) == 255)` 的值为 false。
【易错点】 容易把十六进制数直接按十进制位数去看,或者把 `0xf0` 误算成 15。
第 10 题(判断题)
如果 a 为 int 类型的变量,且 a 的二进制最低位为 0,则表达式 (a \& 3 \& 1) == 0 的值为 true。
正确答案正确
解析详情
【答案】正确
【考点】按位与运算及其特性
【解析】 (a & 3 & 1) 相当于 a & (3 & 1),即 a & 1。由于 a 的二进制最低位为 0,a & 1 的结果必为 0。因此表达式值为 true。
【易错点】 不了解按位与的结合律,或对最低位与数值的关系理解不深刻。