游聚平台一键出招:t=++x||--y;看不懂!
来源:百度文库 编辑:高考问答 时间:2024/04/30 08:21:32
设x,y,t均为int型变量,则执行语句:x=y=3;t=++x||--y;后y的值为( )
A、4
B、3
C、2
D、1
上面的表达式看不懂啊!分析一下!谢谢!
A、4
B、3
C、2
D、1
上面的表达式看不懂啊!分析一下!谢谢!
3,因为t=++x||--y;的意思是把++x的值或--y的值赋给t,那么这里先执行++x,若x为真(也就是非零),则将++x的值赋给t,然后直接进行下一步操作;若++x为假(就是为零)则执行--y,将--y的值赋给t
t=++x||--y
x=4
y=3
t=1
分析:
t是int 所以t要么是0要么是1,因为||运算的结果只有这2个.
||运算的特性:先检查++x是否非0,如果是非0则直接赋值t=1,因为不管--y是什么,t都可以保证是真,所以程序忽略计算--y,同样道理,如果换做&&,则如果判断前面是假,就会直接返回假而不计算后面,因为后面不论是什么结果都是假.
从上面得知:--y其实没有计算,所以y=3,而++x计算过了所以x=4.由于++x的表达式值是4非0,所以t=1
上面关于||和&&的优化适用于符合C99的所有编译器.
先把3赋值给y,再把y的值赋给x,然把把x的值加1后赋给t,同时y自减1
所以y值为2
这个主要看你用什么编译器了,不同的编译器的执行顺序不一样,所以答案会有所出入,你自己最好试下
void main(void)
{int t,x,y;
x=y=3;
t=++x||--y;
printf("/nt= %d/t x= %d/t y=%d/n",t,x,y);
}
你可以在BC VC TC GCC等等下分别试下,就知道了
要看具体的环境,
有两种结果,
一个是2,++x||--y是一个布尔值,如果编译器从右到左进行编译的话就会先将y自减。结果就为2了。
另一个是3,这个就很简单了吧。在turboc2.0中的结果是3,因为turboc2.0的编译器是从左向右进行编译的。
3
t=++x||--y;看不懂!
若 x+2y=3+t , x-y=3-t ,则x,y的关系是()
y等于e的t次方(t=x*x)的定积分是多少?
已知x=1-2t,y=3+4t,则x与y的关系为_____。
已知:X=1-2t,Y=3+4t,则X,Y的关系为多少?
M={x|x=t∧2+1,t∈R},P={y|y=(x-1)∧2+1,x∈R}
求直线L1:y=2/t(x-t-1)和直线L2:y=-2/t(x-3)交点P的轨迹
参数方程x=3t^2 y=t-1表示的是什么曲线?
函数 y=1/2 sin(2x+t)的图像关于y轴对称的充要条件是t=?
集合{y︴y=x⒉+1},{p︴p=t⒉+1},{x︴y=x⒉+1}三者间的关系?