交换两个数a和b的值的三种方法和评价(C语言代码)

本文介绍了交换两个整数变量的三种方法:一是使用临时变量,二是通过加法运算,三是利用异或操作。在不明确输入数据范围时,加法运算存在溢出风险,而异或操作则提供了无额外变量的解决方案。在程序设计中,选择哪种方法取决于具体需求和场景。
摘要由CSDN通过智能技术生成

题目:交换变量

输入两个整数a和B,交换二者的值,然后输出。

样例输入:

824 16

样例输出:

16 824

方法一:三变量法

引入一个中间变量tmp作为交换时的临时存储,相信这也是大多数人的第一想法,代码如下:

#include<stdio.h>

int main() {
    int a, b, tmp;
    scanf("%d %d", &a. &b);
    tmp = a;
    a = b;
    b = tmp;
    printf("%d %d\n", a, b);
    return 0;
}

这种方法易于大多数人理解和接受。

方法二:加法计算交换

这种方法不借助别的变量,首先将a的值赋为a + b,然后b的值通过a - b即可交换为原来a的值,a的值再通过a - b即可交换为原来b的值,便实现了题目要求交换了两个变量的值,代码如下:

#include<stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a. &b);
    a = a + b;
    b = a - b;
    a = a - b;
    printf("%d %d\n", a, b);
    return 0;
}

这种方法表面上看是要比方法一减少了引入临时变量所新开辟的空间,是对方法一的优化,实则存在问题,因为涉及到了加法操作,当我们不知道输入a和b的范围时,执行a + b的操作可能会导致超出int存储的范围,从而计算结果出错,交换值失败,所以在不明确输入数据范围时,方法二并不优于方法一。

方法三:异或操作

异或操作实现交换两个数的值其实本质与方法二相同,只不过方法二依靠的是:

tmp = a + b;
a = tmp - b;
b = tmp - a;

异或操作的本质依靠的是:

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

但是方法二和方法三都没有引入第三个变量,而是通过a和b之间运算巧妙的将tmp值保存在其中一个变量中,从而交换成功,异或操作交换两个数值的代码如下:

#include<stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a. &b);
    a ^= b;
    b ^= a;
    a ^= b;
    printf("%d %d\n", a, b);
    return 0;
}

总结

当不引入更多变量时,推荐使用方法三;方法一虽然引用了第三变量,但是易于理解,此外如果是做程序竞赛的话,最简单实现本题的方法肯定是直接改一下a和b输出时的位置,但是这样本质上并没有做到交互了a和b的值,最多称之为控制输出吧,代码如下:

#include<stdio.h>

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d %d\n", b, a);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值