第一种方法:
a=a+b;
b=a-b;
a=a-b;
代码如下:
[cpp]
view plain
copy
- #include "stdio.h"
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- a=a+b;
- b=a-b;
- a=a-b;
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }
缺点:可能越界
第二种方法:
解决方法:(a、b异或的结果 ,和a异或得b ,和b异或得a)
a=a^b;
b=a^b;
a=a^b;
代码如下:
[cpp] view plaincopy
- #include "stdio.h"
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- a=a^b;
- b=a^b;
- a=a^b;
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }
写成宏替换的方法如下:
[cpp]
view plain
copy
- #include "stdio.h"
- #define swap(a,b) (a)^=(b)^=(a)^=(b)
- int main(void)
- {
- int a,b;
- printf("请输入两个变量a和b:/n");
- scanf("%d %d",&a,&b);
- printf("a和b交换前:/n");
- printf("a=%d b=%d/n",a,b);
- swap(a,b);
- printf("a和b交换后:/n");
- printf("a=%d b=%d/n",a,b);
- system("pause");
- return 0;
- }