关于C语言, 以下程序的运算结果为()

main(){inta=1,b=2,c;c=(a>b)?b++:(++a>4)?b++;a+++;printf("%d%d%d",a,b,c);}主要是c=(a>b)?b... main() {int a=1,b=2,c; c=(a>b)?b++:(++a>4)?b++;a+++; printf("%d%d%d",a,b,c); } 主要是c=(a>b)?b++:(++a>4)?b++;a+++;的运算顺序不是太明白。 展开
 我来答
袭阳阳美曼
2019-07-19 · TA获得超过1126个赞
知道小有建树答主
回答量:1493
采纳率:100%
帮助的人:6.7万
展开全部
一看就是狗血的C语言试题。正常程序员肯定不写这样坑爹的语句。
1、条件运算符具有右结合性。且条件运算符优先级高于赋值、逗号运算符,低于其他运算符

2、当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
3、所以这一句等价于c=【(a>b)?b++
:【(++a>4)?b++:a++】】;就是先运行小括号内的,然后运行我给你标注的中括号内的内容,括号具有左结合性,所以先判断a是否大于b;很显然1<2,所以运行(++a>4)?b++:a++。你可能不理解这个句子语句(++a>4)?b++:a++;因为有++a,所以a先加1(a=2),判断其是不是大于4,显然2<4,所以a++,但是没用,a值不会改变。因为:
如果a=1,b=a++,运算完b=1,a=2
如果a=1,b=++a,运算完b=2,a=2
所以最后结果为2,2,2。
你参考一下表达式优先级:
1级优先级(左结合)
()
圆括号;[]下标运算符;->指向结构体成员运算符;.
结构体成员运算符。
2级优先级(右结合)
!逻辑非运算符;~按位取反运算符;++前缀增量运算符;--前缀减量运算符;+正号运算符;-负号运算符;(类型)类型转换运算符;*指针运算符;&地址运算符;sizeof长度运算符。
3级优先级(左结合)
*乘法运算符;/除法运算符;%取余运算符。
4级优先级(左结合)
+加法运算符;-减法运算符。
5级优先级(左结合)
<<左移运算符;>>右移运算符。
6级优先级(左结合)
<、<=、>、>=关系运算符。
7级优先级(左结合)
==等于运算符;!=不等于运算符。
8级优先级(左结合)
&按位与运算符。
9级优先级(左结合)
^按位异或运算符。
10级优先级(左结合)
|按位或运算符。
11级优先级(左结合)
&&逻辑与运算符。
12级优先级(左结合)
||逻辑或运算符。
13级优先级(右结合)
?
:条件运算符。
14级优先级(右结合)
=、
+=、
-=、
*=、
/=、
%=、
&=、
^=、
|=、
<<=、
>>=赋值运算符。
15级优先级(左结合)
,逗号运算符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
李本雪若英
2019-04-24 · TA获得超过1218个赞
知道小有建树答主
回答量:1512
采纳率:100%
帮助的人:6.9万
展开全部
c=(a>b)?b
:(
a>4)?b
:a
;
按运算优先级,计算a>b
值为假,则运对
(
a>4)?b
:a
;进行订算。'这又是一个三元运算子。
a>4显为假,此时a=2
计算a
,
最后a=3,b=2,c值首先为
(
a>4)?b
:a
的运算结果,即a
的值,即c=2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式