#1185. GESP C++ 三 级 2026年9月真题 · 单选题
GESP C++ 三 级 2026年9月真题 · 单选题
GESP C++ 三 级 2026年9月真题(120 分钟,总分 100 分)
单选题(共 15 题,每题 2 分,共 30 分)
1. 关于计算机的数据编码,下面说法不正确的是( )。
{{ select(1) }}
- 数字 5,不管采用原码、反码、补码,它的 8 位二进制形式都是(0000 0101)2 。
- 计算机科学中,单位换算默认 1KB=1024B,而非1000B 。
- 原码是最直观的一种有符号数表示方法。
- 反码运算中,最高位进位要抛掉。
2. 关于进制转换,下面说法不正确的是( )
{{ select(2) }}
- 数字1101B 可以分解为:$1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 8 + 4 + 0 + 1 = 13$(十进制)
- 数字 42Q可以分解为:(十进制)
- 数字 2BEH 可以分解为:$2 \times 16^2 + 11(\text{B}) \times 16^1 + 14(\text{E}) \times 16^0 = 512 + 176 + 14 = 702$(十进制)
- 345Q = 0E3H(通常写作 E3H)
3. 下面程序的运行结果是( )
#include <iostream>
using namespace std;
int main() {
int x = 1;
for (int i = 0; i = 0; i <= 5) {
x++;
}
cout << x << endl;
return 0;
}
{{ select(3) }}
- 1
- 10
- 15
- 程序编译错误
4. 关于计算机编码中补码,下面说法错误的是( )。
{{ select(4) }}
- 正数的补码:与其原码、反码相同。
- 负数的补码:将其对应的正数的原码按位取反(得到反码),然后加1 。
- 8 位的补码,最大表示数据是128 ,最小表示数据是 -128。
- 负数的补码,从右往左扫描正数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。
5. 下面程序执行的结果是( )。
#include <iostream>
using namespace std;
int main() {
int x = 2026;
int count = 0;
while (x > 0) {
count++;
x = x & (x - 1);
}
cout << count << endl;
}
{{ select(5) }}
- 2026
- 8
- 16
- 32
6. 关于位运算,下列说法错误的是( )。
{{ select(6) }}
- 找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。例子:数组 [5, 7, 9, 7, 5](唯一数是 9)
- 若左移导致高位溢出(如超过整型范围),结果不再符合乘法规律。
- 有符号整数左移溢出时结果确定。
- n + 2 位二进制数 A₁A₂···Aₙ00,一定是 4 的倍数(最后两位 00 是二进制的 00)。
7. 计算 3 & 7 | 15 ^ ~11(a=3, b=7, c=15, d=11):( )。
{{ select(7) }}
- -9
- -1
- -7
- -5
8. 下面函数是一个加密解密的函数,横线处应该填入的程序段是( )。
#include <iostream>
#include <string>
using namespace std;
int main() {
int key;
cin >> key;
string msg = "Hello GESP";
cout << msg << endl;
for (int i = 0; i < msg.size(); i++) {
msg[i] = msg[i] ^ key;
}
cout << msg << endl;
_________________________
cout << msg << endl;
return 0;
}
{{ select(8) }}
for (int i = 0; i < msg.size(); i++) {
msg[i] = msg[i] | key;
}for (int i = 0; i < msg.size(); i++) {
msg[i] = msg[i] >> key;}for (int i = 0; i < msg.size(); i++) {
msg[i] = msg[i] ^ key;}for (int i = 0; i < msg.size(); i++) {
msg[i] = msg[i] & key;}
9. 下列程序是分别判断输入的 N 个数是否可能是二进制、八进制、十进制、十六进制,横线处应该填入的是( )
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
for (int i = 0; i < n; i++) {
char str[11];
cin >> str;
char max = '0';
for (int i = 0; str[i] != '\0'; i++)
if (str[i] > max)
max = str[i];
------------------------------
}
return 0;
}
{{ select(9) }}
cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <= 'F') << endl;cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= 'F') << endl;cout << (max <= 1) << " " << (max <= 7) << " " << (max <= 9) << " " << (max <= F) << endl;cout << (max >= 1) << " " << (max >= 7) << " " << (max >= 9) << " " << (max >= F) << endl;
10. 下面的程序是位掩码技术实现权限的组合管理。首先定义四个权限常量,分别对应读、写、修改、删除,每个权限占用整数的一个独立二进制位。初始化权限掩码 mask 为 0,代表没有任何权限。如果想实现如下的操作:添加读权限;添加写权限;清除读权限,其他位不变;添加删除权限。则横线处应该填入的是( )。
#include <iostream>
using namespace std;
int main() {
const int READ = 1 << 0;
const int WRITE = 1 << 1;
const int MODIFY = 1 << 2;
const int DELETE_ = 1 << 3;
int mask = 0;
_________________________
return 0;
}
{{ select(10) }}
mask = mask | READ;mask = mask | WRITE;mask = mask & (~READ);mask = mask | DELETE_;mask = mask & READ;mask = mask & WRITE;mask = mask | (~READ);mask = mask & DELETE_;mask = mask | READ;mask = mask & WRITE;mask = mask & (~READ);mask = mask | DELETE_;mask = mask | READ;mask = mask | WRITE;mask = mask | (~READ);mask = mask | DELETE_;
11. 下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是( )。
{{ select(11) }}
- num >> 1,对于正整数,等价于对 num 做整数除以 2,向下取整
- num | 0x0F,可以把 num 的低 4 位全部置为 1,高位保持不变
- num ^ num 的结果一定等于 0
- 若 num 右移时低位被移出丢弃,结果一定符合除法数学规律
12. 已知:a=0, b=2, c=11, d=7, e=5,表达式 !a & b << c ^ d | e 的结果是( )
{{ select(12) }}
- 5
- 13
- 7
- 28
13. 关于 string 的成员函数,下面说法错误的是( )
{{ select(13) }}
- size() 返回字符串的字符个数,不包含末尾的 '\0';length() 和 size() 功能完全等价
- s.empty():字符串为空时返回 true,字符串不为空返回 false
- s.substr(pos, len),当省略第二个参数 len 时,代表从 pos 位置一直截取到字符串末尾
- s.erase(2) 表示删除字符串中下标为 2 的这一个字符
14. 以下数组定义,符合 C++ 语法的是( )
{{ select(14) }}
int a[] = {1, 2, 3.0};int b['A'];int c[ ];float d[10.0];
15. 三进制有个奇妙的应用,有 1000 个酒缸,恰好 1 缸有毒。毒酒喝下后 24 小时毒发死亡;无毒酒无影响。总共有 48 小时,可以做两轮实验,每轮可以重新安排老鼠喝酒。有三种情况,这只老鼠两轮都不喝这缸酒;这只老鼠第一轮喝这缸酒;这只老鼠第二轮喝这缸酒,要保证找出毒酒,最少需要多少只老鼠?( )
{{ select(15) }}
- 5
- 7
- 10
- 9
相关
在下列比赛中: