《c语言程序设计》--4种“交换算法”介绍。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第 1 页 共 2 页

算法 交换

在很多问题的解决中都需要使用到交换这个方法,比如排序时,需要将两个变量的值互换等等。交换是指将两个变量的值进行互换。假设有整型变量a 和b ,分别存储整数2和6,如图01-01所示。要将变量a 和b 交换就意味着交换变量a 和变量b 中的值,使得变量a 存放变量b 交换前的值,而变量b 存放变量a 交换前的值,如图01-02所示。

图01-01 图01-02 语句“a=b; b=a;”是不能实现变量a 、b 交换的,只可能使得a 、b 最终都存放变量b 的值(大家可以编程试一试)。其原因是赋值操作具有覆盖性,执行a=b ;语句后,a 原来的值已经被覆盖了,此时a 最新的值就是b 的值,再实现b=a ;时,b 的值就是a 最新的值,也就是b 的值。

一、 中间变量法

要实现交换,最基本、最通用的方法是中间变量法。该方法的基本思路是定义第三个变量t ,用于暂时保存两个变量中的某一个变量的原值。具体实现代码如下:

t = a; a = b; b = t;

交换过程请大家自己仿照图01-01自己给出。注意每一个变量画一个方框,

每执行一步后,改变被赋值变量的值。

【注意事项】

此处,中间变量t 可以暂存变量

a 的值也可以暂存变量

b 的值,不过一旦对变量t 的赋值语句确定后,后面两个赋值语句的顺序不是任意的。赋值顺序的记忆可总结为“t 中暂存的变量先被赋值”。即t = a; a = b; b = t;或者t = b; b = a; a = t;。

二、算术加减法

对于数值型数据还可以采用算术加减法来实现交换,其基本思想是以a获得b的值,以b获得a的值作为目标,进行加减运算,从而完成交换。具体实现可用如下代码:

a = a+b;

b = a-b; a = a-b;

三、思考与练习

1. 请编写程序验证“交换”算法。

2. 请编写程序验证“交换”算法,要求“交换”算法使用函数来实现。

3. 请大家思考一下,使用算术加减法实现的“交换”算法有什么限制?

4. 请大家思考一下,我们能不能使用乘除法来实现“交换”算法?如果可

以,那么具体代码如何来编写呢?使用乘除法来实现“交换”算法,有

什么限制呢?

5. 拓展

两个变量(一般为整型或字符型)的交换还可以使用“异或”运算符。

具体步骤如下:

int a,b;

a=a^b; b=a^b; a=a^b;

相关文档
最新文档