一道C语言很简单的题目,懂C语言的进来帮忙解下
设a=1,b=2,c=3,d=4,则表达式a++<b?a++:c<d?a++:d的值为__?很简单的啊,给我个详细解析。这个关系表达式是从右向左结合,然后执行也是从右向左...
设a=1,b=2,c=3,d=4,则表达式a++<b?a++:c<d?a++:d的值为__? 很简单的啊,给我个详细解析。这个关系表达式是从右向左结合,然后执行也是从右向左吗??
展开
4个回答
展开全部
首先要知道? :这是一个三目运算符,如 (表达式)? x : y, 意思是说如果表达式是正确的,那么就选择x,如果错误的就选择y。
那我们看这里,可以分成三部分(a++<b) ? (a++):(c<d?a++:d)。而后面的(c<d?a++:d)又可以分成三部分(c<d) ? (a++):(d)。
我们先看第一个式子,如果是正确的,那么选择a++,如果是错误的就选择(c<d?a++:d)。很显然,如果是选择了(c<d?a++:d),那么还要进行一次运算。那我们看总的表达式,(a++<b) ? (a++):(c<d?a++:d),要判断a++<b是对的还是错的。
a=1, b=2.而这里用了a++,这里也就是考察a++和++a的区别:a++是先进行a<b的运算,然后a+1,而++a是先a+1,然后判断a<b。那很显然a++<b是正确的,所以说选择的是a++。
因为前面只是一个判断语句,所以虽然有a++,但是a+1这个操作并没有执行,而是知道选择输出a++时才进行了a++的操作,所以应该是输出2.
那我们看这里,可以分成三部分(a++<b) ? (a++):(c<d?a++:d)。而后面的(c<d?a++:d)又可以分成三部分(c<d) ? (a++):(d)。
我们先看第一个式子,如果是正确的,那么选择a++,如果是错误的就选择(c<d?a++:d)。很显然,如果是选择了(c<d?a++:d),那么还要进行一次运算。那我们看总的表达式,(a++<b) ? (a++):(c<d?a++:d),要判断a++<b是对的还是错的。
a=1, b=2.而这里用了a++,这里也就是考察a++和++a的区别:a++是先进行a<b的运算,然后a+1,而++a是先a+1,然后判断a<b。那很显然a++<b是正确的,所以说选择的是a++。
因为前面只是一个判断语句,所以虽然有a++,但是a+1这个操作并没有执行,而是知道选择输出a++时才进行了a++的操作,所以应该是输出2.
展开全部
a++ 是不是小于 b, 是结果为 a++;
不是结果为 (c<d?a++:d)的结果;
a++在表达式中使用时 先不+1,
所以就是问1是不是小于2,当然是,然后第一个a++把 a+1 ,此时a=2;
然后条件判断语句为真的结果是 a++,即第二个a++,还是先不+1,所以条件判断语句结果是2,所以如果printf的话,结果是2,条件判断语句之后a在加一,此时a=3,再printf a 的话,结果是3,还好没算另一个条件判断语句
这种题就是垃圾题,谁编程这么写,我代表他们老板开除他
不是结果为 (c<d?a++:d)的结果;
a++在表达式中使用时 先不+1,
所以就是问1是不是小于2,当然是,然后第一个a++把 a+1 ,此时a=2;
然后条件判断语句为真的结果是 a++,即第二个a++,还是先不+1,所以条件判断语句结果是2,所以如果printf的话,结果是2,条件判断语句之后a在加一,此时a=3,再printf a 的话,结果是3,还好没算另一个条件判断语句
这种题就是垃圾题,谁编程这么写,我代表他们老板开除他
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题有点变态,这个在不同的运行平台上面是不一样的,,
不如直接去运行,,伤脑筋
#include<stdio.h>
void main()
{
int a,b,c,d,e;
a=1;b=2;c=3;d=4;
e=a++<b?a++:c<d?a++:d;
printf("%d\n",d);
}
不如直接去运行,,伤脑筋
#include<stdio.h>
void main()
{
int a,b,c,d,e;
a=1;b=2;c=3;d=4;
e=a++<b?a++:c<d?a++:d;
printf("%d\n",d);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实际应用就不应该有这样的语句
BS
BS
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询