收藏 分享(赏)

变量交换.doc

上传人:hwpkd79526 文档编号:7913816 上传时间:2019-05-29 格式:DOC 页数:5 大小:26.50KB
下载 相关 举报
变量交换.doc_第1页
第1页 / 共5页
变量交换.doc_第2页
第2页 / 共5页
变量交换.doc_第3页
第3页 / 共5页
变量交换.doc_第4页
第4页 / 共5页
变量交换.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、变量交换主函数:main() int a,b;a=10; b=30;swap(printf(“%d %dn“,a,b);方法一:通过临时变量实现,也是最常见的方法:void swap(int a ,int b)int t;t=a;a=b;b=t; t是核心内容,作为临时变量进行交换。这种算法易于理解,但需要一个临时变量。方法二:算术运算,就是通过普通的+和-运算来实现:void swap(int a ,int b)a=b-a; /a=20;b=30b=b-a; /a=20;b=10a=b+a; /a=30;b=10证 明:把 a、b 看做数轴上的点,围绕两点间的距离来进行计算。第一句“a=b-

2、a”求出 ab两点的距离,并且将其保存在 a中;第二句“b=b-a”求出 a到 原点的距离(b 到原点的距离与 ab两点距离之差) ,并且将其保存在 b中;第三句“a=b+a”求出 b到原点的距离(a 到原点距离与 ab两点距离之和) ,并 且将其保存在 a中。完成交换。此算法与方法一相比,多了三个计算的过程,但是没有借助临时变量。方法三:指针地址操作, 因为对地址的操作实际上进行的是整数运算,比如:两个地址相减得到一个整数,表示两个变量在内存中的储存位置隔了多少个字节;地址和一个整数相加即“a+ 10”表示以 a为基地址的在 a后 10个 a类数据单元的地址,所以理论上可以通过和算术算法类似

3、的运算来完成地址的交换,从而达到交换变量的目的:void swap(int a ,int b)if(ab)a=(int*)(b-a);b=(int*)(b-(int(a)a=(int*)(b+(int(a)elseb=(int*)(a-b);a=(int*)(a-(int(b)b=(int*)(a+(int(b) 这 里采用位运算中的与运算“int(a) b=ab; a=ab;证明:a1=a0b0; b1=b0a1=b0(a0b0)=a0b0b0=a0; a2=a1b1=(a0b0)a0=b0a0a0=b0;此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 方法五:堆栈实现,很普通的栈操作就行,写法很多,这里通过 asm实现:void swap(int a ,int b)_asmpush a;push b;pop a;pop b;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报