C语言中要实现交换两个数的值,可以有很多种方法,具体如下所述。

不使用中间变量:

  1. // 异或, a^=b^=a^=b;
  2. a ^= b;
  3. b ^= a;
  4. a ^= b;
  5.  
  6. // 加减
  7. a = a + b;
  8. b = a - b;
  9. a = a - b;
  10.  
  11. // 乘除
  12. a = a * b;
  13. b = a / b;
  14. b = a/ b;

使用中间变量:

  1. // 需临时空间
  2. temp = a;
  3. a = b;
  4. b = temp;

正如你所想的那样,上面所示代码只是描述了交换两个数的值的思想,在你实际使用时,还有诸多地方需要注意。你可以选择宏来实现,亦或函数是实现,下面就一一为你道来。

宏实现:

  1. #define swap(a, b) \
  2. (a) ^= (b); \
  3. (b) ^= (a); \
  4. (a) ^= (b)

注:宏实现主要针对不使用中间变量就完成交换两个数的值,上述代码只描述了异或,其他以此类推。

函数实现:

  1. // 错误实现
  2. void swap(int a, int b)
  3. {
  4. int temp = ;
  5. temp = a;
  6. a = b;
  7. b = temp;
  8.  
  9. return;
  10. }
  11.  
  12. // 正确实现
  13. void swap(int *a, int *b)
  14. {
  15. int temp = ;
  16. temp = *a;
  17. *a = *b;
  18. *b = temp;
  19.  
  20. return;
  21. }

注:函数实现对使用中间变量和不使用中间变量都适用。

分析:

错误实现是由于a与b为形式参数,在函数内部实现了交换,但是对外部实参是没有影响的,真正的能够实现交换两个数值是正确实现所示那样,由于形参为两个指针,指针就是地址,在交换的时候是把两个地址中的值进行了交换,当函数运行结束,就实现两个数值的交换了。

c语言实现交换两个数的值的更多相关文章

  1. C语言交换两个数的值

    #include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp ...

  2. java中不创建使用第三方变量,交换两个数的值

    1.直接使用算术运算法交换 先把两个数的和赋值给其中一个,然后做减法.例如num1=num1+num2; 此时num2(交换之后)就等于num1减去num2:废话不多说,直接上代码 public cl ...

  3. c语言函数实现交换两个数的值

    代码: #include <stdio.h> void swap(int x,int y) { int temp; temp = x; x = y; y = temp; printf(&q ...

  4. php不用第三个变量,交换两个数的值

    //字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'< ...

  5. Qt_C++交换两个数

    在编程过程中,交换两个数是我用常用的 ,这里做下简单的搬运 bool Widget::swap(int a, int b) { int temp =a; a= b; b = temp; } 这种方式其 ...

  6. 实现pow(int x, int y),即x的y次方 ; 异或交换两个数;

    问题1:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h ...

  7. 20140806 交换两个数 extern “C”用法

    1.交换两个数 方法1.a+b有可能越界 a=a+b; b=a-b; a=a-b; 方法二.不会越界 a=a^b b=a^b; a=a^b;   2.extern "C"用法 ( ...

  8. 用一条UPDATE语句交换两列的值

    在SQL UPDATE语句中,"="右侧的值在整个UPDATE语句中都是一致的,所有更新同时发生!因此以下语句将在没有临时变量的情况下交换两列的值: UPDATE table SE ...

  9. 几种交换两个数函数(swap函数)的写法和解析

    #include <iostream> using namespace std; /*值传递,局部变量a和b的值确实在调用swap0时变化了,当结束时,他们绳命周期结束*/ void sw ...

随机推荐

  1. FFT(快速傅立叶算法 for java)

    package com.test.test2; public class FFT {     public static final int FFT_N_LOG = 10; // FFT_N_LOG ...

  2. JS多态

    面向对象语言有三大特征,前面介绍了封装和继承,那么JS作为一门面向对象语言,有多态么,又怎么实现多态呢? 我们先看看多态的概念: 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果. ...

  3. Cocos2d-x 2.0 自适应多种分辨率

    转自:http://dualface.github.io/blog/2012/08/17/cocos2d-x-2-dot-0-multi-resolution/ cocos2d-x 2.0 提供一个极 ...

  4. 基于Cloudera Manager5配置HIVE压缩

    [Author]: kwu 基于Cloudera Manager5配置HIVE压缩,配置HIVE的压缩.实际就是配置MapReduce的压缩,包含执行结果及中间结果的压缩. 1.基于HIVE命令行的配 ...

  5. SEAndroid安全机制对Binder IPC的保护分析

    在SEAndroid安全机制中,除了文件和属性,还有Binder IPC须要保护.Binder IPC是Android系统的灵魂,使用得相当广泛又频繁.比如,应用程序都是Binder IPC请求訪问系 ...

  6. Objective C assign&copy & retain区别

    什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Reference Counting). copy: 建立一个索引计数为1的对象,然后释放旧对象 re ...

  7. php连接oracle

    1.安装oracle客户端,不管是32位还是64位:当系统是32位的时候,要装32位的客户端,PL/SQL才能给连上数据库 2.php.ini中对应的oracle相关扩展打开.php_openssl. ...

  8. careercup-排序和查找 11.5

    11.5 有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置. 解法: 如果没有那些空字符串,就可以直接使用二分查找法.比较待查找字符串str和数组的中间元素,然后继续 ...

  9. android开发之wheel控件使用详解

    出门在外生不起病呀,随便两盒药60多块钱.好吧,不废话了,今天我们来看看wheel控件的使用,这是GitHub上的一个开源控件,用起来十分方便,我们可以用它做许多事情,比如做一个自定义的datepic ...

  10. 将分页功能从JSP页面中独立出来

    附带视频链接:http://www.tudou.com/programs/view/leaQ-YFl7W8/?bid=03&pid=2&resourceId=0_03_05_02