int a=1,b=2,c; 表达式(c=a<b?a=4,a<b?b=10,c=20:30:40)的结果为( )

 我来答
happy21cn001
2016-05-20 · TA获得超过468个赞
知道小有建树答主
回答量:226
采纳率:75%
帮助的人:84.2万
展开全部

(c=a<b?a=4,a<b?b=10,c=20:30:40),c的结果为30

c=  a<b?  ( (a=4,a<b?b=10,c=20  )  :   (30) )   :    (40)

 

因为a=1,b=2,所以a<b成立,所以执行a=4,a<b?b=10,c=20:30

然后a赋值为4后,a<b不成立,所以值为30

最终运行后,a=4,b=2,c=30

#include "stdio.h"
void main()
{
int a=1,b=2,c;
c=a<b?a=4,a<b?b=10,c=20:30:40;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);

}

追问
三目运算符的结合性不是从右至左吗?也就是先找最右边的"?",再找与之最近匹配的":"(课本上这么说的)
追答
三目运算符的结合性是从右至左的找最右边的"?",注意一点,是与之最近"匹配"的":"
注意是”匹配”!
假如第一个问号和第一个":"进行匹配,那遇到第二个问号的时候,就没有与之相匹配的":"条件了。
而且建议是不要省略中间的括号,这不是好的编码习惯。
如果有必要这种关系,请自己加上括号。如下所示:
c=a<b?( (a=4,a<b?b=10,c=20):(30)):(40)
匿名用户
2016-05-20
展开全部
合法,C语言中“等号表达式”的结果,就是等号右边的数值。例如a=b=4;这里的顺序是a=(b=4);b=4就是等号表达式,这个表达式的结果就是4,所以a也被赋予4。另一种常见的写法while((ch=getch())!='q'){}这里先执行ch=getch(),然后这个表达式的结果,和'q'进行比较。回过来,看你的问题1.b=4后,b的值是4,表达式值42.a=3后,a的值是3,表达式值33.a-=4*3,也就是a=a-12,得到-9,表达式值-94.a+=(-9),a=a-9=-18所以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式