24 条题解
-
0
好的,同学!这道题考察的是 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值 (true或false)。这个bool值可以被自动转换成整数1或0。这是一个合法的值。 - 左边:
a是一个int类型的变量名。它是一个合格的“箱子”。 - 结论: 合法。这个语句会把
b和c是否相等的结果(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是什么?它也是一个算术表达式!- 计算机会先算出
a和c的和,得到一个临时的、没有名字的结果值。 - 这个临时的结果值,不是一个“箱子”! 它只是一个漂浮在空中的“幽灵数字”,你不能往它里面装东西。在 C++ 里,我们称之为“右值 (rvalue)”。
- 计算机会先算出
- 违法分析: 这条语句试图把一个值 (
b+c的结果) 装进另一个不是箱子的地方 (a+c的结果)。这是 C++ 语法绝对不允许的! - 结论: 不合法! 赋值号
=的左边必须是一个可以被赋值的实体(左值),比如一个变量。
最终结论
因此,唯一不符合 C++ 语法的语句是 D。
一句话总结:赋值号
=的左边必须是个“坑”(变量),右边才是要填进去的“土”(值)。你不能让一堆“土”等于另一堆“土”! - A.
信息
- ID
- 4778
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者