C语言一道程序题

来源:百度知道 编辑:UC知道 时间:2024/06/08 02:32:14
#include <stdio.h>
#include <math.h>
int main()

{ int x=0,y=2;
if(x++ && --y)
printf("%d",y);
if( y-- || (x=2) && (!y) )
printf("%d",y);
if(--y || (x=3) )
printf("%d",x);
else
printf("%d",x);
return 0;

}

结果等多少,为什么?
结果是13

main()

{ int x=0,y=2;
if(x++ && --y)//++和--的优先集高。所以x++=0假的。因此整个是假的 因此后面不用处理 y还是等于2
printf("%d",y);//所以这个永远不会打印
if( y-- || (x=2) && (!y) )// y--=2这个为真,所以整个为真注意这样看(y--)||((x=2)&&(!y))前面为真了,后面就不用老虎了
printf("%d",y);// 所以此时打印1(上面的减1)
if(--y || (x=3) )//--y此时为假的,所以后面的还要判断x=3是赋值,为真。所以也是真
printf("%d",x);//所以这个要执行。结果打印出3
else//而这个永远不成立,所以永远不打印。
//结果为13
printf("%d",x);

if(x++ && --y)//0&&1 不满足 之后 x=1,y不变 判定第一句不满足之后第二句略过
printf("%d",y);//跳过
if( y-- || (x=2) && (!y) )//1||(一个真值)&& !0 为真 之后 x=2 y=1
printf("%d",y); // 输出 1
if(--y || (x=3) )// -1||一个真值 之后 x=3 y=0
printf("%d",x);//输出 3
else
printf("%d",x);//跳过
return 0;

所以结果是
13