急求一位C语言高手,谢谢!!··题目是:逗号表达式(a=3*5,a*4),a+15的值为( ),a的值为( )。那位能帮我解答,告诉我怎么做,讲诉下过程,谢谢!!!我注重过程,答案另一回事,谢谢!!
- 提问者网友:凉末
- 2021-05-04 08:17
- 五星知识达人网友:山河有幸埋战骨
- 2021-05-04 08:52
确实,赞同2楼的说法。。。
如果说a=(3*5,a*4)有个括号的话,才是如1楼所言。。。。
另外,所不解的是(a=3*5,a*4),a+15 这一整体是一个表达式,还是说这是两个两个不同的表达式。。。
如果这只是一个式子的话,赋值号左边又是什么呢?
若是两个的话,就如二楼所言。。。逗号优先级是最低的了。。比复制号更低。。
- 1楼网友:夜余生
- 2021-05-04 12:00
我一楼对表达式的理解正确,但算法出错了,二楼的算法正确,顺便截图给你看看,表达式最终答案是30,a的值为15:
- 2楼网友:野味小生
- 2021-05-04 10:36
楼上关于逗号表达式的解释是正确的. 逗号表达式返回右边的值.!
但是没注意到一点. (a=3*5,a*4), 表达式中的逗号是将a=3*5和a*4分隔.所以a的值是3*5=15; 而a*4是一个无意义的操作. 最后a+15 输出30!
那么主要的矛盾就集中在了(a=3*5,a*4) 这个表达式的执行顺序上了. 他到底为什么会被分隔为a=3*5和a*4呢?
其原因在于赋值符号=的优先级大于逗号! 逗号的优先级是所有符号里面最低的!
所以会先执行赋值语句,也就是a=3*5, 然后再执行a*4. 因为表达式a*4并没有副作用,所以a的值仍然为15; 因此a+15的值也就是30!
另外:
如果要实现像楼上所说的结果,那么表达式就改成应该这样a=(3*5,a*4); 这样由于先执行括号里的语句.
而括号里的语句结果返回a*4. 才能够实现a=a*4; 但是由于a的值为定义. 所以这个a的值到底是多少就不知道了.!
***********************************************************************************************************************
回答下三楼的问题:
据我理解(a=3*5,a*4),a+15 中间这个逗号并不是问题的一部分. 只是楼主写上去的.
问题应该是:(a=3*5,a*4) 求a+15的值
补充三楼所问:
(a=3*5,a*4),a+15 就算楼主问的就是这样. 那么a的值也不可能是75. 因为a*4没有任何副作用!
- 3楼网友:愁杀梦里人
- 2021-05-04 09:02
逗号运算符是将两个表达式连接起来。如:3+5,6+8 称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为:表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。逗号表达式的一般形式可以扩展为:表达式1,表达式2,表达式3……表达式n
它的值为表达式n的值。所以逗号表达式(a=3*5,a*4),a+15的值为a+15的值,a的值即为a*4的值,首先我们看括号内容,a=3*5.a*4,当3*5的时候a=15,又因为逗号表达式的值是最后一个表达式的值,括号里面a的值为a*4,此时a为15,所以最后a的值为15*4,即60,逗号表达式(a=3*5,a*4),a+15的值为a+15,即为75.能理解么?