变量的值交换"/>
c语言实现两个变量的值交换
c语言中实现两个变量的值的交换有三种方法:1、初始化一个新变量,把他当作桥梁,完成两个值的交换(用的最多的方法)。2、用异或的方法完成交换。3、用加减的方法完成交换。
第一种方法(用新变量进行交换):
若要交换a、b中的值,则初始化一个新的变量(temp),把a的值存到temp中(防止等会将b的值赋予a时找不到a的值),然后把b的值赋予a,最后再把存在temp中的值赋予b完成交换。
这里*pa=a,*pb=b
#include<stdio.h>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<stdio.h>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就完成了交换。
运行结果:
第三种方法(用加减运算):
#include<stdio.h>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语言实现两个变量的值交换
发布评论