您的位置:首页 > 其它

a,b值互换

2015-10-07 17:07 375 查看
  第一个方法为“三变量法”,因为在实现过过程中引用了第三无关变量(或者叫中间变量)。

#include <stdio.h>
int main()
{
int a=1,b=2;
int temp;//第三无关变量
temp=a;
a=b;
b=temp;
printf("a=%d,b=%d",a,b);//人为检验a,b的值
return 0;
}


  因为变量值覆盖的特点,所以当把b赋值给a的时候,a原先的数值将被覆盖,也就消失了。所以我应该先将a的值保存起来,方法就是将a的值赋给第三变量temp;

然后就将a=b;那么a的值已经变成b的,而b的仍然是b原先的值,只是复制一份给了a;而temp的值是原先a的,所以只需再将b=temp;b的值就被覆盖为原先a的值。

至此变量a,b的值互换已经完成。

  个人思考:“三变量法”很好很简洁的解决了变量交换中值被覆盖的问题,思路让人感觉清晰易懂,很容易掌握。

  第二个方法算是“直接法”吧,因为确实不需要第三变量,就能进行值互换。先看代码。

#include <stdio.h>
int main()
{
int a=1,b=2;
a=b-a+(b=a);//值转换语句
printf("a=%d,b=%d",a,b);
return 0;
}


  这方法直接简短地完成了a,b值互换的任务,关键语句乍看下,关系有点乱,其实不然。首先我们清楚赋值符号“=”的优先级是最小的,所以a=(这边的计算式的结果)是最晚进行的,那么我们来看看计算式到底做了什么?

  首先根据从左到右的运行的顺序,b的地方用b的值代替,a的地方被a的值代替,括号内的b=a将a的值赋给b接下来参加运算,于是乎,a=b-a+(b=a);将变成a=2-1+(b=a=1);最后变成a=2(b之前的值)。而在此之前已将a的值1赋给b了。至此,a,b完成值互换。

  个人思考:“直接法”很巧妙的运用了算是从左到右运算的特点,将a,b的值进行互换,而不需要借助第三变量。这也告诉我们一个道理,越是看似不起眼的地方越可能达到不可思议的效果。在看书的时候,看到算式从左到右运算,大家不都是一下子就明白了,因为数学中不正是这样的吗?看学起来完全没难度。可这么不起眼的这么简单的知识点,有谁想到这么巧妙的运用么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: