CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

设a=1,b=2,c=3,d=4 则表达式: a<=b?a:c<=d?a:d 结果是1 请问这结果是怎么来的呢?

楼主kjclanguage()2005-08-02 23:27:22 在 C/C++ / C语言 提问

设a=1,b=2,c=3,d=4       则表达式:     a<=b?a:c<=d?a:d     结果是1     请问这结果是怎么来的呢? 问题点数:100、回复次数:22Top

1 楼WingForce(初六,履霜,坚冰至。)回复于 2005-08-02 23:34:38 得分 0

int   fn(int   a,   int   b,   int   c,   int   d)  
  if(a   <=   b)  
  {  
  return   a;  
  }  
  else  
  {  
  if(c   <=   d)  
  {  
  return   a;  
  }  
  else  
  {  
  return   d;  
  }  
   
  }Top

2 楼foochow(无聊,灌水......)回复于 2005-08-02 23:35:50 得分 0

a<=b?a:c<=d?a:d   --->a<=b?a:(c<=d?a:d)    
  Top

3 楼boxban(冻酸梨)回复于 2005-08-02 23:36:10 得分 0

这个~~~~~~~~~~  
  无语Top

4 楼qybao(阿宝)回复于 2005-08-02 23:36:42 得分 0

a<=b?a:c<=d?a:d  
  首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值  
  对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值  
  所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1  
  Top

5 楼apollon_hhy(一天五十页!)回复于 2005-08-03 02:17:51 得分 0

我觉得   楼主首先   应该清楚   ?   :   三目运算符的用法  
  a   ?   b   :   c     如果   a   是   true     则   b   ,否则   a   为false   则   c  
   
  a<=b?a:c<=d?a:d   相当于   a<=b   ?   a   :   (c<=d   ?   a   :   d)  
  a=1,b=2,c=3,d=4     显然   a<=b   为true   ;Top

6 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 07:41:09 得分 0

我想楼主是不是写错了   ?  
   
   
  可能原来的题目是    
   
   
  a<=b?a:c<=d?c:d     而不是     a<=b?a:c<=d?a:d     吧    
   
  (不过结果一样)  
   
  这里的问题,  
   
  关键的是   三目运算符   的结合方向   ,  
   
  除了   单目运算符   以外      
   
  还有   这个     三目运算符     是   右结合   的    
   
  所谓   右结合   ,是说有多重该运算符号的时候  
   
  系统会优先满足式子右边的  
   
  比如楼主的问题     a<=b?a:c<=d?a:d   ==>a<=b?a:(c<=d?a:d)    
   
  类似的   单目运算符号   也一样      
   
  比如     +++i   ==>   +(++i)  
   
   
   
  楼主要多加注意    
   
  这些很容易让人迷糊的Top

7 楼afx_swallow(足球和啤酒)回复于 2005-08-03 07:43:01 得分 0

转新手乐园Top

8 楼copygirl(wa!)回复于 2005-08-03 08:26:12 得分 0

设a=1,b=2,c=3,d=4  
  a<=b?a:(c<=d?a:d)    
   
  因为a<=b,所以等式取a的值1Top

9 楼jsjjms(专心研究嵌入式)回复于 2005-08-03 08:40:26 得分 0

设a=1,b=2,c=3,d=4       则表达式:     a<=b?a:c<=d?a:d     结果是1     请问这结果是怎么来的呢?  
  ------------------------------------------------------------------------------  
   
  a<=b?a:c     -->   if   (a<=b)   then   tmp=a;   else   tmp   =c;  
   
  这种嵌套写法   加上括号就清楚多了.没有括号  
   
  就要清楚运算符的优先级Top

10 楼jighrfgdd()回复于 2005-08-03 09:38:08 得分 0

回复人:   qybao(阿宝)   (   )   信誉:100     2005-8-2   23:36:43     得分:   0      
     
     
         
  a<=b?a:c<=d?a:d  
  首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值  
  对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值  
  所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1  
  ********************************************  
  上面是从左边开始算的  
   
   
  回复人:   jixingzhong(瞌睡虫)   (   )   信誉:100     2005-8-3   7:41:09     得分:   0      
     
     
         
  我想楼主是不是写错了   ?  
   
   
  可能原来的题目是    
   
   
  a<=b?a:c<=d?c:d     而不是     a<=b?a:c<=d?a:d     吧    
   
  (不过结果一样)  
   
  这里的问题,  
   
  关键的是   三目运算符   的结合方向   ,  
   
  除了   单目运算符   以外      
   
  还有   这个     三目运算符     是   右结合   的    
   
  所谓   右结合   ,是说有多重该运算符号的时候  
   
  系统会优先满足式子右边的  
   
  比如楼主的问题     a<=b?a:c<=d?a:d   ==>a<=b?a:(c<=d?a:d)    
   
  类似的   单目运算符号   也一样      
   
  比如     +++i   ==>   +(++i)  
   
   
   
  楼主要多加注意    
   
  这些很容易让人迷糊的  
   
       
     
  **********************************  
  这位讲是右边开始算的  
   
   
   
  到底哪个对呢?我学的是它有右结合性的  
   
   
   
       
     
  Top

11 楼xuanwenchao(xuanwenchao)回复于 2005-08-03 09:41:52 得分 0

设a=1,b=2,c=3,d=4       则表达式:     a<=b?a:c<=d?a:d     结果是1     请问这结果是怎么来的呢?  
   
  a<=b     ?     a     :     (c<=d?a:d)  
  a<=b成立则返回a的值不成立则返回(c<=d?a:d)的值,所以得1  
  Top

12 楼qybao(阿宝)回复于 2005-08-03 11:37:10 得分 0

a<=b?a:c<=d?a:d  
  首先判断条件a<=b,如果成立则取a的值,不成立则取(c<=d?a:d)的值  
  对于c<=d?a:d,先判断c<=d,如果成立则取a的值,不成立则取d的值  
  所以,很明显,你的表达式里一开始a<=b条件就成立了,直接就取a的值了,a的值就是1,所以结果是1  
  ********************************************  
  上面是从左边开始算的  
   
  从右算也是一样的结果,毕竟从右算最后也要走到a<=b这一步判断,结果很明显了  
  一般所谓的从左,从右算,要看编译器的,不同的编译器运算方式也不一样,但不管怎样,只要知道运算的逻辑原理就可以了  
   
  Top

13 楼qybao(阿宝)回复于 2005-08-03 11:43:55 得分 0

可以用以下的方法测试编译器是从左算还是从右算  
  k=0;  
  a<=b?a:(k=c<=d?a:d)  
  printf("k=%d",k);  
  如果k值不是0,就说明是从右算的,否则就是从左算的  
  Top

14 楼jighrfgdd()回复于 2005-08-03 13:13:48 得分 0

tc是从从左算还是从右算?Top

15 楼gogdo(草草)回复于 2005-08-04 00:43:00 得分 0

问题的解决方法是你按运算符的优先级的顺序加上括号,问题就变得很清楚了。  
  Top

16 楼zsd1101897(好死不如赖活~)回复于 2005-08-06 21:41:33 得分 0

设a=1,b=2,c=3,d=4       则表达式:     a<=b?a:c<=d?a:d     结果是1     请问这结果是怎么来的呢?  
   
  看这道题   只要分析两个嘛   很简单  
  1运算符的优先级  
  2运算符的结合方向  
  这道题只涉及2个运算符号  
  1   ?:   条件运算符   结合方向   从右至左  
  2   <=     关系运算符     结合方向   从左至右  
  3关系运算符的优先级大于条件运算符  
  所以在解这道题的时候按这个顺序看可能容易理解点  
  1   先解答a<=b   得到答案为1  
  此时这条式可以简化为                   1?a:c<=d?a:d  
  2解答c<=d     得到答案为1  
  此时这条式可以简化为                   1?a:1?a:b  
  3由于条件运算符的结合方向是从右到左  
  所以先算后面的那个1?a:b部分   得到答案为1(就是a)  
  此时这条式可以简化为                   1?a:1  
  4呵呵   ,这个当然也就是a啦~也就是1了  
  思考问题应该有点条理性!~建议楼主以后在问问题前应该仔细思考Top

17 楼llf_hust()回复于 2005-08-06 21:43:45 得分 0

认真看书,把基础打好Top

18 楼bombwang(王)回复于 2005-08-06 21:44:35 得分 0

(a<=b)?a:(c<=d?a:d)  
  自己慢慢算Top

19 楼K()回复于 2005-08-06 22:28:26 得分 0

看看基础吧Top

20 楼lxk_cool()回复于 2005-08-06 22:37:58 得分 0

关于?:的用法,看看书吧Top

21 楼tygfr(Try to do!)回复于 2005-08-06 23:14:00 得分 0

先把逻辑运算和算术运算这两个基本的概念搞清楚再说Top

22 楼prgmBaggio(only C)回复于 2005-08-06 23:27:27 得分 0

(a<=b)?(a):(c<=d?a:d)Top

相关问题

  • 关于表达式c=(a%b,a/b),
  • a*(b+c)-b的中缀表达式是什么?
  • 高分求正规表达式(a|b)*abb的C语言实现
  • 表达式求值 C#
  • javascript正则表达式转换成c#正则表达式
  • int a=4,b=2表达式(a+b)%((a-b)*3)?a++:b++的值是____?学习C++中遇到的问题,大虾指教
  • 请问在C#中如何实现将一个字符串"a+1>b+1",当成一个表达式用?谢谢.
  • 我对C++中表达式的看法
  • c++ primer关于定位new表达式
  • C#正则表达式问题

关键词

  • 表达式
  • 楼主要多加
  • 注意这些很容易
  • 让人迷糊

得分解答快速导航

  • 帖主:kjclanguage

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo