交换两个数的不同方法
方法一:
利用中间变量,进行两个数的交换。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 3;
int tmp = 0;
printf("a=%d b=%d\n", a, b);
tmp = a;
a = b;
b = tmp;
printf("a=%d b=%d\n", a, b);
return 0;
}
这种方法是我们最容易想出来的方法。
方法二:
不用中间变量,只利用两个变量,也可以实现两个数的交换,用加减法实现。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 2;
int b = 3;
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;
}
但是这种方法也存在一种缺陷,是:在上述的代码中,我们知道int类型的变量存在最大上限,如果用加法使变量超过了这个最大上限,会使这个程序没办法运行,这是这个程序的一个问题所在,
这两种方法相比而言,第一种方法更加简单。
方法三:
在我们学习函数时,我们也可以利用函数进行求解。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int swap(int x, int y)
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
return x, y;
}
int main()
{
int a = 2;
int b = 3;
int ret = 0;
printf("a=%d b=%d\n", a, b);
ret = swap(a, b);
printf("a=%d b=%d\n", a, b);
return 0;
}
我们可以看到,似乎从逻辑上并没有什么错误,但是运行出来,如下图:
但是并不是我们料想的那样,并没有交换两个数。
因为,在主函数中的是实际参数,而调用的函数中是形式参数,只在调用的函数中发挥作用,并没用对实际参数发挥作用,如果我要用函数实现这个功能,我们要利用指针,因为指针对应的是地址,实际参数的地址是不会发生变化的。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int swap(int* x, int* y) \\要利用指针
{
int tmp = 0;
tmp = *x;
*x = *y;
*y = tmp;
return *x, *y;
}
int main()
{
int a = 2;
int b = 3;
int ret = 0;
printf("a=%d b=%d\n", a, b);
ret = swap(&a, &b);
printf("a=%d b=%d\n", a, b);
return 0;
}
输出的结果,如下:
综上所述,有这些方法交换两个数!
转载:https://blog.csdn.net/weixin_45646896/article/details/102489477
查看评论