GESP C++ 三级 2025年6月真题解析
GESP C++ 三级 2025年6月真题解析
选择题
第1题
题目: 8位二进制原码能表示的最小整数是:
选项:
- A. -127
- B. -128
- C. -255
- D. -256
答案:A
解析: 原码表示法中,8位二进制数最高位为符号位,剩余7位表示数值,范围为 -127 到 +127,因此最小整数为 -127。
第2题
题目: 反码表示中,零的表示形式有:
选项:
- A. 1种
- B. 2种
- C. 8种
- D. 16种
答案:B
解析: 反码中,+0 和 -0 的表示不同,因此有两种表示形式。
第3题
题目: 补码1011 1011对应的真值是:
选项:
- A. -69
- B. -59
- C. -68
- D. -58
答案:A
解析: 补码10111011对应的反码是10111010,相应原码为11000101,转换为十进制为 -69。
第4题
题目: 若X的8位补码为0000 1010,则X/2的补码是:
选项:
- A. 0000 0101
- B. 1000 0101
- C. 0000 0101或1000 0101
- D. 算术右移后结果取决于符号位
答案:A
解析: 正数补码算术右移一位即为除以2,结果为00000101。
第5题
题目: 二进制数1101.101对应的十进制数是:
选项:
- A. 13.625
- B. 12.75
- C. 11.875
- D. 14.5
答案: A
解析: 1101.101 = 8+4+0+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
解析: 3×8 + 5 + 6/8 = 29.75。
第8题
题目: 二进制数1010|1100的结果是:
选项:
- A. 1000
- B. 1110
- C. 1010
- D. 1100
答案: B
解析: 按位或运算,有1为1,全0为0,1010 | 1100 = 1110。
第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
解析: 使用异或运算可实现无临时变量交换。
第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
解析: C++中静态数组定义方式为 类型名 数组名[长度]。
第11题
题目: 以下程序使用枚举法(穷举法)求解满足条件的三位数,横线处应该填入的是:
#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
解析: 获取十位数字,先整除10得到百位和十位(比如133/10得13),再%10
(13%10得3)去个位,从而得到十位上的数字。
第12题
题目: 以下程序模拟了一个简单的小球反弹过程,横线处应该填入的是:
#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
解析: 每次反弹高度减半,distance 累加的是反弹高度。
第13题
题目: C++代码string s = "GESP考试";
, s占据的字节数是:
选项:
- A. 10
- B. 8
- C. 8或10
- D. 取决于计算机采用什么编码
答案:D
解析: 字符串所占字节数与编码方式(如UTF-8、GBK)有关。如果源文件保存为 UTF-8(Linux/macOS/多数现代 Windows 工程默认):“GESP考试” → 4 个 ASCII 字母各 1 B,“考”3 B,“试”3 B,共 4 + 3 + 3 = 10 B。如果源文件保存为 GBK/GB2312(老版 Windows 简体中文版默认):每个汉字 2 B,共 4 + 2 + 2 = 8 B。其它编码(UTF-16、BIG5 等)还会出现别的数值,但日常竞赛/考试环境基本就是 UTF-8 或 GBK 两种。
第14题
题目: C++语句string s="Gesp Test";
执行s.rfind("e")
以后,输出的是:
选项:
- A. 1
- B. 2
- C. 6
- D. 3
答案: C
解析:rfind 含义:std::string::rfind(“e”) 从尾部向前查找子串 “e” 第一次出现的位置,返回其下标(从 0 开始计数)。若找不到返回 string::npos。
0 1 2 3 4 5 6 7 8
G e s p T e s t
从后往前找 “e”,位置 6 是 ‘e’,位置 1 也是 ‘e’,rfind 会先碰到位置 6 的 ‘e’,因此返回 6。
第15题
题目: 字符串"Gesp考试", 字符数是:
选项:
- A. 10
- B. 8
- C. 6
- D. 字符数多少取决于编码
答案: C
解析: 无论是 UTF-8、GBK、UTF-16 还是其他编码,字符的个数(即逻辑上的字符)始终是 6 个。编码只影响每个字符占用的字节数,不改变字符数量。
判断题
第1题
题目: C++中string
的==
运算符比较的是字符串的内存地址,而非内容。
答案: 错误
解析: ==
比较的是字符串内容,不是地址。
第2题
题目: string
的substr(1,3)
返回从下标1开始的3个字符的子串。
答案: 正确
解析: substr(pos, len)
从 pos 开始取 len 个字符。
第3题
题目: x 是浮点数,(x >> 1)
等价于 x / 2
。
答案: 错误
解析: 位运算不能用于浮点数。
第4题
题目: string("hello") == "hello"
的比较结果为 true。
答案: 正确
解析: 比较的是内容,相等。
第5题
题目: sort
可以直接用于排序 set
中的元素。
答案: 错误
解析: set
是有序容器,元素已排序,不可再用 sort
。
第6题
题目: (x & 1) == 0
可以判断整数 x
是否为偶数。
答案: 正确
解析: 偶数最低位为0,奇数为1。按位与(&)运算,有0为0,全1为1.所以可以通过(x&1)的结果来判断x是否为偶数。
第7题
题目: string
的 substr(2,10)
在字符串长度不足时会抛出异常。
答案: 错误
解析: substr
会自动截取到末尾,不会抛异常。
第8题
题目: 在数学纸面计算中,pow(2,3)
的计算结果一定是 8,但是在 C++ 中,如果遇到数据类型是浮点数,那就不一定正确。
答案: 正确
解析: 浮点数存在精度误差,结果可能略有偏差。
第9题
题目: 在 C++ 中,枚举的底层类型可以是非整型(如 float
或 double
)。
答案: 错误
解析: 枚举底层类型必须是整型。
第10题
题目: 函数声明 double f()
; 返回 int 时,会自动转换为 double。
答案: 正确
解析: 返回值会自动类型转换为函数声明的返回类型。