## C语言——实现两个数的交换(多种方法)

1.创建临时变量的

(1)直接在主函数中

#include<stdio.h>
int main(void)
{	
	int a = 10;
	int b = 20;
	int c = 0;//创建c为临时变量
	printf("交换之前:a=%d,b=%d\n", a, b);
	c = a;
	a = b;
	b = c;
	printf("交换之后:a=%d,b=%d\n", a, b	);
	return 0;
}

(2)创建一个函数

//思路:将a和b的地址传过去,因为通过地址就可以找到代码,
    将地址传过去,就要用指针来接收。
#include<stdio.h>
void exchange(int* pa, int* pb)
{
	int c = 0;
	c = *pa;
	//将a备份到c中
	//然后改变a
	*pa = *pb;
	*pb = c;
}
int main(void)
{
	int a = 10;
	int b = 20;
	printf("交换之前:a = %d b = %d\n", a, b);
	exchange(&a, &b);
	printf("交换之后:a = %d b = %d\n", a, b);
	return 0;
}

2.无临时变量的

(1)加减法
缺陷:当两个加在一起特别大的时候会有些二进制位的丢失——溢出

#include<stdio.h>
int main(void)
{
	int a = 10;
	int b = 20;
	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;
}

(2)

#include<stdio.h>
int main(void)
{
	int a = 10;
	int b = 20;
	printf("交换之前:a=%d,b=%d\n", a, b);
	//整型在内存中战32个比特位
	//ab分别用二进制表示
	//00000000000000000000000000001010
	//00000000000000000000000000010100
	//进行三次按位异或——相同为0,相异为1
	a = a ^ b;
	//00000000000000000000000000011110——这个所表示的数是30
	//即现在的a变成了30
	//*******现在要进行按位异或的ab分别是
	//00000000000000000000000000011110
	//00000000000000000000000000010100
	b = a ^ b;
	//得到
	//00000000000000000000000000001010——这个所表示的数是10
	//即现在的b变成了10
	//*******现在要进行按位异或的ab分别是
	//00000000000000000000000000011110
	//00000000000000000000000000001010
	a = a ^ b;
	//得到
	//00000000000000000000000000010100——这个所表示的数是20
	//即现在的a变成了20
	printf("交换之后:a=%d,b=%d\n", a, b);
	return 0;
}
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