c语言编写英语字母交换,用C语言实现数值交换(示例代码)

我的第一个博客,我想先从最简单的开始吧。我是一个学生,今天给大家带来的是用C语言实现两个数的数值交换,如果大家有什么问题或建议,可以给我留言。我们一起讨论一起学习,谢谢!6cc9d90628d5bf837cdbd5af1a2abf35.gif

关于数值交换问题,我的解决方案有三种:

(一)设置第三个变量帮助进行数值交换。

思路:就像两个水杯中都盛满了液体,A杯中放的是红色液体,B杯中放的蓝色液体,你需要一个空杯子C,将A中的液体倒进C中,这样A杯子空了,才能将B杯子中的液体倒入A中,最后将C杯子中的液体倒入B杯子中。最后A杯子中的液体是蓝色(来自B杯子),B杯子中液体是红色(来自A)。#include

int main()

{

int a = 9, b = 14, c = 0;   //交换a和b的值,设置新的变量c,并初始化为0

c = a;                      // c = 9 将a的值先给了c

a = b;                      // a = 14 b的值给了a

b = c;                      // b = 9 c的值给了b

printf("%d%d",a,b);         // a = 14,b = 9

return 0;

}

以上是第一种方法完成了数值交换。

(二)通过加法或者乘法进行数值交换

之前我们设置了第三个变量,从这个方法开始,我们可以不再设置新的变量。

思路:我们以加法为例进行数值交换,假设我们交换a和b的值,a = 9, b = 14,首先我们将a和b的值加起来 a + b = 23,之后将23这个值赋给a(即a + b),所以现在a = 23,那么用23减去b的值,就是a的值,但我们需要将a的值给b,所以b = a - b(即b = (a + b) - b = a),将a的值给了b,最后用23减去b的新值,成为a的值(即a = 23 - b)。减去b的新值,成为a的值(即a = 23 - b)。

#includeint main(){int a = 9,b = 14;a = a + b;     // 等号左边a值为23,等号右边的a值为9,此语句结束后a的值为23b = a - b;     // 等号右边a值为23,b为原值14,23-14 =9,给了等号左边的b(原来的a值)a = a - b;     // 等号右边a值为23,b值为12,23-9=14,赋给等号左边的a(原来的b值)printf("%d %d",a,b);  // a = 14, b = 9return 0;}

以上是用加法进行数值交换,用乘法和加法的思路是一样的,只是将程序中“+”号改为“*”号,将“-”号改为“/”号。不过此方法使用时应注意,如果数值过大,可能会溢出。

(三)通过异或的方法进行数值交换

思路:首先让我们先了解一下异或

a = 9, b = 14

a的值为9,那么我们将它的二进制编码写出来是1001,b的值是14,它对应的二进制编码是1110,异或就是将两个数的二进制编码的对应的位进行对比,不相同的输出1,相同的输出0。

a = 9    1 0 0 1

b = 14   1 1 1 0

对比结果为   0 1 1 1

让我们记住 0 1 1 1这个数字。

之后我们用a的值9对应的二进制码 1 0 0 1去跟0 1 1 1进行异或:

a = 9    1 0 0 1

0 1 1 1

对比结果为   1 1 1 0 (即就是b的值)

同理我们用b的值14对应的二进制码 1 1 1 0去跟0 1 1 1进行异或:

b = 14   1 1 1 0

0 1 1 1

对比结果为   1 0 0 1 (即就是a的值)

相信我们看出来了规律,就是a和b的值的二进制码异或出来的那个数字,a和那个数字异或得到b,b和那个数字异或得到a。#include

int main()

{

int a = 9,b = 14;   // a 1001(9)  b 1110(14)

a = a^b;            // a = 1001 ^ 1110 = 0111

b = a^b;            // b = 0111 ^ 1110 = 1001(9)

a = a^b;            // a = 0111 ^ 1001 = 1110(14)

printf("%d %d",a,b);

return 0;

}

以上是通过异或的方法进行数值交换,此方法解决了第二个方法可能由于数字过大而溢出的问题,不过此方法的效率比较低。

以上是进行数值交换的三种方法,如果大家有什么其他好的方法,我们可以一起讨论学习,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值