C语言实现交换两个数

xiaoxiao2021-02-28  25

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

思路分析:建立一个临时变量,通过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; }

转载请注明原文地址: https://www.6miu.com/read-2150367.html

最新回复(0)