C语言 设a=1, b=2, c=3,d=4,则表达式a<b?a:c<d?a:d的结果为何是

作者&投稿:卓呢 (若有异议请与网页底部的电邮联系)
一道C语言的题?设int a=1,b=2,c=3,d=4;则表达式a++<b?a:c<d?--a:--d的结果是多少?~

上式相当于a++<b?a:(c<d?--a:--d)
先看(算)后面括号里面的,明显c=3,d=4,所以c<d为真,括号中的值为--a,及0;
然后再判断前面的a++<b?,a=0,明显为真且a++,则a=1,故最终结果的值为1。
以上仅供参考

正确。结果是1

是先运算最右边的。 ?:是条件表达式结合方向是从右向左,这是个三目运算符

即a<b?a:c<d?c:d等价于a<b?a:(c<d?c:d) 翻译成语言文字即先c<d?答案 是,所以执行冒号q前面的c,再判断,前面的a<b?答案 是 所以再a和前面执行的c中选择冒号前面的a

我才是正解,专门扒拉出书来看的,答案是一样的但是优先级不一样,我参考的书是C语言程序设计第三版 何钦铭,颜晖主编(P132P139)!!



a=1, b=2, c=3,d=4,求:a<b?a:c<d?a:d
(1)先看a<b成立不?如果成立,则值为:a,如果不成立,则值为c<d?a:d的值
现在a=1,b=2,a<b成立,所以结果就是a。

(2)因为a的值是1,所以结果就是:1
(3)如果不成立才计算c<d?a:d,如果成立就不计算后面的这个部分了。

这个是C语言中的条件运算符(?:)它是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个。
<表达式1>?<表达式2>:<表达式3>
在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
你这个表达式中,a<b 视为表达式1 为真 则返回 表达式2 即 a的值1 ,后面的表达式3就根本没用。
你的表达式可以视为:(a<b)?a:((c<d)?a:d)。表达式1为 a<b,表达式2为a,表达式3为 c<d?a:d。

从左往右看,因为a<b是正确的,所以返回a,后面的就会执行了。
所以返回1.

(a<b)?a:((c<d)?a:d)
等同于
if (a<b)
{
    return a;
}else
{
    if (c<d)
    {
        return a;
    }else
    {
        return d;
    }
}
所以很明显a<b成立 返回a 也就是返回 1   完了



龙凤区13217973750: c语言 a=1; b=2; c=2; while(a<b<c){t=a; a=b; b=t; c -
施狗路斯: 你这是a<b<c; 第一次先判断a<b,1<2成立为真,即1;在判断(a<b)<c,即1<2成立为真,即1;进入循环;第二次先判断a<b,2<1不成立为假,即0;在判断(a<b)<c,即0<1成立为真,即1;进入循环;第三次先判断a<b,1<2成立为真,即0;在判断(a<b)<c,即1<0成立为假,即0;不进入循环;最后答案:1,2,0

龙凤区13217973750: C语言int a=1,b=2,c=1,t; t=++a||++b&&++c; a= - ----- -
施狗路斯: 答案是2,2,1,1 解析如下 ++a||++b&&++c,很据运算符优先级可知他等效于++a||(++b&&++c),根据求值顺序可知,编译器先对||左式求值,得出布尔值 1,同时保证在顺序点结束之前,完成对变量a的自增,a值为2,.依照||求值顺序,当左式为真,则整个式子(++a||(++b&&++c))直接求值为真,并且编译器不会再对右式求值,故b,c值不变,t值为1.

龙凤区13217973750: 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).....1 若a<b成立,1式=a 若a不小于b,1式=括号里的 括号中,若c<d成立,括号=a 若不成立,括号=d 显然,a<b成立,所有1式=a=1;故:最终答案=1.

龙凤区13217973750: c语言, i = ( a = 1, b = 2, c = 100 ); i的值是一百怎么理解啊? -
施狗路斯: i = ( a = 1, b = 2, c = 100 ); ——>a=1,b=2.c=100,i=(100); ①首先根据运算优先级,括号里面作为一个表达式,即 可知( a=1,b=2,c=100 )的逗号“,”在这里是做运算符作用,(当然还有分隔作用,比如int a,b,c;),②然后在括号里,一般来说运算顺序是自左向右的,所以( a=1,b=2,c=100 )最后的值为100,③只不过这个值也赋给了c;同时也赋给了i,所以i=100;

龙凤区13217973750: c语言中a=1,b=2,c=3,t;while(b<c)交换a,b的值,c -- ;求abc -
施狗路斯: a1 b2 c 3 while b<c2 1 1 3 {a2 b1 c3 交换ab的值 } { 只交换数字,不交换字母,数值是这样 a==2 b==1 c==3 } //呀书上出题的都他妈是sb,谁能知道,ab赋值和ab都换了,还是只换了赋值.这里考察的是while循环语句的使用.如果 x=0while(x<100)x的值是循环100次,呀循环的99跳出了,x==99;后面带条件,另说了.

龙凤区13217973750: 一个C语言填空设a=1,b=2,c=3,d=4,则表达式a++ -
施狗路斯:[答案] 这个题,由于a=1、b=2,a++

龙凤区13217973750: c语言中a=1;b=2;c=3; d=(a++, -- b,b--,--a,--c,c--); 这个怎么做求A,B,C,D的值,要具体分析啊谢谢啦.. -
施狗路斯: 逗号运算符从左到右计算 d=(a++,--b,b--,--a,--c,c--); 对a,a++,--a,增1减1,没有变化,最终a=1 对b,--b,b--两次减1,故b=0 对c,--c,c--两次减1 故c=1d其实就等于c--,c--是先返回在减1,故d=2

龙凤区13217973750: 一道C语言的题?设int a=1,b=2,c=3,d=4;则表达式a++<b?a:c<d? -- a:--d的结果是多少? -
施狗路斯: 刚刚错了!自右往左:先算a++=22<b?a:c<d?--a:--d这个表达式的意思,2<b如果为真取值为a,为假取值为(c<d?--a:--d),这里当然就是假,取(c<d?--a:--d) 然后就是c<d?--a:--d,同理,值为:1

龙凤区13217973750: C语言,若有定义:int a=1,b=2,c=3;则语句++a||++b&&++c;运行后b的值为 -
施狗路斯: 优先级 ++ > && > || 可以看成++a || (++b && ++c),因为++a已经==2 > 0 因此,后面不再计算.即a = 2, b= 2 ,c =3

龙凤区13217973750: C语言中 int a=1,b=2,c=3,d=4,则表达式a++<b?a:c<d? -- a:--d结果为2.求解释 -
施狗路斯: 三目运算 ?:相当于 if ( a++<b ) //此句相当于 if( a<b , a=a+1 ) a=1,b=2,so a<b为真return a; //此时 a=2 else 这后面的不用考虑了 if (c<d) return (--a); else return (--d);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网