两个数值互换的几种方式

2023-11-12

一.建立临时变量

       1.普通的方法:

                 思路简介:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。

                 缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有交换。

                 具体方法:

                                    int swap(int _x,int _y)

                                   {

                                       int  z=_x;                                                            //通过建立z这个临时变量来交换_x,_y
                                       _x=_y;
                                       _y=z;
                                      printf("%d %d",_x,_y);
                                      return 0;

                                  }


        2.指针的方法:

                   思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。

                   具体方法:

                                   int swap(int *_x,int *_y)                                     //主函数中把两个数的地址传过来
                                  {
                                       int  tmp = *_x;                                                  //定义中间变量 然后交换两个数
                                       *_x = *_y;
                                      *_y = tmp;
                                      printf("%d %d",*_x,*_y);
                                   }



二.不建立临时变量

        1.加减交换:

                   思路简介:取两个数的和,然后通过减去另外一个数来得到这个数。

                   方法缺陷:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,函数调用结束后原本的值并没有真正的交换。

                   具体方法:

                                 int  swap(int _a,int _b)
                                {
                                     printf("%d %d",_a+_b-_a,_a+_b-_b);
                                     return 0;
                               }


          2.异或方法:

                      思路简介:通过二进制异或方法交换,如a=3二进制为11,b=2的二进制为10,按位异或(两个值相同为0,否则为1)

                                          a=a^b,                异或后a=11^10=01

                                          b=a^b,                异或后b=01^10=11(此时b为开始a的值)

                                          a=a^b                 异或后a=01^11=10(此时a为开始b的值)

                                          这样子a与b就实现了交换

                      具体方法:

                             int Swap3(int a, int b)
                            {
                                a = a^b;
                                b = a^b;
                                a = a^b;
                                printf("%d %d", a, b);
                                return 0;
                             }

       本文出处http://blog.csdn.net/sayhello_world/article/details/51836288



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个数值互换的几种方式 的相关文章

  • 函数、对象在内存中存在形式

    一 php底层内存分区 php将内存分为5个区 堆区一般存对象 栈区一般存基本数据类型 普通变量 和函数 全局区存全局变量和静态变量 常量区存常量 代码区存代码 二 函数调用时栈区变化 这是一个简单的递归函数示例 当主函数调用counts函
  • 函数栈帧的创建和销毁

    全文目录 前言 寄存器 main函数的调用 调用main函数的函数 main函数的栈帧如何开辟的 push 保存调用方的 ebp move 维护新开栈帧的栈底 sub 维护新开栈帧的栈顶 三连 push 添加栈帧的信息的变量 lea 存放栈
  • CSAPP第三版运行时打桩Segmentation fault

    CSAPP第三版7 13 3节提到了运行时打桩机制 它可以在运行时将程序中对共享库函数的调用进行截获 替换为执行自己的代码 这个机制基于动态链接器的LD PRELOAD环境变量 如果LD PRELOAD环境变量被设置为一个共享路径名的列表
  • OpenGL学习——(3)库函数

    1 定义视口 void ChangeSize int w int h glViewport 0 0 w h 代表窗口中视口的左下角坐标是 0 0 通常都是0 0 w和h用像素表示 在窗口改变大小时接收新的宽和高 glViewport主要完成
  • C++学习--cin不支持录入空格

    https blog csdn net EXLsunshine article details 28440629 举个栗子 当使用cin功能然后键盘输入 aaa bbb ccc 时 cin的那个字符串只会保留 aaa
  • JS 数组求和的5种方法(解题报告)

    转自牛客网 题目 题目描述 计算给定数组 arr 中所有元素的总和 输入描述 数组中的元素均为 Number 类型 输入例子 sum 1 2 3 4 输出例子 10 不考虑算法复杂度 用递归做 1 2 3 4 5 6
  • 小程序中的ES6 Class

    movie detail js原始写法 var app getApp 引用 var util require utils utils js 引用数据请求的公共函数 Page 初始化数据 data movie es6方式 module cla
  • Python:解一元二次方程

    今天看到廖雪峰老师的python3 看到函数后面的练习 如何解一元二次方程 感觉蛮简单的就打开text sblime去试试 糟糕 竟然忘了怎么求一元二次方程 查资料 终于查好了 开始动手 1 导入math模块 2 定义函数def n d r
  • 与MySQL的零距离接触(三.函数、存储过程、引擎、图形化管理工具)

    金山竹影几千秋 云索高飞水自流 万里长江飘玉带 一轮银月滚金球 远自湖北三千里 近到江南十六州 美景一时观不透 天缘有分画中游 祝大家小年快乐 2018福气生财 一 运算符和函数 准备 连接数据库 mysql uroot proot P33
  • C++中函数返回引用

    1 返回引用和不返回引用的区别 下面两个代码是在类中的成员函数 而m data 变量为类的私有成员变量 int at return m data int at return m data 上面两个函数 第一个返回值是int的引用int 第二
  • Lua封装延时执行函数

    延时执行函数 function delayTimeGuideEvent target func times 延迟时间执行函数 local delaytime 1 if times then delaytime times end getRo
  • RxJava 事件流之聚合

    Aggregation 前面介绍了如何过滤掉不需要的数据 如何根据各种条件停止发射数据 如何检查数据是否符合某个条件 这些操作对数据流来说都是非常有意义的 本节介绍如何根据数据流中的数据来生成新的有意义的数据 本节的操作函数会使用源 Obs
  • 算法和数据结构项目练习5-哈希链表

    Hash Chaining Table 项目介绍 代码实现 项目介绍 本项目实现一个简单的哈希表 txt文件包含一个整数值序列 读取它们并使用链接构造一个哈希表 程序应该依次读取每个整数 并使用mod 100作为哈希函数计算其哈希值 因此
  • 分治法 ( Divide And Conquer ) 详解

    文章目录 引言 分治法的范式 递归式 求解递归式的三种方法 代入法 递归树法 主方法 引言 在这篇 blog 中 我首先会介绍一下分治法的范式 接着给出它的递归式通式 最后我会介绍三种方法 代入法 递归树 和主方法 求解递归式 分治法的范式
  • C语言中putchar()函数的使用

    今天教C语言中的输入输出语句 对函数putchar 函数有些好奇 难道就只能输出char型的数据么 带着这样的疑问 在环境上进行了验证 验证结果还蛮有意思 共享一下 当我们定义一个变量a 并给a赋予0 255的值 很显然没有问题 如代码 i
  • 最小二乘法–高斯牛顿迭代法

    最小二乘法 高斯牛顿迭代法 本文将详解最小二乘法的非线性拟合 高斯牛顿迭代法 1 原理 高斯 牛顿迭代法的基本思想是使用泰勒级数展开式去近似地代替非线性回归模型 然后通过多次迭代 多次修正回归系数 使回归系数不断逼近非线性回归模型的最佳回归
  • 【python】numpy.percentile()函数

    numpy percentile 1 函数 百分位数是统计中使用的度量 表示小于这个值的观察值的百分比 函数numpy percentile 接受以下参数 np percentile a q axis None out None overw
  • python 3.2 错误 ‘generator’ object has no attribute ‘next’

    下面是一段简单的示例 定义Generator函数 def func n for i in range n yield i 在for循环中输出 for i in func 3 print i 使用next 输出 r func 4 print
  • Golang在ARM/Linux平台上函数参数的传递

    一 前言 作为一名初级的嵌入式软件开发从业者 工作中大部分项目以C语言实现 使用C语言来编写代码 通常我们可以预测到编译生成的汇编 机器编码的大致情况 在不同的芯片架构上 有其相应的ABI标准 而近年来逐渐流行起来的Go语言编程 虽然同样语
  • Python常用函数笔记汇总1

    清理 重塑 转换 numpy where condition x y 1 这里x y是可选参数 condition是条件 这三个输入参数都是array like的形式 而且三者的维度相同 2 当conditon的某个位置的为true时 输出

