黑马程序员技术交流社区
标题: 交换变量的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:56
啥名不虚传....
作者: huahaoL 时间: 2015-8-29 23:59
黑马学生本领强
作者: huahaoL 时间: 2015-8-30 00:00
学编程哪家强?中国北京找( )!!!
作者: pyy061 时间: 2015-8-30 00:03
嘘~~~~低调,待会儿别人说你来打广告的
作者: pyy061 时间: 2015-8-30 00:05
嘘~~~~低调,待会儿别人说你来打广告的
作者: 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 |