您的位置:首页 > 编程语言 > C语言/C++

C语言中不允许创建临时变量,交换两个数的内容

2016-06-11 18:49 447 查看
在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢?
假设有两个变量num1和num2;下面通过两种方法进行分析。方法一:利用加减法。具体算法分析如下: 由于 num1+num2-num1=num2; num1+num2-num2=num1; 则将num1+num2赋给num1;num1-num2赋给num2;num1-num2赋给num1,这样就可以实现num1和num2两个数内容的交换。通过相同的思想,我们也可以将加减运算改为乘除运算,但此法存在缺陷。对于不能整除的两个数,设定的精度不同结果的误差就不同。代码如下:[code=cpp;toolbar:false">#include<stdio.h>
int main()
{
int num1=10,num2=20;
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
/*相同方法:将“+”“-”换成“*”“/”*/
printf("%d %d",num1,num2);
return 0;
}方法二:利用按位异或法。C语言中异或运算符“^”也称为“XOR”运算符,对于二进制数据它的运算规则是:0^0=0;0^1=1;1^0=1;1^1=1;若参加运算的两个数同号,则结果为0(假);异号时结果为1(真)。具体算法分析如下:num1^num2^num1=num2; num1^num2^num2=num1; 则将num1^num2赋给num1;num1^num2赋给num2;num1^num2赋给num1,这样就可以实现num1和num2两个数内容的交换。例如:两个变量a=2和b=3. a=2 00000000 00000000 00000000 00000010 b=3 00000000 00000000 00000000 00000011 a=a^b=2^3 00000000 00000000 00000000 00000001 b=a^b=2^3^3 00000000 00000000 00000000 00000010 a=a^b=2^3^2 00000000 00000000 00000000 00000011此时两个数a,b的内容交换了。代码如下:#include<stdio.h>
int main()
{
int num1=35,num2=56;
num1=num1^num2;
num2=num1^num2;
num1=num1^num2;
/*异或,此法优于用加减法或乘除法*/
printf("num1=%d,num2=%d",num1,num2);
return 0;
}[/code]小知识:如何动态求取数组大小?
例如:对于数组不知道其大小,可通过sizeof求其长度。sizeof运算符可以动态计算类型大小,对于数组a[],它的数组大小可用sizeof(a)/sizeof(a[0]),求取对于整型数组sizeof(a[0])=4。本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1698983
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: