2025年6月GESP真题及题解(C++三级): 选择题和判断题(题解)

一、选择题
第1题
题目: 8位二进制原码能表示的最小整数是( )
A. (-127)
B. (-128)
C. (-255)
D. (-256)
答案: A
解析: 8位原码最高位为符号位,剩余7位为数值位。负数数值位最大为 (1111111_2=127),所以最小整数为 (-127)。(-128) 是8位补码能表示的最小整数,不是原码。
第2题
题目: 反码表示中,零的表示形式有( )
A. 1种
B. 2种
C. 8种
D. 16种
答案: B
解析: 反码中零有两种表示:(+0) 为 00000000,(-0) 为 11111111,因此共有2种。
第3题
题目: 补码 10111011 对应的真值是( )
A. (-69)
B. (-59)
C. (-68)
D. (-58)
答案: A
解析: 补码 10111011 符号位为1,表示负数。对其取反加1:
10111011 取反得 01000100,加1得 01000101,即十进制 (69)。
所以真值为 (-69)。
第4题
题目: 若 (X) 的8位补码为 00001010,则 (X/2) 的补码是( )
A. 00000101
B. 10000101
C. 00000101 或 1000101
D. 算术右移后结果取决于符号位
答案: A
解析: 00001010 是正数,真值为 (10)。(10/2=5),其8位补码为 00000101。
第5题
题目: 二进制数 (1101.101) 对应的十进制数是( )
A. (13.625)
B. (12.75)
C. (11.875)
D. (14.5)
答案: A
解析:
1101.101 2 = 1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 1101.101_2=1\times2^3+1\times2^2+0\times2^1+1\times2^0+1\times2^{-1}+0\times2^{-2}+1\times2^{-3} 1101.1012=1×23+1×22+0×21+1×20+1×2−1+0×2−2+1×2−3
= 8 + 4 + 1 + 0.5 + 0.125 = 13.625 =8+4+1+0.5+0.125=13.625 =8+4+1+0.5+0.125=13.625
第6题
题目: 补码加法中,若符号位无进位而次高位有进位,则说明( )
A. 结果正确
B. 发生上溢
C. 发生下溢
D. 结果符号位错误
答案: B
解析: 补码加法中,符号位进位与次高位进位不同表示溢出。符号位无进位而次高位有进位,通常对应正数加正数得到负数,即上溢。
第7题
题目: 八进制数 (35.6) 对应的十进制数是( )
A. (29.75)
B. (28.5)
C. (27.625)
D. (30.25)
答案: A
解析:
35.6 8 = 3 × 8 1 + 5 × 8 0 + 6 × 8 − 1 = 24 + 5 + 0.75 = 29.75 35.6_8=3\times8^1+5\times8^0+6\times8^{-1} =24+5+0.75=29.75 35.68=3×81+5×80+6×8−1=24+5+0.75=29.75
第8题
题目: 二进制数 10101100 的结果是( )
A. 1000
B. 1110
C. 1010
D. 1100
答案: B
解析: 原文件题干缺少具体运算要求,OCR 不完整,无法给出可靠推导。按答案表答案为 B。
第9题
题目: 以下哪个位运算可以交换两个变量的值(无需临时变量)( )
A. a=a^b;b=a^b;a=a^b;
B. a=a&b;b=a|b;a=a&b;
C. a=a|b;b=a*b;a=a*b;
D. a=~a;b=~b;a=~a;
答案: A
解析: 异或交换能正确交换两个变量:
cpp
a = a ^ b;
b = a ^ b;
a = a ^ b;
第10题
题目: 如何正确定义一个长度为5的整型数组( )
A. int array = new int[5];
B. array int[5];
C. int[] array={1,2,3,4,5};
D. int array[5];
答案: D
解析: D正确,其它均错误。
第11题
题目: 以下程序使用枚举法(穷举法)求解满足条件的三位数,横线处应该填入的是( )
cpp
#include <iostream>
using namespace std;
int main() {
int count = 0;
for (int i = 100; i <= 999; i++) {
int a = i / 100;
_______________ // 横线处
int c = i % 10;
if (a * a + b * b == c * c) {
count++;
}
}
cout << count << endl;
return 0;
}
A. int b = (i / 10) / 10;
B. int b = (i / 10) % 10;
C. int b = (i % 10) / 10;
D. int b = (i % 10) % 10;
答案: B
解析:
本题需要提取三位数 i 的百位 a、十位 b 和个位 c。
- 百位
a:i / 100截去后两位,得到百位数字。 - 个位
c:i % 10取个位数字。 - 十位
b:先通过i / 10去掉个位,此时原十位移到了个位位置,再对其% 10即可提取十位数字。因此横线处应填入int b = (i / 10) % 10;。
第12题
题目: 以下程序模拟了一个简单的小球反弹过程,横线处应该填入的是( )
cpp
#include <iostream>
using namespace std;
int main() {
int height = 10;
int distance = 0;
for (int i = 1; i <= 5; i++) { // 模拟5次落地
_______________ // 横线处
height /= 2;
distance += height;
}
cout << distance << endl;
return 0;
}
A. distance += height/2;
B. distance += height;
C. distance += height*2;
D. distance += height+1;
答案: B
解析:
小球每次落地经历"下落"和"反弹上升"两个过程。
- 循环开始时,
height表示当前下落的高度。因此应先累加下落距离,即distance += height;。 - 随后
height /= 2;计算出反弹的高度。 - 最后
distance += height;累加反弹上升的距离。
因此横线处应填入distance += height;,选 B。
第13题
题目: C++代码 string s = "GESP考试";,s占据的字节数是( )
A. 10
B. 8
C. 8或10
D. 取决于计算机采用什么编码
答案: D
解析:
在 C++ 中,std::string 的底层是按字节(byte)存储字符的。
- 如果采用 UTF-8 编码,英文字母占 1 字节,汉字通常占 3 字节,总字节数为 4 × 1 + 2 × 3 = 10 4 \times 1 + 2 \times 3 = 10 4×1+2×3=10 字节。
- 如果采用 GBK 编码(Windows 默认常见),英文字母占 1 字节,汉字占 2 字节,总字节数为 4 × 1 + 2 × 2 = 8 4 \times 1 + 2 \times 2 = 8 4×1+2×2=8 字节。
题目未指定运行环境,因此具体占据的字节数取决于计算机采用的具体字符编码,选 D。
第14题
题目: C++语句 string s="Gesp Test"; 执行 s.rfind("e") 以后输出的结果是( )
A. 1
B. 2
C. 6
D. 3
答案: C
解析:
rfind() 函数用于从字符串末尾(右侧)向前查找子串或字符,并返回其正向索引下标。
字符串 "Gesp Test" 的索引依次为:
- 0:
G,1:e,2:s,3:p,4:(空格),5:T,6:e,7:s,8:t
字符 'e' 分别出现在索引 1 和索引 6 处。rfind("e") 从后往前查找,最先找到的是索引 6 处的 'e',因此返回 6,选 C。
第15题
题目: 字符串 "Gesp考试",字符数是( )
A. 10
B. 8
C. 6
D. 字符数多少取决于编码
答案: C
解析:
题目问的是"字符数"(而不是字节数)。
字符串 "Gesp考试" 由 4 个英文字母(G、e、s、p)和 2 个汉字(考、试)组成。无论在何种编码环境下,这总共都是 6 个独立的字符。若题目问的是字节数(如第13题),才取决于编码;问字符数则为固定值,选 C。
二、判断题(共10题)
第1题
题目: C++ 中 string 的 == 运算符比较的是字符串的内存地址,而非内容。
答案: ×
解析: std::string 重载了 == 运算符,比较的是字符串内容,不是内存地址。
第2题
题目: string 的 substr(1, 3) 返回从下标1开始的3个字符的子串。
答案: √
解析: substr(pos, count) 从下标 pos 开始取最多 count 个字符。若剩余长度足够,则正好取3个字符;若不足,则取到字符串末尾。
第3题
题目: x 是浮点数,(x >> 1) 等价于 x/2。
答案: ×
解析: C++ 中 >> 只能用于整型,不能直接对 float/double 使用,x >> 1 会编译错误。
第4题
题目: string("hello") == "hello" 的比较结果为 true。
答案: √
解析: std::string 与 C 风格字符串比较时按内容比较,二者内容均为 hello,结果为 true。
第5题
题目: sort 可以直接用于排序 set 中的元素。
答案: ×
解析: set 中的元素是只读的,不能通过 sort 直接修改其顺序;并且 set 本身会自动按有序规则维护元素。
第6题
题目: (x & 1) == 0 可以判断整数 (x) 是否为偶数。
答案: √
解析: 整数最低位为0时是偶数,为1时是奇数。x & 1 取出最低位,因此 (x & 1) == 0 可判断偶数。
第7题
题目: string 的 substr(2, 10) 在字符串长度不足时会抛出异常。
答案: ×
解析: substr(pos, count) 中,若 count 超过剩余字符数,不会抛异常,而是返回到字符串末尾的子串;只有 pos 越界时才可能抛出 out_of_range 异常。
第8题
题目: 在数学纸面计算中,pow(2, 3) 的计算结果一定是8,但是在 C++ 中,如果遇到数据类型是浮点数,那就不一定正确。
答案: √
解析: 浮点数存在精度误差,pow 返回浮点结果时可能不能精确表示整数,因此直接比较浮点结果时需考虑误差。
第9题
题目: 在 C++ 中,枚举的底层类型可以是非整型(如 float 或 double)。
答案: ×
解析: C++ 中枚举的底层类型必须是整型类型,不能是 float、double 等非整型。
第10题
题目: 函数声明 double f(); 返回 int 时,会自动转换为 double。
答案: √
解析: 函数返回表达式会按函数返回类型进行转换。若函数返回类型为 double,return 一个 int 值时会自动转换为 double。
各种学习资料,助力大家一站式学习和提升!!!
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"########## 一站式掌握信奥赛知识! ##########";
cout<<"############# 冲刺信奥赛拿奖! #############";
cout<<"###### 课程购买后永久学习,不受限制! ######";
return 0;
}
【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"跟着王老师一起学习信奥赛C++";
cout<<" 成就更好的自己! ";
cout<<" csp信奥赛一等奖属于你! ";
return 0;
}
