一般的我们写C语言两个数交换的时候都会创建第三个变量,用来存储其中一个数的值,就比如下面的程序:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a;
int b;
printf("请输入a的值:");
scanf("%d", &a);
printf("请输入b的值:");
scanf("%d", &b);
int tmp = a;
a = b;
b = tmp;
printf("a=%d b=%d", a, b);
return 0;
}
那么我们还知道一些其他的方法吗,当然一般还是第一种创建第三个变量的好用,因为可读性高,便于维护,容易使人理解,但我们也不能忽视了一些其他的方法,比如只用两个变量我们是否能够完成两个数的交换呢,下面我将扩展几个关于只用两个变量交换两个数值大小的方法,小伙伴们自己也想一想能不能想出来!
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a;
int b;
printf("请输入a的值:");
scanf("%d", &a);
printf("请输入b的值:");
scanf("%d", &b);
a = a + b;
b = a - b;
a = a - b;
printf("a=%d b=%d", a, b);
return 0;
}
这种方法是用数学的的逻辑来完成的,相信大部分小伙伴们应该都能想到吧!但这种方法的缺陷也非常明显,如果要交换的两个数非常大,求和后的结果超过了整型的最大值的话,这种方法就不适用了。
#include <stdio.h>
int main()
{
int a;
int b;
printf("请输入a的值:");
scanf("%d", &a);
printf("请输入b的值:");
scanf("%d", &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);
return 0;
}
此种方法我想大家应该很难想到,这是用异或来实现的,如果大家学过计算机组成原理应该可以理解,若没有学习的话了解一下这种方法也行,其实呢,这种方法就是将我们要交换的两个数在计算机中写成补码的方式然后进行的异或运算。但是此种方法就不太便于人们理解。
综上所述,此篇大家可以了解了解,扩展一下思维!