C语言--交换两个整型变量(四种方法)

本文详细介绍了C语言中通过引入中间变量、按位异或操作、加和法以及传址调用实现交换两个整型变量的四种方法,包括注意事项和示例代码。
摘要由CSDN通过智能技术生成

法1:引入中间变量

代码如下

#include <stdio.h>
int main1()
{
	int a = 0;
	int b = 0;
	int tmp = 0;
	printf("请输入a和b:");
	while (scanf("%d %d", &a, &b)!=EOF)//多组输入
	{
		printf("交换前a=%d b=%d\n", a, b);
		tmp = a;
		a = b;
		b = tmp;
		printf("交换后a=%d b=%d\n\n", a, b);
		printf("请输入a和b:");
	}
	return 0;
}

法2:使用按位异或操作符^

按位异或操作符^用法:对应的二进制位相同则为0,相异则为1

<注意>

  1. 这里的二进制是补码(整数在计算中存储和运算通常采用的是补码,因为补码可将符号位和数值域统一处理)在运算后要转换为原码再转为整型十进制
  2. 正数:原反补相同
  3. 负数:原码除符号位取反变为反码,反码最后一位加一变为补码
#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	printf("请输入a和b:");
	while (scanf("%d %d", &a, &b) != EOF)
	{
		printf("交换前a=%d b=%d\n", a, b);
		a = a ^ b;//a^a==0  0^a==a  按位异或满足交换律
		b = a ^ b;//a^b^b==a 所以b=a
		a = a ^ b;//a^b^a==b 所以a=b
		printf("交换后a=%d b=%d\n\n", a, b);
		printf("请输入a和b:");
	}
	return 0;
}

法3:加和

缺点是当输入的两个数都很大的时候可能会超出int范围 造成结果不对

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	printf("请输入a和b:");
	while (scanf("%d %d", &a, &b) != EOF)
	{
		printf("交换前a=%d b=%d\n", a, b);
		a = a + b;
		b = a - b;//相当于a+b-b b变成a了
		a = a - b;//相当于a+b-a a变成b了
		printf("交换后a=%d b=%d\n\n", a, b);
		printf("请输入a和b:");
	}
	return 0;
}

法4:传址调用

#include <stdio.h>

void Swap(int* pa, int* pb)
{//当实参传递给形参时,形参是实参的一份临时拷贝,对形参的修改不会影响实参
	//因此引入了传址调用 可让函数与主调函数之间建立真正的联系
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}
int main()
{
	int a = 0;
	int b = 0;
	int tmp = 0;
	printf("请输入a和b:");
	while (scanf("%d %d", &a, &b) != EOF)
	{
		printf("交换前a=%d b=%d\n", a, b);
		Swap(&a, &b);//传址调用
		printf("交换后a=%d b=%d\n\n", a, b);
		printf("请输入a和b:");
	}
	return 0;
}

创作不易,希望大家多多支持,有什么问题欢迎讨论🌹🌹

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值