1.引入第三个变量进行交换的方法
分析:此方法比较简单,只需要利用第三个变量对其余两个变量中的数据进行交换。
优点:运行速度快,简单,便于分析以及计算
代码如下:
#include<stdio.h>
int main()
{
int a, b, c;
scanf_s("%d %d", &a, &b);
c = a;
a = b;
b = c;
printf("a=%d b=%d", a, b);
return 0;
}
运行结果如下:
2.利用函数进行变量的数数据交换
分析:利用函数和指针的基础知识对两个变量进行交换
优点:此代码在计算机当中运行也比较快,但是相对于1来说不够简洁易于理解
代码如下:
#include<stdio.h>
void change(int* a, int* b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
int main()
{
int a, b, c;
scanf_s("%d %d", &a, &b);
change(&a, &b);
printf("a=%d b=%d", a, b);
return 0;
}
代码运行结果:
3.不引入第三个变量,对两个变量当中的数据进行交换
代码分析:利用数学的思维对代码巧妙的运算
优点:不引入第三个变量
缺点:a+b可能会导致超出数据范围,因此此方法虽然可以不引入第三个变量,只能对不是很大的数进行操作,此方法也有一定的思维难度
代码如下:
#include<stdio.h>
int main()
{
int a, b;
scanf_s("%d %d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d", a, b);
return 0;
}
代码运行结果如下:
4.不引入第三个变量,利用按位异或进行变量的交换(^)
代码分析:此方法利用^对变量进行交换
优点:此方法不用考虑数据溢出的问题,便于操作
缺点:计算机运行速度较慢,思维难度较高
代码如下:
#include<stdio.h>
int main()
{
int a, b;
scanf_s("%d %d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d", a, b);
return 0;
}
对于^符号(按位异或)的简单分析
c=a^b计算过程:对a转换成2进制代码(32个比特位),将b转换成2进制代码(32个比特位),对两者进行比较,相同取0,不同取1,得到c的二进制代码,即可得到c的数据。
可简单推导出以下结果:a^a=0 0^a=a
运行结果如下: