main() {int i=1;j=2;=3; if(i++==1&&(++j==3//k++==3)) printf("%d%d%d",i,j,k); }
3个回答
展开全部
if(i++==1&&(++j==3||k++==3))
1、这里涉及运算符优先级,++高于关系运算符==高于逻辑运算符&&高于逻辑运算符||
2、同时在计算&&时,系统先判断前面表达式真假,如果是假,&&后面的表达式不参与计算
计算||时,系统先判断前面表达式真假,如果是真,||后面的表达式不参与计算
3、自增运算++i是先让i+1,表达式的值是i+1,而i++表达式的值是i,然后i+1
根据上面原则,不难判断i++==1将返回真,同时i=2,这样系统开始判断(++j==3||k++==3)
先判断++j==3,返回真,j=3,那么k++==3系统不计算,k仍然是3,
则打印出i=2,j=3,k=3
1、这里涉及运算符优先级,++高于关系运算符==高于逻辑运算符&&高于逻辑运算符||
2、同时在计算&&时,系统先判断前面表达式真假,如果是假,&&后面的表达式不参与计算
计算||时,系统先判断前面表达式真假,如果是真,||后面的表达式不参与计算
3、自增运算++i是先让i+1,表达式的值是i+1,而i++表达式的值是i,然后i+1
根据上面原则,不难判断i++==1将返回真,同时i=2,这样系统开始判断(++j==3||k++==3)
先判断++j==3,返回真,j=3,那么k++==3系统不计算,k仍然是3,
则打印出i=2,j=3,k=3
展开全部
main() {
int i=1;j=2;k=3; //////////////////////////////////////初始化
if(i++==1&&(++j==3||k++==3)) /////////////i++==1,先判断i==1为true,然后i的值加1,此时i=2;下面判断语句(++j==3||k++==3),语句++j==3是先把j的值加1,j=3,然后在判断j==3为true;又因为逻辑或||,当||左边的表达式为true时,右边的表达式不执行,整个表达式(++j==3||k++==3)直接返回true,因此k的值没变化k=3
printf("%d%d%d",i,j,k); //////////////////////////////////////////最后输出:233
}
int i=1;j=2;k=3; //////////////////////////////////////初始化
if(i++==1&&(++j==3||k++==3)) /////////////i++==1,先判断i==1为true,然后i的值加1,此时i=2;下面判断语句(++j==3||k++==3),语句++j==3是先把j的值加1,j=3,然后在判断j==3为true;又因为逻辑或||,当||左边的表达式为true时,右边的表达式不执行,整个表达式(++j==3||k++==3)直接返回true,因此k的值没变化k=3
printf("%d%d%d",i,j,k); //////////////////////////////////////////最后输出:233
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
题错了,int里应该是K等于3吧,少了一个K,结果应该是1,2,3吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询