不用第三个变量实现两个变量数值的互换

1.对于两个变量数值的互换我们最容易想到的是通过第三个变量来实现!

//1.通过在单独设立一个变量实现互换
#include

void exchange(int*, int*);

int main(void)
{
	int value1 = 0;
	int value2 = 0;

	printf("请输入value1和value2的值:\n");
	scanf("%d %d",&value1,&value2);

	printf("互换前value1和value2的值分别为:\n");
	printf("value1=%d value2=%d\n",value1,value2);

	exchange(&value1, &value2);

	printf("互换后value1和value2的值分别为:\n");
	printf("value1=%d value2=%d\n", value1, value2);
	return 0;
}

void exchange(int* value1, int* value2)
{
	int temp = 0;

	temp = *value1;
	*value1 = *value2;
	*value2 = temp;
}

2.不通过第三个变量实现两个变量数值的互换

a.

void exchange(int* value1, int* value2)
{
	*value1 += *value2;
	*value2 = *value1 - *value2;
	*value1 -= *value2;
}

在该函数中是通过加法来实现两数值的互换的,但是要注意value1和value2都是int 类型的int类型是有范围的,当我们给这两个变量赋的值非常大的时候就超出了int的表示范围,此时最后的结果就会发生错误!

不用第三个变量实现两个变量数值的互换_第1张图片

 b.

void exchange(int* value1, int* value2)
{
	*value1 = *value1 ^ *value2;
	*value2 = *value1 ^ *value2;
	*value1 = *value1 ^ *value2;
}

在这个函数中是通过异或运算符来实现的!因为按位运算符操作的是二进制补码,所以也会发生数过大程序的结果就错误的问题! 

你可能感兴趣的:(c语言,蓝桥杯,算法)