白話文——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;
}
- 注:在不引入臨時變量交換時,儘量使用按位異或的方式。在加法、乘法計算中會出現棧溢出的情況。