小言_互联网的博客

C语言:交换两个数的方法

270人阅读  评论(0)

交换两个数的不同方法

方法一:
利用中间变量,进行两个数的交换。
代码如下:

#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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场