试卷解析 · 理解每一步
2023-03-Level-2
2023-03-Level-2
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
以下存储器中的数据不会受到附近强磁场干扰的是()。
正确答案D
解析详情
光盘用激光读取凹凸信息,不靠磁性记录数据,所以附近强磁场不会把它的内容扰乱。硬盘属于磁记录介质,题目考查的“不受强磁场干扰”应选光盘。
第 2 题(单选题,2 分)
下列流程图,属于计算机的哪种程序结构?()。

正确答案C
解析详情
图中先判断“是否按下空格键”,再根据“是/否”分别执行不同操作,最后两条路径汇合结束。这种先判断条件再分两路执行的结构就是分支结构。
第 3 题(单选题,2 分)
下列关于 C++ 语言的叙述,不正确的是()。
正确答案A
解析详情
`double` 的存储大小在具体实现中通常是固定的,不是“浮动的”。`bool` 常见占 1 字节,`int` 取值范围有限,`char` 一般有 256 种取值,所以不正确的是 A。
第 4 题(单选题,2 分)
下列关于 C++ 语言的叙述,不正确的是()。
正确答案D
解析详情
C++ 的合法标识符不能以数字开头,只能以下划线或字母开头,所以 D 错。其余三项都是变量和标识符的基本规则。
第 5 题(单选题,2 分)
以下哪个不是 C++ 语言的关键字?
正确答案B
解析详情
`return`、`else`、`case` 都是 C++ 关键字,`max` 只是常见函数名,不是语言保留字,所以选 B。
第 6 题(单选题,2 分)
以下哪个不是 C++ 语言的运算符?
正确答案A
解析详情
按原题人工确认的文本,A 选项是字面量 `\=`,它不是 C++ 的合法运算符;`/=`、`-=`、`!=` 都是合法运算符。因此“不属于运算符”的是 A。
第 7 题(单选题,2 分)
如果 a 和 b 都是 char 类型的变量,下列哪个语句不符合 C++ 语法?
b = a + 1;b = a + '1';b = 'a'++;b = a++;正确答案C
解析详情
`'a'` 是字符常量,不是变量,不能对常量执行 `++`,所以 `b = 'a'++;` 不合法。其余几项都把字符变量或字符常量参与普通表达式运算,语法上成立。
第 8 题(单选题,2 分)
如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值?
正确答案C
解析详情
平均值要允许出现小数,前半部分 `a+b+c+d` 是整数,若再除以 `4` 会做整除。只有除以 `4.0` 才会转成浮点除法,得到真正的平均值,所以选 C。
第 9 题(单选题,2 分)
如果 a 为 char 类型的变量,且 a 的值为 '2',则下列哪条语句执行后,a 的值不会变为 '3'?
a = a + 1;a + 1;a = 1 + a;++a;正确答案B
解析详情
`a + 1;` 只是计算出一个结果,但没有把结果再存回 `a`,所以 `a` 仍保持字符 `'2'`。其余三项都会把新值写回 `a`,最终变成 `'3'`。
第 10 题(单选题,2 分)
如果 a 为 int 类型的变量,且 a 的值为 9,则执行 a -= 3; 之后,a 的值会是()。
正确答案B
解析详情
`a -= 3` 等价于 `a = a - 3`。原来 `a = 9`,执行后变成 `6`,所以选 B。
第 11 题(单选题,2 分)
如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于 0 或 b 等于 0”的是()
(!a) || (!b)(a = b = 0)(a == 0) & (b == 0)(a == 0) - (b == 0) == 0正确答案A
解析详情
`!a` 在 `a==0` 时为真,`!b` 在 `b==0` 时为真,所以 `(!a) || (!b)` 正好表示“a 等于 0 或 b 等于 0”。B 是赋值表达式,C 实际表示“且”,D 的逻辑含义也不对。
第 12 题(单选题,2 分)
如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a 是小写字母”?
a <= a <= za - 'a' <= 'z' - 'a''a' <= a <= 'z'a >= 'a' && a <= 'z'正确答案D
解析详情
判断小写字母要同时满足 `a >= 'a'` 和 `a <= 'z'`,D 正好完整表达了这个闭区间。A、C 这种连写比较在 C++ 中会先算左边真假,再与右边比较,不能表示区间判断。
第 13 题(单选题,2 分)
在下列代码的横线处填写(),使得输出是 。
#include <iostream>
using namespace std;
int main() {
int a = 10, b = 50;
; // 在此处填入代码
b -= a;
a += b;
cout << a << " " << b << endl;
return 0;
}a -= ba += ba = b - aa = b正确答案C
解析详情
先填 `a = b - a`,则 `a = 40`。接着 `b -= a` 得到 `b = 10`,再执行 `a += b` 得到 `a = 50`,最终输出正好是 `50 10`,所以选 C。
第 14 题(单选题,2 分)
在下列代码的横线处填写(),可以使得输出是 5。
#include <iostream>
using namespace std;
int main() {
int cnt = 0;
for (char ch = '1'; ch <= '9'; ch++)
if (____) // 在此处填入代码
cnt++;
cout << cnt << endl;
return 0;
}ch < '5'ch >= 5ch >= '4'ch % 2 == 1正确答案D
解析详情
字符 `'1'` 到 `'9'` 的编码连续,其中 `'1'、'3'、'5'、'7'、'9'` 的编码都是奇数,所以条件 `ch % 2 == 1` 会命中 5 次。A 只统计 4 个字符,C 会统计 6 个字符。
第 15 题(单选题,2 分)
执行以下 C++ 语言程序后,输出结果是()。
#include <iostream>
using namespace std;
int main() {
int n = 17;
bool isprime = true;
for (int i = 2; i <= n; i++)
if (n % i == 0)
isprime = false;
cout << isprime << endl;
return 0;
}正确答案C
解析详情
当循环到 `i = 17` 时,`17 % 17 == 0`,于是 `isprime` 被改成 `false`。`cout` 输出布尔值时默认显示为 `0/1`,因此这里输出的是 `0`,对应选项 C。
判断题
第 1 题(判断题,2 分)
明明和笑笑在“小庙会”上分别抽到一个 4GB 和 4096MB 的 U 盘,容量大的盘是笑笑的()。
正确答案错误
解析详情
`1GB = 1024MB`,所以 `4GB = 4096MB`,两个 U 盘容量其实一样大,不存在谁更大。题干说笑笑的更大,因此错误。
第 2 题(判断题,2 分)
IPv4 的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中 a、b、c、d 都是 之间的十进制整数()。
正确答案错误
解析详情
IPv4 的每一段范围是 `0` 到 `255`,不是 `1` 到 `255`。像 `0.0.0.0` 这类地址中就包含 0,所以题干错误。
第 3 题(判断题,2 分)
在 C++ 语言中,一个程序不能有多个 main 函数。
正确答案正确
解析详情
一个完整的 C++ 程序只能有一个程序入口,也就是一个 `main` 函数。若出现多个 `main`,程序无法按规则链接运行。
第 4 题(判断题,2 分)
在 C++ 语言中,标识符中可以有下划线 `___`,但不能以下划线 `___` 开头。
正确答案错误
解析详情
C++ 标识符里可以出现下划线,也可以以下划线开头,所以题干后半句不对。像 `_x` 这种名字在语法上是允许的。
第 5 题(判断题,2 分)
如果 a 是 int 类型的变量,而且值为 1,则表达式 'a' 的值为 '1'。
正确答案错误
解析详情
`'a'` 表示字符常量,值是字母 `a`,和变量 `a` 当前是否等于 1 没有关系。题干把字符常量和变量名混为一谈,所以错误。
第 6 题(判断题,2 分)
在 `if ... else` 语句中,`else` 子句可以嵌套 `if ... else` 语句,但 `if` 子句不可以,因为会造成二义性。
正确答案错误
解析详情
`if` 子句和 `else` 子句里都可以继续嵌套 `if ... else`。所谓二义性问题靠“else 总是匹配最近的 if”来解决,所以题干说法错误。
第 7 题(判断题,2 分)
`while` 语句的循环体至少会执行一次。
正确答案错误
解析详情
`while` 是先判断条件、再决定是否进入循环;如果初始条件就不成立,循环体一次也不会执行。至少执行一次的是 `do ... while`。
第 8 题(判断题,2 分)
C++ 语言中 `>=` 是运算符,但 `=>` 不是。
正确答案正确
解析详情
`>=` 是 C++ 中合法的“大于等于”运算符,而 `=>` 不是 C++ 里的运算符写法,因此题干正确。
第 9 题(判断题,2 分)
如果 a 为 char 类型的变量,且取值为小写字母,则执行语句 `a = a - 'a' + 'A';` 后,a 的值会变为与原值对应的大写字母。
正确答案正确
解析详情
小写字母减去 `'a'` 得到 0 到 25,再加上 `'A'` 就会落到对应的大写字母编码区间,所以该语句能把小写字母转成对应的大写字母。
第 10 题(判断题,2 分)
表达式 的计算结果为 5.0,且结果类型为 double。
正确答案正确
解析详情
`10.0` 是 `double`,与整数 `2` 做除法时会进行浮点运算,结果是 `5.0`,类型仍为 `double`。所以题干正确。