BCSP-X · 2024 BCSP-X 上半年活动基础知识测评(小学低年级组) 第 16 题

阅读程序 · 答案 BAC

← 整套速查表 BCSP-X 全部真题

题目

二、 阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 A,错误填 B,选择题每题有且仅有一个正确选项;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)

第一题

#include<iostream>
using namespace std;

int main() {
    char x, y;
    cin >> x >> y;
    if (x >= 'a' && y <= 'z' && x < y) {
        cout << 1 << endl;
    } else {
        cout << 0 << endl;
    }
    return 0;
}

假设输入的变量 $x, y$ 均是合法的 ASCII 码字符,完成下面的判断题和单选题:

判断题

1. 将第 4 行的 char 改为 int,对于同样的输入程序的输出不会改变。 2. 调整第 6 行中三个判断条件的先后顺序,对于同样的输入程序的输出不会改变。 3. 当输入为 a b 时,程序输出 $1$。 4. 当输入为 A B 时,程序输出 $0$。

选择题

1. 若输出的结果为 $1$,下列说法正确的是( ) A. x 或者 y 为小写字母; B. x 和 y 均为大写字母; C. x 和 y 均为小写字母并且 x 在字母表中位于 y 的前面; D. x 和 y 均为小写字母并且 x 在字母表中位于 y 的后面;

答案:BAC

解题思维

这题考的是条件判断与字符比较,不是排序算法。拿到题先想:ASCII 码里小写字母 a-z 是连续区间,程序就是在检查 x 和 y 是否都落在这个区间且 x 比 y 小。

常见错误

容易把‘x 或者 y 为小写字母’当成正确选项,其实只要有一个是大写,条件就不成立;还有人会忽略‘x<y’这个顺序要求,以为只要都是小写就输出 1;另外看到‘调整顺序’就慌,其实逻辑与运算满足交换律,顺序不影响结果。

详细解析(节选)

这道题考查的是条件判断语句的执行逻辑,以及对 ASCII 码中字母区间的基本认识。命题人喜欢把简单的逻辑判断包装成‘改类型’‘调顺序’‘给具体输入’几种变式,核心都是看你是否真正理解了条件表达式中各个子条件的含义以及它们之间的逻辑关系。

首先把代码逻辑翻译成人话:程序读入两个字符 x 和 y,然后判断三个条件同时成立时输出 1,否则输出 0。这三个条件是: 1) x >= 'a' 2) y <= 'z' 3) x < y

在 ASCII 码表里,小写字母 a~z 是连续存放的,'a' 的码值是 97,'z' 是 122,中间没有间断。所以条件 1 和 2 合起来就是在说:x 必须不小于 a,y 必须不大于 z。换句话说,x 和 y 都得是小写字母。如果其中任何一个是大写字母(比如 'A' 是 65,远小于 'a'),或者任何非字母字符,条件就会失败。

再看条件 3:x < y。因为 ASCII 码里字母是按字母表顺序排列的,'a' < 'b' < 'c' … < 'z',所以这个条件等价于“x 在字母表中排在 y 前面”。三个条件用 && 连起来,意味着必须同时满足:x 是小写、y 是小写、且 x 在 y 前面。只有这时才会输出 1。

现在逐一分析题目中的四个判断题和选择题:

判断题 1:把第 4 行的 char 改成 int,输出会不会变? 这里有个常见的坑:很多人以为改成 int 后输入的是数字,所以条件肯定不满足。但题目明确说了“对于同样的输入”,而输入的是两个字符(比如 a b),C++ 里用 cin >> x >> y 读入时,无论 x 和 y 声明为 char 还是 int,它们都会分别接收流中的两个字符,只是存储类型不同而已。字符在内存里就是它的 ASCII 码值,所以改成 int 后,x 和 y 的数值完全一样,条件判断结果自然也不会变。因此答案是错误(B)。

判断题 2:调整第 6 行三个判断条件的先后顺序,输出会不会变? 逻辑运算符 && 具有交换律和结合律,也就是说 a && b && c 和 c && b && a 在布尔值上是完全等价的。只要三个子条件本身没有变,顺序换一换不会影响最终真假结果。所以答案是正确(A)。

判断题 3:输入 a b 时输出 1 吗? x = 'a',满足 x >= 'a';y = 'b',满足 y <= 'z';而且 'a' < 'b',三个条件都成立,输出 1。正确(A)。

判断题 4:输入 A B 时输出 0 吗? x = 'A',ASCII 码 65,显然 65 < 'a',第一个条件就不成立,整个 && 表达式为假,输出 0。正确(A)。

选择题:若输出为 1,下面哪个说法正确? 输出为 1 说明三个条件都成立,也就是 x 和 y 都是小写字母,并且 x 在字母表中位于 y 前面。选项 A 说“x 或者 y 为小写字母”,这太宽松了,只要有一个是小写就可能满足,但实际要求两个必须都是;选项 B 说“均为大写字母”,显然矛盾;选项 D 说“x 在 y 后面”,与 x < y 相反;只有选项 C 完整准确地描述了必要条件:x 和 y 均为小写字母并且 x 在字母表中位于 y 的前面。因此选 C。

总结一下,这道题的关键就是抓住 ASCII 码中小写字母区间的连续性,以及逻辑运算符的结合顺序。命题人喜欢在‘改类型’‘调顺序’‘给具体输入’这些角度挖坑,但只要把条件翻译成自然语言,再结合 ASCII 码表看一眼,就能稳稳做对。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断