交换两个数的三种方法以及应用

交换两个数的三种方法以及应用
当听到交换两个数时,大多数人的第一想法建立一个新的变量,然后将两个数进行交换。代码如下所示:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a, b, temp;
printf(“请输入两个数:”);
scanf("%d %d", &a, &b);
printf(“交换前的两个数为a=%d,b=%d\n”, a, b);
temp = a;
a = b;
b = temp;
printf(“交换后的两个数为a=%d,b=%d\n”, a, b);
system(“pause”);
return 0;
}
建立第三个变量就要重新开辟一块内存存储该变量,如果不建立第三个变量,怎么交换两个数呢?我们举个例子,假如两个变量分别是a=10;b=20。那么a+b=30,将他们的和存储在a中(也可以存储在b中,这里以a为例),则a=a+b=30;用他们的和a减去b的值,即a-b=30-20=10,这是之前a中的值,将它赋值给b,即b=a-b=10,这样b就交换了,然后用他们的和减去a的值就是b的值,现在a的值已经赋值给b了,因此a=a-b,这样就实现了两个数的交换。实现代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, temp;
printf(“请输入两个数:”);
scanf("%d %d", &a, &b);
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);
system(“pause”);
return 0;
}
不建立变量交换两个数,除了上述方法之外还有一种方法,就是异或,实现代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, temp;
printf(“请输入两个数:”);
scanf("%d %d", &a, &b);
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);
system(“pause”);
return 0;
}
交换两个数的方法有三种,这三种之间有什么优缺点呢?
第一种方法需要创建第三个变量,多开辟了一块空间;第二种方法可能会造成溢出的问题;第三种方法目前还没有发现什么问题。
下面举两个关于交换两个数的应用:
(1)将三个数按从大到小输出。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a, b, c;
int temp;
printf(“请输入三个数:”);
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
temp = a;
a = b;
b = temp;
}
if (a < c)
{
temp = a;
a = c;
c = temp;
}
if (b < c)
{
temp = b;
b = c;
c = temp;
}
printf(“从小到大排序后的三个数为:%d %d %d\n”, a, b, c);
system(“pause”);
return 0;
}
这里使用了创建第三个变量交换两个数,使用另外两种方法是完全可以的。
(2)交换两个数组中的内容(数组大小相同)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10],b[10];
int temp;
int i;
printf(“请输入A数组中的10个数:”);
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
printf(“请输入B数组中的10个数:”);
for (i = 0; i < 10; i++)
{
scanf("%d", &b[i]);
}
for (i = 0; i < 10; i++)
{
temp = arr[i];
arr[i] = b[i];
b[i] = temp;
}
printf(“请输出交换后A数组中的10个数:”);
for (i = 0; i < 10; i++)
{
printf("%d “, arr[i]);
}
printf(”\n");
printf(“请输出交换后B数组中的10个数:”);
for (i = 0; i < 10; i++)
{
printf("%d “, b[i]);
}
printf(”\n");
system(“pause”);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值