跳到正文
OJ
佛大附属信奥
在线评测 · 分级学习
学习
题库
测验
提交
作业
留言
登录
菜单
学习
题库
测验
提交
作业
留言
登录
GESP C++ 三级 · 2026 年 6 月认证理论卷
登录
后作答才能记录成绩
一、单选题(每题 2 分)
1.
关于计算机的数据编码,下⾯说法正确的是( )。
A. 机器数 1000 1101B 的真值可能是 -13(如果它是原码)或 141(如果它是⽆符号数)等数,这取决于我们如何解释它。
B. 计算机中,所有数据最终都以⼆进制、⼋进制、⼗六进制的形式存储和运算。
C. 字节(Byte)是计算机中最⼩的数据单位。位(bit)是计算机中最⼩的存储单位。
D. 计算机中,1k 字节是 1000 字节的意思。
2.
计算机⼚商为了计算⽅便,⼀般采⽤ 1000 进制。如果我们买的⼚商标注的是 1 TB 的硬盘,它实际的存储容量是( )。
A. $1000 \times 1000 \times 1000 \times 1000$ 字节
B. $1000 \times 1000 \times 1000$ 字节
C. $1024 \times 1024 \times 1024 \times 1024$ 字节
D. $1024 \times 1024 \times 1024$ 字节
3.
低位、⾼位压缩技术,适⽤于数据仅使⽤字节的⼀部分(如仅⽤低 4 位)的场景。字节结构:⼀个字节为 8 位,分为⾼ 4 位(⾼位)和低 4 位(低位)。当数据是⼗六进制数(即 0x0 到 0xF),每个值仅需 4 位表⽰,⾼ 4 位全为 0。将两个相邻的 4 位值合并为⼀个字节。四个数据 0x1、0x2、0x3、0x4 采⽤上述压缩技术压缩以后是( )。
A. 12D、34D
B. 12Q、34Q
C. 12H、34H
D. 00010011B、00110101B
4.
关于计算机编码中反码和补码,下⾯说法错误的是( )。
A. 负数的补码,⼀个快速⽅法是从右往左扫描正数的⼆进制形式,遇到第⼀个 1 之后,左边的所有位都取反。
B. 对于⼀个 8 位的⼆进制数:最⼤表⽰范围 $[-127, 127]$。
C. 反码减法可以统⼀为加法。符号位可以直接参与运算。
D. 反码表⽰中,0 的表⽰不唯⼀:0000 0000B 和 1111 1111B。
5.
⼀种加密⽅式是字符数组与密钥 KEY、运算⽅式分开传输,⽐如字符数组 `char text[4] = {'G', 'E', 'S', 'P'};` 由⼀种传输⽅式发送,密钥 `KEY = 2026` 通过另⼀种发送⽅式发送,运算⽅式 `char function[4] = {'|', '-', '^', '+'};` ⼜是另⼀种发送⽅式发送。三种数据都到达⽬的地以后,分别进⾏例如 `'G' | 6`、`'E' - 2`、`'S' ^ 0`、`'P' + 2` 等计算,来得到相应的真实内容,上述 GESP 通过这种加密⽅式,加密以后最终的内容是( )。
A. GCSR
B. RSCG
C. GCSA
D. BCSR
6.
关于位运算,下列说法错误的是( )。
A. 找唯⼀数:数组中唯⼀出现⼀次的数,其余出现两次,全部异或结果即为该数。例如:数组 [5, 7, 9, 7, 5](唯⼀数是 9)。
B. 交换两个数:`a ^= b; b ^= a; a ^= b;`(⽆需临时变量)。
C. 将⼆进制位整体左移 4 位,⾼位溢出舍弃,低位补 0;等价于 num 乘以 $2^4$。
D. 对每⼀个⼆进制位取反,包括符号位,简单运算规则是 `~n = -n - 1`。
7.
关于字符串和字符数组,下列说法正确的是( )。
A. ```cpp char str[] = "GESP"; int len1 = sizeof(str); int len2 = strlen(str); ``` 上⾯程序能够正确执⾏,len1 与 len2 相等。
B. ```cpp char str1[4] = "GESP"; char str2[4] = {'G', 'E', 'S', 'P'}; ``` 这段程序将能够正确执⾏。
C. ```cpp char str2[4] = {'G', 'E', 'S', 'P'}; strcpy(str2, "HELLO,GESP"); cout << str2 << endl; ``` 这段程序即使能够运⾏,但是存在覆盖数组以外的内存空间的⾏为,可能会引起严重错误。
D. ```cpp char dest[4] = {'G', 'E', 'S', 'P'}; char src[] = "HELLO"; strcat(dest, src); cout << dest << endl; ``` 这段程序能够正确执⾏,不存在数组越界⾏为。
8.
计算机中的 2 KB 等于多少 bit( )。
A. 16384
B. 20000
C. 2000
D. 2048
9.
在 C++ 中,对于 32 位有符号整数 int 类型数据 n,关于按位取反运算符 ~,下列说法正确的是( )。
A. `~6` 的结果是 5。
B. 按位取反满⾜公式 `~n = -n - 1`。
C. `~0` 的结果是 1。
D. `~(-2)` 的结果是 -1。
10.
关于计算机中的⼆进制编码表⽰,下列说法错误的是( )。
A. 原码是最直观的⼀种有符号数表⽰⽅法。最⾼位(最左边的位)为符号位:0 表⽰正数,1 表⽰负数,其余位为数值位(真值的绝对值)。
B. 补码完美解决了原码和反码的缺陷,是现代计算机中表⽰有符号整数的标准⽅式。正数的补码与其原码、反码相同;负数的补码是将其对应正数的原码按位取反(得到反码),然后加 1。
C. 计算补码的⼀个更快的技巧:从右往左扫描正数的⼆进制形式,遇到第⼀个 1 之后,左边的所有位都取反。
D. 对于⼀个 8 位的⼆进制数,补码最⼤表⽰范围为 $[-128, 127]$。
11.
下⾯选项中提到的变量都是正整数,关于位运算,下⾯说法错误的是( )。
A. `num & 1`,结果为 1 则奇数,0 则偶数(仅看最低位)。
B. `num & 0xFF` 保留低 8 位。
C. `num & b` 的结果⼀定⼩于等于 num。
D. 若 num 左移导致⾼位溢出(如超过整型范围),结果符合乘法规律。
12.
`a=7, b=3, c=14, d=15, e=8`,对于运算表达式 `!a << b & c ^ d | e` 的结果是( )。
A. 0
B. 15
C. 7
D. 14
13.
关于 string 的成员函数,下⾯说法错误的是( )。
A. `size()`:返回字符串长度(字符个数,不含 `'\0'`)。
B. `length()` 与 `size()` 功能完全⼀致,返回字符串长度。
C. `empty()`:判断字符串是否为空(⾮空返回 true,空返回 false)。
D. `s.append(s2, 0, 3);` 从 s2 下标 0 开始,截取 3 个字符。
14.
以下数组定义,符合 C++ 语法的是( )。
A. `int [10] a;`
B. `int b['&'];`
C. `int c[*];`
D. `double d[10.0];`
15.
现在有⼀个数,请你分别判断它们是否可能是⼆进制、⼋进制、⼗进制、⼗六进制。例如,6AFF 就只可能是⼗六进制,⽽ 1011 则是四种进制皆有可能。输⼊ N(保证 $1 \le N$ ),表⽰有 N 个数让你进⾏判断,接下来输⼊ N 个字符串(保证所有字符串长度不超过 10),判断可能是四个进制当中的哪个进制数。输出 N ⾏,每⾏ 4 个数,⽤空格隔开,分别表⽰给定的字符串是否可能表⽰⼀个⼆进制数、⼋进制数、⼗进制数、⼗六进制数。使⽤ 1 表⽰可能,使⽤ 0 表⽰不可能。下⾯程序横线处可以满⾜这个要求的是( )。 ```cpp #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; } ```
A. `cout << (max >= '1') << " " << (max >= '7') << " " << (max >= '9') << " " << (max >= 'F') << endl;`
B. `cout << (max <= '1') << " " << (max <= '7') << " " << (max <= '9') << " " << (max <= 'F') << endl;`
C. `cout << (max = '1') << " " << (max = '7') << " " << (max = '9') << " " << (max = 'F') << endl;`
D. `cout << (max < '1') << " " << (max < '7') << " " << (max < '9') << " " << (max < 'F') << endl;`
二、判断题(每题 2 分)
1.
反码运算时,产⽣的进位需要循环进位,即最⾼位产⽣的进位要加回到结果的最低位。
对
错
2.
-11 的补码的⼀种计算⽅式是从右往左扫描正数的⼆进制形式,遇到第⼀个 1 之后,左边的所有位都取反。
对
错
3.
⼀个 8 位的⼆进制数补码,最⼤的表⽰范围是从 $-128$ 到 $127$。
对
错
4.
判断某个数是否是质数,枚举范围可适当缩⼩(遍历到 $\sqrt{N}$ ⽽⾮ $N$),提升效率。
对
错
5.
如果 a 为 int 类型的变量,且表达式 `((a & 1) == 1)` 的值为 true,则说明 a 是奇数。
对
错
6.
⼗六进制数 CCF 对应的⼆进制数、⼋进制数、⼗进制数分别是:110011001111、6317、3269。
对
错
7.
下列程序如果能够正确执⾏,那么输出的结果是 GESP。 ```cpp int main() { string name = "GESP"; cout << name[false] << name[true] << name[1 << 1] << name[7 >> 1] << endl; } ```
对
错
8.
某个初学 C++ 的学⽣,在对照参考程序写了⼀个程序以后,信⼼满满地进⾏编译,他敲进编译器的全部代码如下,这个程序能够正常编译运⾏。 ```cpp 1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() { 4 cout << "Hello world!" << endl; 5 return 0; 6 } ```
对
错
9.
代码逐⾏复刻⼿⼯运算步骤,中间不能增加任何判断逻辑,否则就不属于模拟算法。
对
错
10.
判断⼀个 int 型数字 s[i] 是不是在 0 和 9 之间(可以是 0 和 9),判断条件可以写为 `if (s[i] >= '0' && s[i] <= '9')`。
对
错