C语言问题帮忙解答,谢谢。

来源:百度知道 编辑:UC知道 时间:2024/05/14 20:09:10
我遇到一个这样的问题,虽然给了答案但我感觉他们是错误的,所以希望大家帮我分析分析,谢谢!

有以下程序:
main()
{
int m=3,n=4,x;
x=-m++;x=x+8/++n;
printf("%d\n",x);
}
程序运行后的输出结果是
A.3 B.5 C.-1 D.-2
答案给的是 D

大家帮忙分析一下答案对吗?
可是自加运算好像没有进行啊,能不能说明一下,我的基础实在是。。。不好意思说了。

m是有自加的,只不过先参与运算后再自加:
把原题改一下:
main()
{
int m=3,n=4,x;
x=-m++;x=x+8/++n;
printf("%d\n",x);
printf("%d\n",m);
}
结果m的值是4,所以m是有自加的……
再改一下原题:
main()
{
int m=3,n=4,x;
x=-(++m);x=x+8/++n;
printf("%d\n",x);
}
这里m是先自加然后再参与运算的,所以结果x的值是-3……

首先:
x=-m++
自加运算由先,但是是先运算后自加,所以
x=-3

x=x+8/++n
运算优先顺序为:自加-除法-加法
x=x+8/5,(++n=5)
而8/5由于8和5均为整形,所以结果为整形数值1

x=x+1
=-3+1=-2
所以答案是D

楼上正解.
关于问题问题补充:自加分前加"++n",和后加”n++”,
"++n=自加前的n
n++=自加后的n

同意二楼的看法 D

是D