1、给定两个整形变量,交换其内容
这个问题很简单,只需要创建一个临时变量来保存其中一个变量的值就好,代码如下:
//给定两个整形变量,交换其内容
int
main()
{
int
a = 10;
int
b = 20;
int
tmp = 0;
printf(
"a=%d b=%d\n"
, a, b);
tmp = a;
a = b;
b = tmp;
printf(
"a=%d b=%d\n"
, a, b);
getchar();
return
0;
}
2、不创建临时变量解决第一个问题
这题有两种方法,各有利弊,下面分别分析。
- 反复利用加减法(或者乘除法)
//给定两个整形变量,交换其内容
int
main()
{
int
a = 10;
int
b = 20;
printf(
"a=%d b=%d\n"
, a, b);
a = a + b;
//a=30
b = a - b;
//b=(10+20)-20=10
a = a - b;
//a=(10+20)-10=20
printf(
"a=%d b=%d\n"
, a, b);
getchar();
return
0;
}
这种方法容易理解,但是有一个很大的问题, 整形变量是有限制的,如果a、b的值足够大,a+b可能会超过整形的最大值,会遗失一些位,导致结果出现错误(乘除法问题会更多)。所以还有另一种算法:
- 按位异或
int
main()
{
int