C++ 三级单选 15 题 / 判断 10 题答案速查 + 本场考点 + 难度评价 + 易错题精解。想知道孩子这套能考多少?免费做这套真题模考,3 秒自动估分。
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | D | D | A | C | B | C | D | C | A | A | D | C | D | B | B |
| 题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 答案 | × | × | × | × | × | × | × | √ | √ | × |
偏难一档。补码/进制、浮点二进制、字符处理较抽象,是失分集中区。
本卷 2 道编程题:《公共二进制位》《分割字符串》。逐题题解整理中,将陆续更新。
考 for 三段的位置。for(int i=0; i=0; i<=5) 中间是循环条件 i=0(赋值表达式,值为 0 即假),所以循环一次都不执行;末段 i<=5 只是个比较、无副作用。x 保持 1,输出 1。选 A。
x = x & (x - 1) 每次消去 x 最低位的 1(Brian Kernighan 算法),循环次数 = x 二进制中 1 的个数。2026 = 11111101010₂ 共有 8 个 1,故 count=8。选 B。
位运算优先级 ~ > & > ^ > |。~11 = -12;3 & 7 = 3;15 ^ (-12) = -5;最后 3 | (-5) = -5。选 D。
异或有"自反"性:x ^ key ^ key == x。前面已用 ^ key 加密,要解密还原必须再异或一次同一个 key。选 C(msg[i] = msg[i] ^ key)。
判断进制要用字符比较:字符串里最大字符 max 若 <= '1' 则可能是二进制,<= '7' 八进制,<= '9' 十进制,<= 'F' 十六进制。注意要和字符 '1' 比而不是整数 1。选 A。
位掩码权限操作:加权限用 | (置位),清某位保留其他用 & (~权限)。加读 |READ、加写 |WRITE、清读 &(~READ)、加删除 |DELETE。选 A。
优先级 ! > << > & > ^ > |。!a=1;b<<c = 2<<11 = 4096;1 & 4096 = 0;0 ^ 7 = 7;7 | 5 = 7。选 C。
本题选错误说法。s.erase(2) 会从下标 2 一直删到末尾,不是只删一个字符(只删一个要用 s.erase(2, 1))。故 D 错误。
int b['A'] 里 'A' 是字符,其 ASCII 值 65 是合法的整型数组大小,合法。A 的 3.0 是 double 属窄化;C 无大小又无初值不完整;D 数组大小须整型,10.0 非法。选 B。
每只老鼠对"哪缸有毒"贡献一个三进制位:两轮都不喝 / 第一轮喝 / 第二轮喝,共 3 种可区分状态。k 只老鼠能区分 3^k 种情况,3^6=729 < 1000 ≤ 3^7=2187,故最少 7 只。选 B。
"进位循环加到最低位"是反码加法的规则。补码加法直接把最高位的进位丢弃即可。命题错误。
求补码的扫描规则应是:从右向左遇到第一个 1 之后,左边各位全部取反、右边(含这个 1)保持不变。命题把左右说反了,错误。
for(int num : a) 里的 num 是元素的副本,对 num 赋值不会改动原数组。要真正修改需用引用 for(int& num : a)。命题错误。
(a & 1) == 1 只说明 a 是奇数,负奇数也满足(如 -3 & 1 == 1)。不一定是"正"奇数。命题错误。
"GESP" 连同结尾 '\0' 需要 5 个字节,而 char str[4] 只有 4 个,放不下(数组下标 str[4] 本身也已越界)。命题错误。
str[i]==0 是和整数 0、1 比较(对应 ASCII 的空字符等),不是字符 '0'/'1'(ASCII 48/49)。应写 str[i]=='0' || str[i]=='1'。命题错误。
a='a'=97 > 0 成立,|| 发生短路求值,右边 b++ 根本不执行,b 保持 'b'=98。输出 98,命题正确。
枚举可以配合剪枝/范围约束,在保证不漏解的前提下缩小搜索空间,并非必须遍历所有可能。命题正确。