随机推荐

  • [游戏开发]Unity Profiler真机调试

    网上教程有很多 我这先记录遇到的问题 问题 adb搜索设备不到设备 手机要开启USB调试 不然会出现搜索空列表的情况 下面是列表空与不空的对比 问题 adb检测到了设备 但显示unauthorized 例如上图 1 找到你的电脑用户文件下的
  • 你该了解的自动化测试工具:Selenium控制浏览器的常用方法!

    Selenium怎么来的 Selenium这个词 是化学元素硒 Se 的意思 在软件测试领域 它是绝对的自动化测试开源项目的标杆 取这个名字也是有讲究的 在当时乃至如今的软件测试领域 QTP UFT 占有率非常高 Quick Test Pr
  • 【unity】error CS0246: The type or namespace name ‘xxx‘ could not be found

    可能性一 VScode中各项目的目标框架不一致 通过菜单栏 项目 属性 应用程序 目标框架 可以检查各目标框架是否一致 是否有效 并没有 补充 如果无法打开这个窗口 可能是由于vs将访问项目属性默认设置为了false 可以通过菜单栏的 工具
  • 【快速实现List转Map,stream去重、过滤、筛选、拼接方法的使用】

    一 List转List List对象转List单字段 List
  • 基于SSM的遂川特产销售管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 遂川特产销售系统当然也不能排除在外 遂川特产销售系统是以实际运用为开发背景 运用软件工程开发方法 采用SSM技术构建的一个
  • QT界面美化与添加多个界面

    一 在QT界面中添加图片 首先在工程中添加源文件 右键选择class1 选择Add new 如下图 添加完成之后会出现源文件夹目录 然后右键选择 qrc文件 然后选择Open in Edit 5 再点击鼠标位置 创建目录 只留下 表示根目录
  • VS Code 源码分析 - 多语言实现

    NO 1 前言 传统前端 App 多语言最简单的实现可以由一套响应式数据流管理系统来托管多语言文案 切换语言时通过数据流的变化使得界面根据文案重新渲染 但由于 VS Code 架构的复杂性 需要有一套能兼容 Electron 渲染窗口 Ch
  • Jedis介绍及配置(Java操作Redis)

    Jedis介绍及配置 Java操作Redis 一 Jedis是什么 jedis就是基于java语言的redis客户端 集成了redis的命令操作 提供了连接池管理 redis cli是redis官方提供的客户端 可以看作一个shell程序
  • [ctfshow]web入门——命令执行(web54-web71)

    文章目录 system过滤 web54 web55 web56 web57 disabled function绕过 web58 web59 web60 web61 web62 web63 web64 web65 wbe66 web67 we
  • SpringMVC的数据响应(页面跳转、回写数据)

    SpringMVC的数据响应 一 SpringMVC的数据响应 01 SpringMVC的数据响应 数据响应方式 02 SpringMVC的数据响应 页面跳转 返回字符串形式 03 SpringMVC的数据响应 页面跳转 返回ModelAn
  • 找不到MSVCP140_1.dll、VCRUNTIME140_1.dll,打不开designer解决方法

    在使用designer的时候报了两个缺少运行库的错误 查了很多方法 最后看到需要下载这两个库 在这里下载 https cn dll files com vcruntime140 1 dll html 我是win10系统 下载完之后把它俩丢进
  • 快速搭建测ceph

    一 cephadm介绍 Cephadm是一个由Ceph社区维护的工具 它用于在Ceph集群中管理和部署Ceph服务 它是一个基于容器化的工具 使用了容器技术来部署Ceph集群的不同组件 使用Cephadm 管理员可以通过简单的命令行界面在整
  • Spring boot 拦截器的编写

    编写拦截器需要在Controller层 编写两个类 一个类类名 Interceptor1 类名没有特定要求 另一个类名 InterceptorConfig 类名没有特定要求 InterceptorConfig类实现WebMvcConfigu
  • python-OpenCV-人脸、眼睛,微笑检测

    文章目录 前言 一 人脸检测是什么 二 案例 总结 前言 随着人工智能的不断发展 OpenCV这门技术也越来越重要 很多人都开启了学习OpenCV 本文就介绍了OpenCV的基础内容 提示 以下是本篇文章正文内容 下面案例可供参考 案例 F
  • python中如何导入math模块_Python中的math模块如何进行数学运算?

    在数学之中 除了加减乘除四则运算之外 还有其它跟多的运算 比如乘方 开方 对数运算等等 其实我们的计算机如同我们人类一样也具备了基本的运算常识 知道了基本的运算规则与方法 但是计算机如何高速 精确的运算呢 在python中 基于基本的运算规
  • prometheus安装以及错误汇总

    首先 最简洁的安装就是通过 编译好的包 开箱即用 下面是链接 https prometheus io download d dhttps prometheus io download 但是为了后续更好的使用 建议下载源码 然后编译 编译过程
  • Scala集合和遍历

    目录 1 列表 1 1 定义 1 1 1 示例一 1 1 2 示例二 1 1 3 示例三 2 可变列表 2 1 定义 2 1 1 示例一 2 1 2 示例二 2 2 可变列表操作 2 2 1 示例 3 列表常用操作 3 1 判断列表是否为空
  • 毕业季:我和未来有个对话

    2013年迎来新中国建国以来人数最多的大学毕业生 699万 史上最难就业季 成为一个全社会关注的热点话题 由中央电视台综合频道与唯众传媒联合打造的关注青年人成长的首档青年电视公开课节目 开讲啦 邀请四位跨界嘉宾来开讲 并且和青年人一起和未来
  • jvm虚拟机_JVM虚拟机五连问,能过并不是只靠运气

    对于Java程序员来说 在众多Java知识点当中JVM是很重要的一块 每个Java程序都离不开Java虚拟机 Java程序的运行依靠具体的Java虚拟机实例 在Java虚拟机规范中 分别用子系统 内存区 数据类型以及指令这几个术语来描述的
  • 两个数值互换的几种方式

    一 建立临时变量 1 普通的方法 思路简介 建立一个临时变量 通过temp a a b b temp来实现交换 缺点 这只是一种假交换 由于这只是在函数内部临时变量间的交换 所以当函数退出 函数栈帧被释放 原本的值并没有交换 具体方法 in