C语言初阶小练习4(不用临时变量交换数值)

题目:不能创建临时变量(第三个变量),实现两个整数的交换


1.用临时变量来实现(常规写法)

这种方法是最直观的,但题目要求不使用临时变量,所以这里仅作为对比参考。

用创建临时变量来写:逻辑清晰,更便于理解,也是在正常情况下的书写方法。

复制代码
int main()
{
    //创建临时变量
    int a = 3;
    int b = 5;
    printf("%d %d\n", a, b);

    int tmp = a;//临时变量tmp
    a = b;
    b = tmp;
    printf("%d %d\n", a, b);
    return 0;
}

2.不创建临时变量的写法

2.1第一种写法:

通过加减运算的方法,在整数范围足够大(不溢出)的情况下可以工作。

注意:如果ab的和超出了int的范围,这种方法会导致溢出,从而无法正确交换值。

复制代码
int main()
{
	

	int a = 3;
	int b = 5;
	printf("%d %d\n", a, b);
	a = a + b;
	b = a - b;
	a = a - b;//当a和b分别不溢出的时候,但是和溢出的时候,不合适
	printf("%d %d\n", a, b);
}

2.2第二种写法:

用^(异或操作符)来实现目的

利用了异或运算(XOR)的特性来交换两个整数的值,且不涉及任何溢出问题。

复制代码
int main()
{
	
	int a = 3;
	int b = 5;
	printf("%d %d\n", a, b);
	a = a ^ b;
	b = a ^ b;//(a^b)^b=a
	a = a ^ b;//(a^b)^a=b	//当a和b分别不溢出的时候,但是和溢出的时候,不合适
	printf("%d %d\n", a, b);
	return 0;
}

1.a = a ^ b;:此时a存储了a和b的异或结果。

2.b = a ^ b;由于a现在是a XOR b,所以b = (a XOR b) XOR b。根据异或运算的性质,x XOR x = 0和x XOR 0 = x,所以b变成了原来的a。

3.a = a ^ b;:此时b已经是原来的a,所以a = (a XOR b) XOR a。由于b是原来的a,所以a变成了原来的b

相关推荐
203号居民13 分钟前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
专注仿真2 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
地平线开发者4 小时前
量化为什么会有损失:从量化误差到精度下降
算法
手写码匠4 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 会话管理与上下文工程实战:让智能体“记住该记住的,忘掉该忘掉的“
人工智能·深度学习·算法·aigc
2401_862880824 小时前
数据结构 --- 栈
c语言·数据结构·算法
致Great4 小时前
Qwen3.8-27B 接入 DSH 全流程实测:写代码、跑长任务,都没问题
算法
Tisfy5 小时前
LeetCode 3471.找出最大的几近缺失整数:三种情况判断
算法·leetcode·题解·分类讨论
linux-hzh5 小时前
百日算法修炼 · Day 12
算法·深度优先
额额额对了6 小时前
数据结构:二叉树
c语言·数据结构·算法
iNeuOS工业互联网6 小时前
iNeuOS_Vision_视觉分析,增加SAM3模型对实例分割和目标检测AI自动标注图片样本功能
人工智能·算法·目标检测