a,b值互换
2015-10-07 17:07
375 查看
第一个方法为“三变量法”,因为在实现过过程中引用了第三无关变量(或者叫中间变量)。
因为变量值覆盖的特点,所以当把b赋值给a的时候,a原先的数值将被覆盖,也就消失了。所以我应该先将a的值保存起来,方法就是将a的值赋给第三变量temp;
然后就将a=b;那么a的值已经变成b的,而b的仍然是b原先的值,只是复制一份给了a;而temp的值是原先a的,所以只需再将b=temp;b的值就被覆盖为原先a的值。
至此变量a,b的值互换已经完成。
个人思考:“三变量法”很好很简洁的解决了变量交换中值被覆盖的问题,思路让人感觉清晰易懂,很容易掌握。
第二个方法算是“直接法”吧,因为确实不需要第三变量,就能进行值互换。先看代码。
这方法直接简短地完成了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的值进行互换,而不需要借助第三变量。这也告诉我们一个道理,越是看似不起眼的地方越可能达到不可思议的效果。在看书的时候,看到算式从左到右运算,大家不都是一下子就明白了,因为数学中不正是这样的吗?看学起来完全没难度。可这么不起眼的这么简单的知识点,有谁想到这么巧妙的运用么?
#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的值进行互换,而不需要借助第三变量。这也告诉我们一个道理,越是看似不起眼的地方越可能达到不可思议的效果。在看书的时候,看到算式从左到右运算,大家不都是一下子就明白了,因为数学中不正是这样的吗?看学起来完全没难度。可这么不起眼的这么简单的知识点,有谁想到这么巧妙的运用么?
相关文章推荐
- mysql 分表策略
- Maven学习总结(七)——eclipse中使用Maven创建Web项目
- 简单替换RadioButton修改前方按键式样
- volley(3)——源码分析
- Android学习之Activity
- mysql优化
- C++向量(Vector)
- Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据
- C++实现KMP算法(C风格)
- C语言:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
- android_launcher的源码详细分析
- HDU2115 I LOVE THIS GAME
- objective-c I/O
- xhProf使用注意点
- Scala学习笔记06【Tuple、Array、Map、文件实战入门】
- 二叉树的遍历
- SQL Server使用问题总结
- volley(2)——自定义request
- 求出0~999之间的所有“水仙花数”并输出
- 对象在方法中进行连续的传递 —— 士兵开枪练习