C语言如何交换两变量值?5大方法告诉你!

简介: C语言如何交换两变量值?5大方法告诉你!

1240

C语言

写在前面:

C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天在这里做一个总结,也算是对这个问题的统一回复,一共总结了5种方法(名字都是我自己取的,不当之处还请批评指正),希望大家看完有所收获。

1.临时变量法

方法解释:采用临时变量的方法,作为中间过渡,这是最简单也是大家最容易想到的方法,此法在各种场合应用极多,应该熟练掌握。

#include.h>

int main(void)

{

int a=1,b=2,tmp;

tmp =a;

a=b;

b=tmp;

printf("%d %d",a,b);

return 0;

}

2.加减交换法

方法解释:顾名思义,使用数学中的加减法进行交换,先把a+b的结果暂时先保存在变量a中,然后通过这改变后的a和原始的b进行减法就可以得到交换后的b,缺点是a+b的结果可能越界。

#include.h>

int main(void)

{

int a=1,b=2;

a = a + b;

b = a - b;

a = a - b;

printf("%d %d",a,b);

return 0;

}

3.乘除交换法

方法解释:该方法与加减法类似,就是把加减替换为乘除,缺点是因为采用了乘法,因此比加法更容易越界,使用时应谨慎。

#include.h>

int main(void)

{

int a=1,b=2;

a = a * b;

b = a / b;

a = a / b;

printf("%d %d",a,b);

return 0;

}


1240




4.异或交换法

方法解释:巧妙使用异或运算来进行交换,这种方法主要利用了异或的特性a^b的值先保存到a,因为a^b^b=a所以可以顺利完成交换,这种方法是很完美的,不存在越界的问题。

#include.h>

int main(void)

{

int a=1,b=2;

a = a ^ b;

b = a ^ b;

a = a ^ b;

printf("%d %d",a,b);

return 0;

}

5.移位交换法

方法解释:这种方法不太常用,原理是把原来的int类型的a的值拆分成高16位和低16位,相当于多了16位的暂存空间可以周转,缺点是如果a或者b超过了16位,这种方法就会出错,此方法较复杂且容易出错,因此不建议大家使用。

#include.h>

int main(void)

{

int a=1,b=2;

a <<= 16;

a |= b;

b = a >> 16;

a = a & 0xffff;

printf("%d %d",a,b);

return 0;

}

反思总结:其实这五种方法从本质上分就三大类,一是临时变量,二是加减乘除运算,三是位运算。因为其各自优缺点的问题,我个人建议大家尽量使用临时变量法和异或交换法这两种,其中临时变量法在其他的地方也应用极多,大家重点掌握,就讲到这里吧,谢谢大家。

1240
相关文章
|
2天前
|
C语言
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
|
2天前
|
C语言
C语言prinf函数
C语言prinf函数
10 4
|
3天前
|
算法 C语言
【C语言】:atoi函数的使用及其模拟实现
【C语言】:atoi函数的使用及其模拟实现
11 5
|
1天前
|
编译器 程序员 Serverless
|
1天前
|
机器学习/深度学习 C语言
详细解读C语言math.h中常用函数
详细解读C语言math.h中常用函数
|
1天前
|
C语言
C语言刷题(函数)
C语言刷题(函数)
|
1天前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
2天前
|
C语言
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
5 1
|
2天前
|
搜索推荐 C语言
c语言qsort函数的模拟实现
c语言qsort函数的模拟实现
7 1
|
3天前
|
C语言
【C语言】:浅谈函数 fscanf/sscanf 和 fprintf/sprintf
【C语言】:浅谈函数 fscanf/sscanf 和 fprintf/sprintf
11 1