一般思路:创建一个临时变量,以这个临时变量为中间变量,利用赋值来完成两个数的内容的相互交换。
代码如下:
#include <stdio.h>
int main()
{
int a=0;
int b=0;
int t=0;
printf("交换前:\n");
scanf("%d,%d",&a,&b);
t=a;
a=b;
b=t;
printf("交换后:\n");
printf("%d,%d",a,b);
return 0;
}
优化方案:
1.上述方法中需要另外创建一个变量,略微有些麻烦,若是要求不能创建临时变量,则可以采用数学上的加法来进行一些变通。
代码如下:
#include <stdio.h>
int main()
{
int a=0;
int b=0;
printf("交换前:\n");
scanf("%d,%d",&a,&b);
a=a+b;
b=a-b; //这里其实是将原本a的值赋给b
a=a-b; //这里其实是将原本b的值赋给a
printf("交换后:\n");
printf("%d,%d",a,b);
return 0;
}
2.上述方案是巧妙的运用了一下加法,除了这种方法,其实可以采用位运算符来进行交换。方法与方案1类似,只不过是运用了一下位运算符中的位异或^。
位异或的大致作用是两个二进制数每个位上相同等于0,不同等于1【例如111000与101010的结果就是010010】,而对于一般数的运算【例如a^b^a=b】,也就是说相同数异或相互抵消。而下面这种方案就是通过运用这一原理。
代码如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("before: a = %d, b = %d\n", a, b);
a = a ^ b;
b = a ^ b; //a ^( b ^ b) 其实就是把a的值赋给b
a = a ^ b; //a ^ b ^ a <span style="font-family: Arial, Helvetica, sans-serif;">其实就是把b的值赋给a</span>
printf("after : a = %d, b = %d\n", a, b);
return 0;
}