| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 407 人关注过本帖
标题:很简单的问题
只看楼主 加入收藏
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
结帖率:96.15%
收藏
已结贴  问题点数:20 回复次数:6 
很简单的问题
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}

为什么这个程序输出的答案是2,3,3,而不是1,2,3???
那个if循环到底是怎么循环的呢??我认为不是第一个条件不满足就后面的就不用执行了吗??
搜索更多相关主题的帖子: 答案 
2011-04-23 15:41
machine_of_a
Rank: 2
等 级:论坛游民
帖 子:8
专家分:36
注 册:2011-4-19
收藏
得分:20 
条件满足if(i++==1&&(++j==3||k++==3))
条件分为两部分(i++==1) 和 (++j==3||k++==3)两部分是与的关系&&
i++先判断后累加,i==1成立后,i累加=2,因为后面是&&的条件,条件第一部分成立,接着后续判断
++j先累加后判断,j累加=3,j==3成立,因为后面紧跟的是或||,不论后面的判断是什么,第二部分条件(++j==3||k++==3)都成立,因此k++=3未执行,k依然=3
因此输出2 3 3
2011-04-23 15:55
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
LS正解! 学习!!!

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-23 16:00
因为曾今年少
Rank: 2
等 级:论坛游民
帖 子:131
专家分:62
注 册:2011-4-13
收藏
得分:0 
main()
{
int i=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d %d %d\n",i,j,k);
}
这里if结构中的&&(与运算)之前i++所得的值其实是1(如2楼所说的一样),然后i增值1变成了2.也就是说第一个条件为真。
++j==3||k++==3 或运算中++j先增值1变成3后在被赋值给表达式,故此或运算中++j=3为真,K++表达式所得的值跟i++形式一样,但是由于或运算前面为真,故此k++==3这个表达式没被执行。
&&运算同真为真,||运算同假才为假,对于或运算只要前面一个一为真,那么后面的就不执行。
因此if结构都为真:即printf("%d %d %d\n",i,j,k);语句会被执行
还有就是这里的if我没理解错的话不是循环的意思,毕竟if的机构只是起到了一个判断的作用,故没有循环的说法,如果if为假,得不到任何结果而已。
所以综上所述:(虽然有点啰嗦)
见笑了呵呵
最后显而易见
输出值为:
2 3 3



[ 本帖最后由 因为曾今年少 于 2011-4-23 17:11 编辑 ]
2011-04-23 17:04
林发扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:56
注 册:2011-4-12
收藏
得分:0 
有点明白
2011-04-24 10:34
enxinran
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-4-20
收藏
得分:0 
2011-04-24 11:15
hh031109
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-18
收藏
得分:0 
这个问题 注意分清i++和++i的区别
 ||与&&直接的关系

i++先赋值后累加值
而++i 先累加值然后赋值

至于||和&& ,||运算符是只有两者满足一个就行,而&&需要都满足

菜鸟路过,简单理解~

没有最好,只有更好.
2011-04-24 11:24
快速回复:很简单的问题
数据加载中...
 
   



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

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