标题:各位哥哥姐姐好,请帮我解决一下好吗
只看楼主
hello_online
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-8-15
结帖率:0
已结贴  问题点数:20 回复次数:3 
各位哥哥姐姐好,请帮我解决一下好吗
各位哥哥姐姐好,请帮我解决一下好吗,我是一个C语言初学者,在学习过程中遇到了一些难题,请各位指教。

     main()
    {
      int i=1,j=1,k=2;

      if((j++||k++)&&i++)

      printf("%d,%d,%d\n",i,j,k);

      getch();
      }

此题我做的输出结果为2,2,3;而答案是2,2,2.为什么不一样呢,我非常苦恼,请各位哥哥姐姐指点。谢谢

另外还有一题请帮我分析一下好吗,具体如下:
     main()
     {
      int a=1,c;
      c=a++||a++&&a++;
      printf("%d,%d",c,a);
      }
     此题该怎么计算呢,各位帮助分析一下好吗?
搜索更多相关主题的帖子: 逻辑运算 
2009-08-15 17:30
soler
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:181
专家分:1077
注 册:2005-7-16
得分:6 
刚才在写链表的时候还知道&& ||的所谓的短路法则(刚从别人那听到的新名词,^_^)
&&  如果左边为零,则右边的表达式就不执行判断,结果为0;
||  如果左边为1,则右边表达式不执行判断,直接结果为1;

明白了这点,你上面的代码就很好理解了啊。
if((j++||k++)&&i++)
先括号内,j++||k++  因为j++非零,所以括号内的表达式的值就直接为1,k++不执行

你的第二个问题:c=a++||a++&&a++;
同样从左边到右边执行,虽然说右边的&&优先级比||高,
但是||之前的表达式先做个判断,看是否为1;
结果你的左边表达式正好为a++为真,即1,所以||后面的表达式就不执行了。
结果为1,2



2009-08-15 18:10
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
得分:6 
第一题
if((j++||k++)&&i++) 这里执行到 || 左边的j++ 成立接着执行 && 右边的i++.

||右边的k++没执行到,所以k 值还是2.


第二题
输出结果是:1,2
c=a++||a++&&a++;  可以看做成 c=a++||(a++&&a++);
执行到第一个a++ 就成立赋1值给c,  c等于1
因为只执行到第一个a++   ||后面的没执行到,所以a等于2

努力—前进—变老—退休—入土
2009-08-15 18:21
libingchen_2
Rank: 2
等 级:论坛游民
帖 子:22
专家分:62
注 册:2009-8-7
得分:6 
3楼第二题解释的好
2009-08-16 10:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-282825-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.208436 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved