C语言自加自减的问题
执行以下程序段后的输出结果是()。intx=3;intm,n;n=(++x)+(++x);m=(x--)+(x--);printf("%d%d\n",m,n);A、106...
执行以下程序段后的输出结果是( )。
int x = 3;
int m, n;
n = (++x) + (++x);
m = (x--) + (x--);
printf("%d %d\n", m, n);
A、10 6
B、9 9
C、10 10
D、10 8
答案是选C,我怎么算都是7,9,求高人指导啊 展开
int x = 3;
int m, n;
n = (++x) + (++x);
m = (x--) + (x--);
printf("%d %d\n", m, n);
A、10 6
B、9 9
C、10 10
D、10 8
答案是选C,我怎么算都是7,9,求高人指导啊 展开
4个回答
展开全部
他这个是X变量的存储问题。先看
n = (++x)+(++x);
从右至左,先算++x,x=4,这里x在寄存器里的值是4,再算++x,x=5。
注意,关键点来了,那这时候,n是等于4+5吗,不是的。
在进行加法时,A+B,寄存器会在得到A,B的值以后才会开始加法计算,现在,A,B的地址都指向X,当最后x=5时,实际上把A的值也做了改变,变成了5,千万不要想当然认为有一个临时变量来保存开始x=4的值,没有的。所以结果自然是x+x = 10
同理到x--
n = (++x)+(++x);
从右至左,先算++x,x=4,这里x在寄存器里的值是4,再算++x,x=5。
注意,关键点来了,那这时候,n是等于4+5吗,不是的。
在进行加法时,A+B,寄存器会在得到A,B的值以后才会开始加法计算,现在,A,B的地址都指向X,当最后x=5时,实际上把A的值也做了改变,变成了5,千万不要想当然认为有一个临时变量来保存开始x=4的值,没有的。所以结果自然是x+x = 10
同理到x--
展开全部
1、C语言中,后置自增(自减)是在执行完所在语句后,变量的值再自增(自减)。
2、举例说明如下:
int num=0, s=0;
while(num++<3)
{
s = s + num;
}
// 第1次执行while时,num=0,第1次执行完while后,num=1,此时,s=0+1=1
// 第2次执行while时,num=1,第2次执行完while后,num=2,此时,s=1+2=3
// 第3次执行while时,num=2,第3次执行完while后,num=3,此时,s=3+3=6
// 第4次执行while时,由于num=4>3,所以推出循环,最后s=6
2、举例说明如下:
int num=0, s=0;
while(num++<3)
{
s = s + num;
}
// 第1次执行while时,num=0,第1次执行完while后,num=1,此时,s=0+1=1
// 第2次执行while时,num=1,第2次执行完while后,num=2,此时,s=1+2=3
// 第3次执行while时,num=2,第3次执行完while后,num=3,此时,s=3+3=6
// 第4次执行while时,由于num=4>3,所以推出循环,最后s=6
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要知道“++”,“--”在变量前后的区别。
在前,比如“++x",是先将自增,再赋值,那么n = (++x)+(++x)就是4+5 = 9
然后,“x--"就是先赋值再自减,那么刚刚经过n = (++x)+(++x)后,x=5,带入m=(x--)+(x--)还是等于9。
我觉得答案错了,不要迷信答案,你自己到VC或者Turbo C上跑一下不就解决了。
在前,比如“++x",是先将自增,再赋值,那么n = (++x)+(++x)就是4+5 = 9
然后,“x--"就是先赋值再自减,那么刚刚经过n = (++x)+(++x)后,x=5,带入m=(x--)+(x--)还是等于9。
我觉得答案错了,不要迷信答案,你自己到VC或者Turbo C上跑一下不就解决了。
追问
这是道竞赛题,编译环境是在TC1.9,我跑过了,答案就是10,10的,郁闷了啊
追答
我在MS C下跑了,也是10,10,我知道原因了。
我的教材上有一章就是讲这个原理的,和编译器有关:
m = (++i)+(++i);先将i自增两次,然后才计算表达式(5+5);
n = (i--)+(i--);用i的原值先运算(5+5),再自减两次;
不信,你把我的代码去跑一次
int x = 3;
int m(0),n(0);
m = (++x)+(++x);
printf("x = %d\n",x);
n = (x--)+(x--);
printf("x = %d\n",x);
printf("m=%d,n=%d\n",m,n);
应该是
x = 5;
x = 3;
m = 10,n = 10
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为++x是先把x自加1,然后再运算。第一次++x,x=4,第二次++x,x=5;然后n=x+x,n=5+5;
因为x--是先运算再自减1,所以m=5+5;m=10
因为x--是先运算再自减1,所以m=5+5;m=10
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询