试卷解析 · 理解每一步
2023-09-Level-3
2023-09-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
人们所使用的手机上安装的App通常指的是()。
正确答案B
解析详情
App 是 Application 的缩写,指手机上安装的应用软件,如微信、支付宝等。操作系统是 iOS/Android,不属于 App。
第 2 题(单选题,2 分)
下列流程图的输出结果是?()

正确答案B
解析详情
本题需要根据流程图中的变量初始值和循环逻辑推导最终输出。需结合图片确认具体流程,结果为 20。
第 3 题(单选题,2 分)
已知大写字符 'A' 的 ASCII 编码的十六进制表示为 0x41,则字符 'L' 的 ASCII 编码的十六进制表示为()。
正确答案C
解析详情
'A' 的 ASCII 码为 0x41(十进制 65)。'L' 是字母表第 12 个字母,ASCII 码 = 65 + 11 = 76,十六进制为 0x4C。
第 4 题(单选题,2 分)
以下哪个不是C++语言中的运算符?()
正确答案B
解析详情
本题 A、B 选项在原文中因 OCR 识别问题显示重复。根据答案 B,选项 B 在原卷中应为一个非 C++ 运算符的符号。A(~)、C(<)、D(<<) 均为合法 C++ 运算符。
第 5 题(单选题,2 分)
如果数组定义为 long long array[] = {3, 5, 7, 2};,则数组 array 占用的字节数为()。
正确答案A
解析详情
long long 类型占 8 字节,数组有 4 个元素,总占用 4 × 8 = 32 字节。
第 6 题(单选题,2 分)
一个数组定义为 double array[3];则可合理访问这个数组的元素的下标最大为()。
正确答案A
解析详情
数组大小为 3,合法下标为 0、1、2,最大下标为 2。
第 7 题(单选题,2 分)
以下数组定义,符合C++语言语法的是()。
正确答案B
解析详情
A 缺少大小且无初始化;C 下标 3.0 是浮点数,不合法;D 是 Java/C# 语法。B 中 {1, 2.0, '3'} 均可隐式转换为 double,语法正确。
第 8 题(单选题,2 分)
下列关于进制的叙述,正确的是()。
正确答案C
解析详情
A 错,八进制和十六进制也能表示小数;B 错,60 进制(时钟)等在日常生活中也有应用;C 正确,二进制表示的位数不会比十进制更短;D 错,八进制每位最大数字是 7。
第 9 题(单选题,2 分)
下列关于C++语言中数组的叙述,不正确的是()。
正确答案C
解析详情
C 错误:数组下标越界在编译阶段通常不报错,属于运行时未定义行为。D 正确:越界访问可能恰好访问合法地址而不崩溃。
第 10 题(单选题,2 分)
如果 a 是 int 类型的变量,下列哪个表达式的值一定为 true?()
正确答案A
解析详情
a + 1000 - 1000 在数学上恒等于 a。虽然中间可能溢出,但补码加减法的溢出行为使最终结果仍等于 a。B 选项:a * 2 可能溢出,且整数除法会截断奇数;C/D 不恒为 true。
第 11 题(单选题,2 分)
如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断“a 等于 b”的是()。
正确答案B
解析详情
右移 1 位相当于整除 2。例如 a=2, b=3 时 (2>>1)==(3>>1) 为 true,但 a≠b。因此右移后比较不能正确判断相等。
第 12 题(单选题,2 分)
如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a是大写字母”?()
正确答案D
解析详情
C++ 中不能连写 'A' <= a <= 'Z',这种写法实际是先计算 'A' <= a 得到 0 或 1,再与 'Z' 比较。正确写法是 ('A' <= a) && (a <= 'Z')。A 选项 a-'A' <= 26 没有排除小于 'A' 的字符。
第 13 题(单选题,2 分)
在下列代码的横线处填写(),可以使得输出是“20 10”。
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
a = (a << 8) | b;
// 在此处填入代码
cout << a << " " << b << endl;
return 0;
}正确答案B
解析详情
a = (10 << 8) | 20 将原 a(10) 存入高 8 位、原 b(20) 存入低 8 位。要输出 "20 10",需先取高 8 位给 b:b = a >> 8(得 10),再取低 8 位给 a:a = a & 0xff(得 20)。注意必须先提取 b 再修改 a。
第 14 题(单选题,2 分)
在下列代码的横线处填写(),可以使得输出是“120”。
#include <iostream>
using namespace std;
int main() {
int array[5] = {1, 2, 3, 4, 5};
int res = 0;
for (int i = 0; i < 5; i++)
// 在此处填入代码
cout << res << endl;
return 0;
}正确答案D
解析详情
res 初始化为 0。若用 +=,结果为 15(非 120);若用 *=,0 乘任何数仍为 0。赋值只保留最后一个元素。因此三个选项都不能产生 120,答案为 D。
第 15 题(单选题,2 分)
在下列代码的输出是()。
#include <iostream>
using namespace std;
int main() {
int array[10];
for (int i = 0; i < 10; i++)
array[i] = i;
for (int p = 2; p < 10; p++)
if (array[p] == p)
for (int n = p; n < 10; n += p)
array[n] = array[n] / p * (p - 1);
int res = 0;
for (int n = 1; n < 10; n++)
res += array[n];
cout << res << endl;
return 0;
}正确答案B
解析详情
程序通过类似筛法的方式计算 1~9 每个数的欧拉函数值 φ(n)。φ(1)=1, φ(2)=1, φ(3)=2, φ(4)=2, φ(5)=4, φ(6)=2, φ(7)=6, φ(8)=4, φ(9)=6,总和 = 28。
判断题
第 1 题(判断题,2 分)
二进制数 101.101 在十进制下是 5.005。
正确答案错误
解析详情
101.101(二进制) = 4+1+0.5+0.125 = 5.625(十进制),不是 5.005。
第 2 题(判断题,2 分)
在C++语言中,位运算符也有类似“先乘除、后加减”的优先级规则。因此,使用时应注意合理使用括号。
正确答案正确
解析详情
位运算符有明确优先级(~ > << >> > & > ^ > |),混合使用时容易出错,建议加括号。
第 3 题(判断题,2 分)
字符常量 '3' 的值和 int 类型常量 3 的值是相同的,只是占用的字节数不同。
正确答案错误
解析详情
字符 '3' 的 ASCII 码是 51,而 int 常量 3 的值就是 3,两者不相同。
第 4 题(判断题,2 分)
在 C++ 语言中,长度为 n 的数组,访问下标为 n 的元素会引起编译错误。
正确答案错误
解析详情
数组下标越界属于运行时未定义行为,编译器通常不检查下标合法性,不会产生编译错误。
第 5 题(判断题,2 分)
在C++语言中,所有 int 类型的值,经过若干次左移操作(<<)后,它们的值总会变为 0 。
正确答案正确
解析详情
int 是有限位数(通常 32 位)。每次左移在低位补 0 并丢弃高位,多次左移后所有非零位溢出,结果必然为 0。
第 6 题(判断题,2 分)
在C++语言中,数组下标的大小决定元素在逻辑上的先后顺序,与元素在内存中位置的先后顺序无关。
正确答案错误
解析详情
数组在内存中连续存放,下标越大地址越高,因此下标顺序与内存位置顺序一致,不是无关。
第 7 题(判断题,2 分)
在C++语言中,定义数组时,[]中必须指定元素个数。
正确答案错误
解析详情
如果定义时同时初始化(如 int a[] = {1,2,3};),编译器可推断大小,[] 内可以为空。
第 8 题(判断题,2 分)
著名的哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和。我们可以通过枚举法来证明它。
正确答案错误
解析详情
枚举法只能验证有限个偶数,无法穷尽所有大于 2 的偶数,因此不能用于证明哥德巴赫猜想。
第 9 题(判断题,2 分)
在C++语言中,表达式(0xff == 255)的值为 true。
正确答案正确
解析详情
0xff = 15×16 + 15 = 255,与十进制 255 相等。
第 10 题(判断题,2 分)
如果 a 为 int 类型的变量,且表达式 (a & 1) == 0 的值为 true,则说明 a 是偶数。
正确答案正确
解析详情
(a & 1) == 0 表示 a 的二进制最低位为 0,即 a 是偶数。这是判断奇偶的经典位运算方法。