当前位置: 代码迷 >> C语言 >> 这样的表达式转换对么?
  详细解决方案

这样的表达式转换对么?

热度:277   发布时间:2004-10-06 07:29:00.0
这样的表达式转换对么?

a+=b,b=a-b,a-=b;实现了a 、b的交换么?

我怎么没有看出来呢

如果写的菜一点的话是不是可以写成如下:a=a+b; b=a-b=(a+b)-b=a; a=a-b=(a+b)-b=a????

最后一个a 的值不还是原来的值么?

小弟愚昧,还请不吝赐教!

搜索更多相关的解决方案: 表达  

----------------解决方案--------------------------------------------------------

因为第3个语句再第2个语句后面运行

所以可以实现交换


----------------解决方案--------------------------------------------------------
第三个表达式的具体转化过程:a-=b??
----------------解决方案--------------------------------------------------------

在第3个表达式调用时b已经和初使条件的a相等

而这时的a和a+b的值是一样的a-=b就是说a=(a+b)-(a)=b

这样做就是在调换a,b时少用了一个参数


----------------解决方案--------------------------------------------------------

这个问题不用讨论,两个数交换不建议使用这个方法。

利用第三方空间才是正确。

如下:

a=a^b;b=a^b;a=a^b;

a=a*b;b=a/b;a=a/b;

。。。。。。

都是在一定的条件下才成立的。


----------------解决方案--------------------------------------------------------

谢谢啊[

em01]


----------------解决方案--------------------------------------------------------

两个数交换也可以用这种方法啊,这样写

a-=b;

b+=a;

a=b-a;


----------------解决方案--------------------------------------------------------

谢谢! 不过这样实在是有些费力不讨好,在真正写程序的时候还是不要用这样的方法。

我看这些的收获是对变量值的变化有了更清楚的了解。

还是谢谢楼上的兄长!


----------------解决方案--------------------------------------------------------
以下是引用knocker在2004-10-06 14:20:01的发言:

这个问题不用讨论,两个数交换不建议使用这个方法。

利用第三方空间才是正确。

如下:

a=a^b;b=a^b;a=a^b;

a=a*b;b=a/b;a=a/b;

。。。。。。

都是在一定的条件下才成立的。

这个显然有限制条件B=0就不行了 ,但a=a+b;b=a-b;a=a-b;应当适合任何情况


----------------解决方案--------------------------------------------------------

建议大家不要在对这样的问题讨论不休了; 谢谢大家的帮助。

用另外一个变量可以的解决的很简单问题,我们还是不要弄出个别人要看上半天才明白的东西, 我们写东西很重要的一条原则就是:可读性强


----------------解决方案--------------------------------------------------------
  相关解决方案