C语言 关于自增的

发布时间:2024-05-12 16:09 发布:上海旅游网

问题描述:

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);
而这个表达式的关键所在就在要知道各个运算符的优先级和结合方向就可以了
先执行'!'和'++' '--' 运算符然后就是关系和逻辑运算符
最后是赋值运算符
咯咯

第一题是不是写错了些语句?照你这样写最后应该是14。
第一题:
printf("%d\n",x+=x++,x+2,++x);
printf函数必须先取各个式子的值,
最先运行的是++x,发生在打印之前,先得出x是7。
然后x+=x(相当于x=x+x),这时x是14。
再执行x+2,没有改变任何变量。
x++发生x+=x之后,这时printf取值已经完毕,虽然x的值变为15,但printf在屏幕上的仍是14。

第二题上面zkwlixue兄弟讲得很清楚了。

热点新闻