【202609】C++三级

从PDF导入:GESP 2026年09月_C++3级试卷

C++ 120分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
关于计算机的数据编码,下面说法不正确的是(  )。
A. 数字 5,不管采用原码、反码、补码,它的 8 位二进制形式都是 (0000 0101)2。
B. 计算机科学中,单位换算默认 1K
C. 原码是最直观的一种有符号数表示方法。
D. 反码运算中,最高位进位要抛掉。
第2题 中级 2.0分 单选
关于进制转换,下面说法不正确的是(  )。
A. 数字 1101
B. 可以分解为:1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13(十进制)
C. 数字 42Q 可以分解为:4×8¹ + 2×8⁰ = 32 + 2 = 34(十进制)
D. 数字 2BEH 可以分解为:2×16² + 11(
第3题 中级 2.0分 单选
下面程序的运行结果是(  )。

A. 1
B. 10
C. 15
D. 程序编译错误
第4题 中级 2.0分 单选
关于计算机编码中补码,下面说法错误的是(  )。
A. 正数的补码,与其原码、反码相同。
B. 负数的补码:将其对应的正数的原码按位取反(得到反码),然后加 1。
C. 8 位的补码,最大表示数据是 128,最小表示数据是 -128。
D. 负数的补码,从右往左扫描数的二进制形式,遇到第一个 1 之后,左边的所有位都取反。
第5题 中级 2.0分 单选
下面程序执行的结果是(  )。

A. 2026
B. 8
C. 16
D. 32
第6题 中级 2.0分 单选
关于位运算,下面说法错误的是(  )。
A. 找唯一数:数组中唯一出现一次的数,其余出现两次,全部异或结果即为该数。例子:数组 [5, 7, 9, 7, 5](唯一数是 9)。
B. 若左移导致高位溢出(超出整型范围),结果不再符合乘法规律。
C. 有符号整数左移溢出时结果确定。
D. n + 2 位二进制数 A1A2…An00,一定是 4 的倍数(最后两位 00 是二进制的 00)。
第7题 中级 2.0分 单选
计算 3 & 7 | 15 ^ ~11(a=3,b=7,c=15,d=11):(  )。
A. -9
B. -1
C. -7
D. -5
第8题 中级 2.0分 单选
下面函数是一个加密解密的函数,横线处应该填入的程序段是(  )。

A.
B.
C.
D.
第9题 中级 2.0分 单选
下列程序是分别判断输入的 N 个数是否可能是二进制、八进制、十进制、十六进制,横线处应该填入的是(  )。

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;
第10题 中级 2.0分 单选
下面的程序是位掩码技术实现权限的组合管理。首先定义四个权限常量,分别对应读、写、修改、删除,每个权限占用整数的一个独立二进制位。初始化权限掩码 mask 为 0,代表没有任何权限。如果想实现如下的操作:添加读权限;添加写权限;清除该权限(读),其他位不变;添加删除权限。则横线处应该填入的是(  )。

A.
B.
C.
D.
第11题 中级 2.0分 单选
下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是(  )。
A. num >> 1,对于正整数,等价于对 num 做整除除以 2,向下取整。
B. num | 0x0F,可以把 num 的低 4 位全部置为 1,高位保持不变。
C. num ^ num 的结果一定等于 0。
D. 若 num 右移时低位被移出丢弃,结果一定符合除法数学规律。
第12题 中级 2.0分 单选
已知:a=8,b=2,c=11,d=7,e=5,表达式 !a & b << c ^ d | e 的结果是(  )。
A. 5
B. 13
C. 7
D. 28
第13题 中级 2.0分 单选
关于 string 的成员函数,下面说法错误的是(  )。
A. size() 返回字符串的字符个数,不包含末尾的 '\0';length() 和 size() 功能完全等价。
B. s.empty():字符串为空时返回 true,字符串不为空返回 false。
C. s.substr(pos, len),当省略第二个参数 len 时,代表从 pos 位置一直截取到字符串末尾。
D. s.erase(2) 表示删除字符串中下标为 2 的这一个字符。
第14题 中级 2.0分 单选
以下数组定义,符合 C++ 语法的是(  )。
A. int a[] = {1, 2, 3.0};
B. int b['A'];
C. int c[];
D. float d[10.0];
第15题 中级 2.0分 单选
三进制有个奇妙的应用。有 1000 个酒缸,恰好 1 缸有毒。毒酒喝下后 24 小时毒发死亡;无毒酒无影响。总共有 48 小时,可以做两轮实验,每轮可以重新安排老鼠喝酒。有三种情况,这只老鼠两轮都不喝这缸酒;这只老鼠第一轮喝这缸酒;这只老鼠第二轮喝这缸酒。要保证找出毒酒,最少需要多少只老鼠?(  )
A. 5
B. 7
C. 10
D. 9
第16题 中级 2.0分 判断
对于计算机编码运算,补码做加法运算时,如果最高位产生进位,需要把该进位循环加到结果的最低位。
T. 正确
F. 错误
第17题 中级 2.0分 判断
求 -13 的补码,可以对正 13 的二进制,从右向左扫描,遇到第一个 1 之后,右边所有位全部取反,左边保持不变。
T. 正确
F. 错误
第18题 中级 2.0分 判断
一个 8 位二进制原码表示的有符号数,可表示的数值范围是 -128 到 +127。
T. 正确
F. 错误
第19题 中级 2.0分 判断
这段代码执行后,能够将数组中所有大于 0 的元素赋值为 0。

T. 正确
F. 错误
第20题 中级 2.0分 判断
a 是 int 有符号整型,若 (a & 1) == 1 结果为 true,则 a 一定是正奇数。
T. 正确
F. 错误
第21题 中级 2.0分 判断
char str[4] = "GESP"; 将在内存空间中给 str[4] 分配 5 个字节。
T. 正确
F. 错误
第22题 中级 2.0分 判断
判断字符串中字符是否是 '0' 或者 '1',可以写条件:if(str[i]==0 || str[i]==1) 。
T. 正确
F. 错误
第23题 中级 2.0分 判断
下面程序执行后,将输出 98 。

T. 正确
F. 错误
第24题 中级 2.0分 判断
枚举可以在保证不漏解的前提下缩小枚举范围,不是必须遍历全部。
T. 正确
F. 错误
第25题 中级 2.0分 判断
下面流程图逻辑:初始化 sum ← 0,i ← 0;当 i < n 成立时,执行 sum ← sum + a[i],再执行 i ← i + 1;循环结束输出 sum。该流程图可以正确计算一维数组 a[0] ~ a[n] 全部元素的总和。

T. 正确
F. 错误
第26题 中级 25.0分 编程
公共二进制位

试题名称:公共二进制位
时间限制:1.0 s
内存限制:512.0 MB
小红有 n 个非负整数 a1, a2, …, an。她将每个整数转换为二进制后,想知道有多少个二进制位在所有整数中均为 1。
二进制位从右向左编号为 0, 1, 2, …。若某个整数的二进制表示中没有第 k 位,则认为它的第 k 位为 0。
请你求出满足条件的二进制位数量。
2 ≤ n ≤ 200000,0 ≤ ai ≤ 10⁹。

【输入格式】
第一行一个整数 n,表示整数的个数。
第二行 n 个非负整数 a1, a2, …, an。
【输出格式】
输出一个整数,表示所有整数的二进制表示中均为 1 的二进制位数量。
【输入样例 1】
3
13 7 15
【输出样例 1】
2
【样例解释 1】
三个整数的二进制表示分别为 (1101)2、(0111)2 和 (1111)2。其中第 0 位和第 2 位均为 1,因此答案为 2。
【数据范围】
2 ≤ n ≤ 200000,0 ≤ ai ≤ 10⁹。
第27题 中级 25.0分 编程
分割字符串

试题名称:分割字符串
时间限制:1.0 s
内存限制:512.0 MB
小明拿到了一段字符串文本。小明希望用下面的规则分割这个字符串:
1.小明从左到右扫描字符串,遇到第一个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这个空格);
2.对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续两个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这两个空格);
3.对于上次分割后右侧的字符串,小明继续扫描,第一次遇到连续三个空格后停止,并将字符串分割为左右两个部分(舍弃用于分割的这三个空格);
4.以此类推,小明每分割一次,下一次分割就需要更长的连续空格;直到字符串无法再次分割。

