首页 > 试题广场 >

有以下定义语句 double a,b; int w; lon

[不定项选择题]

有以下定义语句 double a,b; int w; long c;

若各变量已正确赋值,则下列选项中正确的表达式是()

  • a=a+b=b++
  • w%(int)(a+b)
  • (c+w)%(int)a
  • w=a==b;
。。。又一次了。。D不是表达式,是语句
发表于 2017-11-24 20:20:45 回复(17)
A.选项a+b是内置类型的右值表达式,所以无法对其赋值。但是假如是类类型的右值表达式,比如string就没问题:
string s1,s2;
s1 + s2 = "NowCoder";
以上代码在C++中是惊人的合法代码。
如果此时需要限制这种不合逻辑的表达式,那么有两种方法:
1.使用左右值引用限定符 “&”、“&&”限定拷贝赋值函数的this指针指向一个明确的左值或右值。
2.限定拷贝赋值函数的返回值为const

B.选项显然只是多了个右括号,如果这也算考点。。

C.D没毛病,都是需要隐式类型转换的货。

--------

2017.9.15更

回刷
上次没发现D选项有分号
确实是语句

上次B选项有问题
提交纠错后官方已修正
B选项缺少的左括号补回来了
但是导致B.C俩选项都正确
编辑于 2017-09-16 21:22:17 回复(0)

 🍹解题步骤


优先级顺序:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

A. a=a+b=b++

对于选项A,我们先按优先级计算 ++ ,然后计算 + ,最后计算赋值运算符 =
但当我们计算完 + 后,发现这时 a+b = b++ 出现错误
B. w%(int)(a+b)

对于选项B,先对()进行运算,即计算(a+b)的值,再强制转换为int型,最后进行取余运算
C. (c+w)%(int)a

对于选项C,先对括号进行运算,即计算(c+w)的值 ;同时进行对a强制转换为int型
最后进行取余运算
D. w=a==b;

对于选项D,D的最后有“;”,D是语句不是表达式


如果D是表达式的话,它先进行关系运算符 == 的计算,判断 a与b的值是否相等,相等返回1,不同返回0
然后将判断后的返回值赋值给w ✅

发表于 2022-01-23 20:54:06 回复(0)
A如R0b1n所说a+b是内置类型的右值表达式,所以无法对其赋值
B少了半个括号,应该不是题目本意,完整的应该是w%((int) a+b),但是还是有问题的,int+double是double,%运算符要求左右两个操作数都是整型
D如jelly_wxt所说,是语句不是表达式
发表于 2017-09-06 09:52:54 回复(0)
A:a=a+b=b++;a+b是右值,右值是不可寻址或没有变量名,即不可赋值
BC:隐式转换
D:语句正确,非表达式
发表于 2023-11-29 19:55:31 回复(0)
***直接好家伙,我怀疑这是在鼓励我在工作中这样写代码😂
发表于 2021-05-05 16:32:31 回复(0)
D项是语句,不是表达式
发表于 2017-09-04 22:12:08 回复(1)

粗心大意,D答案是表达式语句,有一个分号,虽然,结果正确,但是题目要求的是表达式

发表于 2019-06-28 21:49:01 回复(0)
擦,又是咬文嚼字
发表于 2018-09-13 13:08:09 回复(0)
a,b显然错误,d的话是想考察两个double比较不能直接==?因为存在精度差异?
发表于 2017-08-26 11:10:22 回复(0)
感觉看看就行,真项目里敲肯定要考虑可读性的
发表于 2022-06-22 19:40:29 回复(0)
D选项错因:浮点数的比较不能用==,因为计算机内部不能准确表示浮点数,IEEE754浮点数表示法了解一下。
发表于 2022-04-04 12:13:53 回复(0)
*****
发表于 2019-11-14 08:47:55 回复(0)

表达式后加分号变为语句


发表于 2019-04-11 16:25:26 回复(0)
跟我一样没注意到不定项的留个爪💔
发表于 2018-09-04 10:40:20 回复(0)
被D坑了→_→
发表于 2018-06-19 15:44:56 回复(0)
选cd 比较高于赋值
发表于 2017-08-25 16:14:52 回复(0)
A选项:对于赋值运算符来说,左值是变量,而不能是表达式。a+b充当左值,但为表达式。故错误。 D选项:原理上合法,但为语句。不满足题意的表达式。故错误。
发表于 2025-03-16 11:47:55 回复(0)
表达式……
发表于 2024-09-09 20:13:51 回复(0)
这种题目是在误导大家,实际中不会出现BC这种写法,不然会被打的
发表于 2024-07-27 11:11:11 回复(0)