黑马程序员技术交流社区

标题: 交换变量的N种方法 [打印本页]

作者: huahaoL    时间: 2015-8-29 23:41
标题: 交换变量的N种方法
方法一:传统  使用第三个变量进行交换
#include <stdio.h>
int main(){
    int a=0,b=0;
    printf("a=%d,b=%d\n",a,b);
    printf("正在交换ab两个数的值,请等待-----\n");
    int temp;
    temp=a;
    a=b;
    b=temp;
    printf("交换成功:a=%d,b=%d\n nice!!\n",a,b);

    return 0;
}

方法二 只用两个变量 (减法)

#include <stdio.h>
int main(){
    int a=8,b=10;
    printf("a=%d,b=%d\n",a,b);
    a=a+b;
    b=a-b;
    a=a-b;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

总结:凡是互为逆运算的都可以实现


比如:

#include <stdio.h>
int main(){
    int a=8,b=10;
    printf("a=%d,b=%d\n",a,b);
    a = a * b;
    b = a / b;
    a = a / b;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

以下这两个方法:
按位或,按位异或,这个有点问题,有时候不准,(如果两个变量是8和10 ,,交换后两变量的值不对,但是若两个变量的值是15和18就可以)还不知道问题在哪,有待思考

#include <stdio.h>
int main(){
    int a=8,b=10;
    printf("a=%d,b=%d\n",a,b);
    a = a | b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}


#include <stdio.h>
int main(){
    int a=8,b=10;
    printf("a=%d,b=%d\n",a,b);
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    printf("a=%d,b=%d\n",a,b);
    return 0;
}



作者: jx836202365    时间: 2015-8-29 23:46
what are you 说啥嘞
作者: pyy061    时间: 2015-8-29 23:51
本帖最后由 pyy061 于 2015-8-29 23:53 编辑

还可以用指针来交换
#include <stdio.h>
void swap(int *p1,int *p2){
    int t;
    t=*p1;
    *p1=*p2;
    *p2=t;
}
int main(){
    int a,b;
    int *p3,*p4;
    printf("请输入a的值:");
    scanf("%d",&a);
    printf("请输入b的值:");
    scanf("%d",&b);
    p3=&a,p4=&b;
    swap(p3,p4);
    printf("a和b交换的结果是:%d %d\n",a,b);
    return 0;
}

作者: huahaoL    时间: 2015-8-29 23:53
pyy061 发表于 2015-8-29 23:51
还可以用指针来交换
#include
void swap(int *p1,int *p2){

可以的,果然名不虚传
作者: pyy061    时间: 2015-8-29 23:56
huahaoL 发表于 2015-8-29 23:53
可以的,果然名不虚传

啥名不虚传....
作者: huahaoL    时间: 2015-8-29 23:59
pyy061 发表于 2015-8-29 23:56
啥名不虚传....

黑马学生本领强
作者: huahaoL    时间: 2015-8-30 00:00
pyy061 发表于 2015-8-29 23:56
啥名不虚传....

学编程哪家强?中国北京找(     )!!!
作者: pyy061    时间: 2015-8-30 00:03
huahaoL 发表于 2015-8-30 00:00
学编程哪家强?中国北京找(     )!!!

嘘~~~~低调,待会儿别人说你来打广告的
作者: pyy061    时间: 2015-8-30 00:05
huahaoL 发表于 2015-8-30 00:00
学编程哪家强?中国北京找(     )!!!

嘘~~~~低调,待会儿别人说你来打广告的
作者: hoohoo    时间: 2015-8-30 00:22
很好的方法!
作者: veggiegfei    时间: 2015-8-30 07:08
指针交换还是第一次看到
作者: ai77033024    时间: 2015-8-30 09:12
第二种方法打开了新世界啊{:2_31:}
作者: 15095185209    时间: 2015-8-30 10:09
我觉得用乘除法不太严谨,如果其中一个变量恰好为0呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2