欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > C语言初阶小练习4(不用临时变量交换数值)

C语言初阶小练习4(不用临时变量交换数值)

2025/6/8 7:11:00 来源:https://blog.csdn.net/2303_80170533/article/details/143169044  浏览:    关键词:C语言初阶小练习4(不用临时变量交换数值)

题目:不能创建临时变量(第三个变量),实现两个整数的交换


1.用临时变量来实现(常规写法)

这种方法是最直观的,但题目要求不使用临时变量,所以这里仅作为对比参考。

用创建临时变量来写:逻辑清晰,更便于理解,也是在正常情况下的书写方法。

int main()
{//创建临时变量int a = 3;int b = 5;printf("%d %d\n", a, b);int tmp = a;//临时变量tmpa = b;b = tmp;printf("%d %d\n", a, b);return 0;
}

2.不创建临时变量的写法

2.1第一种写法:

通过加减运算的方法,在整数范围足够大(不溢出)的情况下可以工作。

注意:如果ab的和超出了int的范围,这种方法会导致溢出,从而无法正确交换值

int main()
{int a = 3;int b = 5;printf("%d %d\n", a, b);a = a + b;b = a - b;a = a - b;//当a和b分别不溢出的时候,但是和溢出的时候,不合适printf("%d %d\n", a, b);
}

2.2第二种写法:

用^(异或操作符)来实现目的

利用了异或运算(XOR)的特性来交换两个整数的值,且不涉及任何溢出问题。

int main()
{int a = 3;int b = 5;printf("%d %d\n", a, b);a = a ^ b;b = a ^ b;//(a^b)^b=aa = a ^ b;//(a^b)^a=b	//当a和b分别不溢出的时候,但是和溢出的时候,不合适printf("%d %d\n", a, b);return 0;
}

1.a = a ^ b;:此时a存储了a和b的异或结果。


2.b = a ^ b;由于a现在是a XOR b,所以b = (a XOR b) XOR b。根据异或运算的性质,x XOR x = 0和x XOR 0 = x,所以b变成了原来的a。


3.a = a ^ b;:此时b已经是原来的a,所以a = (a XOR b) XOR a。由于b是原来的a,所以a变成了原来的b

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词