码迷,mamicode.com
首页 > 编程语言 > 详细

C语言中有关两个数,值的交换

时间:2015-12-01 07:06:54      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

一、开讲感言

   最近在系统的学习C语言,虽说以前在大学里学习过,但是人嘛,时间一久就会忘了。由于行业的原因,我学习了iOS,但是想学习iOS,C就是万万不能忘的。于是经过几天的时间,我终于有了一点小成就,就是有关在C里面的两个值的交换,这里或许只是一部分,希望还有知道方法的同事,不吝赐教。下面就不多说了,我们一起来看,怎么交换两个数的值,我这里面提供了三种方法。

第一种:第三方变量交换法

  我们在C++编译器中设三个变量,并且给其中两个变量赋值,第三方变量初始化为0,下面我们来看看具体的代码情况。由于第三方变量里面是空值,我们将a赋值给第三方变量,那么第三方变量中的值也就由0变成了7.这时a中的原值7就被内存清空了,此时在把b的值付给被清空的变量a,变量a中就又被从新赋值了,此时a中的值就变成了9。这时,由于第一步的时候,我们将a的原值赋给了第三方变量,此时我们在将存有a值的第三方变量中的值赋给第二步中被清空了的b变量。最后就得出a的值由原来的7换成了9,而b的值由原来的9换成了7。程序编译前后都不报错,所以结论成立。

#include <stdio.h>
int main(){
	int a = 7,b = 9;
	int temp = 0;
	printf("交换前: a = %d b = %d\n",a,b);
	temp = a;
	a = b;
	b = temp;
	printf("交换后: a = %d b = %d\n",a,b);
	return 0;

}

 

 第二种:位(^)运算法

     还是一样,我们在C++中定义两个变量,并且给他们赋值,然后打印出未交换前的结果从程序我们能看出a = a^b;b = a^b;a = a^b;这是代码的主要实现部分。“^”这是一个异或的符号,当然我也要告诉大家“^”有一个最重要的性质。就是一个数,同时异或两个数,结果还是他本身,所以根据这个特性,我们来看下代码的具体实现思路。

     首先,我们将代码a = a^b带入到b = a^b中就可以得到b = a;也就是将a的值赋值给了b;然后我们在看看第三步,就是将第二步b = a^b带入到第三个等式中可以得出a = b;同时,这里就实现了a和b值的互换,结论正确。

 

#include <stdio.h>
int main(){
	int a = 3,b = 5;
	printf("交换前:a = %d b = %d\n",a,b);
	a = a^b;
	b = a^b;
	a = a^b;
	printf("交换后:a = %d b = %d\n",a,b);
	return 0;
}

 第三种:加减运算法

   在这个办法开始讲解之前,我不知道大家知不知道两个杯子换水的方法?在这里,我要讲的就是这种方法。首先把代码粘过来。由代码,我们可以看出来,核心部分依旧还是中间的那段算法。我们暂时可以把b当做是一个大杯子,里面装了有大半杯水,然后把a当做一小部分水。我们来看,一大杯子水减去一小杯子水,是否可以得到”一中“杯子水,将减去a部分的水,剩下的部分水赋给a,然后一大杯水减去”一中“杯水是否等于一小杯水呢,这时本来放在a中的一小杯水就直接给到了b中了。然后结合第一步和第二步,他们之间得出的“一中”杯水加上一小杯水,那就得到了一大杯水了。这样就得出了,他们值的交换,可能我这说的还不是很容易懂,请见谅。下面我会给大家说,这种放法的不足之处。

#include <stdio.h>
int main(){
	int a = 3,b = 5;
	printf("交换前:a = %d b = %d\n",a,b);
	a = b-a;
	b = b-a;
	a = b+a;
	printf("交换后:a = %d b = %d\n",a,b);
	return 0;
}

  第三种方法的补充:

      我们也知道内存是有容量的,既然要用加减法交换两个数的值,那么我们就要考虑内存了。考虑如果a中装的水容量的问题,因为如果第一步中b中的水减去a中的水,把结果赋给a,a是否会装不下,而产生溢出的现象,如果是这样那么就会造成数据的丢失了,那么交换的值也就不能成功了。所以,这就是第三种方法的局限性,这里我不是很推荐大家用这种方法。我们做开发过程中还是比较喜欢用第一种放法,通熟易懂,好了我就讲这么多了,希望大家如果觉得说的不是很好,请多多指教,我一定虚心受教。

 

 

  

C语言中有关两个数,值的交换

标签:

原文地址:http://www.cnblogs.com/yuluoluoluo/p/5008988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!