在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢?

假设有两个变量num1和num2;下面通过两种方法进行分析。

方法一:利用加减法。具体算法分析如下:

由于                   num1+num2-num1=num2;

num1+num2-num2=num1;

则将num1+num2赋给num1;num1-num2赋给num2;num1-num2赋给num1,这样就可以实现num1和num2两个数内容的交换。通过相同的思想,我们也可以将加减运算改为乘除运算,但此法存在缺陷。对于不能整除的两个数,设定的精度不同结果的误差就不同。

代码如下:#include

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

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;

}

小知识:如何动态求取数组大小?

例如:对于数组不知道其大小,可通过sizeof求其长度。sizeof运算符可以动态计算类型大小,

对于数组a[],它的数组大小可用sizeof(a)/sizeof(a[0]),求取对于整型数组sizeof(a[0])=4。

C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容相关推荐

  1. 不允许创建临时变量,交换两个数的内容

    不允许创建临时变量,交换两个数的内容 #include <stdio.h> int main(int argc, char *argv[]) { int a = 10, b = 100; ...

  2. C++实现1.交换两个整形变量的内容.2.不创建临时变量的条件下,交换两个数的内容.3.求是个整数中的最大值.4.将三个数按从大到小输出.5.求两个数的最大公约数.

    / //给定两个整型变量的值,并交换他们的值 int main(){ int a = 10; int b = 20; int temp = a; //创建一个临时变量,来做交换值的中间媒介 a = b ...

  3. 不创建临时变量交换两个数,这才是高手

    不创建临时变量交换两个数?这才是高手 1.基本介绍 1.代码编写 总结 1.基本介绍 交换两个数,想必大家都很熟悉,也很容易写出来就可以实现,即创建一个临时变量,就可以完成两个数的交换,然后更牛逼的大 ...

  4. C语言异或交换两个数的原理解析-大厂面试题:不使用第三变量交换两个数的值

    常用操作交换两个数的值 常用的交换两个数值的方法一般是采用第三个变量,这种方法简单易懂,用代码举例 int main() {//交换两个整形变量int a = 3;int b = 5;int c = ...

  5. 【java】java 如何不使用第三个变量来交换两个数的值

    文章目录 1.概述 2.方案 2.1 算术运算 2.2 位运算 1.概述 今天是一个悲伤的一天,我的悲伤逆流成河.非常非常的悲伤.主要是有这个一个面试题.如何不使用第三个变量来交换两个数的值. 考官说 ...

  6. C语言拆分一个三位数。以及交换两个数(常规法复习加指针法学习)

    给一个三位数,要求拆分出百位十位,个位.然后输出. 以前我们在水仙花那次求水仙花数 提到过经典的取法 我们再次展示一下: #include<stdio.h> int main() {int ...

  7. C语言实现交换两个数

    方法一:最普通方法--建立临时变量 思路分析:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换. 缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈 ...

  8. c语言用指针两个字母交换,c语言指针基础之用指针交换两个数(代码实例)

    用指针交换两个数: void swap(int *p,int *q) { int temp; temp = *p; *p = *q; *q = temp; } int main() { int a = ...

  9. 用按位异或运算符交换两个数,不引入第三个变量

    2019独角兽企业重金招聘Python工程师标准>>> 用按位异或运算符交换两个数,不引入第三个变量 void swap(int &a , int &b) { a = ...

最新文章

  1. java中使用MD5进行计算摘要
  2. SQL validation failed.Column ‘content‘ not found in any table
  3. php 断点续传 暂停,PHP 断点续传实例详解
  4. java 字符串是否包含字符串_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
  5. SpringMVC 文件上传及下载
  6. Oracle11g安装完成后给用户解锁
  7. cher怎么翻译中文_中文翻译法语收费标准是怎么定的
  8. hdu 4928 Series 2 (优化+模拟)
  9. android app自动锁屏,安卓手机锁屏后程序自动关闭,怎么设置手机app允许锁屏后台运行...
  10. HorizontalScrollView 仿真 tabLayout
  11. 冰点还原安装了找不到图标,或许该这样!
  12. 冬瓜哥对时间和空间的理解方式—时空参悟(上)
  13. .frm mysql_mysqlfrm使用
  14. 余压监控系统保证火灾发生时消防疏散通道的通畅,为大型高层建筑的安全运行和人民生命财产安全保驾护航
  15. 如何在网站里插入视频
  16. 变中求生 ——频繁变化的团队如何打造团队文化
  17. 使用 canvas 画矩形,实现橡皮擦功能
  18. python处理adb截屏_《自拍教程38》Python_adb一键截屏
  19. XaaC一切皆计算机 和 XaaS一切皆服务
  20. Material UI 带复选框表格获取选中值(索引)

热门文章

  1. 基于ECC算法的秘钥协商
  2. Android设计模式之——观察者模式
  3. 自信不疑的人不会做的15件事
  4. 如何保证代码的高质量?
  5. Math对象方法总结(向上取整、向下取整、四舍五入、取随机数,取最大值、取最小值)
  6. Docker中RocketMQ的安装与使用
  7. springbootajaxhas been blocked by CORS policy: No ‘Access-Control-Allow-Origin
  8. 【Quartz】插件的使用
  9. 注解驱动的 Spring cache 缓存介绍
  10. 学习 shell脚本之前的基础知识