白话文——C语言题2
交换两值可以分为两种情况:
1.引入变量,交换两值
- 直接交换
int main()
{
int a = 10;
int b = 20;
int tmp;
tmp = a;
a = b;
b = tmp;
printf("a = %d b = %d ", a, b);
printf("\n");
system("pause");
return 0;
}
- 调用函数
- void swap(int* x, int* y)
{
int z = *x;
*x = *y;
*y = z;
}
int main()
{
int a = 10;
int b = 20;
swap(&a, &b);
printf("a = %d b = %d ", a, b);
system("pause");
return 0;
}
2. 不引入变量,交换两值
- 按位异或
int main()
{
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d b = %d ", a, b);
system("pause");
return 0;
}
- 加法
int main()
{
int a = 10;
int b = 20;
a = a + b;
b = a - b;
a = a - b;
printf("a = %d b = %d ", a, b);
system("pause");
return 0;
}
- 乘法
int main()
{
int a = 10;
int b = 20;
a = a * b;
b = a / b;
a = a / b;
printf("a = %d b = %d ", a, b);
system("pause");
return 0;
}
- 注:在不引入临时变量交换时,尽量使用按位异或的方式。在加法、乘法计算中会出现栈溢出的情况。