c语言实现两个变量的值交换

编程入门 行业动态 更新时间:2024-10-15 08:27:33

c语言实现两个<a href=https://www.elefans.com/category/jswz/34/1771380.html style=变量的值交换"/>

c语言实现两个变量的值交换

c语言中实现两个变量的值的交换有三种方法:1、初始化一个新变量,把他当作桥梁,完成两个值的交换(用的最多的方法)。2、用异或的方法完成交换。3、用加减的方法完成交换。

第一种方法(用新变量进行交换):

        若要交换a、b中的值,则初始化一个新的变量(temp),把a的值存到temp中(防止等会将b的值赋予a时找不到a的值),然后把b的值赋予a,最后再把存在temp中的值赋予b完成交换。

这里*pa=a,*pb=b

#include<stdio.h>void swap(int* pa, int* pb)
{int temp = *pa;*pa = *pb;*pb = temp;
}int main()
{int a = 3;int b = 5;printf("交换前:a=%d b=%d\n", a, b);swap(&a, &b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

运行结果:


第二种方法(用异或'^'):

        这个方法的比较少见,但是也能完成交换的功能。核心在于:相同的两个数相互异或的结果为0,也就是说:a^a=0;然而0跟任何数异或的结果都是任何数:0^b=b,利用这一点可以写出代码:

#include<stdio.h>void swap(int* pa, int* pb)
{*pa = *pa ^ *pb;//第一步*pb = *pa ^ *pb;//第二步*pa = *pa ^ *pb;//第三步}int main()
{int a = 3;int b = 5;printf("交换前:a=%d b=%d\n", a, b);swap(&a, &b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

        第一步中先确定好*pa的结果,再进行到第二步,第二步可以写成:*pb=*pa^*pb^*pb(这里在说明一点异或是可以支持交换律的,没错,就是跟乘法交换律一样的那个交换律),因此第二步可以先计算*pb^*pb的结果为0,0与任何数异或都为后者。

        所以*pa^*pb^*pb(数字表示:3^5^5)=>3^0=3。再把3赋给*pb就行。此时*pb=3。

        第三步思路也一样,利用交换律,*pa=*pa^*pb^*pb,但是此时*pb的值是3,所以用数字表示即为:*pa=3^5^3=>3^3^5=>0^5=5,再把5赋予*pa就完成了交换。   

运行结果:    


第三种方法(用加减运算): 

#include<stdio.h>void swap(int* pa, int* pb)
{*pa = *pa + *pb;*pb = *pa - *pb;*pa = *pa - *pb;}int main()
{int a = 3;int b = 5;printf("交换前:a=%d b=%d\n", a, b);swap(&a, &b);printf("交换后:a=%d b=%d\n", a, b);return 0;
}

        总体思路与异或差不多,把*pa(3)与*pb(5)的值加起来赋予*pa(8),这时候*pa(8)-*pb(5)=3,再将其赋给*pb,完成了pa的值赋予pb这个动作,这时候*pb的值为3。

        接下来再把*pa(8)-*pb(3)=5赋予*pa,这时候*pa=5,*pb=3,完成*pa与*pb两个值的交换。

运行结果:

更多推荐

c语言实现两个变量的值交换

本文发布于:2024-02-16 18:41:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691090.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:变量   两个   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!