A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huahaoL 中级黑马   /  2015-8-29 23:41  /  973 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法一:传统  使用第三个变量进行交换
#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;
}


评分

参与人数 1黑马币 +1 收起 理由
jx836202365 + 1 淡定

查看全部评分

12 个回复

倒序浏览
what are you 说啥嘞
回复 使用道具 举报
本帖最后由 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;
}
回复 使用道具 举报 1 0
pyy061 发表于 2015-8-29 23:51
还可以用指针来交换
#include
void swap(int *p1,int *p2){

可以的,果然名不虚传
回复 使用道具 举报
huahaoL 发表于 2015-8-29 23:53
可以的,果然名不虚传

啥名不虚传....
回复 使用道具 举报

黑马学生本领强
回复 使用道具 举报

学编程哪家强?中国北京找(     )!!!
回复 使用道具 举报
pyy061 中级黑马 2015-8-30 00:03:13
8#
huahaoL 发表于 2015-8-30 00:00
学编程哪家强?中国北京找(     )!!!

嘘~~~~低调,待会儿别人说你来打广告的
回复 使用道具 举报
pyy061 中级黑马 2015-8-30 00:05:35
9#
huahaoL 发表于 2015-8-30 00:00
学编程哪家强?中国北京找(     )!!!

嘘~~~~低调,待会儿别人说你来打广告的
回复 使用道具 举报
很好的方法!
回复 使用道具 举报
指针交换还是第一次看到
回复 使用道具 举报
第二种方法打开了新世界啊{:2_31:}
回复 使用道具 举报
我觉得用乘除法不太严谨,如果其中一个变量恰好为0呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马