两变量值的交换方法(C语言)

一、开辟空间暂存法

两个值想要交换,不能用a=b,b=a来进行交换。

#include<stdio.h>
int main()
{
	int a=10,b=8;
	a=b;
	b=a;
    printf("%d %d",a,b);
	return 0;
}

这样输出结果就是错误的:

为什么会这样呢?

因为在计算机中a,b都是变量,都有一个动态空间,10存储在a的空间中,8存储在b中的空间中,当a=b时,就是把b中的数值,赋值给a,a此时空间存储的就变成8(a=8),C语言执行语句是一步步执行的,所有b=a在a=b后,所以此时把a=8赋值给b,此时b=8,相当于没变。

此时可以想象有两瓶饮料,要把两种饮料交换瓶子A,B,有什么办法呢?那只能再拿一个空瓶子C,然后把一种饮料A放在空瓶子C里暂存着,把第二种饮料B倒进刚刚空出来的第一种饮料的瓶子A里,最后把放在空瓶子C里的第一种饮料倒进第二种饮料的瓶子B里。

类似,在写程序时可以开辟一个新的变量空间来暂存其中一个变量,使这个变量值不会缺失。

#include<stdio.h>
int main()
{
	int a=10,b=8,c;
	c=a;
	a=b;
    b=c;
    printf("%d %d",a,b);
	return 0;
}

其中,c就是开辟的新空间,此时有电脑的可以进行debug(调试),对a、b、c三个变量的值进行监视。最终结果就是是对的。

二、总和加减交换法

交换时可以把两个数相a,b加,赋值给一个变量a,然后另一个变量b就可以用a-b来赋值,来达到b得到原来a的值,最后再把和减去b的值来赋值给a,这种方法可以减少空间的使用。

例:a=8,b=10,然后把a+b=18->a,此时a=18,b=10,a-b=8->b,这样b就得到了a(8)的值,最后a-b-=10>a,a就得到原来b的值(10)。

代码展示:

#include<stdio.h>
int main()
{
	int a=8,b=10;
	a=a+b;
    b=a-b;
    a=a-b;
    printf("%d %d",a,b);
	return 0;
}

结果如下:

三、按位异或交换法

^这个符号在C语言中不再是幂函数符号,而是逻辑运算符按位异或。

执行原理:两个十进制数转换为二进制数,然后两个作比较,如对应数为相等,则结果为0,不同则为0,最后再把结果的二进制数转换为十进制数。

例:a=8,b=10。

a转换为二进制数为1000,b转化为二进制数为1010,a^b=0010

利用这个原理怎么进行两个数交换呢?

还是拿上面的例子举例:
a^b=0010,那此时只需要再用一次^就可以进行交换。现在进行。

a^b=0010->a,接着a^b=1000->b(a=0010,b=1010),a^b=1010->a(a=0010,b=1000),这样就达到交换的目的。

#include<stdio.h>
int main()
{
    int a=8,b=10;
    a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("%d %d",a,b);
}

结果如下:

注意:如果要写函数进行交换,要不要直接传值,要使用指针进行地址传递。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sɪʟᴇɴᴛ໊ོ5329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值