c语言实现两个变量的值交换

c语言中实现两个变量的值的交换有三种方法:1、初始化一个新变量,把他当作桥梁,完成两个值的交换(用的最多的方法)。2、用异或的方法完成交换。3、用加减的方法完成交换。

第一种方法(用新变量进行交换):

        若要交换a、b中的值,则初始化一个新的变量(temp),把a的值存到temp中(防止等会将b的值赋予a时找不到a的值),然后把b的值赋予a,最后再把存在temp中的值赋予b完成交换。

这里*pa=a,*pb=b

#include

void swap(int* pa, int* pb)
{
	int temp = *pa;
	*pa = *pb;
	*pb = temp;
}

int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d b=%d\n", a, b);

	swap(&a, &b);
	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

运行结果:


第二种方法(用异或'^'):

        这个方法的比较少见,但是也能完成交换的功能。核心在于:相同的两个数相互异或的结果为0,也就是说:a^a=0;然而0跟任何数异或的结果都是任何数:0^b=b,利用这一点可以写出代码:

#include

void swap(int* pa, int* pb)
{
	*pa = *pa ^ *pb;//第一步
	*pb = *pa ^ *pb;//第二步
	*pa = *pa ^ *pb;//第三步

}

int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d b=%d\n", a, b);

	swap(&a, &b);
	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

        第一步中先确定好*pa的结果,再进行到第二步,第二步可以写成:*pb=*pa^*pb^*pb(这里在说明一点异或是可以支持交换律的,没错,就是跟乘法交换律一样的那个交换律),因此第二步可以先计算*pb^*pb的结果为0,0与任何数异或都为后者。

        所以*pa^*pb^*pb(数字表示:3^5^5)=>3^0=3。再把3赋给*pb就行。此时*pb=3。

        第三步思路也一样,利用交换律,*pa=*pa^*pb^*pb,但是此时*pb的值是3,所以用数字表示即为:*pa=3^5^3=>3^3^5=>0^5=5,再把5赋予*pa就完成了交换。   

运行结果:    

c语言实现两个变量的值交换_第1张图片


第三种方法(用加减运算): 

#include

void swap(int* pa, int* pb)
{
	*pa = *pa + *pb;
	*pb = *pa - *pb;
	*pa = *pa - *pb;

}

int main()
{
	int a = 3;
	int b = 5;
	printf("交换前:a=%d b=%d\n", a, b);

	swap(&a, &b);
	printf("交换后:a=%d b=%d\n", a, b);
	return 0;
}

        总体思路与异或差不多,把*pa(3)与*pb(5)的值加起来赋予*pa(8),这时候*pa(8)-*pb(5)=3,再将其赋给*pb,完成了pa的值赋予pb这个动作,这时候*pb的值为3。

        接下来再把*pa(8)-*pb(3)=5赋予*pa,这时候*pa=5,*pb=3,完成*pa与*pb两个值的交换。

运行结果:

c语言实现两个变量的值交换_第2张图片

你可能感兴趣的:(c语言,c语言,算法,开发语言)