最后输出每次分割的左侧的字符串,以及最后一次分割的右侧字符串。
如果字符串完全无法进行任何一次分割,直接输出其本身。
字符串长度不超过 1000。字符串中只会包含大写字母、小写字母、数字,或空格,且输入字符串不会以空格结尾。
特别强调:输入仅一行,但可能包含若干空格。

【输入格式】
输入一行,一个字符串。
【输出格式】
输出若干行。每行为分割后的一个字符串,注意依次输出:第一次分割左侧的字符串、第二次分割左侧的字符串、…、最后一次分割左侧的字符串、最后一次分割右侧的字符串。
【输入样例 1】
sdfd 55 55 99312
【输出样例 1】
sdfd
55 55
55 55
99312
【样例解释 1】
第一次分割将字符串分割为 sdfd 和 55 55 55 99312;
第二次分割将字符串分割为 55 55 和 55 99312。
对于第二次分割,注意 55 和 55 之间虽然有空格,但是第二次分割需要连续两个空格才行;
另外,55 55 和 99312 之间有三个空格,第二次分割只需要两个,所以会分割为 55 55 和 (一个空格)99312,也就是右侧会留下一个空格;因为只留下了一个空格,所以不再满足第三次分割要求。

【输入样例 2】
AbCd 999
【输出样例 2】
AbCd
999
【样例解释 2】
第一次分割将字符串分割为 AbCd 和 (两个空格)999;
第二次分割将字符串分割为空字符串和 999。
由于 AbCd 和 999 之间有三个空格,第一次分割消耗掉一个,因此还能进行第二次分割,这个时候会分割出空字符串,因此输出中会输出一个空行(不能省略)。

【数据范围】
字符串长度不超过 1000。字符串中只会包含大写字母、小写字母、数字,或空格,且输入字符串不会以空格结尾。
特别强调:输入仅一行,但可能包含若干空格。
💬