欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言如何实现交换两个数?

程序员文章站 2023-08-24 08:25:31
方法一:最普通方法--建立临时变量 思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。 缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数...

方法一:最普通方法--建立临时变量

思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。

缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有被交换。

int swap(int _x, int _y)

{

	int  z = _x;//通过建立z这个临时变量来交换_x,_y
	_x = _y;
	_y = z;
	printf("%d %d", _x, _y);
	return 0;

}

方法二:建立临时变量--建立指针

思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。

int swap(int *_x, int *_y)//主函数中把两个数的地址传过来
{
	int  tmp = *_x;//定义中间变量 然后交换两个数
	*_x = *_y;
	*_y = tmp;
	printf("%d %d", *_x, *_y);
}

方法三:不建立临时变量--加减交换

思路分析:取两个数的和,然后通过减去另一个数来得到另一个数。

缺点:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,不能使用函数。

int main()
{
	int a = 1;
	int b = 2;
	
	a = a + b;//a=1+2
	b = a - b;//b=3-2
	a = a - b;//a=3-1

	printf("a=%d,b=%d", a, b);
	return 0;
}

方法四:最佳方法--异或方法

思路简介:通过二进制异或方法交换,如a=3二进制为11,b=2的二进制为10,按位异或(两个值相同为0,否则为1)。

int mian()
{
	int a = 3;
	int b = 5;
	
	a = a ^ b;                     //a = 3 ^ 5  
	b = a ^ b;                     //b = (3 ^ 5) ^ 5  
	a = a ^ b;                     //a = (3 ^ 5) ^ 3  

	printf("a=%d,b=%d", a, b);
	return 0;
}