24 条题解

  • 0
    @ 2025-11-23 20:53:24

    好的,同学!这道题考察的是 C++ 赋值语句的基本语法规则,以及哪些东西可以放在赋值号 = 的左边。我们来当一次“语法警察”,看看哪个语句“违法”了。


    7. 如果 a、b 和 c 都是 int 类型的变量,下列哪个语句不符合 C++ 语法?

    • A. a = (b == c);
    • B. b = 5.5;
    • C. c = a + b + c;
    • D. a + c = b + c;

    启发式讲解

    我们把赋值语句 L = R; 想象成一个“装箱”的指令。

    装箱的核心规则:

    • 右边 (R): 可以是任何能计算出一个的东西。比如一个数字 5,一个变量 b,一个复杂的表达式 b+c
    • 左边 (L): 必须是一个明确的、可以被修改的存储空间,也就是一个“箱子”。在 C++ 里,我们称之为“左值 (lvalue)”。最常见的左值就是变量名

    现在我们来审查这四个语句,看看它们的“左边”是不是一个合格的“箱子”。


    审问 A: a = (b == c);

    • 右边: (b == c) 是一个比较表达式,它的结果是一个 bool 值 (truefalse)。这个 bool 值可以被自动转换成整数 10。这是一个合法的值。
    • 左边: a 是一个 int 类型的变量名。它是一个合格的“箱子”。
    • 结论: 合法。这个语句会把 bc 是否相等的结果(1或0)存入 a

    审问 B: b = 5.5;

    • 右边: 5.5 是一个浮点数值。
    • 左边: b 是一个 int 类型的变量名。它是一个合格的“箱子”。
    • 分析: 当我们试图把一个浮点数 5.5 装进一个只能装整数的 int 箱子时,C++ 会自动截断小数部分,只把整数部分 5 装进去。这个过程是合法的,只是会丢失精度。
    • 结论: 合法

    审问 C: c = a + b + c;

    • 右边: a + b + c 是一个算术表达式,会计算出一个整数值。
    • 左边: c 是一个 int 类型的变量名。它是一个合格的“箱子”。
    • 结论: 合法。这是一个非常常见的累加(虽然这里变量重复了)写法。

    审问 D: a + c = b + c; (重点嫌疑人!)

    • 右边: b + c 是一个算术表达式,会计算出一个整数值。
    • 左边: a + c 是什么?它也是一个算术表达式!
      • 计算机会先算出 ac 的和,得到一个临时的、没有名字的结果值。
      • 这个临时的结果值,不是一个“箱子”! 它只是一个漂浮在空中的“幽灵数字”,你不能往它里面装东西。在 C++ 里,我们称之为“右值 (rvalue)”。
    • 违法分析: 这条语句试图把一个值 (b+c的结果) 装进另一个不是箱子的地方 (a+c的结果)。这是 C++ 语法绝对不允许的!
    • 结论: 不合法! 赋值号 = 的左边必须是一个可以被赋值的实体(左值),比如一个变量。

    最终结论

    因此,唯一不符合 C++ 语法的语句是 D

    一句话总结:赋值号 = 的左边必须是个“坑”(变量),右边才是要填进去的“土”(值)。你不能让一堆“土”等于另一堆“土”!

    信息

    ID
    4778
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者