两个数的交换

两个数a,b之间如何实现交换呢?

我先想到了最简单的方法一,就是先创建一个新的临时变量t,然后实现交换。

思想:就是先把a赋值给t,这样a就空置了,再把b赋值给a,最后把t在赋值给b就实现了两数的交换了。

 完整代码:

#include<stdio.h>
int main()
{
	int a=3, b=5;
	{
		int t=0;
		{
			t=a;
			a=b;
			b=t;
		}
		printf(" %d,%d\n ",a ,b);
	} 
      return 0;<pre name="code" class="objc">}

 
大家都知道指针是C语言的核心嘛吐舌头,所以可不可以用指针来实现两个数的交换呢,因此,方法二就产生了。 

思想:在主函数中通过调用Swap函数实现两数的交换。

完整代码:


#include<stdio.h>
void  Swap(int *x,int *y)
{
	int t = 0;
	{
		t=*x;
	    *x=*y;
	    *y=t;
	}
}
int main()
{
	int a = 3;
	int b = 5;
	Swap(&a,&b);
	printf("a=%d b=%d\n",a,b);
	return 0;
}
         

      然而这种方法看着挺麻烦的呢,然后思考吐舌头,可不可以不用创建临时变量变量就实现交换呢?毕竟三个变量占内存,可不可以只用两个变量进行一些就解决问题呢,于是就有了方法三的产生。

思想:只通过两数的简单运算(加,减,乘,除),并不借助第三变量实现交换。

完整代码:

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

说明·:在这个代码中,可以将加减运算换成乘除运算,不过这个方案有弊端,当两数较大时,容易产生溢出,超出空间范围。

在这里说明一下,int类型的范围:-32768~32767

所以,第四种方法就解决了这种溢出的问题。

思想:用异或运算代替加减乘除运算。

完整代码:

#include<stdio.h>
int main()
{
	int a=3, b=5;
	{
		a=a^b;
		b=b^a;
		a=a^b;
	}
     printf(" %d %d\n ",a, b);
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="objc">     return 0;
}

 
说明: 

二进制异或运算:先将十进制数换成二进制数,然后二者比较,相同为0,相异为1。

例如:a=5(二进制为00000101)

            b=7(二进制为00000111)

   a与b异或,结果为00000011(3)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值