C语言 关于自增的

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:40:27
main()
{
int x=6;
printf("%d\n",x+=x++,x+2,++x);
}
这道题为会么得15啊. 帮我讲的详细一些.Thanks;
还有一道;

main()
{
int x=-1,y=5,z=6,k;
k=x++>=0&&!(y--<=0)||(z=x+y);
printf("%d,%d,%d,%d\n",k,x,y,z);
}
答案为什么是1,0,5,5
细讲一下吧.

第一题:自增自减在printf中要注意,是从右往左算,也就是说,题目中,先算++X,加后X=7,而第二个X+2并没有给X赋值,所以这个式子相当于没有,然后X+=X++,相当于X=X+X++,而X++是先使用后加,所以先运算X=7,也就是先算X=14然后加一等于15
第二题:先算x++>=0&&!(y--<=0)这个式子,x++>=0就是先算x>=0,然后算x=x+1,算完后,得出x++>=0这个式子为假,等于0,并且x=0。既然已经算出&&符号之前的式子为假,所以x++>=0&&!(y--<=0)这个式子整个为假,所以就不用算&&符号后的式子了,所以y还是5不变,然后就是计算0||(z=x+y)式子,z=x+y这个是把x+y赋值给z,之前已经算出x=0,y=5,所以z=5,所以z=x+y这个式子是非零的,所以0||(z=x+y)这个式子为真,所以k=1,所以答案是,k=1,x=0,y=5,z=5

printf("%d\n",x+=x++,x+2,++x); 首先,x在运算前就自增1 ++X,x=7 ,x+2并没赋给任何地方,所以最后x=x + x++ 就是x=7+8=15

x++>=0的逻辑结果是1 然后(y--<=0)||(z=x+y)的结果是0 而!(y--<=0)||(z=x+y)的结果是1
所以k=1&&1=1;
x++ 所以是x=0; 你用的可能是TURBO C造成编译顺序是从右到左的,所以(y--<=0)||(z=x+y)只运行到z=x+y=5就得到非0逻辑结果1,因为是||所以(y--<=0)||(z=x+y)可以直接得1,而(y--<=0)部分并没有运行,y--并没运行,y还是5

printf("%d\n",x+=x++,x+2,++x);
后面的式子是个逗号表达式 结果为14 而非15
x+=x++ 相当于 x+=6 x=7 所以 x=13
然后执行++x所以x=14
输出就是14了

k=x++>=0&&!(y--<=0)||(z=x+y