main() {int i=0,j=1,k=2; if(!(i++&&(j++||k++))) printf ("%d,%d,%d\n",i,j,k); }
2个回答
展开全部
前面略过。(你没搞懂的问题在if那地方吧!~~)从if开始。
第一步:(j++ || k++),初值:j = 1、k = 2(j and k非零),结果为真。执行完后j,k自加,j = 2,k = 3;
第二步:(i++&&(j++||k++)) => (i++ && 1)(由第一步结果),先做(i && 1),判断i值(i = 0),因为i值为0,所以后面就不用做了。(编译器为了提高效率,就是这么规定的。)故这个式子结果为0(即(i && 1)结果为假,0)。做完i自加,为1。
第三步:第二步完成,if(!(i++&&(j++||k++))) => if(!0)(即if(1),如果不为0,输出结果。)then print(123)。
╮(╯▽╰)╭,你只要把优先级搞定了就很简单了。问是好事,但如果问的是自己可以很容易就解决的问题,只怕……哎
第一步:(j++ || k++),初值:j = 1、k = 2(j and k非零),结果为真。执行完后j,k自加,j = 2,k = 3;
第二步:(i++&&(j++||k++)) => (i++ && 1)(由第一步结果),先做(i && 1),判断i值(i = 0),因为i值为0,所以后面就不用做了。(编译器为了提高效率,就是这么规定的。)故这个式子结果为0(即(i && 1)结果为假,0)。做完i自加,为1。
第三步:第二步完成,if(!(i++&&(j++||k++))) => if(!0)(即if(1),如果不为0,输出结果。)then print(123)。
╮(╯▽╰)╭,你只要把优先级搞定了就很简单了。问是好事,但如果问的是自己可以很容易就解决的问题,只怕……哎
展开全部
main()
{int i=0,j=1,k=2;
if(!(i++&&(j++||k++)))
printf ("%d,%d,%d\n",i,j,k);
}
第一次循环 i=0,j=1,k=2
if(!(i&&(j||k)))->if(!(0&&(1||2)))=if(!0)=if(1)执行循环体,i,j,k各加1(x++符号:运行完当前的式子后加1)这时候i=1,j=2,k=3,执行循环体语句,输出1,2,3
{int i=0,j=1,k=2;
if(!(i++&&(j++||k++)))
printf ("%d,%d,%d\n",i,j,k);
}
第一次循环 i=0,j=1,k=2
if(!(i&&(j||k)))->if(!(0&&(1||2)))=if(!0)=if(1)执行循环体,i,j,k各加1(x++符号:运行完当前的式子后加1)这时候i=1,j=2,k=3,执行循环体语句,输出1,2,3
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询